【发布时间】:2015-08-17 15:33:13
【问题描述】:
我可以有一个自定义的可视化组件(一个稍微修改过的 TSpeedButton),它可以被拖到表单中并且只存在于某个项目中,而不需要在 Delphi 范围内注册?我也不想使用 TFrame 模拟按钮。它不应该对其他 Delphi 项目可用。
【问题讨论】:
我可以有一个自定义的可视化组件(一个稍微修改过的 TSpeedButton),它可以被拖到表单中并且只存在于某个项目中,而不需要在 Delphi 范围内注册?我也不想使用 TFrame 模拟按钮。它不应该对其他 Delphi 项目可用。
【问题讨论】:
很遗憾,没有。在设计时使用该组件需要将其放入安装到 IDE 中的包中。但是,您可以根据需要在每个项目的基础上启用/禁用已安装的软件包。
【讨论】:
您也许可以使用所谓的插入器类。像这样定义您的自定义组件:
type
TSpeedButton = class(Buttons.TSpeedButton)
....
end;
注意类名与父类相同。这是使插入技术发挥作用所必需的。
将您的自定义设置放入此插入器类中。当您在设计器中构建 UI 时,请使用调色板中的 TSpeedButton。确保声明您的自定义组件的单元列在每个包含自定义组件之一的表单的使用子句中。
在流式传输表单的运行时,您的插入组件将被实例化,而不是原始组件。
这样做的缺点是您无法安排在设计时显示您的自定义。如果您需要设置 vanilla 组件中不存在的属性,则必须在运行时完成。这是您不想在 IDE 中安装任何东西的结果。
如果这种方法不能满足您的需求,那么您应该使用设计时包以通常的方式制作组件。如果您愿意,您可以安排该包仅包含在特定项目中。
【讨论】:
SpeedButton1: Vcl.Buttons.TSpeedButton; SpeedButton2: Unit1.TSpeedButton;可以吗?