繁体   English   中英

Delphi 2009 - 检测是否安装了组件

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM