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

Ваш аккаунт

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

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

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

загрузка формы из Dll

436
25 декабря 2005 года
Fevzi
87 / / 02.04.2005
Нужно из приложения вызывать форму из DLL.Написал такое:
bool PluginExec()
{
bool res;
TForm1 *Form1=new TForm1(Application);
res=Form1->ShowModal();
Form1->Free();
return res;
}
Но мне нужно вызвать не Form1->ShowModal(), а
Form1->Show().Как лучше переписать фун-ию?
585
26 декабря 2005 года
honeybeer
297 / / 06.09.2004
Цитата:
Originally posted by Fevzi
Нужно из приложения вызывать форму из DLL.Написал такое:
bool PluginExec()
{
bool res;
TForm1 *Form1=new TForm1(Application);
res=Form1->ShowModal();
Form1->Free();
return res;
}
Но мне нужно вызвать не Form1->ShowModal(), а
Form1->Show().Как лучше переписать фун-ию?


ДЛЛ грузится в адресное пространство вызывающего процесса и находится там, покуда не будет выгружена. Создавай глобальную TForm* и две эксп. функции загрузить и освободить.

4.8K
26 декабря 2005 года
Jump
128 / / 09.11.2005
Цитата:
Originally posted by honeybeer
ДЛЛ грузится в адресное пространство вызывающего процесса и находится там, покуда не будет выгружена. Создавай глобальную TForm* и две эксп. функции загрузить и освободить.



Только учти глобальная будет "помнить" только последнюю созданную форму, соответственно и убить сможешь только посленюю.

Чтобы иметь возможность убивать каждую из созданных нужно запоминать все указатели формочек в некий контейнер.

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

Но в любом случае нужно как-то следить за тем, что пользователь закрыл форму...

Можно еще предложить создавать "плугинную" формочку в отдельном потоке - тогда и главная форма не будет блокироваться и всегда при закрытии каждая из формочек будет удаляться, но это придумал на вскидку - не проверял.

Кстати, все, что создано с помощью оператора new должно убиваться с помощью delete, если не ошибаюсь...

4.8K
27 декабря 2005 года
Jump
128 / / 09.11.2005
Все оказалось гораздо проще:

В методе ДЛЛ, создающем форму пишем:
 
Код:
TForm1 *FormX = new TForm1(NULL); //FormX - локальная переменная
FormX->Show();

!!! Метод свою работу завершает не дожидаясь закрытия формы.

А в классе формы на метод ОнКлоуз повесить:
 
Код:
Action = caFree


И все дела. И окошек сколько хочешь, и по закрытии каждое самоудаляется.
1
28 декабря 2005 года
kot_
7.3K / / 20.01.2000
Цитата:
Originally posted by Jump
Все оказалось гораздо проще:

В методе ДЛЛ, создающем форму пишем:
 
Код:
TForm1 *FormX = new TForm1(NULL); //FormX - локальная переменная
FormX->Show();

!!! Метод свою работу завершает не дожидаясь закрытия формы.

А в классе формы на метод ОнКлоуз повесить:
 
Код:
Action = caFree


И все дела. И окошек сколько хочешь, и по закрытии каждое самоудаляется.


В функцию передавать хедер главной а возвращать хедер формы длл, и хранить их. При закрытии посылай сообщение главной форме о том что форма закрылась, а перед закрытием приложения посылать закрывающие сообщения всем не закрытым формам.

4.8K
29 декабря 2005 года
Jump
128 / / 09.11.2005
Цитата:
Originally posted by kot_
... а перед закрытием приложения посылать закрывающие сообщения всем не закрытым формам.



Даже этого делать даже не нужно:). Формочки, при попытке закрытия главной, сами без проблем поочереди закрываются, и главная в конце...
----------------------------------------------
У меня вопрос почти в тему:
Обратил внимание, что при вызове формы из ДЛЛ (отображаю через ШоуМодал) на панели задач появляется дополнительная кнопка. Если кликнуть по изначальной кнопке, то активной становится полностью "мертвая" главная форма. Как попростому сделать, так чтобы новая кнопка не появлялась, а при клике по исходной, активной становилась вызванная формочка?

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