전 지금 회사에서 델파이를 사용합니다. 근데 궁금한것이 있느데요...
꼭 정확한 답변 좀 부탁 드립니다.
procedure TFrmRegYearAddRecog.FormClose(Sender: TObject;
var Action: TCloseAction);
begin
Action := CaFree;
FrmRegYearAddRecog := nil;
end;
위의 방법으로 보통 Close처리를 합니다. 근데 여기서 nil처리를 처음에 적고 다음에
메모리 해제를 하는것과 위의 방법으로 하면 프로그램적으로 어떠한 차이가 있는지
아시는 분이 계시면 정확한 답을 멜로 보내주시면 좋겠구요..만약 이런 방법 말구도
아주 보편적인 방법이 있다면 알려주세요..왜 그 방법이 좋은지..말이죠...
지금 이 문제는 저희 회사 소스에 모두 적용되기 때문에 아주 중요한 문제입니다.
지금 회사에서 대대적인 소스 수정 작업이 있어서요...^^; 부탁드립니다.
1. 폼을 실행할때
if not Asigned(MyModelessForm) then
MyModelessForm := TModeless.Create(Application);
//폼의 인스턴스가 있는지 검사하고 없으면 생성하지요....
MyModelesForm.show;
2. 폼의 종료
procedure TMyModelessForm.FormClose(Sender: TObject;
var Action: TCloseAction);
begin
Action := CaFree; //폼의 인스턴스를 해제한다.
end;
procedure TMyModelessForm.FormDestroye(Sender: TObject);
begin
MyModelessForm := nil; //폼이 파괴될 때 MyModelesForm 변수에 nil을
설정한다. 이래야 다음에 1번을 다시실행하면
if문이 제대로 작동합죠....
end;
---> 이부분이 저랑 다르군요.
---> 저의 경우 formclose에서 nil을 줄경우 MyModelesForm변수에 nil이
제대로 할당되지 않아서 고생 직사게 했습니다.
너무 오래전 애기라서 구체적인 에러 메시지는 생각이 잘안나고,
같은 폼을 반복해서 실행할 경우 인스턴스는 해제되고 MyModelesForm변수는
제대로 nil을 갖지 못해서 폼이 실행되지 않았던것으로 어렴풋이...^^;
박종길 wrote:
> 전 지금 회사에서 델파이를 사용합니다. 근데 궁금한것이 있느데요...
> 꼭 정확한 답변 좀 부탁 드립니다.
> procedure TFrmRegYearAddRecog.FormClose(Sender: TObject;
> var Action: TCloseAction);
> begin
> Action := CaFree;
> FrmRegYearAddRecog := nil;
> end;
> 위의 방법으로 보통 Close처리를 합니다. 근데 여기서 nil처리를 처음에 적고 다음에
> 메모리 해제를 하는것과 위의 방법으로 하면 프로그램적으로 어떠한 차이가 있는지
> 아시는 분이 계시면 정확한 답을 멜로 보내주시면 좋겠구요..만약 이런 방법 말구도
> 아주 보편적인 방법이 있다면 알려주세요..왜 그 방법이 좋은지..말이죠...
> 지금 이 문제는 저희 회사 소스에 모두 적용되기 때문에 아주 중요한 문제입니다.
> 지금 회사에서 대대적인 소스 수정 작업이 있어서요...^^; 부탁드립니다.