使用Delphi 2006有条件地更改应用程序图标

时间:2015-08-17 09:51:02

标签: delphi delphi-2006

我想生成两个不同版本的应用程序,基于DEFINE的不同图标。 我成功地根据定义包含了不同的资源文件,但我无法摆脱项目默认.res文件中的MAINICON

我添加了一个资源Version1.rc文件,其中包含以下行:

MAINICON icon "resource\icons\Version1.ico"

但是如果我尝试使用IDE编译MyProject,我总会收到以下错误:

  

E2161重复资源:类型14(ICON GROUP),ID MAINICON;文件   保留C:\ MyProject \ Version1.RES资源;文件   C:\ MyProject \ MyProject.RES资源被丢弃。

我尝试使用资源编辑器编辑MyProject.res并删除MAINICON,但delphi似乎会自动重新创建包含图标的文件。

1 个答案:

答案 0 :(得分:4)

由于David Heffernan的评论,我找到了解决方案。我最终得到了以下内容:

  • 在IDE中,我删除了"包含版本信息"在项目选项下,并删除了项目文件中的{$R *.res}
  • 我删除了文件MyProject.res
  • 我添加了一个文件versioninfo.rc,其中包含我之前在IDE中提供的信息,如here所述。
  • 我添加了文件icon_version1.rcicon_version2.rc,如下所示:

    LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL
    MAINICON icon "..\resources\icons\version1.ico"
    
  • 我在项目中添加了一个文件Resources.pas,如下所示:

    unit Resources;
    
    interface
    
    implementation
    
    {$IFDEF VERSION1}
        {$R ICON_VERSION1.RES} //from ICON_VERSION1.RC
    {$ELSE}
        {$R ICON_VERSION2.RES} //from ICON_VERSION2.RC
    {$ENDIF}
    
    {$R VERSIONINFO.RES}  //from VERSIONINFO.RC
    
    end.
    
  • 我修改了现有脚本compile_resources.bat以编译其他资源文件。

现在,如果我定义VERSION1,我的应用程序会显示图标icon_version1.ico,否则为icon_version2.ico。一个警告:如果修改了版本信息(或图标),我必须运行compile_resources.bat以反映更改。