Форум: "Прочее";
Текущий архив: 2006.12.17;
Скачать: [xml.tar.bz2];
ВнизForm CHILD Найти похожие ветки
← →
CHILD (2006-11-27 15:27) [0]Форма загружается из DLL.
Вызываем динамически..
Из главной формы MainForm, DLL могу выгрузить без проблем, к примеру при нажатии на кнопку...(Free) Закрываю главную форму тоже все норм...
Если же загрузить форму(CHILD)... Потом закрыть ее (вот при этом закрытии CHILD, мне и необходимо исполнить Free), но как ведь DLL я загружаю в главной форме.. А выгрузить необходимо при закрытии CHILD-а....
Как поступить....????
← →
alex_*** © (2006-11-27 15:32) [1]FreeOnClose, видимо. Если я правильно понял
← →
Сергей М. © (2006-11-27 15:35) [2]
> Как поступить....?
Послать гл.форме асинхронно (PostMessage) некое предопределенное сообщение, в обработчике которого собственно и выгружать DLL.
← →
CHILD (2006-11-27 15:38) [3]Не если я делаю на CHILD-е FreeOnClose; получается следущие:
Открыли главную форму..
Загрузили из DLL CHILD...
Закрываем чилд (он делает себе Free Форму ! Как я понемаю.., а вот DLL не выгружается..)
Закрываем Маин Форму, получаем ошибку....
Нужно чтоб при закрытии CHILD-а, выгрузилась DLL, Загруженная Главной формой...
Помогите реализовать....
← →
CHILD (2006-11-27 15:40) [4]
> Сергей М. © (27.11.06 15:35) [2]
Правильно поняли...Спасибо за понимание..! Уже думать не могу голова трещит... Как послать главной форме Message???
← →
Игорь Шевченко © (2006-11-27 15:42) [5]CHILD (27.11.06 15:40) [4]
SendMessage (Application.MainForm.Handle, ....) Если из DLL посылать, то надо учесть, что Application разные в приложении и в DLL, значит, надо как-то передать Application от приложения
← →
CHILD (2006-11-27 15:46) [6]К примеру как кто поступает... В таких случаях... Если грузится Форма из DLL,
И при закрытии формы DLL не выгружается на протяжении всего времени работы программы, тогда смысл динамической загрузки...???!!!
Оговорюсь.. Зачем через DLL ? Спросите.... Отвечу: Проект очень большой....
← →
CHILD (2006-11-27 15:51) [7]
> Игорь Шевченко © (27.11.06 15:42) [5]
Application предаю главной формы... при загрузке.. Проще будет???
Приведу код DLL:
library Dialog;
uses
SysUtils,
Classes,
uDialog in "uDialog.pas" {frmDialog},
Forms;
{$R *.res}
var
DLLApp: TApplication;
DLLScr: TScreen;
procedure InitPlugin(App, Scr: Integer); StdCall;
begin
DLLScr:= Screen;
Screen:= TScreen(Scr);
DLLApp:= Application;
Application:= TApplication(App);
end;
procedure DonePlugin; StdCall;
begin
Screen:= DLLScr;
Application:= DLLApp;
end;
function CreateDialog: Integer; StdCall;
begin
Result:= Integer(TfrmDialog.Create(Application));
end;
exports
InitPlugin,
DonePlugin,
CreateDialog;
begin
end.
Код MainForm:
procedure TMainFarm.MMFileCardClick(Sender: TObject);
var
CreateDialog: function : integer; stdcall;
InitPlugin: procedure(App, Scr: integer); stdcall;
DonePlugin: procedure; stdcall;
begin
hndDLLHandle := loadLibrary ("Dialog.dll");
if hndDLLHandle <> 0 then
begin
@InitPlugin := getProcAddress (hndDLLHandle, "InitPlugin" );
@DonePlugin := getProcAddress(hndDLLHandle, "DonePlugin" );
@CreateDialog := getProcAddress (hndDLLHandle, "CreateDialog" );
InitPlugin(integer(Application), integer(Screen));
CreateDialog;
// freeLibrary ( hndDLLHandle );
← →
CHILD (2006-11-27 15:54) [8]Может кто код написать на передачу сообщения главной форме, о закрытии чилда... Честно ребят уже голова не варит...
Заранее спасибо...
← →
Игорь Шевченко © (2006-11-27 15:55) [9]
> Application предаю главной формы
Раз передаешь, проблем послать сообщение быть не должно
← →
CHILD (2006-11-27 16:01) [10]Это в DLL.. unit uDialog;
...
procedure TfrmDialog.FormCloseQuery(Sender: TObject;
var CanClose: Boolean);
begin
SendMessage(Application.MainForm.Handle,//Далее как???)
end;
...
и принять сообщение в главной форме как???
← →
CHILD (2006-11-27 16:22) [11]
SendMessage(Application.MainForm.Handle,WM_USER+4242,0,PChar("True"))
Что-то типа этого... Разобраться не могу...
← →
CHILD (2006-11-27 16:24) [12]Удалено модератором
Примечание: Создание пустых сообщений
← →
Сергей М. © (2006-11-27 16:29) [13]
> CHILD (27.11.06 16:01) [10]
Тебе ж сказано - асинхронно) .. PostMessage, а не SendMessage
← →
CHILD (2006-11-27 16:30) [14]Еслия я отправляю так:
procedure TfrmDialog.FormCloseQuery(Sender: TObject;
var CanClose: Boolean);
begin
SendMessage(Application.MainForm.Handle,WM_USER,0,StrToInt(BoolToStr(CanClose)))
end;
Как получить результат...
Выловить сообщение в главной форме????
← →
Сергей М. © (2006-11-27 16:54) [15]
> Как получить результат
Результат чего ?
> Выловить сообщение в главной форме?
Перекрой WndProc() - он виртуальный
← →
Rbn (2006-11-28 13:30) [16]
> Сергей М. © (27.11.06 16:29) [13]
>
>
> > CHILD (27.11.06 16:01) [10]
>
>
> Тебе ж сказано - асинхронно) .. PostMessage, а не SendMessage
Почемуж.. асинхронно (PostMessage)....??
PostMessage- ставит сообщение в конец очериди....
SendMessage- ставит сообщение в начало очериди...
Закрываем форму... И сразу выхружаем DLL...!
Или я ошибаюсь....??
Страницы: 1 вся ветка
Форум: "Прочее";
Текущий архив: 2006.12.17;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.046 c