|
|
|
формы и фрэймы из dll
|
|||
|---|---|---|---|
|
#18+
DarkMasterМожет сэр приведет правильный пример кода? Образцом для этого случая сэр всегда называл автоматизацию MS Office-а. Код, простите, не приведу - многовато, а в вопросе "как правильно поддерживать плагины посторонних производителей" ответ довольно очевиден - опубликовать для них API создания форм, кнопок итп. Примеры можно посмотреть, например, в FARе. Если не хочется тратить много времени на развесистое API вида "создать тот-другой-десятый-двадцатый компонент и установить его свойства", можно использовать ту или иную автоматизацию. Например, опубликовать метод "десериализовать dfm" или "выполнить fastscript-скрипт", и, соответственно, там и описывать конструируемую форму. Главное, итог должен быть один - в результате вызова API сконструированы родные для ядра компоненты. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.01.2015, 12:21:33 |
|
||
|
формы и фрэймы из dll
|
|||
|---|---|---|---|
|
#18+
[quot crause] AntonioPermskiy , у вас Tab работает в окнах и фрэймах? Tab работает. Если вы имеете ввиду переключение фокуса между компонентами с TabStop=true. Проверил переход между вкладками у PageControl-а по Ctrl+Tab. Работает только для основного PageControl-а. Но это свойственно и простому приложению, в котором, например, на форме лежит PageControl, на одной странице которого размещен еще PageControl или Frame с PageControl-ом. Возможно, есть другие сочетания для подобных переходов с клавиатуры, не озадачивался. PS. Лучше на ты ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.01.2015, 12:31:33 |
|
||
|
формы и фрэймы из dll
|
|||
|---|---|---|---|
|
#18+
softwarerответ довольно очевиден - опубликовать для них API создания форм, кнопок итп. Примеры можно посмотреть, например, в FARе. Зачем же так далеко ходить? Достаточно посмотреть на Winapi CreateWindow() к которому полно примеров. softwarerможно использовать ту или иную автоматизацию. Например, опубликовать метод "десериализовать dfm" или "выполнить fastscript-скрипт", и, соответственно, там и описывать конструируемую форму. За примерами вызова CreateDialog() тоже далеко ходить не надо. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.01.2015, 13:09:59 |
|
||
|
формы и фрэймы из dll
|
|||
|---|---|---|---|
|
#18+
Вдруг до меня дошел смысл вопроса. Мне захотелось написать рассказ о том как windows взаимодействует с приложением, как делать обработку событий... А потом, ради интереса, ввел в гугл строку "delphi frame in dll". Первый же пример оказался рабочим. Поскольку я потратил время на гугл и проверку работы, привожу ссылку на статью и код: Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.01.2015, 00:42:13 |
|
||
|
формы и фрэймы из dll
|
|||
|---|---|---|---|
|
#18+
stanilarВдруг до меня дошел смысл вопроса. Мне захотелось написать рассказ о том как windows взаимодействует с приложением, как делать обработку событий... А потом, ради интереса, ввел в гугл строку "delphi frame in dll". Первый же пример оказался рабочим. Поскольку я потратил время на гугл и проверку работы, привожу ссылку на статью и код: Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. Тоже его находил, да работает, но фрэйм получается Ctl3d := False; Фиг знает что он еще там выкидывает. Если мы только для себя пишем приложение и будем только мы добавлять дополнительные модули функций (плагины), то такой подход можно и использовать, но как писал GunSmoker в других версиях той же delphi уже могут возникнуть проблемы (если я правильно понял), из-за использования Thandle в данном случае (Объект Tapplication), а так же из-за модификации этих объектов. На мой взгляд лучше всего использовать формы, даже при отладке, что не рисовать нашу форму на нужном месте просто отображаем ее модально например. RWolfТоже не идеальный вариант (не работает перебор контролов клавишей Tab), но хотя бы использовать можно. Проблема Tab решается в статье от GunSmoker вроде 6 часть, в исходнике посмотреть придется как и что. И Да я ошибался он писал про рисование компонентов. Что бы окно новое нарисованное получило каретку ввода в мемо или edit нужно послать при Show формы Perform(WM_NCActivate, 1, 0); ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.01.2015, 08:09:42 |
|
||
|
формы и фрэймы из dll
|
|||
|---|---|---|---|
|
#18+
поторопился я с повледним постом насчет клавиши Tab. имеем приложение с главной формой, имеем загруженную dll в это приложение и созданную форму из dll (TForm.Create(nil);) через SetParent(ChildForm, MainForm) добавляем форму из dll в форму приложения. единственная беда, форма из dll не обрабатывает клавишу Tab как починить данное неприятность? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.07.2015, 13:12:40 |
|
||
|
формы и фрэймы из dll
|
|||
|---|---|---|---|
|
#18+
crauseединственная беда ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.07.2015, 13:14:13 |
|
||
|
формы и фрэймы из dll
|
|||
|---|---|---|---|
|
#18+
softwarercrauseединственная беда что меня еще ждет? посоветуйте что нибудь насчет Tab ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.07.2015, 13:22:16 |
|
||
|
формы и фрэймы из dll
|
|||
|---|---|---|---|
|
#18+
AntonioPermskiy> Основной совет - передавать в dll Application и Screen. Application.Handle необходим, а Screen - не нужен абсолютно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.07.2015, 17:33:31 |
|
||
|
формы и фрэймы из dll
|
|||
|---|---|---|---|
|
#18+
GatorAntonioPermskiy> Основной совет - передавать в dll Application и Screen. Application.Handle необходим, а Screen - не нужен абсолютно. хотелось бы Application.Handle; ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.07.2015, 17:45:04 |
|
||
|
формы и фрэймы из dll
|
|||
|---|---|---|---|
|
#18+
crauseчто меня еще ждет? Представьте себе, что по экватору планеты Земля через каждые десять метров положены грабли. Так вот, Вас ждёт кругосветное путешествие. crauseпосоветуйте что нибудь насчет Tab От разумного совета Вы отказались ещё год назад. А глупых я предпочитаю не давать, ибо не компетентен. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.07.2015, 17:50:26 |
|
||
|
формы и фрэймы из dll
|
|||
|---|---|---|---|
|
#18+
crause> Что мешает его передать в DLL? Классика. Примеры в любой книжке по Delphi. И всё разжёвано. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.07.2015, 18:09:31 |
|
||
|
формы и фрэймы из dll
|
|||
|---|---|---|---|
|
#18+
crauseпоторопился я с повледним постом насчет клавиши Tab. имеем приложение с главной формой, имеем загруженную dll в это приложение и созданную форму из dll (TForm.Create(nil);) через SetParent(ChildForm, MainForm) добавляем форму из dll в форму приложения. единственная беда, форма из dll не обрабатывает клавишу Tab как починить данное неприятность? У формы в dll нужно переопределить Код: pascal 1. вот таким кодом Код: pascal 1. 2. 3. 4. 5. 6. 7. PS: на Delphi7 работало, откопал я это в исходниках ActiveXForm, на более старших версиях надо проверять ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.07.2015, 22:39:33 |
|
||
|
формы и фрэймы из dll
|
|||
|---|---|---|---|
|
#18+
kealon(Ruslan), Классическая "труба" для сообщений. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.07.2015, 00:57:56 |
|
||
|
формы и фрэймы из dll
|
|||
|---|---|---|---|
|
#18+
DarkMasterkealon(Ruslan), Классическая "труба" для сообщений. вся VCL в таких трубах + куча "неоконных контролов" , из-за этого и грабли всякие будут переть постоянно, чуть шаг в сторону PS: автор бы хоть отписался, появился у него реакция на таб или нет PPS: для себя я решил, что лучше для winAPI простые обёртки использовать, а нужные контролы самому сделать в пределах оконной системы - меньше проблем ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.07.2015, 20:35:32 |
|
||
|
формы и фрэймы из dll
|
|||
|---|---|---|---|
|
#18+
kealon(Ruslan)для себя я решил, что лучше для winAPI простые обёртки использовать, а нужные контролы самому сделать в пределах оконной системы - меньше проблемэто по нашему. Разобраться с работающим кодом сложнее, чем написать свой велосипед ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.07.2015, 21:34:26 |
|
||
|
формы и фрэймы из dll
|
|||
|---|---|---|---|
|
#18+
авторPS: автор бы хоть отписался, появился у него реакция на таб или нет выходные были, не мог ответить. Xe5, Xe7 - tab заработал. Спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.07.2015, 22:28:06 |
|
||
|
формы и фрэймы из dll
|
|||
|---|---|---|---|
|
#18+
Т.е. если у меня есть Handle какого-нибудь окна, который с кучей всего там, то никак нельзя положить это окно к себе на TPanel/TForm? Потому что когда делал SetParent - ну, никаких дочерних контролов не отрисовалось с того окна. В своем же процессе, кстати. Известен только хэндл. softwarerDarkMasterМожет сэр приведет правильный пример кода?Главное, итог должен быть один - в результате вызова API сконструированы родные для ядра компоненты.Вот к этому все и идет походу, типа CreateDialog. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.07.2017, 11:39:19 |
|
||
|
формы и фрэймы из dll
|
|||
|---|---|---|---|
|
#18+
Кар-КарТ.е. если у меня есть Handle какого-нибудь окна, который с кучей всего там, то никак нельзя положить это окно к себе на TPanel/TForm? Потому что когда делал SetParent - ну, никаких дочерних контролов не отрисовалось с того окна. В своем же процессе, кстати. Известен только хэндл. а ты емe место указал потом? SetWindowPos Кар-Карsoftwarerпропущено... Главное, итог должен быть один - в результате вызова API сконструированы родные для ядра компоненты.Вот к этому все и идет походу, типа CreateDialog.можно конечно, не так сложно кстати - регистрируешь свой класс окна и создавай его сколько влезет вот только с VCL косячок, не особо оно заточено для этого ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.07.2017, 16:36:30 |
|
||
|
формы и фрэймы из dll
|
|||
|---|---|---|---|
|
#18+
kealon(Ruslan), Не указал, но панель появилась на форме, просто пустая без дочерних контролов. Пофиксил так: Код: pascal 1. 2. 3. 4. 5. Вообще у меня "плагины" в самом экзешнике, но делается вид как будто в сторонней длл-ке. Реально делаю экспорт чисто интерфейса и LoadLibrary / GetProcAddress на себя же. У мну задача была формошлёпство оставить любой ценой =) Tab работает кстати, только между разными плагинскими формами не переходит. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.07.2017, 20:35:13 |
|
||
|
формы и фрэймы из dll
|
|||
|---|---|---|---|
|
#18+
Кар-Кар, если вы используете статическую линковку рантайма и VCL нужно знать как реализованы объекты на низком уровне между модулями (dll) можно свободно передавать только простые типы: Int..., Double, ..., Interface не выпускать исключения, созданные в одном модуле, в другой модуль - здравствуйте коды возврата освобождать память только в том модуле где она выделена, или использовать глобальный менеджер памяти по возможности использовать общепринятые декларации вызовов: stdcall, ccall ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.07.2017, 22:10:45 |
|
||
|
формы и фрэймы из dll
|
|||
|---|---|---|---|
|
#18+
kealon(Ruslan)между модулями (dll) можно свободно передавать только простые типы: Int..., Double, ..., Interface И следствие из этого, которое никому не приходит в голову: в модулях нельзя создавать объекты, функционирование которых подразумевает такую передачу (TForm, TControl, TDataset и так далее). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.07.2017, 14:18:16 |
|
||
|
формы и фрэймы из dll
|
|||
|---|---|---|---|
|
#18+
softwarerkealon(Ruslan)между модулями (dll) можно свободно передавать только простые типы: Int..., Double, ..., Interface И следствие из этого, которое никому не приходит в голову: в модулях нельзя создавать объекты, функционирование которых подразумевает такую передачу (TForm, TControl, TDataset и так далее).ну почему, создавать то можно, передавать их нельзя. C TForm только много мороки, тянет слишком много за собой, но к VCL в целом и так куча претензий - проще WinApi пользоваться через легковесные обёртки типа WTL ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.07.2017, 21:10:58 |
|
||
|
формы и фрэймы из dll
|
|||
|---|---|---|---|
|
#18+
kealon(Ruslan)...TForm ... тянет слишком много за собой, но к VCL в целом и так куча претензий - проще WinApi пользоваться ... Привет, приплыли. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.07.2017, 21:19:27 |
|
||
|
формы и фрэймы из dll
|
|||
|---|---|---|---|
|
#18+
Да лишь бы формочки можно было бы лепить визуально . Удобно же: понакидал контролов, накалякал кода в ButtonXClick , экспортировал интерфейс с 8 методам (у меня столько) и пускай прога показывает как хочет - в окне в углу в меню. Щаз так, они там сами должны подписываться на сообщения которые прога будет испускать. Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. Вообще, только один вопрос: а что если этот интерфейс реализует, допустим, Qt/C#/Java? Там у них внутри сможет переместиться ко мне в Delphi, если я передам ему хэндл куда? Т.е. пусть сами разбираются) Мне это не нужно, но просто интересно. Знаю, что они могут делать 75 скриншотов себя в секунду и так отрисовываться lol ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.07.2017, 21:59:58 |
|
||
|
|

start [/forum/topic.php?fid=58&msg=39493561&tid=2041995]: |
0ms |
get settings: |
6ms |
get forum list: |
10ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
171ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
64ms |
get tp. blocked users: |
1ms |
| others: | 185ms |
| total: | 453ms |

| 0 / 0 |
