在德尔福 10.2 中。使用 Firemonkey 作为 Windows 10/11 桌面应用程序,我想创建某种图像处理应用程序。
应用程序的主窗体有一个显示图像的
TImage
。
我使用带有一些控件的第二种形式,以便用户可以更改
TImage
位图的一些参数。用户所做的任何更改都会直接显示在TImage
中。
第二种控制形式并不总是可见的,应该是非模态的。
我以编程方式创建控件表单:
procedure TMainForm.FormCreate(Sender: TObject);
begin
BorderStyle:=TFmxFormBorderStyle.Sizeable;
WindowState:=TWindowState.wsMaximized;
FControlForm:=TControlForm.Create(Application);
FControlForm.Parent:=Self;
end;
这不显示控件形式。所以我尝试添加
FControlForm.Show;
:
procedure TMainForm.FormCreate(Sender: TObject);
begin
BorderStyle:=TFmxFormBorderStyle.Sizeable;
WindowState:=TWindowState.wsMaximized;
FControlForm:=TControlForm.Create(Application);
FControlForm.Parent:=Self;
FControlForm.Show; //access violation error
end;
但这会导致访问冲突错误。
正确的做法是什么?
我认为问题在于
Application.CreateForm(TMainForm, MainForm)
不创建表单。来自帮助:
CreateForm 不会立即创建给定的表单。它只是将请求添加到待处理列表中。 RealCreateForms 创建真实的表单。
所以
Application.CreateForm(TMainForm, MainForm)
不是构建第二种形式的正确位置。
如果您必须以这种方式构建控件表单,我建议如下:
TMainForm.CreateControlForm;
.
.
TMainForm.CreateControlForm;
begin
BorderStyle:=TFmxFormBorderStyle.Sizeable;
WindowState:=TWindowState.wsMaximized;
FControlForm:=TControlForm.Create(Application);
FControlForm.Parent:=Self;
FControlForm.Show; //access violation error
end;
TMainForm.Loaded;
Inherited;
CreateControlForm;
end;
`已加载 开始