gpt4 book ai didi

Delphi - 在 FireMonkey 中正确显示消息对话框并返回模态结果

转载 作者:行者123 更新时间:2023-12-03 14:52:24 26 4
gpt4 key购买 nike

我有一个 VCL 应用程序,正在将其移植到 FireMonkey。我遇到的一件事是 MessageDlg(...) 在 FireMonkey 中已被弃用。进一步挖掘后,我明白我必须使用 FMX.DialogService.MessageDialog 方法。所以我创建了一个函数来显示对话框:

function TfMain.GetDeleteConfirmation(AMessage: String): String;
var
lResult: String;
begin
lResult:='';
TDialogService.PreferredMode:=TDialogService.TPreferredMode.Platform;
TDialogService.MessageDialog(AMessage, TMsgDlgType.mtConfirmation,
[ TMsgDlgBtn.mbYes, TMsgDlgBtn.mbCancel ], TMsgDlgBtn.mbCancel, 0,
procedure(const AResult: TModalResult)
begin
case AResult of
mrYes: lResult:='Y';
mrCancel: lResult:='C';
end;
end);

Result:=lResult;
end;

我不认为我这样做是正确的,因为我不确定是否可以在匿名方法中设置局部变量,但它仍然可以编译。

我这样调用它:

  if GetDeleteConfirmation('Are you sure you want to delete this entry?')<>'Y' then
exit;

当我运行它时,显示的消息对话框如下:

enter image description here

它不显示 2 个按钮(是、取消)。有人可以帮我解决这个问题 - 即正确显示带有 2 个按钮的消息对话框并将消息对话框的模态结果作为函数的结果发送回来。

我正在使用 Delphi 10.1 Berlin Update 2。

非常感谢!

编辑 20170320:我根据下面 @LURD 的正确答案更正了我的代码,并将其包含在此处以确保完整性:

function TfMain.GetDeleteConfirmation(AMessage: String): String;
var
lResultStr: String;
begin
lResultStr:='';
TDialogService.PreferredMode:=TDialogService.TPreferredMode.Platform;
TDialogService.MessageDialog(AMessage, TMsgDlgType.mtConfirmation,
FMX.Dialogs.mbYesNo, TMsgDlgBtn.mbNo, 0,
procedure(const AResult: TModalResult)
begin
case AResult of
mrYes: lResultStr:='Y';
mrNo: lResultStr:='N';
end;
end);

Result:=lResultStr;
end;

最佳答案

问题:

It does not show the 2 buttons (Yes, Cancel). Could someone please help me get this right - i.e. correctly show the message dialog with the 2 buttons and send the modal result of the message dialog back as the Result of the function.

Fmx.TDialogService.MessageDialog 不支持对话框按钮的任意组合。

查看源代码(Fmx.Dialogs.Win.pas)会发现这些有效组合(mbHelp 可以包含在所有组合中):

  • mbOk
  • mbOk,mbCancel
  • mbYes,mbNo,mbCancel
  • mbYes, mbYesToAll, mbNo, mbNoToAll, mbCancel
  • mbAbort, mbRetry, mbIgnore
  • mbAbort, mbIgnore
  • mbYes, mbNo
  • mbAbort, mbCancel
<小时/>

这意味着 [mbYes,mbCancel] 不是有效的组合,请使用 [mbOk,mbCancel] 代替。

<小时/>

关于Fmx.TDialogService.MessageDialog的最后说明。它通常在桌面应用程序上是同步对话框,但在移动平台上是异步的。根据这些条件,用例看起来会有点不同,因此对于多平台应用程序,请检查 TDialogService.PreferredMode 的值。

关于Delphi - 在 FireMonkey 中正确显示消息对话框并返回模态结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42852945/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com