DMI폼에서 Child폼들을 띄우고 창끄는 건 구현했는데요.
Child폼이 한개 또는 여러개가 보이는 상태에서 한번에 전부 Close하는 방법이 있나요?
MDI폼도 끄는 건 아니고요, MDI폼은 살아있는 상태에서 Child폼들만 전부 Close하는 방법이 애타게 필요합니다.
Child폼 띄우는 방법은 검색을 하다가 function으로 했습니다.
<!--CodeS-->
function TfmMain.CreateForm(sClass:string;index:integer):Boolean;
var
MyFormClass : TFormClass;
WorkForm : TForm;
H : THandle;
I : Integer;
begin
IntTostr(I);
Result := True;
H := 0;
mainClientWidth:= fmMain.ClientWidth - 4;
mainClientHeight:= fmMain.ClientHeight - mainFormStatusBar.Height - 4;
for I := 0 to Screen.CustomFormCount - 1 do
begin
if UpperCase('T' + Screen.CustomForms[I].Name) = UpperCase(sClass) then
begin
H := Screen.CustomForms[I].Handle;
Break;
end;
end;
if H = 0 then
begin // begin(1)
MyFormClass:= TFormClass(GetClass(sClass));
if MyFormClass <> nil then
begin // begin(2)
WorkForm := MyFormClass.Create(Application.MainForm);
if WorkForm <> nil then
case index of
100: begin // begin(3)
HandlerPoint.MDIChild:= WorkForm;
Workform.Width:= Workform.Width;
Workform.Height:= Workform.Height;
Workform.left:= Workform.Width div 2;
Workform.top:= Workform.Height div 2;
end; // end(3)
200 : begin // begin(3)
HandlerPoint.MDIChild:= WorkForm;
Workform.Width:= Workform.Width;
Workform.Height:= Workform.Height;
Workform.left:= 0;
Workform.top:= 0;
end; // end(3)
end//case index of
else
Showmessage(sClass+'폼을 생성하는데 실패하였습니다.');
end // end(2)
else Result := False;
end // end(1)
//
else
begin
if IsIconic(H) then
ShowWindow(H, SW_SHOWNORMAL)
else BringWindowToTop(H);
end;
end;
<!--CodeE-->
이런 function을 코딩하고,
if HandlerPoint.MDIChild = Nil then CreateForm('TForm1',100);
요런식으로 Child폼이 띄도록 만들었습니다.
아, Form1.pas에서 end.바로 위에
initialization RegisterClasses([TForm1]) 요고 적었고요
[프로젝트]-> "옵션"에서 Available forms도 추가하는 설정도 해줬고요.
요런 방법으로 할 때,
Child폼을 한꺼번에 Close하는 방법은 없을까요??
Application.MainForm.MDIChildren[i].Close;
이런걸 원하셨는지요? 카운트는 역으로 downto하면됩니다.