MDI MAIN 폼에서 MDI CLIENT 폼이 생성, 종료가 될때를 알고 싶습니다.
윈도우 메시지를 확인해 봤는데.. 역시 MDI에서는 ㅠㅠ
제가 확인한 방법입니다.
procedure TMainForm.WndProc(var Message: TMessage);
begin
with Message do
begin
case Msg of
WM_MDIACTIVATE : showmessage('WM_MDIACTIVATE');
WM_MDICASCADE : showmessage('WM_MDICASCADE');
WM_MDICREATE : showmessage('WM_MDICREATE');
WM_MDIDESTROY : showmessage('WM_MDIDESTROY');
WM_MDIGETACTIVE : showmessage('WM_MDIGETACTIVE');
WM_MDIICONARRANGE : showmessage'WM_MDIICONARRANGE');
WM_MDIMAXIMIZE : showmessage('WM_MDIMAXIMIZE');
WM_MDINEXT : showmessage('WM_MDINEXT');
WM_MDIREFRESHMENU: showmessage('WM_MDIREFRESHMENU');
WM_MDIRESTORE : showmessage('WM_MDIRESTORE');
WM_MDISETMENU : showmessage('WM_MDISETMENU');
WM_MDITILE : showmessage('WM_MDITILE');
WM_CHILDACTIVATE : showmessage('WM_CHILDACTIVATE');
WM_CREATE : showmessage('WM_CREATE ');
end;
end;
inherited WndProc(Message);
end;
다른 방법이 없나요? 고수님들 도와주세염..
메인에서는 사용자 메세지를 받아서 생성인지 종료인지를 인식하시면 되고여
MDI Child에서는 생성시에 생성 메세지 날리고 종료일때 종료 메세지를 날리
면 해결 되겠네요..
아래에 예제가 있으니 해보세요... 제가 테스트 해봤습니다~
---------------------------------------------------------------------
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs;
const
WM_USER_MDI = WM_USER + 100; // MDI 생성 종료 사용자 메세지 정의
type
TForm1 = class(TForm)
private
{ Private declarations }
procedure WMUserMDI(var msg : TMessage); message WM_USER_MDI;
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
{ TForm1 }
procedure TForm1.WMUserMDI(var msg: TMessage);
begin
case msg.WParam of
0 : ShowMessage( '소멸' );
1 : ShowMessage( '생성' );
end;
end;
end.
------------------------------------------------------------
unit Unit2;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs;
type
TForm2 = class(TForm)
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form2: TForm2;
implementation
{$R *.dfm}
uses Unit1;
procedure TForm2.FormCreate(Sender: TObject);
begin
SendMessage( Form1.Handle, WM_USER_MDI, 1, 0 ); // 메인폼에 메세지 보냄
end;
procedure TForm2.FormDestroy(Sender: TObject);
begin
SendMessage( Form1.Handle, WM_USER_MDI, 0, 0 ); // 메인폼에 소멸 메세지 보냄
end;
procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Action := caFree;
end;
end.
---------------------------------------------------------------------