【问题标题】:Delphi IDE - How to make disabled toolbar buttons grayscaled?Delphi IDE - 如何使禁用的工具栏按钮变为灰度?
【发布时间】:2009-11-16 15:08:40
【问题描述】:

像这样的接缝仅适用于真正的 Delphi 极客。

这就是它的样子(抱歉,无法发布图片)
Delphi IDE ugly toolbar


(来源:piccy.info

出了什么问题 - 禁用的 Delphi IDE 工具栏和菜单按钮是丑陋的黑白图像。
我想要做什么 - 让它们看起来是灰度的。

怎么做?我做了一些研究。虚拟TCustomImageList.DoDraw 方法中的主要问题。当参数Enabled = False 它画出丑陋的东西(请参阅屏幕截图上的禁用按钮)。我为这个函数创建了自己的覆盖,它在Enabled = False 时绘制灰度图像

现在我想用我自己的替换默认的DoDraw(使用设计时包):

  1. 我发现单元 ImgList 是在 bds.exe 中编译的,因此在 rtlXXX.bpl 中修补此函数的技巧将不起作用。
  2. 搜索函数的正文内容没有结果。看起来 DoDraw 的 bds.exe 实现(我在谈论机器代码)有点不同。

关于如何使这成为可能的任何建议或想法?作为运行时代码修补的基本示例,我采用了 Andy 的 Midas Speed Fix:FindMethodPtrHookProcUnhookProc

【问题讨论】:

  • 让我把事情说得更清楚一点 - 我想修复 IDE,而不是我使用它制作的应用程序
  • 你为什么关心 IDE 如何绘制它被禁用的工具按钮?你可以说他们是残疾人,这应该是最重要的。此外,与其尝试自己破解 IDE,不如在 CodeGear 的 Quality Central 中发布错误报告或功能请求,以便维护 IDE 的开发人员可以在未来的版本中进行更改。
  • 我想在这里获得一些经验。我不想证明 CodeGear/Embarcadero 灰度更好,并等待他们实现此功能。
  • 如果您将禁用的图标设为灰度,您最终可能会得到不可见(或难以看到)的图标 - 转换为灰度的某些颜色可能会显示为与背景相同的灰色(工具栏本身) .我认为这就是德尔福的人这样做的重点......

标签: delphi ide toolbar


【解决方案1】:

我做到了 :) 感谢所有参与或查看此问题的人!

这就是我的 IDE 现在的样子:
Fixed toolbar http://blog.frantic.im/wp-content/uploads/2009/11/delphi-ide-after.PNG

我只是搞砸了vclXXX.pbl,我的错。来源可以找到here。必须启用渐变工具栏才能使其工作。如果你对这个想法的进一步发展感兴趣 - 阅读this主题

【讨论】:

    【解决方案2】:

    也许我对这个问题的理解很糟糕,但是如果你只是想重写 DoDraw 函数,为什么不创建你自己的从 TCustomImageList 继承的组件,重写所需的函数,以便它执行你想要的操作并注册它进入IDE?

    【讨论】:

    • ...这将为我的所有应用程序带来新的外观和感觉,但我想对 RAD Studio IDE 本身进行更改。如何用我自己的替换 IDE 的默认 ImageList?
    【解决方案3】:

    如果不想自己重写组件,可以直接在[DelphiPath]\source\Win32\vcl\ImgList.pas中更改实现

    但这确实不是什么好办法。

    【讨论】:

      【解决方案4】:

      我一直不喜欢 Delphi 从启用的图像创建默认禁用图像的方式。这不仅体现在 IDE 中,而且会持续到您正在开发的应用程序中。您的应用程序中禁用的图像看起来同样糟糕。

      我过去曾试图弄清楚 Delphi 做了什么来导出禁用的图像并在此基础上进行构建。但它仍然在我的“要做的事情”清单上来完成它。

      不过,这些是我很久以前遇到的有关 Delphi“故障”的一些文章,可能对您有帮助,也可能对您没有帮助:

      1. Indistinguishable gray blobs in disabled menu items, by Vladimir S.

      2. MenuImgList.pas

      3. Fixing a Buttons Drawing Glitch in Delphi 5

      4. Fixing a Menu Drawing Glitch in Delphi 4

      【讨论】:

      • @lkessler:您错过了 OP 对他自己的问题的评论,他表示他想修复 IDE 的工具栏,而不是他自己的应用程序中的工具栏。
      • 所以我做到了。在我终于看到有人解决灰色斑点问题的兴奋中,我忽略了他在谈论 IDE。即便如此,我会更新我的答案并解决他的问题。谢谢。
      猜你喜欢
      • 2016-04-26
      • 2010-10-01
      • 1970-01-01
      • 2015-03-20
      • 2018-03-07
      • 1970-01-01
      • 1970-01-01
      • 2020-04-21
      • 2012-02-22
      相关资源
      最近更新 更多