Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Delphi 创建Firemonkey表单并按代码填充_Delphi_Firemonkey_Vcl - Fatal编程技术网

Delphi 创建Firemonkey表单并按代码填充

Delphi 创建Firemonkey表单并按代码填充,delphi,firemonkey,vcl,Delphi,Firemonkey,Vcl,我正在将VCL组件移植到FMX。99%的代码都是纯对象pascal,所以它工作得很好——但我有一个方法可以创建一个表单,用按钮和文本框填充表单,这在FMX下根本不起作用 手动创建表单,然后从代码中填充表单的全部要点是确保它在VCL、LCL和FMX下编译;在iOS、Android和任何使用的平台下,它都能很好地显示 但是我一直得到“Resource/classname/notfound”,其中/classname/是我给临时表单类的任何类名称 这样简单的操作会产生错误: type TMyDialo

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

手动创建表单,然后从代码中填充表单的全部要点是确保它在VCL、LCL和FMX下编译;在iOS、Android和任何使用的平台下,它都能很好地显示

但是我一直得到“Resource/classname/notfound”,其中/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一直在关注资源


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

As@RemyLebeau在德尔福论坛()上回答了一个类似的问题:

您正在调用调用DFM流的TForm构造函数。原因 它在非FMX应用程序中不会失败,因为TCustomForm.Create()过滤器 专门输出TForm,这样它就不会尝试流式传输。在FMX中,TCommonCustomForm.Create() 过滤掉TCommonCustomForm而不是TForm,这就是为什么您的TForm会 FMX正在尝试流式传输自己

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

FRM := TForm.CreateNew(Application);

正如@RemyLebeau在delphi论坛()中回答了一个类似的问题:

您正在调用调用DFM流的TForm构造函数。原因 它在非FMX应用程序中不会失败,因为TCustomForm.Create()过滤器 专门输出TForm,这样它就不会尝试流式传输。在FMX中,TCommonCustomForm.Create() 过滤掉TCommonCustomForm而不是TForm,这就是为什么您的TForm会 FMX正在尝试流式传输自己

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

FRM := TForm.CreateNew(Application);