Delphi 11.1编译时无法添加RC文件及图标资源问题求助
操作步骤与错误现象
- 生成
.rc文件,内容如下:
FILES ICON "D:\Documents\Embarcadero\Studio\Projects\Positron Studio\Icons And Images\PositronFiles.ico" PROJECTS ICON "D:\Documents\Embarcadero\Studio\Projects\Positron Studio\Icons And Images\PositronProjectFiles.ico"
- 在
.dpr文件中添加资源引用:
{$R 'PSResource.res' 'PSResource.rc'}
编译时出现重复资源警告,且生成的.res文件未包含新增图标:
[dcc64 Hint] H2161 Warning: Duplicate resource: Type 14 (ICON GROUP), ID FILES; File D:\Documents\Embarcadero\Studio\Projects\Positron Studio\PSResource.res resource kept; file D:\Documents\Embarcadero\Studio\Projects\Positron Studio\PSResource.res resource discarded. [dcc64 Hint] H2161 Warning: Duplicate resource: Type 14 (ICON GROUP), ID PROJECTS; File D:\Documents\Embarcadero\Studio\Projects\Positron Studio\PSResource.res resource kept; file D:\Documents\Embarcadero\Studio\Projects\Positron Studio\PSResource.res resource discarded.
- 尝试用资源编辑器直接将图标加入资源文件,资源虽在
.exe中,但无法通过Icon.LoadFromResourceName(Handle,'NAME')访问。
补充尝试与问题
- 移除所有
.rc文件引用及文件,通过「Project > Resources and Images」对话框添加图标,编译时出现错误:
[dcc64 Error] E2161 Error: RLINK32: Unsupported 16bit resource in file "D:\Documents\Embarcadero\Studio\Projects\Positron Studio\PositronStudio.dres"
图标包含RGB/A格式64x64、48x48及RGB 256格式48x48等分辨率图像,怀疑格式不兼容。
- 移除并重新加载图标后编译,
.res文件仍仅含应用图标,且出现警告:
[dcc64 Hint] H2161 Warning: Duplicate resource: Type 24 (user-defined), ID 1; File D:\Documents\Embarcadero\Studio\Projects\Positron Studio\PositronStudio.res resource kept; file D:\Documents\tmssoftware\TMS VCL UI Pack\WINXP.RES resource discarded.
- 重命名并移除所有WINXP.*文件引用后,无重复警告,但新增图标仍未出现在资源文件中,检查
.dproj未找到.rc及RCCompile相关配置。
解决方法
处理重复资源警告
修正资源引用方式:
Delphi会自动编译加入项目的.rc文件,无需在{$R}指令中同时指定.res和.rc——这会导致资源被重复链接。删除.dpr中的{$R 'PSResource.res' 'PSResource.rc'},改为{$R 'PSResource.res'},再通过「Project > Add to Project」将.rc文件加入项目,IDE会自动完成编译和链接。解决第三方组件资源冲突:
WINXP.RES的警告来自TMS组件包的资源与项目资源冲突。可通过「Project > Options > Resources and Images」找到冲突的资源,手动移除其中一个;或在组件配置中禁用该资源的自动链接。
解决资源无法加载/不生效问题
修复图标格式:
Delphi 11.1的资源链接器不支持16位色深的图标。用图标编辑工具(如IconWorkshop)重新导出图标,只保留32位(RGB/A)和8位(256色)的图像,分辨率选用系统标准尺寸(16x16、32x32、48x48、64x64等)。正确加载资源:
用资源编辑器添加图标时,确保资源类型为ICON,资源名称与代码中调用的完全一致(大小写敏感)。加载时改用应用程序实例句柄HInstance,比窗口句柄更可靠:Icon.LoadFromResourceName(HInstance, 'FILES');确保资源被正确编译:
通过「Project > Resources and Images」添加图标后,若.dproj未生成对应配置,可手动编辑.dproj添加以下内容:<ItemGroup> <ResourceCompile Include="PSResource.rc"/> </ItemGroup>或直接将
.rc文件加入项目,让IDE自动管理编译流程。
内容的提问来源于stack exchange,提问作者John Barrat

