【问题标题】:Can I check the Indy version installed?我可以检查安装的 Indy 版本吗?
【发布时间】:2013-01-03 13:50:24
【问题描述】:

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

【问题讨论】:

    标签: delphi delphi-xe2 indy


    【解决方案1】:

    如何在运行时使用 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 组件,然后通过 About Internet Direct (Indy)... 菜单项打开其 About 框。

    版本信息定义在哪里?

    正如我之前提到的,它位于库的 ..\Lib\System\ 文件夹中的 IdVers.inc 包含文件中,它可能是如何获取 Indy 版本信息的下一个选项。

    免责声明

    这里提到的一些内容目前适用于 Indy 的最新版本,但我不确定它是否也适用于所有旧版本(例如 Indy 9)。

    【讨论】:

    • 第一个版本对我来说很好,第二个解决方案失败,因为找不到 gsIdVersionMajor。我应该包括任何其他图书馆
    • 检查了我的inc文件,为什么版本2不起作用,这些常量在这里定义了
    • 现在查看修订历史,Remy 在 2012 年 10 月 25 日添加了那些 gsIdVersionXXX 常量,所以这是一个相当新的东西。我会将这些信息包含在帖子中。
    • @TLama:gsIdVersionXXX 定义未在 Indy 10 的 SVN 存储库的公共 trunk 分支中定义。它们是在 DelphiNextGen 分支中定义的,目前尚未公开使用。
    • @TLama:顺便说一句,你错过了一个选项。每个 Indy 组件都没有直接使用gsIdVersion,而是有一个公共的IndyVersion 可用属性,它返回版本字符串(这与设计时关于对话框显示的属性值相同)。
    【解决方案2】:

    如果你的应用已经有一个 Indy 组件的实例(它继承了 TIdBaseComponent),你可以简单地通过

    Version := SomeIndyComponent.Version;
    

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

    【讨论】:

    • GetIndyVersion() 是公共 IndyVersion 属性的吸气剂。使用属性,而不是直接使用 getter:Version := SomeIndyComponent.IndyVersion;
    • @Remy,感谢您在我的帖子中的说明。但无论如何,它被称为Version,而不是IndyVersion。 [+1]
    猜你喜欢
    • 2014-12-23
    • 1970-01-01
    • 2016-12-02
    • 1970-01-01
    • 1970-01-01
    • 2019-10-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多