有条件地更改应用程序图标 Delphi 2006
Conditionally change application icon with Delphi 2006
我想生成我的应用程序的两个不同版本,它们具有基于 DEFINE 的不同图标。
我成功地根据定义包含了不同的资源文件,但我无法摆脱项目默认 .res 文件中的 MAINICON
。
我添加了一个包含以下行的资源 Version1.rc 文件:
MAINICON icon "resource\icons\Version1.ico"
但是如果我尝试使用 IDE 编译 MyProject,我总是会收到以下错误:
E2161 Duplicate resource: Type 14 (ICON GROUP), ID MAINICON; File
C:\MyProject\Version1.RES resource kept; file
C:\MyProject\MyProject.RES resource discarded.
我尝试使用资源编辑器编辑 MyProject.res
并删除了 MAINICON,但 delphi 似乎自动重新创建了包含图标的文件。
感谢 David Heffernan 的评论,我找到了解决方案。我最终得到以下结果:
- 在IDE中,我在项目选项下删除了"Include version info",在项目文件中删除了
{$R *.res}
。
- 我删除了文件MyProject.res
- 我添加了一个文件
versioninfo.rc
,其中包含我以前在 IDE 中提供的信息,如 here 所述。
我添加了文件 icon_version1.rc
和 icon_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
来反映这些变化。
我想生成我的应用程序的两个不同版本,它们具有基于 DEFINE 的不同图标。
我成功地根据定义包含了不同的资源文件,但我无法摆脱项目默认 .res 文件中的 MAINICON
。
我添加了一个包含以下行的资源 Version1.rc 文件:
MAINICON icon "resource\icons\Version1.ico"
但是如果我尝试使用 IDE 编译 MyProject,我总是会收到以下错误:
E2161 Duplicate resource: Type 14 (ICON GROUP), ID MAINICON; File C:\MyProject\Version1.RES resource kept; file C:\MyProject\MyProject.RES resource discarded.
我尝试使用资源编辑器编辑 MyProject.res
并删除了 MAINICON,但 delphi 似乎自动重新创建了包含图标的文件。
感谢 David Heffernan 的评论,我找到了解决方案。我最终得到以下结果:
- 在IDE中,我在项目选项下删除了"Include version info",在项目文件中删除了
{$R *.res}
。 - 我删除了文件MyProject.res
- 我添加了一个文件
versioninfo.rc
,其中包含我以前在 IDE 中提供的信息,如 here 所述。 我添加了文件
icon_version1.rc
和icon_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
来反映这些变化。