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,也出对话框,但点否,点是,都不能退出。
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,也出对话框,但点否,点是,都不能退出。
procedure TfrmMainForm.X1Click(Sender: TObject);
var CanClose: Boolean;
begin
CLOSE; //这样就可以了
end;
procedure TfrmMainForm.X1Click(Sender: TObject);
var CanClose: Boolean;
begin
Close; // 用close不用FormCloseQuery(Sender,CanClose);
end;
直接去找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;
begin
if (MessageBox(0, '真的退出吗?', '退出',
MB_ICONINFORMATION + MB_SYSTEMMODAL + MB_YESNO) = IDYES) then
CanClose := true
else
CanClose := false;
end; 又发现个情况,用如上的代码,弹出对话框后并不像是模态的,后面的窗体还可以被点击,如何设置类似模态的messagebox呢。我也在试。
MB_ICONINFORMATION + MB_SYSTEMMODAL + MB_YESNO) = IDYES)
var CanClose: Boolean; //这个都不需要
begin
Close; // 用close不用FormCloseQuery(Sender,CanClose);
end;