【发布时间】:2016-11-30 08:57:42
【问题描述】:
我在西雅图 Rad Studio 10 有一个 Firemonkey 多设备(Android 和 iOS)项目。 我想从一个单元中的一个方法中调用一个带有 showmodal 的表单,并用函数返回 modalresult。
我尝试了以下示例:
function ShowMyForm: TModalResult;
var
form: TForm1;
begin
form:= TForm1.Create(nil);
form.ShowModal(
procedure(ModalResult: TModalResult)
begin
result := ModalResult;
end);
end;
function ShowMyForm: TModalResult;
var
form: TForm1;
begin
form:= TForm1.Create(nil);
result := form.ShowModal;
end;
使用内联过程,函数无法访问结果。
仅调用 TForm.ShowModal 并不能在多设备项目上工作。
还有其他方法可以实现吗?
【问题讨论】:
-
来自documentation:注意: Android 应用不支持模态对话框。您应该调用 Show,而不是调用 ShowModal,并让表单返回并调用您的事件。我们建议您不要在任一移动平台(iOS 和 Android)上使用模式对话框,因为可能会导致意外行为。不使用模式对话框可以消除调试和支持您的移动应用程序的潜在问题。
-
在移动编译器中,
ShowModal不会阻塞。这意味着您的函数ShowMyForm在模态表单执行之前已经完成。而是按照文档说的方式调用Show并让表单返回并调用您的事件。 -
@LURD 唯一的问题是我想用它来做很多不同的事情。所以不是 1 个单一的事件。
-
以匿名方法传递事件代码。这样一来,它就不会被绑定到单一的解决方案。
-
@RemyLebeau 更新了他的答案delphi XE-5 cross platform development - calling a showmodal form。我建议你试试看,如果没问题再报告。
标签: android ios delphi firemonkey delphi-10-seattle