创建Firemonkey表单并按代码填充

时间:2016-02-07 16:39:16

标签: delphi firemonkey vcl

我正在将一个VCL组件移植到FMX。 99%的代码都是纯粹的对象pascal,所以工作得很好 - 但是我有一个方法可以创建一个表单,用按钮和文本框来填充它,而这在FMX下根本不起作用。

手动创建表单然后从代码填充表单的重点是确保它在VCL,LCL和FMX下编译;并且它在iOS,Android和任何使用的平台下也能正常显示。

但我一直得到“资源/类名/找不到”,其中 / classname / 是我给临时表单类的任何类名。

这么简单就会产生错误:

type
TMyDialogForm = Class(TForm);

procedure TForm1.Button1Click(Sender: TObject);
var
  LDialog:  TMyDialogForm;
begin
  LDialog := TMyDialogForm.Create(application.MainForm);
  try
    LDialog.Caption := 'Yahoo!';
  finally
    LDialog.Free;
  end;
end;

由于错误涉及资源,我怀疑它正在寻找某种类型的布局数据。我刚刚开始使用FMX,我注意到不同的平台允许不同的布局。但我必须承认,无论你瞄准什么平台,我都希望它能够回归到默认主题。

那么 - 我是如何通过代码创建表单,填充它并使用Firemonkey显示ut而不会遇到这种错误?它在VCL和LCL下运行得非常好,但FMX继续关注资源。

请不要告诉我所有表格必须的设计?

1 个答案:

答案 0 :(得分:4)

@RemyLebeau在delphi论坛(How to create a TForm at runtime?)回答了类似的问题:

  

您正在调用调用DFM流的TForm构造函数。原因   它在非FMX应用程序中没有失败是因为TCustomForm.Create()过滤   特别是TForm,它不会尝试流。在FMX中,TCommonCustomForm.Create()   过滤掉TCommonCustomForm而不是TForm,这就是你的TForm的原因   FMX正试图自己流。

     

由于您知道没有DFM,因此您应该使用非DFM构造函数   相反,在VCL和FMX中:

FRM := TForm.CreateNew(Application);