代码之家  ›  专栏  ›  技术社区  ›  Frantic

DelphiIDE-如何使禁用的工具栏按钮变灰?

  •  1
  • Frantic  · 技术社区  · 16 年前

    像这样的接缝只适用于真正的德尔福极客。

    这就是它的外观(抱歉,无法发布图像)
    Delphi IDE ugly toolbar

    alt text http://i.piccy.info/i4/da/ac/6e4748778dcfdc13ec5fede3a7e0.png

    发生了什么? -禁用的DelphiIDE工具栏和菜单按钮是难看的黑白图像。
    我想做什么 -使它们看起来呈灰色。

    怎么用? 我做了一些调查。虚拟的主要问题 TCustomImageList.DoDraw 方法。当参数 Enabled = False 它描绘丑陋的东西(参见屏幕截图上的禁用按钮)。我为这个函数创建了自己的覆盖,当 启用=假

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

    1. 我发现单元imglist是在bds.exe中编译的,所以在 rtlXXX.bpl 不起作用。
    2. 搜索函数的正文内容没有结果。看起来像bds.exe的实现(我是Talikng关于机器代码) 多图 有点不同。

    我有什么建议或想法可以让这成为可能吗?作为运行时代码修补的基本示例,我采用了Andy的midas speed fix: FindMethodPtr , HookProc , UnhookProc

    4 回复  |  直到 16 年前
        1
  •  4
  •   Frantic    16 年前

    我做到了:)感谢所有参与或观看这个问题的人!

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

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

        2
  •  0
  •   Jorge Córdoba    16 年前

    也许我对这个问题理解得很糟糕,但是如果您只是想重写dodraw函数,为什么不创建继承自tcustomImageList的自己的组件,重写所需的函数,以便它能满足您的需要并将其注册到IDE中呢?

        3
  •  0
  •   silent    16 年前

    如果不想创建自己的重写组件,可以直接在 [DelphiPath]\source\win32\vcl\imglist.pas .

    但这真的不是一个好方法。

        4
  •  0
  •   lkessler    16 年前

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

    我过去曾试图弄清楚德尔菲是怎么得到这些残缺的图像的,并以此为基础。但我的“要做的事情”清单上仍然有完成这一点的内容。

    同样,这些是关于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