สำหรับท่านที่เคยเจอปัญหาในกรณีที่ใช้ Event OnClose กับ MessageDlg ถามในกรณีจะออกจากโปรแกรมแล้วพอกด ปุ่ม Cancel หรือ กากบาทก็ยังออก ผมมีวิธีแก้ดั้งนี้ครับ
ตัวอย่าง
procedure TMain_F.FormClose(Sender: TObject; var Action: TCloseAction);
begin
case MessageDlg('คุณต้องการออกจากโปรแกรมใช่หรือไม่', mtConfirmation, [mbOK, mbCancel], 0) of
mrOk: Begin
Application.Terminate;
End;
mrCancel: begin
Exit;
end;
mrNone : begin
Exit;
end;
end;
end;
ในกรณีแรก ถ้า เราใช้ OnClose เลย ระบบ มันจะมองว่า ปิดโปรแกรมไปแล้ว จากนั้นจึงเรียก procedure ขึ้นมาให้ทำงาน วิธีแก้ปัญหาให้ทำการใช้ Event CloseQuery แทน โดย CloseQuery นั้นจะมี ตัวแปร CanClose มาช่วยเช็คว่าสามารถปิดได้ หรือ ไม่ได้เท่านี้ก็แก้ปัญหาได้แล้วครับ
procedure TMain_F.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
case MessageDlg('คุณต้องการออกจากโปรแกรมใช่หรือไม่', mtConfirmation, [mbOK, mbCancel], 0) of
mrOk: Begin
CanClose := True;
Application.Terminate;
End;
mrCancel: begin
CanClose := False;
Exit;
end;
mrNone : begin
CanClose := False;
Exit;
end;
end;
end;
ไม่มีความคิดเห็น:
แสดงความคิดเห็น