[英]Delphi 2009 - Detect if component installed
我得到了一些与其他开发人员分享的代码。 我有一个很好的调试模块,我通过单元测试,但他没有这个,所以这是一个不断添加和删除代码的战斗。
如果有一种方法可以使用条件(很像Delphi版本或Unicode),那就太好了
{$IfDef MYComponent}
MyComponent := TMyComponent.Create;
MyComponent.Logging := true;
{$EndIf}
我想我可以设置我的ide定义一些东西,但我想知道是否有办法检测组件是否已安装.....
试试这个(自Delphi 6以来应该适用于所有版本):
{$IF DECLARED(TMyComponent)}
{$IFEND}
然后,您可以简单地更新您的使用列表,以使该组件可见或不可见。
您可以让他使用仅具有存根实现的组件单元。 例如:
type
TMyComponent = class
procedure DoSomething();
end;
procedure TMyComponent.DoSomeThing();
begin
//no-op
end;
如果要使用不同的单元名称,可以使用位于项目选项中的Delphi中的单元别名选项 - >目录和条件 - >单元别名:为单元UnitMyComponent - > UnitDummyMyComponent添加别名。
您现在可以使用至少ifdef免费的代码!
不完全是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;
如果要禁用此调试代码,请从项目中删除特殊单元。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.