Q&A

  • MDI에서Active 가 바뀔때 알아내기...


안녕하세요...



MDI 로 프로그램을 만들고 있는데요...



각각의 차일드마다 메뉴상태를 바꿔주려고 합니다...



차일드가 엑티브될때마다 어떤차일드인지 알아야될것 같은데...



메시지를 찾아봐도 적당한게 없군요....



차일드에서 보내주는 방법말고 메인에서



알아낼 수 있는 방법은 없는가요..?



차일드가 너무 많아서 다 수정해줄려면...



상당한 노가다를 해야할 것 같아서요...



그럼...



.



1  COMMENTS
  • Profile
    심동현 1999.11.06 01:13
    MDI 메인폼에서 다음과같이 코딩하시면 될 것 같군요.



    unit Main;



    interface



    uses

    Windows, Messages, SysUtils, ..... ;



    type

    TMainFrm = class(TForm)

    procedure UpdateMenuItems(Sender: TObject);

    private

    { Private declarations }

    public

    { Public declarations }

    end;



    var

    MainFrm: TMainFrm;



    implementation



    {$R *.DFM}



    procedure TMainFrm.FormCreate(Sender: TObject);

    begin

    Screen.OnActiveFormChange := UpdateMenuItems;

    end;



    (* 활성창이 바뀔경우 메뉴 활성화 및 비활성화 *)

    procedure TMainFrm.UpdateMenuItems(Sender: TObject);

    begin

    (* 톡정폼에 대한 메뉴 활성화 및 비활성화를 위해서 *)

    CopyMenu.Enabled := ActiveMDIChild is TChildFrm;



    or



    (* 현재 떠있는 차일드폼의 갯수에 따라서 활성화 및 비활성화를 위해서 *)

    CopyMenu.Enabled := MDIChildCount > 0;

    end;



    위의 코드는 제가 만든것은 아니고 델파이메뉴중 파일 메뉴에서 뉴 하시고

    MDI Application을 선택하셔서 새로운 프로젝트 작성시 델파이가 기본적으로

    생성하는 코드입니다. 그러니 더 참고가 필요하시면 위와같이 샘플 프로그램을

    하나 작성하셔서 참고하시면 좋을 듯 하네요.



    이만준 wrote:

    >

    > 안녕하세요...

    >

    > MDI 로 프로그램을 만들고 있는데요...

    >

    > 각각의 차일드마다 메뉴상태를 바꿔주려고 합니다...

    >

    > 차일드가 엑티브될때마다 어떤차일드인지 알아야될것 같은데...

    >

    > 메시지를 찾아봐도 적당한게 없군요....

    >

    > 차일드에서 보내주는 방법말고 메인에서

    >

    > 알아낼 수 있는 방법은 없는가요..?

    >

    > 차일드가 너무 많아서 다 수정해줄려면...

    >

    > 상당한 노가다를 해야할 것 같아서요...

    >

    > 그럼...

    >

    > .

    >