如何解决将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;
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。