Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.12.17;
Скачать: CL | DM;

Вниз

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;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.055 c
11-1141342016
Dimaxx
2006-03-03 02:26
2006.12.17
Может я не так делаю?...


2-1164696665
from AF
2006-11-28 09:51
2006.12.17
ExcelApplication и форма


15-1164522579
qwerty199191
2006-11-26 09:29
2006.12.17
Большая нагрузка


15-1164388278
Dmitry_177
2006-11-24 20:11
2006.12.17
MessageBox на другом компе через cmd


15-1164538041
Petr V. Abramov (not at home)
2006-11-26 13:47
2006.12.17
Оптимизация загрузки станков