我能检查已安装的Indy版本吗?

7

我需要使用最新的Indy组件库版本。有没有一些源代码命令或其他技巧可以获取库版本,以确保我正在使用正确的库。 我知道我正在使用的是indy....160.bpl - 这是在鼠标移动到组件栏上时我的Delphi XE2显示出来的。我从Fulgan Indy获取最新的INDY库。

2个回答

18
如何在运行时使用Indy组件获取Indy版本?
正如@Remy在评论中指出的那样,您可以使用Version属性从任何Indy组件中获取Indy版本。以下是使用TIdHTTP组件的示例:
procedure TForm1.Button1Click(Sender: TObject);
begin
  ShowMessage('Indy version: ' + IdHTTP1.Version);
end;

如何在运行时获取Indy版本而不使用Indy组件?
您可以以Indy版本格式获取整个版本字符串:
<major>.<minor>.<release>.<build>

IdGlobal.pas单元中包含的IdVers.inc文件定义的gsIdVersion常量中获取,方法如下:

uses
  IdGlobal;

procedure TForm1.Button1Click(Sender: TObject);
begin
  ShowMessage('Indy version: ' + gsIdVersion);
end;

如果您拥有自2012年10月25日(4850)以来的Indy版本,则可以使用单独的版本信息元素,这些元素在与之前提到的相同的包含文件中定义,例如:
uses
  IdGlobal;

procedure TForm1.Button1Click(Sender: TObject);
begin
  ShowMessage('Indy version: ' +
    IntToStr(gsIdVersionMajor) + '.' +
    IntToStr(gsIdVersionMinor) + '.' +
    IntToStr(gsIdVersionRelease) + '.' +
    IntToStr(gsIdVersionBuild)
  );
end;

如何在设计时获取Indy的版本?
要在设计时获取Indy版本,您可以简单地右键单击任何放置在窗体上的Indy组件,并通过“关于Internet Direct(Indy)...”菜单项打开其“关于”框。
版本信息定义在哪里?
正如我之前提到的,它存储在库的..\Lib\System\文件夹中的IdVers.inc包含文件中,这可能是获取Indy版本信息的下一个选项。
免责声明
这里提到的一些内容适用于此时Indy的最新版本,但我不确定它是否也适用于所有旧版本(例如Indy 9)。

第一个版本对我来说运行良好,第二个解决方案失败了,因为找不到gsIdVersionMajor。我应该包含其他库吗? - user1769184
检查了我的inc文件,版本2无法工作的原因是这些常量在此处未定义。 - user1769184
现在看修订历史,Remy 在2012年10月25日添加了这些 gsIdVersionXXX 常量,所以这是一个相当新的东西。我会把这个信息包含在帖子里。 - TLama
1
@TLama:gsIdVersionXXX 宏定义在 Indy 10 的公共 trunk 分支中未定义。它们是在 DelphiNextGen 分支中定义的,该分支尚未对公众开放使用。 - Remy Lebeau
1
@TLama:顺便说一下,你错过了一个选项。每个Indy组件都有一个公共的“IndyVersion”属性可用,而不是直接使用“gsIdVersion”,该属性返回版本字符串(这与设计时About对话框显示的属性值相同)。 - Remy Lebeau
显示剩余2条评论

2
如果你的应用程序已经有一个继承了TIdBaseComponent的Indy组件实例,你可以通过以下方式简单地获取版本信息:
Version := SomeIndyComponent.Version;

在当前版本中,此函数将返回10.5.9.0


GetIndyVersion() 是公共属性 IndyVersion 的访问器。请使用该属性来获取版本信息,而不是直接使用访问器:Version := SomeIndyComponent.IndyVersion; - Remy Lebeau
2
@Remy,感谢您在我的帖子中留言。但无论如何,它被称为Version,而不是IndyVersion。[+1] - TLama

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接