Q&A

  • MDI폼에서 같은child Form이 계속열려요...
Delphi고수님들께 왕초보가 감히 질문드립니다.



MDI폼에서 child폼을 Application.CreateForm(TForm, From)으로 열때 계속열리는데 한번만 열리게 할 수는 없나요? (한번열린 child폼이 Close되기전에 다시 안 열리게)

고수님들의 조언부탁혀요



진짜Delphi왕초보 올림

4  COMMENTS
  • Profile
    강인규 1999.12.20 19:31
    이런 방법을 써보심이 어떨른지......



    폼을 발생시킬 이벤트에 아래와 같이 코딩합니다



    if form2 = nil then

    Application.createform(Tform2, Form2)

    else

    form2.WindowState := wsNormal; //폼이 살아있으면(?) 원래 상태로...



    MDI폼의 close Event에 아래와 같이 코딩합니다



    Form2 := nil; //nil은 일종의 포인터 함수로 종료할 때 nil값을 반환해야 합니다.

    Action := cafree // 이건 뭔지 아시겠죠?









    김정화 wrote:

    > Delphi고수님들께 왕초보가 감히 질문드립니다.

    >

    > MDI폼에서 child폼을 Application.CreateForm(TForm, From)으로 열때 계속열리는데 한번만 열리게 할 수는 없나요? (한번열린 child폼이 Close되기전에 다시 안 열리게)

    > 고수님들의 조언부탁혀요

    >

    > 진짜Delphi왕초보 올림

  • Profile
    서영택 1999.12.21 19:22
    form2.WindowState := wsNormal; 이부분을

    form2.Show; 이렇게 사용해도 좋을듯 합니다만...



    강인규 wrote:

    > 이런 방법을 써보심이 어떨른지......

    >

    > 폼을 발생시킬 이벤트에 아래와 같이 코딩합니다

    >

    > if form2 = nil then

    > Application.createform(Tform2, Form2)

    > else

    > form2.WindowState := wsNormal; //폼이 살아있으면(?) 원래 상태로...

    >

    > MDI폼의 close Event에 아래와 같이 코딩합니다

    >

    > Form2 := nil; //nil은 일종의 포인터 함수로 종료할 때 nil값을 반환해야 합니다.

    > Action := cafree // 이건 뭔지 아시겠죠?

    >

    >

    >

    >

    > 김정화 wrote:

    > > Delphi고수님들께 왕초보가 감히 질문드립니다.

    > >

    > > MDI폼에서 child폼을 Application.CreateForm(TForm, From)으로 열때 계속열리는데 한번만 열리게 할 수는 없나요? (한번열린 child폼이 Close되기전에 다시 안 열리게)

    > > 고수님들의 조언부탁혀요

    > >

    > > 진짜Delphi왕초보 올림

  • Profile
    박성훈 1999.12.19 01:22
    김정화 wrote:

    > Delphi고수님들께 왕초보가 감히 질문드립니다.

    >

    > MDI폼에서 child폼을 Application.CreateForm(TForm, From)으로 열때 계속열리는데 한번만 열리게 할 수는 없나요? (한번열린 child폼이 Close되기전에 다시 안 열리게)

    > 고수님들의 조언부탁혀요

    >

    > 진짜Delphi왕초보 올림





    저는 이렇게 쓰고 있는데 참고가 되시길...



    function FindForm(formname:String):Boolean;

    var

    i:Integer;

    begin

    Result:= False;

    for i:=0 to Application.ComponentCount-1 do

    begin

    if Application.Components[i].Name=frmname then

    begin

    Result:= True;

    exit;

    end;

    end;



    사용법...

    Form의 name이 Form1인 폼을 한번만 열 때

    if not FindForm('Form1') then

    begin

    Application.CreateForm(TForm1,Form1);

    Form1.Show;

    end;



  • Profile
    이주흥 1999.12.19 00:13
    김정화 wrote:

    > Delphi고수님들께 왕초보가 감히 질문드립니다.

    >

    > MDI폼에서 child폼을 Application.CreateForm(TForm, From)으로 열때 계속열리는데 한번만 열리게 할 수는 없나요? (한번열린 child폼이 Close되기전에 다시 안 열리게)

    > 고수님들의 조언부탁혀요

    >

    > 진짜Delphi왕초보 올림



    폼 생성하는 이벤트에 다음과 같이 넣어보세요..

    Form2는 열려고하는 MDIChildForm 으로 바꿔 쓰시구요..



    For i :=0 to MDIChildCount -1 do

    if MDIChildren[i] is TForm2 then Exit;

    Application.CreateForm(TForm2, Form2);