Q&A

  • form의 포인터를 알수 없습니까?
제가 할려고 하는 것은 MDI폼에서 Childform의 두번실행을 방지하기 위해서

function mc_existChildForm(childform.name :String; MDIform : Tform) : boolean;

var

i : integer;

begin

For i := 0 to MDIform.MDIChildCount-1 do begin

if MDIform.MdiChildren[i].name =childform.name then begin

result := true;

exit;

end

else

result := false;

end;

end;

라고 함수를 MDI unit가 아닌 다른 unit에서 정의 했습니다.

MDI form에서는 speedbutton을 통해서 실행을 하구요.

procedure TF_Main.SpeedButton1Click(Sender: TObject);

var

childform: Tchildform;

begin

if not mc_existChildForm(childform.name, mdiform) then

childform:= childform.Create(Self)

else

childform.Show;

end;

그런데



if MDIform.MdiChildren[i].name =childform.name then begin 부분에서 childform이

speedbutton으로 넘어옵니다.

그래서 childform을 pointer로 넘겨 주면 될거 같은데..

아니면, 다른 방법이라도..

고수님들의 부탁바랍니다.

2  COMMENTS
  • Profile
    타락천사... 2000.09.19 01:19
    안녕하세여.. 타락임다..^^



    나름대로 고민한 흔적이 있군여..^^;;



    다음은 ChildForm을 띄우는 예제 입니다..



    begin

    if not Assigned(ChildForm) then

    ChildForm := TChildForm.Create(Application);

    ChildForm.Show;

    end;



    다음에 TChildForm 클래스의 OnDestroy 이벤트에서 nil을 설정합니다.



    procedure TChildForm.FormDestroy(Sender: TObject);

    begin

    ChildForm := nil;

    end;



    원하시는 답변이길 바랍니다..



    추가: 만일 시스템 메뉴나 닫기버튼으로 ChildForm을 없애려면..ChildForm의



    OnClose 이벤트에서 메모리를 해제시킴 됩니다..



    procedure TChildForm.FormClose(Sender: TObject; var Action: TCloseAction);

    begin

    Action := caFree;

    end;



    즐푸하세여..^^



    타락천사.....



  • Profile
    이해경 2000.09.18 22:18
    중복 실행을 막는 간단한 코딩 입니다.



    procedure Tfrm_Main.N7Click(Sender: TObject);

    Var

    i : ShortInt;

    begin

    if MDIChildCount > 0 then

    begin

    for i := 0 to MDIChildCount - 1 do

    begin

    if MDIChildren[i] is Tfrm_Sale then

    begin

    MDIChildren[i].Show;

    Exit;

    end;

    end;

    end;

    frm_Sale := Tfrm_Sale.Create(Self);

    end;