Delphi IDE - Как сделать отключенные кнопки панели инструментов серыми? - PullRequest
1 голос
/ 16 ноября 2009

Швы, подобные этому, предназначены только для настоящих фанатов Delphi.

Вот так это выглядит (извините, не могу размещать изображения)
Delphi IDE безобразная панель инструментов

alt text
(источник: piccy.info )

Что не так - отключены панель инструментов Delphi IDE, а кнопки меню - уродливые черно-белые изображения.
Что я хочу сделать - заставить их выглядеть серыми.

Как? Я провел небольшое исследование. Основная проблема в виртуальном TCustomImageList.DoDraw методе. Когда paramater Enabled = False, он рисует ужасные вещи (см. Отключенные кнопки на скриншоте). Я создал свое собственное переопределение для этой функции, и оно рисует серые изображения, когда Enabled = False

Теперь я хочу заменить значение по умолчанию DoDraw своим собственным в IDE (используя пакет времени разработки):

  1. Я понял, что модуль ImgList скомпилирован в bds.exe, поэтому трюк с исправлением этой функции в rtlXXX.bpl не сработает.
  2. Поиск содержимого тела функции не дал результата. Похоже, реализация bds.exe (я думаю о машинных кодах) DoDraw немного отличается.

Любые предложения или идеи, как я могу сделать это возможным? В качестве базового примера исправления кода во время выполнения я взял Andy's Midas Speed ​​Fix: FindMethodPtr, HookProc, UnhookProc

Ответы [ 4 ]

4 голосов
/ 18 ноября 2009

Я сделал это :) Спасибо всем, кто принимал участие или просматривал этот вопрос!

Вот так выглядит моя IDE:
Фиксированная панель инструментов http://blog.frantic.im/wp-content/uploads/2009/11/delphi-ide-after.PNG

Я только что напутал с vclXXX.pbl, моя вина. Источники можно найти здесь . Градиентные панели инструментов должны быть включены, чтобы он работал. Если вы заинтересованы в дальнейшем развитии этой идеи - прочитайте эту тему

0 голосов
/ 16 ноября 2009

Если вы не хотите создавать свои собственные переопределенные компоненты, вы можете изменить реализацию непосредственно в [DelphiPath] \ source \ Win32 \ vcl \ ImgList.pas .

Но это действительно не очень хороший способ.

0 голосов
/ 16 ноября 2009

Мне всегда не нравилось, как Delphi создает отключенные изображения по умолчанию из включенных. Это не только проявляется в IDE, но и сохраняется в приложении, которое вы разрабатываете. Отключенные изображения в вашем приложении выглядят так же плохо.

В прошлом я пытался выяснить, что делал Delphi, чтобы получить отключенные образы и опираться на них. Но это все еще в моем списке "дел", чтобы закончить это.

Тем не менее, вот некоторые статьи о «сбое» Delphi, с которыми я столкнулся довольно давно, которые могут или не могут вам помочь:

  1. Неразличимые серые пятна в отключенных пунктах меню, Владимир С.

  2. MenuImgList.pas

  3. Исправление ошибки рисования кнопок в Delphi 5

  4. Исправление ошибки рисования меню в Delphi 4

0 голосов
/ 16 ноября 2009

Возможно, я плохо понимаю проблему, но если вы просто хотите переопределить функцию DoDraw, почему бы вам просто не создать свой собственный компонент, который наследует от TCustomImageList, переопределить нужную функцию, чтобы она делала то, что вы хотите, и зарегистрировать ее в IDE?

...