gpt4 book ai didi

delphi - 将 Delphi VCL 设计时包放入表单时如何自动包含文件

转载 作者:行者123 更新时间:2023-12-03 20:24:43 24 4
gpt4 key购买 nike

我在 Delphi 中围绕 TWebBrowser 构建了一个包装器。包装器旨在将多个 Web 浏览器(边缘 Chrome 、 Chrome 等)实现到单个包装器中,该包装器自动检测要使用的浏览器。
完成类(class)后,我将所述类(class)转换为 VCL 组件并将其加载到设计时包中。我的组件只包含两个文件,包装器本身和一个实用程序类。当我将组件从工具选项板拖到 VCL 表单上时,包装器和实用程序类不会自动添加到项目中。这意味着我必须手动将包装器和实用程序都包含到项目中。
我希望有一种方法可以在将包装器添加到表单时自动将这两个文件包含到项目中。我想我以前在我使用过的其他第三方组件中看到过这一点,但我的内存可能让我失望。
如果这是可以完成的事情,我的假设是它将位于 VCL 组件的寄存器部分。

procedure Register;
begin
RegisterComponents('My Wrappers', [TWebBrowserWrapper]);
end;
因为这是我认为在设计时运行的代码。

最佳答案

让您的设计时包实现一个继承自 TSelectionEditor 的类并覆盖其虚拟 RequiresUnits() 方法,然后使用 RegisterSelectionEditor() 为您的组件注册该类.这样,每当您在设计时将组件放置到 Form/Frame/DataModule Designer 上时,您从 RequiresUnits() 报告的任何其他单元。将自动添加到该单位的 uses保存单位时的条款。
例如:

uses
..., DesignIntf;

type
TWebBrowserWrapperSelectionEditor = class(TSelectionEditor)
public
procedure RequiresUnits(Proc: TGetStrProc); override;
end;

procedure TWebBrowserWrapperSelectionEditor.RequiresUnits(Proc: TGetStrProc);
begin
inherited RequiresUnits(Proc);
// call Proc() for each additional unit you want added...
Proc('MyWrapperUnit');
Proc('MyUtilityUnit');
end;

procedure Register;
begin
RegisterComponents('My Wrappers', [TWebBrowserWrapper]);
RegisterSelectionEditor(TWebBrowserWrapper, TWebBrowserWrapperSelectionEditor);
end;

关于delphi - 将 Delphi VCL 设计时包放入表单时如何自动包含文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63493462/

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