user-interface - Delphi:如何将 VCL 表单嵌入到面板中
问题描述
窗体“Form1”包含一个面板。
在这个面板上,我们要嵌入第二个表单“Form2”。
但不仅要嵌入组件,还要嵌入功能。
我正在使用 VCL 表单。
我已经在这个页面上尝试过这个教程。
unit parent;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.ExtCtrls, child;
type
TForm1 = class(TForm)
Panel1: TPanel;
procedure FormCreate(Sender: TObject);
private
{ Private-Deklarationen }
public
{ Public-Deklarationen }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
Form2 := TForm2.Create(Panel1);
with Form2 do
Name := 'MyForm';
Parent := Panel1;
Width := 500;
Height := 500;
Top := 10;
Left := 10;
Show;
end;
end.
unit child;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls;
type
TForm2 = class(TForm)
btnCalc: TButton;
Edit1: TEdit;
Edit2: TEdit;
Edit3: TEdit;
Label1: TLabel;
procedure btnCalcClick(Sender: TObject);
private
{ Private-Deklarationen }
public
{ Public-Deklarationen }
end;
var
Form2: TForm2;
implementation
{$R *.dfm}
procedure TForm2.btnCalcClick(Sender: TObject);
begin
edit3.Text:=edit1.Text+edit2.Text;
end;
end.
该窗体在启动时不显示,并且 Form2 未嵌入在 Form1 中。
解决方案
为了将来参考,当您发布有关代码的问题时,复制粘贴实际代码并告知可能显示的错误。
在您的问题的第一版中,您的代码Form1
在相同形式的构造函数中重新创建。一段时间后,程序因资源不足错误而失败。
在您的第二版中,您更正了对代码的错误引用,Form1
但Form2
仍然缺少一begin .. end
对围绕您要设置的属性的with Form2 do
. 此错误会导致堆栈溢出,因为您将Form1
parent设置Panel1
为 的子级Form1
,因此陷入了鸡蛋-鸡蛋困境。
因为您没有提及这些错误中的任何一个,所以只能得出结论,您的代码与您发布的代码不同,或者您认为错误消息并不重要。错误的!因此,请认真学习并注意发布实际代码并告知任何错误消息。
此外,如果您的问题是关于表单的外观,请发布.dfm
文件内容。
使用以下代码Form2
显示嵌入Panel1
(Form1
我删除了宽度和高度设置以保持图像更小):
procedure TForm1.FormCreate(Sender: TObject);
begin
Form2 := TForm2.Create(Panel1);
with Form2 do
begin
Name := 'MyForm';
Parent := Panel1;
Top := 10;
Left := 10;
Show;
end;
end;
Top
和Left
属性看起来不像预期的那样。这是因为该TForm.Position
属性的默认值是poDefaultPosOnly
这意味着表单绕过Top
和Left
设置并将其留给操作系统来决定位置。然而,由于表单被赋予了一个不适用的父级,并且表单只是放置在位置 0,0。在下面添加有关position
属性的行(或在Form2
设计器中设置)。
...
Parent := Panel1;
Position := poDesigned; // add this line
BorderStyle := bsNone; // and this for a better embedded appearance
Top := 10;
...
结果现在是:
推荐阅读
- angular - 使用 getDataAsExcel 将 Ag-Grid 表导出到 Excel 时无法将字符串列/数据解析为数值
- javascript - 将 javascript 字典读入 Python
- c# - 被认为是“some.dll”,但它不存在
- ios - Fastlane 没有这样的文件或目录存在的文件
- python - Django测试在响应状态码404上抛出错误
- swift - 使用 SwiftUI 时如何检查应用程序是否在 Apple Watch 上进入后台
- python - 删除数据框中字符后的所有内容
- python - 正则表达式,用于获取括号之间的所有内容,包括括号
- google-analytics - 我可以将设备类别与 Google Analytics(分析)中的命中级别指标结合起来吗?
- c# - System.IO.FileNotFoundException - 无法在项目文件夹中创建 XML 文件