【问题标题】:Get modalresult from function in Firemonkey Multi Device Delphi project从 Firemonkey Multi Device Delphi 项目中的函数获取模态结果
【发布时间】: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


【解决方案1】:

我通过添加一个在 modalresult 等于 mrOk 时调用的内联过程解决了我的问题。

代码如下:

使用 showmodal 显示我的表单的方法

procedure ShowMyForm(event: TProc = nil);
var
  form: TForm1;
begin
  form:= TForm1.Create(nil);
  form.ShowModal(
    procedure(ModalResult: TModalResult)
    begin
      if (ModalResult = mrOk) and Assigned(event) then
        event;  
    end);
end;

使用内联过程调用过程。

ShowMyForm(
      procedure
      begin
          // Code that you want to do on mrOk
      end);

【讨论】:

    猜你喜欢
    • 2017-07-03
    • 1970-01-01
    • 2013-05-06
    • 2020-12-26
    • 2014-08-01
    • 1970-01-01
    • 2013-10-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多