Delphi 资源文件中的EXE应用程序图标错误

Delphi 资源文件中的EXE应用程序图标错误,delphi,resources,icons,Delphi,Resources,Icons,我正在使用(.Res)资源文件进行探索,并在delphi.about.com网站上找到了一个有用的教程 教程链接: 下载测试项目: 我发现Windows资源管理器中的应用程序图标不同。申请表上的图标显示正确(参见图2)。Windows任务栏上的图标显示正确(请参阅图3) 但是当我浏览Windows资源管理器时,它的图标是错误的(参见图1)。它不是Res文件中的main图标 知道有什么问题吗? 我需要配置什么才能使用.EXE文件获得正确的应用程序图标 delphixe3环境 Windows7

我正在使用(.Res)资源文件进行探索,并在delphi.about.com网站上找到了一个有用的教程

教程链接:

下载测试项目:

我发现Windows资源管理器中的应用程序图标不同。申请表上的图标显示正确(参见图2)。Windows任务栏上的图标显示正确(请参阅图3)

但是当我浏览Windows资源管理器时,它的图标是错误的(参见图1)。它不是Res文件中的main图标

知道有什么问题吗? 我需要配置什么才能使用.EXE文件获得正确的应用程序图标

  • delphixe3环境
  • Windows7环境
  • 您可以从上面的链接下载示例项目
图像编号(1)

图像编号(2)

图像编号(3)


提前感谢

任务栏和窗体窗口中的图标是准确的,因为它们直接来自正在运行的进程的资源


另一方面,Windows资源管理器,有时缓存会损坏或不同步。这是Windows资源管理器的一个众所周知的问题。这与你的应用程序无关。有很多第三方工具可用于修复图标缓存。

没有显示哪个图标的提示,shell会选择ID最低的图标,或者按字母顺序排列的第一个图标。您的可执行文件中有三个图标:ICOFOLD、ICOOK和MAINICON。iFold是要显示在shell文件夹中的文件夹


程序运行后,通过发送
WM_SETICON
消息来设置任务栏或表单图标。因此,这里没有猜测。

您只需运行以下命令即可清除图标缓存:

ie4uinit.exe-ClearIconCache

对于Windows 10,请使用:


ie4uinit.exe-show

谢谢@Sertac。如果我从资源文件中删除一个图标(ICOFOLD),那么第一个图标似乎是按字母顺序排列的,即ICOOK。您知道如何设置以获得正确的图标吗?谢谢你的回复。@sMah Sertac已经解释清楚了。VCL要求您将应用程序图标命名为MAINICON。资源管理器使用它找到的第一个图标。因此,您必须确保第一个图标是您的应用程序图标。我通过确保所有其他图标的名称都显示在主图标之后来实现这一点。如果你不想这样做,你可以只包括你的应用程序图标两次。一次作为主图标,一次ID为1,或者名称的字母顺序排在所有其他图标之前。@Sertac您知道是谁强加了字母顺序吗。我的猜测是Delphi链接器会这样做,而explorer只会枚举所有图标并使用第一个图标。对于资源管理器来说,找到所有的名字并选择第一个是很奇怪的。性能方面的原因表明,先选更快。@David-我不知道,实际上我从来没有想过。你的思维方式是有道理的,但根据我的经验,我不能说探险家在这方面真的很快。嗨@Remy谢谢你的回复。我以前遇到过那个问题。感谢您关于图标缓存的说明。我清除我的图标缓存。我认为,就我的具体情况而言,这不是图标缓存问题。谢谢你的留言。@sMah,这是一个图标缓存问题,你必须正确地重建它。嗨@Peter,谢谢你的评论。我确实通过删除C:\Users\User\AppData\Local\IconCache.db清除了图标缓存,然后注销并登录到我的电脑。然后我重新编译了它。窗口资源管理器中的图标也有相同的问题。(显示错误的图标)@Peter-根据Windows资源管理器,您认为MAINICON有什么特别之处?