gpt4 book ai didi

Delphi子类化可视化组件并使用它

转载 作者:行者123 更新时间:2023-12-03 14:49:28 25 4
gpt4 key购买 nike

我想使用另一个名为 MyTToolBar 的类对 TToolBar 进行子类化,以便我可以重写方法。我是 Delphi 的新手,但是经过两个小时的尝试各种方法后,我无法使用 MyTToolBar 来代替 TToolBar。我不可能是第一个想要重写可视组件类上的方法的人。

我有 Xcode 背景,在该背景下,对可视组件进行子类化很容易。您创建父类(例如,MySuperClass)的子类(例如,MySubclass),然后只需在 Xcode 的 Interface Builder View 中分配子类即可。子类被自动识别并使用。

为什么我在 Delphi RAD Studio XE3 中似乎无法执行此操作?

将 TToolBar 添加到 TForm 后,似乎无法更改该类。我尝试通过对象检查器以及 .PAS 源代码文件。如果我更改 .PAS 文件中的类,我会收到一条错误消息,指出工具栏“应该是 Vcl.ComCtrls.TToolBar 类型,但声明为 MyTToolbar。更正声明吗?”这看起来很愚蠢......

哦,我还使用了新组件向导,选择:文件 -> 新建 -> 其他 -> Delphi 项目 -> Delphi 文件 -> 组件。我选择 MyTToolBar 的祖先作为 TToolBar 并告诉它在“Samples”调色板页面中注册。但是,它不会出现在“示例”页面中。

最佳答案

与 XCode 方法最接近的等效方法是在 Delphi 中使用“插入器”类。基本上,您不需要更改 IDE 为标准 TToolBar 用法创建的代码。相反,您可以声明一个派生自标准 TToolBar 组件但也命名为 TToolBar 的新类,并使其对编译器标准之后可见TToolBar 已声明。编译器最后看到的 TToolBar 类将是每当 TForm DFM 流式传输时实例化的实际类类型。

您可以通过以下两种不同方式之一使编译器在标准 TToolBar 类之后看到自定义 TToolBar 类:

  1. 在与 TForm 类相同的单元中声明自定义 TToolBar 类:

    unit MyForm;

    interface

    uses
    ..., Vcl.ComCtrls, ...;

    type
    TToolBar = class(Vcl.ComCtrls.TToolBar)
    // override what you need...
    end;

    TMyForm = class(TForm)
    ToolBar1: TToolBar; // <-- do not change this!
    ...
    end;

    implementation

    // implement custom TToolBar as needed...

    // normal TForm implementation code as needed ...

    end.
  2. 您可以在其自己的单元中声明自定义 TToolBar 类,然后将其添加到 TForm 单元的 uses 子句之后添加了 ComCtrls 单元:

    unit MyToolBar;

    interface

    uses
    ..., Vcl.ComCtrls;

    type
    TToolBar = class(Vcl.ComCtrls.TToolBar)
    // override what you need...
    end;

    implementation

    // implement custom TToolBar as needed...

    end.

    .

    unit MyForm;

    interface

    uses
    ..., Vcl.ComCtrls, ..., MyToolBar;

    type
    TMyForm = class(TForm)
    ToolBar1: TToolBar; // <- do not change this!
    ...
    end;

    implementation

    // normal TForm implementation code as needed ...

    end.

此方法仅适用于每个项目。如果您想在多个项目中使用自定义 TToolBar 类,那么最好将其安装到 IDE 中,就像 @KenWhite 描述的那样,并使用它而不是标准 TToolBar。返回将其命名为 TMyToolBar (或其他名称),不要再将其命名为 TToolBar,因为它不会用作插入器。确保该包在其项目选项中被标记为“运行时和设计时”(创建单独的仅运行时和设计时包超出了本讨论的范围)。 TMyToolBar 将在设计时提供,您可以像任何其他组件一样将其放置在 TForm 上。如果不是,那么您的设置不正确。

关于Delphi子类化可视化组件并使用它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14783400/

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