gpt4 book ai didi

delphi - 如何使用泛型创建不同类型的 MDI 子项?

转载 作者:行者123 更新时间:2023-12-04 09:46:06 29 4
gpt4 key购买 nike

我需要将 MDI 子窗体的创建集中到 Delphi (VCL) 中的一个独特过程中。这个想法是每次创建 MDI 子窗体时执行一些操作,无论其类型如何,即将其标题名称添加到列表中以访问该 MDI 子窗体。像这样:

   procedure TMainForm<T>.CreateMDIChild(const ACaption : String);
var
Child: T;
begin
{ create a new MDI child window }
Child := T.Create(Application);
Child.Caption := ACaption;
// add this child to the list of active MDI windows
...
end;

procedure TMainForm.Button1Click(Sender : TObject);
begin
CreateMDIChild<TMdiChild1>('Child type 1');
CreateMDIChild<TMdiChild2>('Child type 2');
...

但是,我没有泛型的经验。任何帮助我将不胜感激。
非常感谢。

最佳答案

您可以使用类约束定义一个类来创建通用的表单(使用泛型),如下所示:

TGenericMDIForm <T:TForm> = class
class procedure CreateMDIChild(const Name: string);
end;

有了这个实现:
class procedure TGenericMDIForm<T>.CreateMDIChild(const Name: string);
var
Child:TCustomForm;
begin
Child := T.Create(Application);
Child.Caption := Name + ' of ' + T.ClassName + ' class';
end;

现在,您可以使用它来创建 MDICil 表单不同的类:
procedure TMainForm.Button1Click(Sender: TObject);
begin
TGenericMDIForm<TMdiChild>.CreateMDIChild('Child type 1');
TGenericMDIForm<TMdiChild2>.CreateMDIChild('Child type 2');
end;

使用 class constraint与通用 TGenericMDIForm <T:TForm> = class ,你可以避免有人尝试使用这样的东西 TGenericMDIForm<TMemo>.CreateMDIChild('Child type 1');类不是 TForm后裔。

关于delphi - 如何使用泛型创建不同类型的 MDI 子项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62105235/

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