procedure TfrmMainForm.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
  if (MessageBox(0, '真的退出吗?', '退出',
      MB_ICONINFORMATION + MB_SYSTEMMODAL + MB_YESNO) = IDYES) then
    CanClose := true
  else
    CanClose := false;
end;在菜单、或另一个退出按钮调用这个事件,如下:
procedure TfrmMainForm.X1Click(Sender: TObject);
var CanClose: Boolean;
begin
  FormCloseQuery(Sender,CanClose);
end;
问题,直接点主窗体(是个MDI)的叉,可以弹出对话框,点否不退出,点是就退出。
但是,点菜单的退出,调用这个formclosequery,也出对话框,但点否,点是,都不能退出。

解决方案 »

  1.   

    在菜单、或另一个退出按钮调用这个事件,如下: 
    procedure TfrmMainForm.X1Click(Sender: TObject); 
    var CanClose: Boolean; 
    begin 
      CLOSE; //这样就可以了
    end; 
      

  2.   

    close就直接退出了,我想要再弹出个确认对话框,让选择一下“是”或“否”的。
      

  3.   


    procedure TfrmMainForm.X1Click(Sender: TObject); 
    var CanClose: Boolean; 
    begin 
      Close; // 用close不用FormCloseQuery(Sender,CanClose); 
    end; 
      

  4.   

    啊,对呀。
    直接去找formclosequery了吧。
    多谢几位。
      

  5.   

    为什么调用这个formclosequery,也出对话框,但点否,点是,都不能退出。 
    请看:
    1、
    function TCustomForm.CloseQuery: Boolean;
    var
      I: Integer;
    begin
      if FormStyle = fsMDIForm then
      begin
        Result := False;
        for I := 0 to MDIChildCount - 1 do
          if not MDIChildren[I].CloseQuery then Exit;
      end;
      Result := True;
      if Assigned(FOnCloseQuery) then FOnCloseQuery(Self, Result);
      //此处的Result为ture时关闭窗口。
    end;
    2、
    procedure TCustomForm.Close;
    var
      CloseAction: TCloseAction;
    begin
      if fsModal in FFormState then
        ModalResult := mrCancel
      else
        if CloseQuery then ...;//正常关闭窗口时,会调用CloseQuery
    end;
      

  6.   

    procedure TfrmMainForm.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
    begin
      if (MessageBox(0, '真的退出吗?', '退出',
          MB_ICONINFORMATION + MB_SYSTEMMODAL + MB_YESNO) = IDYES) then
        CanClose := true
      else
        CanClose := false;
    end; 又发现个情况,用如上的代码,弹出对话框后并不像是模态的,后面的窗体还可以被点击,如何设置类似模态的messagebox呢。我也在试。
      

  7.   

    MessageBox(frmMainForm.Handle, '真的退出吗?', '退出',
          MB_ICONINFORMATION + MB_SYSTEMMODAL + MB_YESNO) = IDYES)
      

  8.   

    procedure TfrmMainForm.X1Click(Sender: TObject); 
    var CanClose: Boolean; //这个都不需要
    begin 
      Close; // 用close不用FormCloseQuery(Sender,CanClose); 
    end;