gpt4 book ai didi

delphi - 我如何制定创建表单的程序?

转载 作者:行者123 更新时间:2023-12-02 18:05:21 25 4
gpt4 key购买 nike

我有这个程序:

procedure TForm1.Button1Click(Sender: TObject);
var
a:TForm2;
begin
a := TForm2.Create(Self);
a.Parent := ScrollBox1;
a.Align := alClient;
a.Show;
a.SetFocus;
end;

我将上面的代码更改为这个,但我收到一个错误,为什么?我必须将此代码更改为?

procedure TForm1.MakeAform(aForm:Tform;Cmp:TComponent;Parent1:TWinControl;Align1:TAlign);
var
a:aForm; // Error Here
begin
a := aForm.Create(Cmp);
a.Parent := Parent1;
a.Align := Align1;
a.Show;
a.SetFocus;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
MakeAform(Tform2,Self,Panel1,alClient);
end;

最佳答案

您的原始代码将一个类 (TForm2) 传递给接收实例 (aForm) 的过程。事实上,这个实例甚至没有初始化,但这实际上不是你的问题。

您需要做的是在 MakeAform 中接收一个类而不是一个实例。

您的代码应该是:

//note, in Forms.pas the type TFormClass is defined as:
// TFormClass = class of TForm;
//
//A variable of TFormClass holds a class (rather than an instance)
//and that class must be derived from TForm.

procedure TForm1.MakeAform(
FormClass: TFormClass;
Owner: TComponent;
Parent: TWinControl;
Align: TAlign
);
var
a: TForm;
begin
a := FormClass.Create(Owner);
a.Parent := Parent;
a.Align := Align;
a.Show;
a.SetFocus;
end;

还有几点:

  1. a.SetFocus 的目的是什么?我不知道表单可以保持焦点。
  2. 如果您不打算在构建此表单后重新设置该表单的父级,那么您也可以取消 Owner 参数并让 Parent 拥有该表单。

关于delphi - 我如何制定创建表单的程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4773253/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com