如何在Delphi 2010中更改任务栏中应用程序图标

6

我使用以下方法将我的应用程序的图标更改为自己的图标(32x32 16位EGA):

Project > Option > Applications > Load Icon

任务栏中的图标在许多边框样式(bsNone、bsSingle、bsSizeable、bsSizeToolWin或bsToolWindow)下都可以很好地更改。但是,在使用BorderStyle:= bsDialog时,图标没有更改。
请不要告诉我使用:
Application.Icon.LoadFromFile(extractfilepath(application.exename) + '\myicon.ico');

因为我只想提交一个EXE文件。
PS:我使用的是Embarcadero Delphi 2010。

这是有意为之的。你不习惯在主窗体中使用 bsDialog 样式。你可以使用例如 bsSingle 并移除最小化/最大化按钮来获得相同的结果,但对于具有 bsDialog 样式的窗口,你将无法获得图标。 - TLama
1
这个问题有一个 QC,Application and/or Form icon not shown with bsDialog。它被标记为设计上的原因而关闭。 - LU RD
@LU RD:这意味着我们对此无能为力吗? - Galvion
只需按照David在他的答案中建议的方式操作即可。您可以将图标放在资源文件中,例如TImageList,以避免从磁盘加载。 - LU RD
1个回答

8
图标是与任务栏按钮相关联的窗口的图标。因此,如果Application.MainFormOnTaskbar设置为True,则为主窗体图标。当为False时,它是Application的隐藏窗口的图标。因此,如果想在任务栏中有不同于主窗体的图标,则需要将MainFormOnTaskbar设置为False,并将不同的图标分配给Application.Icon。这似乎是解决该问题的简单方法。
如果我回忆起来,VCL只会设置一种大小的图标。根据我的经验,最好自己做好这项工作并直接发送WM_SETICON消息以同时设置小和大的图标。
至于您的图标存放在哪里,请将其链接到可执行文件作为资源。我避免使用图像列表,因为我失去了对原始.ico文件的控制,但这可能只是我挑剔而已。如果您愿意,可以随意使用图像列表。

在XE5 + windows 7中,Application->Icon->LoadFromFile将所有图标设置为32x32图标的调整大小版本,即使您的图标文件包含24x24(角落),48x48(alt-tab,任务栏),256x256(桌面)大小。 - M.M

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接