Q&A

  • FindWindow에 대한 사용법
메인 메뉴가 있는 폼에서 메뉴를 이용하여 다름 폼을 열려고 하는 데

이미 그 폼이 열려 있으면 새로 여는 것이 아니라 기존의 폼을 보여주려고

다음과 같은 방법으로 코딩을 했는 데 찾고자 하는 폼이 없는 데도

FindWindow에서 0가 아닌 값을 리턴를 하는 군요.

어떻게 해야 하는 지 어디서 잘못되었는지 도움을 부탁드립니다.

/////-------------------------------------------

procedure TForm1.N311Click(Sender: TObject);

var

intHandleOfWin : integer;

begin

intHandleOfWin := FindWindow('TForm4', nil);

if intHandleOfWin = 0 then

begin

Form4 := TForm4.Create( Self );

Form4.Show;

end

else

begin

SetActiveWindow(intHandleOfWin);

end;

end;



2  COMMENTS
  • Profile
    글쎄요. 1999.06.09 04:20
    혹시 Form4를 auto-create form으로 생성하시지 않았습니까??

    그랬다면 프로젝트 옵션에서 available form으로 옮겨 주시고요.

    또는 Form4와 그유닛을 열어논 상태에서 컴파일한 후에 그 실행을

    가지고 체크하셨다면 상관이 없구요.

    이 것도 저것도 아니라면 findwindow의 두번 째 인자값을 nil대신에

    Form의 캡션을 주시고요.(클래스와 캡션까지 동시에 만족해야 값이

    0 이 안되니까. 같이 존재할 확률이 극히 희박하겠죠)

    참고하셔요.

  • Profile
    신인재 1999.06.09 02:30
    Form4가 같은 어플리케이션을 사용하는 경우인것 같습니다.

    따라서 아래와 같이 사용하세요....



    procedure TForm1.N311Click(Sender: TObject);

    begin

    if Form4 = nil then

    begin

    Form4 := TForm4.Create( Self );

    Form4.Show;

    end

    else

    begin

    SetActiveWindow(Form4.Handle);

    end;

    end;



    이상준 께서 말씀하시기를...

    > 메인 메뉴가 있는 폼에서 메뉴를 이용하여 다름 폼을 열려고 하는 데

    > 이미 그 폼이 열려 있으면 새로 여는 것이 아니라 기존의 폼을 보여주려고

    > 다음과 같은 방법으로 코딩을 했는 데 찾고자 하는 폼이 없는 데도

    > FindWindow에서 0가 아닌 값을 리턴를 하는 군요.

    > 어떻게 해야 하는 지 어디서 잘못되었는지 도움을 부탁드립니다.

    > /////-------------------------------------------

    > procedure TForm1.N311Click(Sender: TObject);

    > var

    > intHandleOfWin : integer;

    > begin

    > intHandleOfWin := FindWindow('TForm4', nil);

    > if intHandleOfWin = 0 then

    > begin

    > Form4 := TForm4.Create( Self );

    > Form4.Show;

    > end

    > else

    > begin

    > SetActiveWindow(intHandleOfWin);

    > end;

    > end;

    >