![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Вызов формы из DLL на KOL в приложении на VCL [Delphi, Windows]
Vitaly © (2008-04-13 16:09:00)Подскажите пожалуйста,
требуется вызвать немодальную форму из DLL на KOL в приложении на VCL. Форма в DLL создается один раз (при загрузке библиотеки), а потом нужно, чтобы ее можно было скрывать и показывать, когда это необходимо. Форма в DLL одна - т.е. как бы главная, поэтому скрыть ее без уничтожения не получается...
И как сделать так, чтобы вызываемая форма была частью приложения - без отдельной кнопки в панели задач?
Danger (2008-04-15 09:10:00) [1]
> Vitaly © (14.04.08 20:27) [2]
> Спасибо за подсказку про стили! А вот про экспортирование
> фунций не понял... т.е. если вызвать Form.Hide (где Form
> - форма в DLL) в основном приложении, то ошибки не будет?
Нет, в проекте самой DLL пишете, чтобы при при загрузке DLL инициализировалась форма DSPForm и создавались контролы, которые вам надо. Далее, делаете в модуле DLL экспортируемую функцию типа:
procedure MyDLLFormHide; stdcall;
begin
DSPForm.Hide;
end;
exports MyDLLFormHide;
и вызываете из основного приложения эту экспортируемую функцию, НЕ обращаясь напрямую к методам и свойствам объекта формы в DLL. Вообще, объекты, созданные Вами в DLL и объекты основной программы не должны обращаться друг к другу напрямую, недавно об этом писали ( http://delphimaster.ru/cgi-bin/forum.pl?id=1208152039&n=10).
Vitaly (2008-04-14 20:27:00) [2]Спасибо за подсказку про стили! А вот про экспортирование фунций не понял... т.е. если вызвать Form.Hide (где Form - форма в DLL) в основном приложении, то ошибки не будет?
type
PDSPForm = ^TDSPForm;
TDSPForm = object(TControl)
...
end;
...
DSPForm := PDSPForm(NewForm( Applet, 'Winamp DSP Wrapper' ));
DSPForm.Icon := THandle(-1);
DSPForm.Width := 300;
DSPForm.Height := 388;
Run(PControl(DSPForm));
DSPForm.Hide; // тут происходит ошибка
SPeller (work) (2008-04-14 04:31:00) [3]Для каждой манипуляции с формой экспортируешь из своей длл функцию, и в этих функциях управляешь формой как хочешь. Главное - никаких манипуляций в основном приложении с объектами и строками, которые ты создал в длл. И наоборот. Чтобы небыло кнопки в таскбаре - изучай стили окна WS_xxx и WS_EX_xxx.