我需要在项目中添加一些图标作为资源(在这种情况下我不能使用TImageList,因为TCoolTrayIcon中存在错误,我无法快速替换组件).
我创建了一个icons.rc脚本,将两个ico文件添加到Delphi资源文件中:
redicon ICON "c:\icon\red.ico"
greenicon ICON "c:\icon\green.ico"
Run Code Online (Sandbox Code Playgroud)
它编译好了到icons.res,所以我把它添加到我的Delphi 7项目的第一个单元:
{$R icons.res}
Run Code Online (Sandbox Code Playgroud)
然后我将句柄存储在MainForm的OnCreate()中:
hRedIcon := LoadIcon(hInstance,'redicon');
hGreenIcon := LoadIcon(hInstance,'greenicon');
Run Code Online (Sandbox Code Playgroud)
然后使用手柄就好了.
现在问题 - 在这之后,项目选项中添加的项目图标(大小为16x16到48x48)被替换为{$ R icons.res}中添加的第一个图标(16x16 redicon).
怎么预防这个?如何在不替换项目选项 - >应用程序 - >加载图标中添加的图标的情况下,将其他图标作为资源添加到项目中?
VCL硬编码'MAINICON'应用程序图标的名称.这可以在以下代码中看到TApplication.Create:
FIcon.Handle := LoadIcon(MainInstance, 'MAINICON');
Run Code Online (Sandbox Code Playgroud)
另一方面,shell假定可执行文件中的第一个图标是主应用程序图标.shell使用的顺序是按图标名称的字母顺序排列.
这样做的结果是所有图标的名称都应该出现在字母表中的MAINICON之后.