안녕하세요!
궁금한 것이 있어 글을 올립니다.
메인 화면과 로그 온 화면이 있습니다.
물론, 로그 온 화면에서는 사용자ID 와 패스워드를 입력받아서
사용자 확인을 하지요.
로그 온 화면에서 확인하여 메인 화면으로 들어온후 프로그램을 정상종료
하면 문제가 발생하지 않습니다.
하지만, 로그온 화면에서 취소버튼을 누르면 프로그램이 메모리 상에서
삭제되지 않습니다.
아래 소스가 있으니 보시고 아시는 분은 답변 좀 해주세요.
그럼, 좋은 하루 되세요.
*** 메인 화면
procedure Tfrm_Main.FormShow(Sender: TObject);
begin
frm_Login := Tfrm_Login.Create(Application);
frm_Login.ShowModal;
end;
procedure Tfrm_Main.FormClose(Sender: TObject; var Action: TCloseAction);
begin
if CancleCHK = 'N' then // 정상로깅시 DB에 LogOut 값을 남김.
LogInsert(frm_Main.tren_qry, 'LogOut', Caption);
action := caFree;
end;
*** 로그온 화면
// 취소버튼 누를시
procedure Tfrm_Login.nok_sbtnClick(Sender: TObject);
begin
close;
CancleCHK := 'Y';
frm_Main.Close;
end;
procedure Tfrm_Login.FormClose(Sender: TObject; var Action: TCloseAction);
begin
action := caFree;
end;
CancleChk 같은 사용자 변수를 사용하지 않고 ModalResult를 사용하면 보다
프로그램이 세련되지 않을까 감히 제안합니다.
아래의 문영미님의 frm_Login.ShowModal후 폼을 메로리상에서 제거할
frm_LogIn.Free가 없네요.
제가 아래부분에 예제를 적어봅니다.
// 메인화면
procedure Tfrm_Main.FormShow(Sender: TObject);
var
mr: boolean;
begin
mr := false;
try
frm_Login := Tfrm_Login.Create(Application);
frm_Login.ShowModal;
mr := frm_Login.ModalResult;
frm_LogIn.ShowModal;
finally
fmr_LogIn.free;
end;
if mr = mrCancle then
begin
LogInsert(frm_Main.tren_qry, 'LogOut', Caption);
Close;
end;
end;
// 로그온 화면
// 취소버튼 누를시
procedure Tfrm_Login.nok_sbtnClick(Sender: TObject);
begin
ModalResult := mrCancle;
end;
// OK버튼 누를시
procedure Tfrm_Login.ok_sbtnClick(Sender: TObject);
begin
ModalResult := mrOK;
end;
*** 메인 화면
procedure Tfrm_Main.FormShow(Sender: TObject);
begin
frm_Login := Tfrm_Login.Create(Application);
frm_Login.ShowModal;
>>>>> 제거부분 누락됨
end;
문영미 wrote:
> 안녕하세요!
> 궁금한 것이 있어 글을 올립니다.
>
> 메인 화면과 로그 온 화면이 있습니다.
> 물론, 로그 온 화면에서는 사용자ID 와 패스워드를 입력받아서
> 사용자 확인을 하지요.
> 로그 온 화면에서 확인하여 메인 화면으로 들어온후 프로그램을 정상종료
> 하면 문제가 발생하지 않습니다.
> 하지만, 로그온 화면에서 취소버튼을 누르면 프로그램이 메모리 상에서
> 삭제되지 않습니다.
>
> 아래 소스가 있으니 보시고 아시는 분은 답변 좀 해주세요.
> 그럼, 좋은 하루 되세요.
>
> *** 메인 화면
> procedure Tfrm_Main.FormShow(Sender: TObject);
> begin
> frm_Login := Tfrm_Login.Create(Application);
> frm_Login.ShowModal;
> end;
>
>
> procedure Tfrm_Main.FormClose(Sender: TObject; var Action: TCloseAction);
> begin
> if CancleCHK = 'N' then // 정상로깅시 DB에 LogOut 값을 남김.
> LogInsert(frm_Main.tren_qry, 'LogOut', Caption);
>
> action := caFree;
> end;
>
> *** 로그온 화면
>
> // 취소버튼 누를시
> procedure Tfrm_Login.nok_sbtnClick(Sender: TObject);
> begin
> close;
>
> CancleCHK := 'Y';
> frm_Main.Close;
> end;
>
> procedure Tfrm_Login.FormClose(Sender: TObject; var Action: TCloseAction);
> begin
> action := caFree;
> end;
>