将Delphi VCL设计时软件包放入表格中时如何自动包含文件

问题描述

我在Delphi中围绕TWebBrowser构建了一个包装器。包装器旨在将多个Web浏览器(边缘铬,铬等)实施到单个包装器中,该包装器会自动检测要使用的浏览器。

完成课程后,我将所述课程转换为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;

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...