Q&A

  • 같은폼 두번 열지 않기...
Win 98, 델파이5 입니다.
메인폼을 그냥 일반 SDI폼으로 하구요
   일반폼들도 SDI 폼입니다.

그래도 한화면 띄우고 다른 화면도 띄울수 있도록 Show로 보이고자 합니다.

Q&A를 참조하여 다음과 같이 했습니다.

procedure TMain.G1Click(Sender: TObject);  //메인폼 메뉴 클릭
var Handle : THandle;
begin
   //해당폼을 찾는다.
   Handle := FindWindow(Pchar('TTr120F'), Pchar('견적서처리'));
    
   if Handle = 0 then begin  //해당폼이 없으면
     Tr120F := TTr120F.Create(Self);
     Tr120F.show;
   end else
   begin    //해당폼이 있므면
      Tr120F.show;
   end;
end;

이렇게 하니 어떨때는 되고요 또 어떨때는 에러가 납니다.
무엇을 어찌 고쳐야 할까요?
4  COMMENTS
  • Profile
    박상기 2003.07.25 06:53


    아래와 같이 간단히 하는게 어떨지?
    Uses
    Tr120F;

    if Tr120F = nil then
    Tr120F  := TTr120F .Create(self);
    Tr120F.Show;
  • Profile
    하병준 2003.07.25 07:23
    ex1

      for i := 0 to Screen.FormCount-1 do
        if Screen.Forms[i].Caption =  '폼1' then begin
          Screen.Forms[i].show;
          break;
          

    ex2
    TForm1 은 폼 클래스 이름.....

      for i := 0 to Screen.FormCount-1 do
        if (Screen.Forms[i] is TForm1) then begin
          (Screen.Forms[i] as TForm1).show;
          break;
        end;
            
  • Profile
    박상기 2003.07.25 07:49

    위와 같이 해도 되긴 되는데
    projet 메뉴 options에서 해당 폼을 Auto-Create-forms에 추가해야 함돠
  • Profile
    하병준 2003.07.25 17:41




    굳이 auto로 안해도 가능합니다..위에껀..해당폼이 있는지 여부만 검사하니깐..

    있다면 그 폼은 이미 create 시킨거니깐요.. 없으면 새로 create하구요...