Q&A

  • MDI 폼 실행시키는 방법
  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;
3  COMMENTS
  • Profile
    장경석 2003.04.09 11:36
    메인 폼에 아래와 같이 function 을 만들어주고나서
    호출을 할 당시 스트링으로 불러주고
    각각의 차일드폼에는 소스 맨 하단에
    레즈스트리 등록을 해 주면 됩니다.

    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;
  • Profile
    박준철 2003.04.10 19:48
    레지스트리 등록을 어떻게 하는건가요 ?
    죄송한데 한번더 부탁 드립니다.
  • Profile
    다크엔젤 2003.04.17 08:56
    initialization RegisterClasses([TForm1]);

    end.

    위와 같이 쓰면 됩니다... ^^*