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

Alo*_*mer 6 delphi delphi-2006

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

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

MAINICON icon "resource\icons\Version1.ico"
Run Code Online (Sandbox Code Playgroud)

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

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

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

Alo*_*mer 5

感谢 David Heffernan 的评论,我找到了解决方案。我最终得到以下结果:

  • 在 IDE 中,我删除了项目选项下的“包含版本信息”并{$R *.res}在项目文件中删除。
  • 我删除了文件 MyProject.res
  • 我添加了一个包含versioninfo.rc以前在 IDE 中提供的信息的文件,如此处所述
  • 我添加了文件icon_version1.rcicon_version2.rc,看起来像这样:

    LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL
    MAINICON icon "..\resources\icons\version1.ico"
    
    Run Code Online (Sandbox Code Playgroud)
  • 我向我的项目添加了一个文件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.
    
    Run Code Online (Sandbox Code Playgroud)
  • 我修改了现有脚本compile_resources.bat来编译附加资源文件。

现在,如果我定义VERSION1,我的应用程序就有图标icon_version1.ico,否则icon_version2.ico。需要注意的是:如果版本信息(或图标)被修改,我必须运行compile_resources.bat以反映更改。