1

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

这是它的外观(抱歉,不能发布图片)
Delphi IDE 丑陋的工具栏

替代文字
(来源:piccy.info

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

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

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

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

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

4

4 回答 4

4

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

这就是我的 IDE 现在的样子:
固定工具栏 http://blog.frantic.im/wp-content/uploads/2009/11/delphi-ide-after.PNG

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

于 2009-11-18T12:03:26.757 回答
0

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

于 2009-11-16T15:27:49.443 回答
0

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

但这确实不是一个好办法。

于 2009-11-16T15:37:28.410 回答
0

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

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

尽管如此,这些是我很久以前遇到的关于德尔福“故障”的一些文章,它们可能对您有帮助,也可能对您没有帮助:

  1. 禁用菜单项中无法区分的灰色斑点,作者:Vladimir S.

  2. MenuImgList.pas

  3. 修复 Delphi 5 中的按钮绘图故障

  4. 修复 Delphi 4 中的菜单绘图故障

于 2009-11-16T18:18:35.247 回答