【问题标题】:My application icon is corrupted (problems in the compiler?)我的应用程序图标已损坏(编译器有问题?)
【发布时间】:2010-09-25 23:19:27
【问题描述】:

我的应用程序的“应用程序图标”错误。

我的应用程序在任务栏中显示的图标与经典的 Delphi 图标不同。而是显示我的 VCL 之一的图标。我的应用程序中没有使用从其中“窃取”图标的特定 VCL,但使用了同一包中的其他 VCL。

相关信息: - 如果我将我的应用程序拖放到桌面上,图标看起来不错。 - 当我将光标放在它上面时,Windows Commander 中的图标看起来不错。 - 当我将它拖放到“按钮栏”中时,该图标在 Windows Commander 中看起来不正常。结论:图标不是在运行时意外更改的(即使应用程序没有运行也有问题)。

我使用的是 Delphi 7。为了确定,我禁用了 EurekaLog 和 FastMM,然后重新构建应用程序。问题仍然存在。我什至不知道为什么编译器会插入错误的图标。 我真的需要一些提示。 谢谢。

【问题讨论】:

  • 尝试将任何 .res 文件重命名为 .res.bak 并重新编译

标签: delphi icons


【解决方案1】:

重命名 .RES 文件并强制重新编译对我来说很好。

有两种方法可以做到。

将项目图标重置为默认值:

  1. 关闭delphi。
  2. 在文件资源管理器中打开项目文件夹。
  3. 将文件扩展名从 .RES 文件重命名为 .RES.BAK(您可能需要在文件资源管理器的工具>文件夹选项>查看>高级设置>文件和文件夹中取消选中“隐藏已知文件类型的文件扩展名”部分。
  4. 在 delphi 中打开项目。
  5. 它会显示一条警告说它没有找到 RES 文件并将重新创建它。

确保使用一个新图标并为其分配最少的内存(这样,由于之前应用程序图标的反复更改,不会为您在此处指定的图标分配其他未使用的图标):

  1. 在 delphi 中打开项目。
  2. 打开项目选项(Ctrl + Shift + F11)。
  3. 转到应用程序选项卡。
  4. 点击加载图标。
  5. 选择所需的图标并单击打开,然后单击确定。
  6. 在文件资源管理器中打开项目文件夹。
  7. 将文件扩展名从 .RES 文件重命名为 .RES.BAK(您可能需要在文件资源管理器的工具>文件夹选项>查看>高级设置>文件和文件夹中取消选中“隐藏已知文件类型的文件扩展名”部分。
  8. 在 delphi 中转到项目>编译所有项目。然后转到项目>构建所有项目。
  9. 当您退出 Delphi 时,它会询问您是否要保存对项目的更改。点击是。

希望你觉得这很有用。

【讨论】:

    【解决方案2】:

    您是否在不止一台机器上检查过这个? Windows 因图标缓存问题而臭名昭著。

    【讨论】:

      【解决方案3】:

      检查您的应用程序的语言 ID 和操作系统的默认语言。如果这些不匹配,那么您可能会遇到图标问题。

      【讨论】:

        【解决方案4】:

        IDE 中配置的图标将插入到您的项目的 RES 文件中,名称为 MAINICON。如果您的 DPR 文件中有 {$R *.RES} 行,则项目资源文件会被编译器链接到您的应用程序。

        资源管理器为您的EXE 文件显示的图标是您应用程序中的第一个图标。图标或按字母顺序排序。如果 Explorer 显示了错误的图标,那么很可能您已将其他图标链接到您的应用程序,并且其中一个图标的名称位于 MAINICON 之前。它可能有一个数字名称。 (我不知道 Windows Commander 如何决定显示什么图标。)

        如果您的项目使用的某些组件或其他单元具有使用$R 指令链接到它的资源文件,那么它将包含在您的项目中。您不必对图标进行任何特定引用,甚至不必在代码中的任何位置提及组件的类名。仅在已使用单元中存在$R 指令就足以链接整个资源文件。编译器不会执行任何“智能链接”来删除未使用的资源,因为它无法在编译时检测资源使用情况时间。

        常见的问题是资源管理器显示错误的图标,但程序本身使用了正确的图标。通过将“错误”图标重命名为 MAINICON 之后,可以解决此问题。但是您说您的程序的行为方式相反:资源管理器(桌面)显示正确的图标而您的程序使用了错误的图标,对吧?

        一种可能是您的DPR 文件中的$R 指令丢失或错误。 Delphi 可能正在链接该文件的旧版本。尝试删除项目的 RES 文件。当 IDE 发现它丢失时,它会重新创建它。此时,重新配置项目选项中的图标。您可能还需要重置项目的版本号。

        您还应该检查已编译程序中资源的布局。我不记得 Delphi 是否带有适合该任务的资源查看器。你可以试试PE Resource Explorer。需要考虑的事项:项目中所有图标的名称是什么?名称为 MANICON 的图标是什么?其他图标来自什么RES文件,链接在什么单位?

        最后,关于术语的注释:VCL 是可视化组件库,Delphi 附带的一组组件。你不能有“一个”VCL。您安装到 Tool Palette(nee Component Palette)并放在表单和数据模块上的东西是组件,而不是 VCL。

        【讨论】:

        • 非常感谢 :) 我不小心在 $R 指令中输入了“d”,结果是 {$R *.dres} :) 当然没有编译错误。所以我没有应用程序图标,整个项目中只有黑色图像,我疯了。很好,我开始搜索并找到您的答案,以检查我的 $R 指令!
        【解决方案5】:

        Delphi的菜单栏选择Project->Options

        在项目选项中选择应用程序

        在那里,您将看到为您的应用选择的图标。

        你可以在那里改变它。

        【讨论】:

          【解决方案6】:

          可执行文件可以嵌入不同大小的图标。

          检查以确保您已为不同尺寸定义了图标。如果您没有定义所有尺寸,Delphi 可能会随机抽取一个。这可以解释为什么按钮栏看起来是一种方式,而在桌面上它看起来是另一种方式。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2019-09-20
            • 2014-12-28
            • 1970-01-01
            • 2016-12-15
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多