将组件添加到表单时如何自动添加 Delphi 单元? [复制]

Posted

技术标签:

【中文标题】将组件添加到表单时如何自动添加 Delphi 单元? [复制]【英文标题】:How are Delphi units automatically added when a component is added to a form? [duplicate] 【发布时间】:2014-01-05 18:25:55 【问题描述】:

如果我从 IDE 向表单添加 TXMLDocument,则会自动添加单元 Xml.XMLDoc, Xml.xmldom, Xml.XMLIntf, Xml.Win.msxmldom(在保存/编译时),IDE 如何知道添加这些单元。我明白为什么/如何添加XMLDoc(它包含TXMLDocument),但其他人呢。

此外,如果我将 DOMVendor 从 MSXML 更改为 ADOM XML v4,Xml.adomxmldom 会自动添加(在下一次编译时)。此时我可以删除Xml.Win.msxmldom 而不会自动添加回来。 IDE 如何根据组件属性知道这一点?

我问这个问题有两个原因,首先是好奇,其次我正在清理大量单元(数百个)的使用部分。该项目使用 DevExpress,它向用户添加大量附加文件 - 例如添加 TcxSpinEdit 然后添加 cxSpinEdit, cxGraphics, cxControls, cxLookAndFeels, cxLookAndFeelPainters, cxContainer, cxEdit, cxTextEdit, cxMaskEdit。我想尽量减少从表单中删除控件的使用子句(但它们的单元仍在使用中),因此需要了解更好地添加它们的过程。

【问题讨论】:

IDE 还在保存模块之前填充 uses 子句。 这有点离题,但 CNPack 提供了一个很好的 Uses 子句清洁器 ... @HughJones 是的,这就是我正在使用的,尽管它无法在我的许多单元中正确清理使用(删除/留下额外字符),但对于检测来说效果很好。还有 Icarus,其中包括指示何时可以将单元从接口移动到实现。 请注意您添加到问题中的标签。 “测量单位”与德尔福“单位”不同。 @Alister - 什么版本的德尔福?我问是因为我一直在 Delphi 5 项目中使用它。我认为这就是 CNPack 出现奇怪错误的原因。 【参考方案1】:

组件可以安排它们在设计器中的存在强制将特定单元添加到单元的使用子句中。他们通过调用RegisterSelectionEditor 注册他们的TSelectionEditor 子类来做到这一点。这些子类覆盖TSelectionEditor.RequiresUnits 并在那里指定必须添加的单位。

例如:

uses
  DesignEditors;
....
type
  TMySelectionEditor = class(TSelectionEditor)
  public
    procedure RequiresUnits(Proc: TGetStrProc); override;
  end;

procedure TMySelectionEditor.RequiresUnits(Proc: TGetStrProc);
begin
  Proc('MyUnit');
end;

procedure Register;
begin
  RegisterSelectionEditor(TMyComponent, TMySelectionEditor);
end;

【讨论】:

以上是关于将组件添加到表单时如何自动添加 Delphi 单元? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

delphi中,如何向dbgrid中添加数据记录并自动刷新

为啥我的组件会自动将其他单元添加到使用界面?

将 TForm 分配给一个变量 Delphi 以在其他单元中使用

delphi DBGrid里面的值如何自动更新

delphi6,能否在DBGrid组件中,对某一列的单元格,添加下拉菜单,实现多选功能

如何在delphi中实现对文件进行base64编码