if pgFormID = 'CUSTMST' then
begin
if MDIChildCount = 0 then pvFChk := 'TRUE'
else
begin
for i := 0 to MDIChildCount - 1 do
begin
if MDIChildren[i] is TFrmCustMst then
begin
FrmCustMst.Top := gTop ; FrmCustMst.Left := gLeft;
FrmCustMst.BringToFront;
pvFChk := 'FALSE';
exit;
end;
end;
pvFChk := 'TRUE';
end;
if pvFChk = 'TRUE' then
begin
FrmCustMst := TFrmCustMst.Create(Application);
FrmCustMst.Top := gTop ; FrmCustMst.Left := gLeft;
Exit;
end;
end;
위와 같이 pgFormID 를 스트링으로 받아와서 그 스트링에 해당하는
폼을 실행 했습니다.
그런데 위와 같이 하니까..폼이 100개변 위와 같은 코딩이100개가 있어야
하는 불편함이 있는데
아래와 같이 폼을 Close 할때처럼
이걸 한번에 해결할 방법이 없나요 ?
for i := 0 to MDIChildCount - 1 do
begin
if MDIChildren[i].Active then
begin
MDIChildren[i].Free;
Exit;
end;
end;
호출을 할 당시 스트링으로 불러주고
각각의 차일드폼에는 소스 맨 하단에
레즈스트리 등록을 해 주면 됩니다.
function Tfrm_main.CreateChild(sClass: string): Boolean;
var MyFormClass : TFormClass;
WorkForm : TForm;
H : THandle;
I : Integer;
begin
Result := True; H := 0;
//이미 생성되어있는지 찾는다.
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 //생성되어 있지 않으면 생성한다.
MyFormClass := TFormClass(GetClass(sClass));
if MyFormClass <> nil then begin
WorkForm := MyFormClass.Create(Application.MainForm);
end else Result := False;
end else begin //생성되어있으면 최상위 윈도우로 만든다.
if IsIconic(H) then ShowWindow(H, SW_SHOWNORMAL)
else BringWindowToTop(H);
end;
end;