Delphi 2009 - 检测是不是安装了组件
Posted
技术标签:
【中文标题】Delphi 2009 - 检测是不是安装了组件【英文标题】:Delphi 2009 - Detect if component installedDelphi 2009 - 检测是否安装了组件 【发布时间】:2011-01-14 23:59:31 【问题描述】:我得到了一些与其他开发人员共享的代码。我有一个很好的调试模块,我在单元测试中省略了它,但他没有这个,所以这是一场不断添加和删除代码的战斗。
如果有一种方法可以使用条件(很像 Delphi 版本或 Unicode),那就太好了
$IfDef MYComponent
MyComponent := TMyComponent.Create;
MyComponent.Logging := true;
$EndIf
我想我可以将我的 ide 设置为定义一些东西,但我想知道是否有办法检测组件是否已安装.....
【问题讨论】:
对于您描述的用途,您不需要安装组件。有源代码(首选)或 DCU(不太理想)就足够了。 【参考方案1】:试试这个(它应该适用于 Delphi 6 之后的所有版本):
$IF DECLARED(TMyComponent)
$IFEND
然后您可以简单地更新您的使用列表以使该组件可见或不可见。
【讨论】:
【参考方案2】:您可以让他使用只有存根实现的组件单元。例如:
type
TMyComponent = class
procedure DoSomething();
end;
procedure TMyComponent.DoSomeThing();
begin
//no-op
end;
如果您想使用不同的单元名称,您可以使用 Delphi 的单元别名选项,位于项目选项 -> 目录和条件 -> 单元别名:为单元 UnitMyComponent -> UnitDummyMyComponent 添加别名。
您现在可以使用至少没有 ifdef 的代码!
【讨论】:
【参考方案3】:不完全是 ifdefs,但你可以使用类继承和测试来查看你是否应该采取行动。您仍然希望进行某种代理设置,以便您和其他开发人员都可以编译......只是您的版本具有代理的附加目标。例如:
在两个开发人员所拥有的“共享”单元中会是这样的:
type
TMyComponent = class
public
procedure DoSomething; virtual;
end;
var
MyComponent : TMyComponent;
procedure TMyComponent.DoSomething;
begin
// stubbed
end;
在您的“特殊”单元中,您将拥有以下代码:
type
TMyRealComponent = Class(tMyComponent)
public
procedure DoSomething; override;
end;
procedure TMyRealComponent.DoSomething;
begin
// do the real process here
end;
initialization
MyComponent := TMyRealComponent.Create;
finalization
if Assigned(MyComponent) then
MyComponent.Free;
end.
在你的代码中,当你想看看它是否可以做一些你可以写的事情时:
if Assigned(MyComponent) then
MyComponent.DoSomething;
如果您想禁用此调试代码,请从项目中删除特殊单元。
【讨论】:
以上是关于Delphi 2009 - 检测是不是安装了组件的主要内容,如果未能解决你的问题,请参考以下文章