Вверх ↑
Ответов: 4621
Рейтинг: 746
#1: 2018-09-29 14:44:54 ЛС | профиль | цитата
Чтобы и ты увидел. Исправлять будешь?

Ответы:
1) Если AOwner=nil, то строка "Result.FColors := ilcDefault;" не выполнится и TImageList.Colors будет инициализировано 0, что соответствует ilcColor. Система в этом случае, как я понимаю, применяет 24-битный цвет (или 256 цветов?).
Тогда как автор KOL, вероятно, хотел, чтобы там таки было ilcDefault, что и произойдет в случае AOwner<>nil. Налицо ошибка в NewImageList(), которая была исправлена в новой версии KOL. А поскольку при ilcDefault система подставляет 4-битный цвет, то картинка получается как и представил kaban4ik.
Так как у нас забили на официальные обновления KOL, то исправлять KOL никто не будет.

2) Поле Control инициализируется в методе ThiStringTableMT.Init, а этот метод вызывается после заполнения всех свойств, то-есть, после ThiStringTableMT.SetIcons. В методе SetIcons Control всегда равен nil, поэтому NewImageList(Control) не имеет смысла и запутывает код.
Нужно заменить в двух местах NewImageList(Control) на NewImageList(nil) (а также в файле hiTreeView.pas). Текущий функционал компонента не изменится.

3) В файле hiTabControl.pas для свойства Bitmaps создаётся ImageList как NewImageList(Applet). А переменная Applet в этот момент не равна nil. Благодаря описанному в (1) баге у созданого здесь ImageList свойство Colors=ilcDefault, то-есть, 4-битный цвет, то-есть "16-цветные рисунки". Автор кода не разобрался в причине этого.
Нужно сделать "ImgLst := NewImageList(nil)" и в деструкторе добавить ImgLst.Free.
Получим полноцветные значки в TabControl.

Я проверил в TabControl - если поставить ImgLst.Colors := ilcColor32 и добавить в приложение компонент StyleXP, то можно использовать качественные 32-битные битмапы с полупрозрачностью.
Следовательно, есть возможность использовать значки с полупрозрачностью во всех компонентах, где используется ImageList. Для этого:
- добавить ImgLst.Colors := ilcColor32 во всех местах, где вызывается NewImageList
или
- переделать все свойства типа "массив иконок" или "массив битмапов" в компонентах на использование менеджера IconsManager. А в IconsManager добавить свойство Colors с выбором цветности.
Кроме того, можно создать компонент BitmapList аналогично IconsManager, чтобы можно было пользоваться не только иконками, но и битмапами. Вместо нового компонента можно добавить 2 свойства в IconsManager: Type=[Icon, Bitmap] и Bitmaps=массив битмапов. Тогда в этом компоненте можно на выбор использовать иконки или битмапы.
карма: 26

0
Редактировалось 1 раз(а), последний 2018-09-29 14:46:30