Q&A

  • MDI Client 생성이나 종료여부를 알고 싶습니다.
  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;

다른 방법이 없나요?  고수님들 도와주세염..
2  COMMENTS
  • Profile
    강형철 2003.10.28 20:47
    이럴때는 윈도우 사용자 메세지를 사용하시면 되겠네요

    메인에서는 사용자 메세지를 받아서 생성인지 종료인지를 인식하시면 되고여

    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.
    ---------------------------------------------------------------------



  • Profile
    오규성 2003.10.30 01:25