Форум: "Основная";
Текущий архив: 2004.02.13;
Скачать: [xml.tar.bz2];
ВнизЗагрузка форм из DLL. Найти похожие ветки
← →
IgorRu (2004-02-02 10:44) [0]Создал DLL с формой. Об"явил процедуру:
procedure ShowSettings(MainForm: Pointer); stdcall;
с таким кодом:
with TMainDllForm.Create(MainForm) do begin
ShowModal;
Free;
end;
Если все это запустить и посмотреть в "Диспетчер задач" то там появляется еще одно приложение. Если внутри DLL из TMainDllForm вызвать еще одну форму, то в "Диспетчер задач" появиться еще одно приложение. Такое ощущение, что все они живут отдельно от TApplication. Как создать форму из своей DLL так, что бы не создавалось новое приложение.
← →
Ega23 (2004-02-02 10:50) [1]В DLL у тебя свой экземпляр TApplication.
Я обычно делаю так: передаю в
ShowSettings(MainForm: Pointer); stdcall; не MainForm, a AppHWND.
После чего
Application.Handle:=AppHWND;
Application.CreateForm(TMainDllForm, MainDllForm);
← →
IgorRu (2004-02-02 11:15) [2]Действительно работает. Теперь правда появились побочные эфекты. При выгрузке библиотеки
FreeLibrary(HwndLib)
MainForm пропадает с экрана но в панели задачь присутствует. Есль свернуть/развернуть приложение то все восстанавливается.
← →
Ega23 (2004-02-02 11:17) [3]Сохраняй значение AppHandle.
← →
IgorRu (2004-02-02 11:27) [4]Как?
← →
Юрий Федоров (2004-02-02 11:57) [5]перед присвоением Application.Handle запомни старое значение
в переменную, перед выходом изprocedure ShowSettings
восстанови из нее Application.Handle
← →
IgorRu (2004-02-02 12:43) [6]Вы гении.
Теперь еще бы научить извлекаемую форму создаваться с учетом предустановленных свойств. Например совершенно игнорируется свойствоPosition
.
Я устанавливаю его вpoOwnerFormCenter
В функцию добавил параметр - ссылку на вызывающую формуShowSettings: function (Form: Pointer; AppHWND: Integer): Integer; stdcall;
Запускаю. В лучшем случае создается окно по середине Десктопа
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2004.02.13;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.009 c