7

我需要将一些图标作为资源添加到我的项目中(在这种情况下我不能使用 TImageList,因为 TCoolTrayIcon 中的错误,并且我无法快速替换组件)。

我创建了一个 icons.rc 脚本来将两个 ico 文件添加到 Delphi 资源文件中:

redicon ICON "c:\icon\red.ico"
greenicon ICON "c:\icon\green.ico"

它可以很好地编译为 icons.res,所以我将它添加到我的 Delphi 7 项目的第一个单元中:

{$R icons.res}

然后我将句柄存储在 MainForm 的 OnCreate() 中:

hRedIcon := LoadIcon(hInstance,'redicon');
hGreenIcon := LoadIcon(hInstance,'greenicon');

然后使用手柄就好了。

现在问题来了——在项目选项中添加的项目图标(大小为 16x16 到 48x48)被我在 {$R icons.res} 中添加的第一个图标(16x16 redicon)替换之后。

如何防止这种情况?如何在不替换项目选项-> 应用程序-> 加载图标中添加的图标的情况下将其他图标作为资源添加到项目中?

4

1 回答 1

7

VCL 硬编码'MAINICON'应用程序图标的名称。这可以在以下代码中看到TApplication.Create

FIcon.Handle := LoadIcon(MainInstance, 'MAINICON');

另一方面,shell 假定可执行文件中的第一个图标是主应用程序图标。shell 使用的顺序是按图标名称的字母顺序。

这样做的结果是,所有图标的名称都应该出现在字母表中 MANICON 之后。

于 2013-03-22T09:11:09.113 回答