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

8

我希望制作两个不同版本的应用程序,根据定义使用不同的图标。 我已经成功地包含了基于定义的不同资源文件,但是我无法摆脱我的项目默认.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似乎自动重新创建了包含该图标的文件。


不要让IDE管理MyProject.res。让您的构建脚本创建它。当然,我经常在这里建议,每次我这样做时,都会有多个人不同意。似乎只有我喜欢拥有可重复的构建过程,而不依赖于IDE...... - David Heffernan
@DavidHeffernan 目前我运行一个名为 compile_resources.bat 的脚本,然后在IDE中的项目组中点击 Build All。但是Delphi似乎会在这个过程中覆盖MyProject.res文件。我理解编写一个编译所有内容的脚本的价值,但我认为这将需要相当多的工作。另一方面,我也希望能够在IDE中设置一个定义,并生成正确的exe文件。 - Alois Heimer
你只需要从IDE接手就可以了。从.dpr文件中删除 {$R *.res} 这一行代码,然后你就可以继续进行了。另一方面,如果你更喜欢在IDE中构建,那么你将会为这些任务而挣扎。如果你仍然想要使用IDE进行开发,那么显然你有自己的选择。 - David Heffernan
@DavidHeffernan 您是正确的:如果我删除 {$R *.res},错误就会消失,而且我有了正确的图标。但版本信息、应用程序标题、语言信息等也都消失了。您是否有一个链接或示例rc文件,我可以使用它来生成我的自定义 MyProject.res? - Alois Heimer
只需查看IDE生成的.res文件,并在res文件编辑器中参考MSDN文档进行解码。 - David Heffernan
@DavidHeffernan 谢谢,我会看一下。如果您把您的评论发表为答案,我会接受的。 - Alois Heimer
1个回答

5

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

  • In the IDE I removed "Include version info" under project options and removed {$R *.res} in the project file.
  • I removed the file MyProject.res
  • I added a file versioninfo.rc with the information, that I formerly provided in the IDE, as described here.
  • I added the files icon_version1.rc and icon_version2.rc, that looked like this:

    LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL
    MAINICON icon "..\resources\icons\version1.ico"
    
  • I added a file Resources.pas to my project, that looked like this:

    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.
    
  • I modified my existing script compile_resources.bat to compile the additional resource files.

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

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