안녕하세요. 다름이 아니라 Tform1.formclose에서 말이죠.
parameter로 넘어오는 action에다가 cafree줘서 해체하는거랑
form1 에다가 nil줘서 죽이는거랑 어떤 차이가 있는지 모르겠습니다.
지금은 두개 다 씁니다.
procedure TForm1.FormClose(Sender: TObject;
var Action: TCloseAction);
begin
action := cafree;
form1 := nil;
end;
문제는 이렇게 죽인 폼을 나중에 다른 폼에서 findwindow('TForm1', nil)하면 엉뚱하게 0 이상의 값을 리턴한다는 것이죠..그런데 또다른 문제는 다른사람은 안그렇대요..호호.
이게 대체 무슨 일인지 분석좀 해주세요..두 방법의 진짜진짜 효과가 어떻게 다른지..
그럼 답변을 기다리며....좋은 하루 되세요
그냥 nil로 주시면 안됩니다.
꼭 action := caFree를 해주세요.
nil로 해주시면 그 폼을 가리키는 포인터만 없어지는것이지 메모리에는 그대로 남아있는것입니다.
그냥 nil로만 해주셨다면 계속 폼을 만들다보면 맛이 가게 되어있죠. ^^;
Action := caFree를 꼭 해주세요.
참고로 Free하면서 nil로 만들어주는 함수가 델5에서 생겼네요.
바로 FreeAndNil이라는 함수입니다.
이것은 자신을 FreeAndNil을 할 수는 없습니다.. 참고하세요.
박수연 wrote:
> 안녕하세요. 다름이 아니라 Tform1.formclose에서 말이죠.
> parameter로 넘어오는 action에다가 cafree줘서 해체하는거랑
> form1 에다가 nil줘서 죽이는거랑 어떤 차이가 있는지 모르겠습니다.
> 지금은 두개 다 씁니다.
>
> procedure TForm1.FormClose(Sender: TObject;
> var Action: TCloseAction);
> begin
> action := cafree;
> form1 := nil;
> end;
>
> 문제는 이렇게 죽인 폼을 나중에 다른 폼에서 findwindow('TForm1', nil)하면 엉뚱하게 0 이상의 값을 리턴한다는 것이죠..그런데 또다른 문제는 다른사람은 안그렇대요..호호.
> 이게 대체 무슨 일인지 분석좀 해주세요..두 방법의 진짜진짜 효과가 어떻게 다른지..
> 그럼 답변을 기다리며....좋은 하루 되세요
>