我在西雅图Rad Studio 10中有一个Firemonkey Multi Device(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不能在多设备项目上工作。

还有另一种方法可以做到这一点吗?

最佳答案

我通过添加一个内联过程解决了我的问题,该过程在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);

10-07 12:40