วันพุธที่ 21 พฤษภาคม พ.ศ. 2557

ปัญหาการใช้ Onclose แล้วฟอร์มปิดไปเลยแก้ไขอย่างไร

สำหรับท่านที่เคยเจอปัญหาในกรณีที่ใช้ 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;

ไม่มีความคิดเห็น:

แสดงความคิดเห็น