지금 프로그램을 하나 만드는데요.
SDI로 만들었어요. 메인폼에서 폼을 로드시킬때마다 위에 폼이 떠 있는데
자꾸 똑같은 폼이 새로이 로드되거든요.
그리고 메인폼에서 X버튼이나.종료버튼을 누르면 stack overflow 에러나요.
다른 폼을 열때 아래와 같이 코딩했거든요.
with StringFirst do
begin
formMaster := TformMaster.Create(Application);
formMaster.showModal;
end;
폼을 열때 이미 메모리에 있는 떠 있는 폼을 로드하기를 원해요.
아시는 분 꼭 좀 알려주세요. 제발 부디!!!
> 지금 프로그램을 하나 만드는데요.
> 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 에서만 해당이 됩니다.