Q&A

  • SDI폼에서 다른 폼을 로드할때 메모리 해제하는 방법
지금 프로그램을 하나 만드는데요.

SDI로 만들었어요. 메인폼에서 폼을 로드시킬때마다 위에 폼이 떠 있는데

자꾸 똑같은 폼이 새로이 로드되거든요.

그리고 메인폼에서 X버튼이나.종료버튼을 누르면 stack overflow 에러나요.

다른 폼을 열때 아래와 같이 코딩했거든요.



with StringFirst do

begin

formMaster := TformMaster.Create(Application);

formMaster.showModal;

end;



폼을 열때 이미 메모리에 있는 떠 있는 폼을 로드하기를 원해요.



아시는 분 꼭 좀 알려주세요. 제발 부디!!!

2  COMMENTS
  • Profile
    mute 1999.12.31 03:40
    성영숙 wrote:

    > 지금 프로그램을 하나 만드는데요.

    > SDI로 만들었어요. 메인폼에서 폼을 로드시킬때마다 위에 폼이 떠 있는데

    > 자꾸 똑같은 폼이 새로이 로드되거든요.

    > 그리고 메인폼에서 X버튼이나.종료버튼을 누르면 stack overflow 에러나요.

    > 다른 폼을 열때 아래와 같이 코딩했거든요.

    >

    > with StringFirst do

    > begin

    > formMaster := TformMaster.Create(Application);

    > formMaster.showModal;

    > end;

    >

    > 폼을 열때 이미 메모리에 있는 떠 있는 폼을 로드하기를 원해요.

    >

    > 아시는 분 꼭 좀 알려주세요. 제발 부디!!!



    StringFirst 이건 뭐에 쓰는 물건이죠....



    지는 무식해서 모르겄는디...쩝...



    Form 을 Option 에서 Available 로 옮기셨겠죠?



    SDI 라면 간단히

    formMaster := TformMaster.Create(Application);

    formMaster.showModal;

    formMaster.free;

    하시면 되구요



    MDI 이거나 showmodal이 아니라 show 라면



    //현재 로드 되어있는 폼을 이름으로 찾는 루틴입니다

    function FindForm(S: string): Boolean;

    var

    I: word;

    begin

    Result := False;

    for I := 0 to Screen.CustomFormCount - 1 do

    if LowerCase(Screen.CustomForms[I].Name) = LowerCase(S) then Result := True;

    end;



    Procedure ....;

    begin

    if findform('formMaster') then formMaster.Show

    else

    begin

    formMaster := TformMaster.Create(Application);

    formMaster.Show;

    end;

    end;



    MDI의 경우 Close 이벤트에 위에 쓰신 분처럼



    Action := CaFree;를 해주셔야 메모리에서 해제가 됩니다.



    제가 아는건 Action := CaFree;는 MDI 에서만 해당이 됩니다.



  • Profile
    류성호 1999.12.31 03:07
    아래의 예와 같이



    procedure TformMaster.FormClose(Sender: TObject; var Action: TCloseAction);

    begin

    Action:=caFree;

    end;



    폼의 OnClose 이벤트의 파라미터의 Action에 caFree를 넣으면 됩니다.





    성영숙 wrote:

    > 지금 프로그램을 하나 만드는데요.

    > SDI로 만들었어요. 메인폼에서 폼을 로드시킬때마다 위에 폼이 떠 있는데

    > 자꾸 똑같은 폼이 새로이 로드되거든요.

    > 그리고 메인폼에서 X버튼이나.종료버튼을 누르면 stack overflow 에러나요.

    > 다른 폼을 열때 아래와 같이 코딩했거든요.

    >

    > with StringFirst do

    > begin

    > formMaster := TformMaster.Create(Application);

    > formMaster.showModal;

    > end;

    >

    > 폼을 열때 이미 메모리에 있는 떠 있는 폼을 로드하기를 원해요.

    >

    > 아시는 분 꼭 좀 알려주세요. 제발 부디!!!