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

时间:2010-02-09 20:42:11

标签: delphi components delphi-2009

我收到了一些与其他开发者分享的代码。我有一个很好的调试模块,我通过单元测试,但他没有这个,所以这是一个不断添加和删除代码的战斗。

如果有一种方法我们可以使用条件(很像Delphi版本或Unicode),那会很好吗

  {$IfDef MYComponent}
    MyComponent := TMyComponent.Create;
    MyComponent.Logging := true;
  {$EndIf}

我想我可以将我的ide设置为Define something,但我想知道是否有办法检测组件是否已安装......

3 个答案:

答案 0 :(得分:10)

试试这个(自Delphi 6以来应该适用于所有版本):

{$IF DECLARED(TMyComponent)}
{$IFEND}

然后,您只需更新您的使用列表即可使该组件可见。

答案 1 :(得分:2)

您可以让他使用仅具有存根实现的组件单元。例如:

type
  TMyComponent = class
    procedure DoSomething();
  end;

procedure TMyComponent.DoSomeThing();
begin
  //no-op
end;

如果您想使用不同的单位名称,可以使用位于项目选项中的Delphi中的单位别名选项 - >目录和条件 - >单位别名:为单位UnitMyComponent添加别名 - > UnitDummyMyComponent。

您现在可以使用至少ifdef free的代码!

答案 2 :(得分:0)

不完全是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;

如果要禁用此调试代码,请从项目中删除特殊单元。