Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 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
2-1164650538
Denis1
2006-11-27 21:02
2006.12.17
закрытие приложения


15-1164737905
vain
2006-11-28 21:18
2006.12.17
Пожалуй, самая прикольная шутка.


2-1164906050
ssss
2006-11-30 20:00
2006.12.17
Нажать клавишу мыши!


3-1160454278
Merry
2006-10-10 08:24
2006.12.17
QReport: использование QRExpr1.


1-1162471693
Elen
2006-11-02 15:48
2006.12.17
Приклеить ToolBar к другому окну





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский