|
17 / 17 / 2
Регистрация: 15.01.2009
Сообщений: 86
|
|
Показ в TPanel и (или) TTabSheet, объектов из плагинов dll18.09.2009, 17:48. Показов 2103. Ответов 6
Метки нет (Все метки)
В каждом плагине у меня есть определенные типовые функции, например получения информации о dll и т.д.
Все это очень хорошо работает и мозг не выносит. Почитав про то как можно запихнуть форму в dll, решил это сделать но получилось на половину. Основной вопрос: как на TPanel или TTabSheet выводить необходимую форму и типичных по структуре dll? Т.е. организовать некий TPageControl на плагинах?
0
|
|
| 18.09.2009, 17:48 | |
|
Ответы с готовыми решениями:
6
Как засунуть форму из dll в TPanel главной формы приложения??? Присвоить одинаковое событие onMouseDown или OnMouseUp нескольким компонентам TPanel или TButton Отображение TImage поверх TPanel или TShape |
|
1857 / 714 / 55
Регистрация: 11.12.2008
Сообщений: 1,019
|
|||||||||||
| 18.09.2009, 20:04 | |||||||||||
|
Как сделать? Очень просто.
Создаешь форму, делаешь её BorderStyle как none, а потом просто присваиваешь Паренту данной формы необходимый TTabSheet, отображаешь форму. Вот мой пример(только он на С билдере, но на делфи почти все так же): На форме лежит один PageControl с двумя вкладками. В dll лежит одна форма на которой может быть все что угодно. Код в Длл
2
|
|||||||||||
|
17 / 17 / 2
Регистрация: 15.01.2009
Сообщений: 86
|
|
| 19.09.2009, 02:21 [ТС] | |
|
Спасибо , за проявленный интерес к моему вопросу.
Все разобрался и в сишном коде, все как и большинстве примеров по делфи. С одним плагином и формой это прокатывает и у меня работает с одним плагином, но стоит его продублировать (простым копированием dll), как один плагин грузиться успешно, а вот другой на другой TTabSheet уже нет. Вот в этом то и состоял вопрос, как организовать загрузку типичных по структуре плагинов с формами?
0
|
|
|
1857 / 714 / 55
Регистрация: 11.12.2008
Сообщений: 1,019
|
||||||||||||||||
| 19.09.2009, 15:09 | ||||||||||||||||
|
Не знаю, чего у тебя там не выходит, но у меня все работает прекрасно.
Вот тебе доработанный вариант с созданием новой вкладки для каждого ново созданного плагина. Я решил немного там все переделать для удобства пользования. Тут я привожу код библиотеки. Код, связанный с формой данной длл, приводить не буду, так как там может быть все что угодно.
Разберем по шагам. Сначала смотрим содержимое папки, в которой находится наша программа, на наличие ДЛЛок. Грузим каждую Длл, и в ней пытаемся загрузить функцию ShowForm(билдер для организации перегрузок функций добавляет к имени еще кучу всякого мусора, а как указать конкретное экспортируемое имя я не знаю, так как лень искать). Если функции в библиотеке нет, выгружаем её из памяти и приступаем к другой библиотеке. Если функция есть, то мы её исполняем и сохраняем указатель на созданную ей форму в какой-то переменной. Создаем на PageControl новую вкладку, и присваиваем свойству Parent нашей ново созданной формы указатель на новую вкладку (каждая вкладка это, по сути, новое окно которое может иметь своих чайлдов). Чтобы информация об этих формах не канула в небытие, мы должны где-то сохранить указатели на формы и хендлы всех загруженных библиотек. Я, например, создал класс TPlugin.
Я люблю использовать list из стандартной библиотеки STL, но я не знаю, есть ли такая в Делфи. Воспользуемся классом TList, который есть и в Делфи и в Билдере, и будем в него сохранять все объекты класса TPlugin. Вот код программы:
1
|
||||||||||||||||
|
17 / 17 / 2
Регистрация: 15.01.2009
Сообщений: 86
|
||||||
| 20.09.2009, 05:52 [ТС] | ||||||
|
Еще раз огромное спасибо, за помощь!!!
Почти полностью разобрался в билдеровском коде Пределав его в дельфийский, но честно говоря чуть не перешел на билдер. Делфи заваливал ексепшенами, долго не понимал в чем дело, потому как след в след следовал приведенному коду. Камнем преткновения явилася строчка:
Я получал ексепшены именно когда пытался разрушить созданные формы, убрав это получил стабильную программу с плагинами на делфи (по крайнее мере мне так пока кажется ).В связи с этим вопросы: Правильно я поступил, что так сделал? При выгрузки dll, освободились ли ресурсы в том числе и под созданные формы? P.S. Дополнения просто супер!
0
|
||||||
|
1857 / 714 / 55
Регистрация: 11.12.2008
Сообщений: 1,019
|
||||||
| 20.09.2009, 14:31 | ||||||
|
Я не совсем знаю как работает Делфи(я всегда думал, что точно так же как и Билдер), поэтому не знаю в чем там проблема.
Может нужно вызывать вместо delete, который в делфях делает что-то другое, метод
0
|
||||||
|
17 / 17 / 2
Регистрация: 15.01.2009
Сообщений: 86
|
|
| 24.10.2009, 00:15 [ТС] | |
|
В предложенном варианте Otaka, все работало замечательно до момента... как по мере необходимости мне пришлось добавить TListView (я и Otaka пробовали разные контролы, но большинство чувствует на ней себя хорошо) на форму одного из созданных dll плагинов...
Во тут начался кошмар с подменой TApplication и TScreen, хендлов и перентов... И либо ошибкой "has no parent window", либо когда выбрана одна из строк TListView'ва при завершении работы приложения сыпит эксепшеном (если ни одна строка невыбрана, то завершается корректно). Помогите пожалуйста! PS Делал по исходникам выше на Delphi, но принимаются варианты как на билдере так и на делфи. Если так необходимы исходники на делфи могу приаттачить.
0
|
|
| 24.10.2009, 00:15 | |
|
Помогаю со студенческими работами здесь
7
Access 2007: отключить показ даты создания/изменения объектов Прикрутить к TPanel TScrollBar или Сделать горизонтальную прокрутку у TScrollBox в верху Создать копию TTabSheet Лаунчер для игры: сделать авторизацию, запуск клиента, показ скина, и показ личного счета Ищу шаблон или набор плагинов, чтобы было похоже как на этом сайте Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
|
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/
O1rJuneU_ls
https:/ / vkvideo. ru/ video-115721503_456239114
|
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ВВЕДЕНИЕ
Введу сокращения:
аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
|
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi
ветка по-частям.
коммит Create переделка под биомассу. txt
вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
|
|
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ *
Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях.
Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её.
Последовательность действий:. . .
|
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
|
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение.
И на уровне агентов добавится между грибами или бактериями взаимодействий.
До того я пробовал подход через многомерные массивы,. . .
|
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Налог на собак: https:/ / **********/ gallery/ V06K53e
Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf
Пост отсюда. . .
|