제가 할려고 하는 것은 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로 넘겨 주면 될거 같은데..
아니면, 다른 방법이라도..
고수님들의 부탁바랍니다.
나름대로 고민한 흔적이 있군여..^^;;
다음은 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;
즐푸하세여..^^
타락천사.....