Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Размещение на форме приложения, формы из Dll

3.6K
10 ноября 2004 года
kuljok
64 / / 16.03.2004
Привет...

Содержимое формы, которая лежит в DLL размещаю на панели, на главной форме приложения посредством ParentWindow... НО

совсем перестает работать TAB и еще пару проблем возникает... Как с этим бороться???
10
10 ноября 2004 года
Freeman
3.2K / / 06.03.2004
Цитата:
Originally posted by kuljok
совсем перестает работать TAB и еще пару проблем возникает... Как с этим бороться???


О-о-о! Если объяснять все по порядку, целая статья получится, как писать программы на Дельфи с плагинами.

А если коротко:
- за обработку TabStop отвечает TWinControl
- имеется два экземпляра КОДА TWinControl: один в твоей программе, другой в DLL
- для нормальной работы нужен один экземпляр кода TWinControl
- достичь этого в Дельфи можно только одним способом - компилировать и программу, и DLL с пакетами времени выполнения. Тогда можно будет даже не извращаться с ParentWindow, а пользоваться свойствами/методами TControl/TWinControl/TEdit/TButton и т. д., как если бы они у тебя были в одной программе.

4.5K
11 ноября 2004 года
NightSleeper
43 / / 09.10.2004
А можно подробнее о такой компиляции, где об этом можно почитать - ознакомиться?
10
11 ноября 2004 года
Freeman
3.2K / / 06.03.2004
Цитата:
Originally posted by NightSleeper
А можно подробнее о такой компиляции, где об этом можно почитать - ознакомиться?


Не знаю, где можно прочитать. А включить ее просто - отметить галочку "Build with runtime packages" в свойствах проекта.

3.6K
11 ноября 2004 года
kuljok
64 / / 16.03.2004
Спасибо огромное за прояснение ситуации... Хотел еще вот уточнить..., а точно больше вариантов быть не может??? Мне кажется есть возможность, как это сделать, не используя пакеты. Ну не знаю, заставить как-то форму обрабатывать все таки TAB или вызывать обработку у самой DLL??? Или я совсем не прав?
10
11 ноября 2004 года
Freeman
3.2K / / 06.03.2004
Цитата:
Originally posted by kuljok
Мне кажется есть возможность, как это сделать, не используя пакеты. Ну не знаю, заставить как-то форму обрабатывать все таки TAB или вызывать обработку у самой DLL???


Я сам не пробовал - у нас была несколько другая задача. Надо копаться в исходниках VCL.

Есть, правда, один гарантированный способ, но боюсь, что тебе он не подойдет: не использовать VCL, а писать на чистом WinAPI.

Определить же, является ли решение с пакетами для тебя единственным, можно очень просто. Можно ли сказать, что твоя программа использует технологию плагинов? Если да, и плагины при этом строятся с использованием средств VCL, другого решения быть не может.

Правда, мы в реальной задаче создали собственный набор пакетов времени выполнения, не зависящий от стандартных vcl, vclx и т. д., но сути решения это не меняет.

4.5K
11 ноября 2004 года
NightSleeper
43 / / 09.10.2004
Вот кое-что нашел, возможно эти ссылки (на статьи) пригодятся. :)
10
11 ноября 2004 года
Freeman
3.2K / / 06.03.2004
Цитата:
Originally posted by NightSleeper
Вот кое-что нашел, возможно эти ссылки (на статьи) пригодятся. :)


Просмотрел по диагонали все статьи. В первой из них написано про то же самое, о чем говорил я.

3.6K
11 ноября 2004 года
kuljok
64 / / 16.03.2004
Цитата:
Originally posted by smartsoft

Просмотрел по диагонали все статьи. В первой из них написано про то же самое, о чем говорил я.


А мне вот штука одна привиделась :roll: , счас попробую:devil: .

3.6K
11 ноября 2004 года
kuljok
64 / / 16.03.2004
Мозгов малость не хватает..., может кто подскажет?

Идея в том, чтобы экспортировать класс из DLL и создавать форму в самом приложении....

Вопрос:
Как экспортировать класс из DLL? P(
10
11 ноября 2004 года
Freeman
3.2K / / 06.03.2004
Цитата:
Originally posted by kuljok
Как экспортировать класс из DLL? P(


Только с пакетами.

Далее, что ты хочешь экспортировать. Если ссылку на класс (метакласс), то класс обязательно должен иметь виртуальный конструктор. Его можно наследовать от TComponent, который уже имеет такой конструктор, или создать собственный класс, в соответствии с логикой задачи.

Мы экспортировали метакласс.

Кстати, при создании проекта DLL в комментариях пишется галиматья о невозможности работы с AnsiString по умолчанию и требовании использовать BorlandMM.dll. К случаю с пакетами это не отнсится. Загруженные в память пакеты создают единую среду выполнения, и менеджер памяти в этой среде существует в одном экземпляре. Поскольку приложение и DLL образуют единое адресное пространство процесса, все указатели в этом пространстве верны. Короче, разработка программы с пакетами ничем не отличается от обычной, разница только в сборке.

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог