Главная страница
    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.49 MB
Время: 0.039 c
3-1160143985
menart
2006-10-06 18:13
2006.12.17
Полнотекстовый поиск MS SQL SErver 2000


15-1164309547
Kolan
2006-11-23 22:19
2006.12.17
Под какие цели искать сотрудников.


15-1164685631
Slider007
2006-11-28 06:47
2006.12.17
С днем рождения ! 28 ноября


15-1164613554
vidiv
2006-11-27 10:45
2006.12.17
HTML - растянуть по вертикали.


5-1145440086
DVM
2006-04-19 13:48
2006.12.17
Переопределить OnClick у потомка TCustomControl?





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский