下面的演示应用程序在用户尝试关闭窗体时询问用户是否真的要关闭。
当表单没有最小化时,这工作正常。但是,如果他们试图在表单最小化时从任务栏关闭应用程序,则应用程序将被锁定,并且只能从任务管理器关闭。
模态警告消息似乎显示但不可见。因为他们不能关闭模态消息框,所以他们根本不能关闭它,即使在恢复窗口之后。
请注意,使用TApplication.MessageBox的具有类似代码的VCL应用程序不会出现问题。从任务栏单击X后,消息框立即出现,并且可以关闭应用程序。
还要注意的是,在 Delphi 10中制作的类似的FMX应用程序没有这个问题。
有没有人有任何解决方案的想法?
在显示消息框和调用Application.ProcessMessages之前,我尝试将窗体的WindowState强制设置为wsNormal,但没有任何改变。
我使用同步消息框是因为这是为了防止应用程序中未保存的工作丢失。我不希望用户在消息框中单击“是”之前能够关闭应用程序。
DFM:
object Form1: TForm1
Left = 0
Top = 0
Caption = 'Form1'
ClientHeight = 347
ClientWidth = 437
FormFactor.Width = 320
FormFactor.Height = 480
FormFactor.Devices = [Desktop]
OnClose = FormClose
DesignerMasterStyle = 0
end
验证码:
unit Unit1;
interface
uses
System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs;
type
TForm1 = class(TForm)
procedure FormClose(Sender: TObject; var Action: TCloseAction);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.fmx}
uses
FMX.DialogService.Sync;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
if TDialogServiceSync.MessageDialog(
'Are you sure you want to close?', TMsgDlgType.mtWarning,
[TMsgDlgBtn.mbYes, TMsgDlgBtn.mbNo],
TMsgDlgBtn.mbYes, 0) = mrNo then
Action := TCloseAction.caNone;
end;
end.
1条答案
按热度按时间o7jaxewo1#
这是 Delphi 11中的一个bug,目前正在调查中。然而,解决方法相当简单。在消息框前显示窗体。