我正在将一个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继续关注资源。
请不要告诉我所有表格必须的设计?
答案 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);