如何在Delphi Firemonkey中创建多表单应用程序?

问题描述 投票:0回答:1

在德尔福 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;

但这会导致访问冲突错误。

正确的做法是什么?

delphi firemonkey multiple-forms
1个回答
0
投票

我认为问题在于

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;

`已加载 开始

© www.soinside.com 2019 - 2024. All rights reserved.