【问题标题】:Adding a .res file to project replaces the default icon.How to prevent it?将.res文件添加到项目中会替换默认图标。如何防止它?
【发布时间】:2013-03-11 23:30:58
【问题描述】:

我需要将一些图标作为资源添加到我的项目中(在这种情况下我不能使用 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)替换}。

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

【问题讨论】:

  • 请向我们展示您的 .dpr 代码。
  • 我总是在我控制的资源文件中包含主图标。
  • 你能把它包含在一个单独的 DLL 中吗? “资源 DLL” 使用频率很高
  • whosrdaddy,项目的dpr文件比较大,这里不能发。但是是的,它有一个 {$R *.RES} 行,它是由 Delphi 创建的。
  • 大卫,如果我使用资源文件添加项目图标,我需要使用一些特定的资源名称吗?

标签: delphi delphi-7


【解决方案1】:

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

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

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

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

【讨论】:

  • 我认为是时候让 Delphi 修复这个 bug 并将 main incon 的名称更改为类似 AA_MAINICON... 将我所有名称以“N”开头的图标重命名为“Z”。
猜你喜欢
  • 1970-01-01
  • 2016-04-09
  • 2019-11-11
  • 2017-03-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-26
相关资源
最近更新 更多