delphi - 在项目中添加 .res 文件会替换默认图标。如何防止这种情况发生?

标签 delphi delphi-7

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

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

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

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

{$R icons.res}

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

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

然后使用 handle 就可以了。

现在解决问题 - 完成此操作后,项目选项中添加的项目图标(尺寸为 16x16 到 48x48)将被我在 {$R Icons.res 中添加的第一个图标(16x16 redicon)替换}.

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

最佳答案

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

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

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

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

关于delphi - 在项目中添加 .res 文件会替换默认图标。如何防止这种情况发生?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15564755/

相关文章:

delphi - 如何在 Delphi 代码中将 Speex Decompressor 连接到混音器(Mitov AudioLab 组件)

delphi - Delphi 7 中的不兼容类型

windows - 如何检测 Delphi 7 上的 Windows Aero 主题?

delphi - 在 Delphi 7 中按字母顺序对 TListBox 项目进行排序

web-services - Delphi 中最简单的 Web 服务

delphi - 自动调整 TListView 的列大小

forms - Delphi:在运行时以动态创建的形式创建TComboBox

delphi - 虚拟 TreeView 循环

sql-server - TADOQuery : Passing null as parameter and getting the resultset

delphi - 未找到 .pas 文件,但 .dcu 存在,这还不够吗?