Размещение на форме приложения, формы из Dll
Содержимое формы, которая лежит в DLL размещаю на панели, на главной форме приложения посредством ParentWindow... НО
совсем перестает работать TAB и еще пару проблем возникает... Как с этим бороться???
совсем перестает работать TAB и еще пару проблем возникает... Как с этим бороться???
О-о-о! Если объяснять все по порядку, целая статья получится, как писать программы на Дельфи с плагинами.
А если коротко:
- за обработку TabStop отвечает TWinControl
- имеется два экземпляра КОДА TWinControl: один в твоей программе, другой в DLL
- для нормальной работы нужен один экземпляр кода TWinControl
- достичь этого в Дельфи можно только одним способом - компилировать и программу, и DLL с пакетами времени выполнения. Тогда можно будет даже не извращаться с ParentWindow, а пользоваться свойствами/методами TControl/TWinControl/TEdit/TButton и т. д., как если бы они у тебя были в одной программе.
А можно подробнее о такой компиляции, где об этом можно почитать - ознакомиться?
Не знаю, где можно прочитать. А включить ее просто - отметить галочку "Build with runtime packages" в свойствах проекта.
Мне кажется есть возможность, как это сделать, не используя пакеты. Ну не знаю, заставить как-то форму обрабатывать все таки TAB или вызывать обработку у самой DLL???
Я сам не пробовал - у нас была несколько другая задача. Надо копаться в исходниках VCL.
Есть, правда, один гарантированный способ, но боюсь, что тебе он не подойдет: не использовать VCL, а писать на чистом WinAPI.
Определить же, является ли решение с пакетами для тебя единственным, можно очень просто. Можно ли сказать, что твоя программа использует технологию плагинов? Если да, и плагины при этом строятся с использованием средств VCL, другого решения быть не может.
Правда, мы в реальной задаче создали собственный набор пакетов времени выполнения, не зависящий от стандартных vcl, vclx и т. д., но сути решения это не меняет.
Вот кое-что нашел, возможно эти ссылки (на статьи) пригодятся. :)
Просмотрел по диагонали все статьи. В первой из них написано про то же самое, о чем говорил я.
Просмотрел по диагонали все статьи. В первой из них написано про то же самое, о чем говорил я.
А мне вот штука одна привиделась :roll: , счас попробую:devil: .
Идея в том, чтобы экспортировать класс из DLL и создавать форму в самом приложении....
Вопрос:
Как экспортировать класс из DLL? P(
Как экспортировать класс из DLL? P(
Только с пакетами.
Далее, что ты хочешь экспортировать. Если ссылку на класс (метакласс), то класс обязательно должен иметь виртуальный конструктор. Его можно наследовать от TComponent, который уже имеет такой конструктор, или создать собственный класс, в соответствии с логикой задачи.
Мы экспортировали метакласс.
Кстати, при создании проекта DLL в комментариях пишется галиматья о невозможности работы с AnsiString по умолчанию и требовании использовать BorlandMM.dll. К случаю с пакетами это не отнсится. Загруженные в память пакеты создают единую среду выполнения, и менеджер памяти в этой среде существует в одном экземпляре. Поскольку приложение и DLL образуют единое адресное пространство процесса, все указатели в этом пространстве верны. Короче, разработка программы с пакетами ничем не отличается от обычной, разница только в сборке.