2016-09-06 4 views
2

У меня возникла проблема: я не могу нормально менять цвет фона (например, clwhite) TToolBar со своим свойством ToolBar.Color. Я не очень опытен в Delphi, и я нахожу два возможных решения, но все же я хотел бы знать, как правильно изменить его или почему это невозможно.Изменение цвета фона TToolBar

1) Измените стиль на Gradient, но также измените основные анимации для кнопок.

ToolBar.DrawingStyle := dsGradient 
ToolBar.GradientStartColor := clWhite 
ToolBar.GradientEndColor := clWhite 

2) Поместите TToolBar внутри TPanel со следующими параметрами.

Panel.Color := clwhite 
ToolBar.Parent := Panel 
ToolBar.Align := alClient 
ToolBar.Transparent := True 
+0

Является ли 'ParentColor' ложным? –

+0

@ LURD Конечно, он автоматически устанавливает значение False, когда вы меняете свойство «Цвет». – Triber

+1

Тематические элементы управления, ну, тематические. Вы не можете определить их цвета. Тема есть. Если вам это не нравится, отключите темы. –

ответ

6

По умолчанию, TToolbar игнорирует свойство Color.
Также по умолчанию свойство Transparent равно true, поэтому независимо от того, какой цвет родительского элемента панели инструментов будет близок.

Если вы посмотрите на исходный код VCL, вы увидите, что TToolbar не выполняет собственный чертеж; это обертка вокруг общего элемента управления ToolbarWindow32 Win32 в ComCtl32.dll.
Это код, который рисует чертеж.
Когда Windows XP была представлена ​​Microsoft добавила темы пользовательского интерфейса, и Borland поддерживала это через VCL.Themes.TStyleManager.
Вы можете изменить внешний вид общих элементов управления через менеджер стилей: Project -> Options -> Appearance -> Custom Styles, но его трудно узнать, какой эффект это имеет, поскольку IDE не отображает результат (вы можете видеть его во время выполнения), и вы можете выбирать только из ограниченный список довольно странных тем; также функция глючит.

То же самое подходит для TPageControl/TTabSheet, который не публикует свой цвет.
Все элементы управления, импортированные через ComCtl32.dll и реализованные VCL.ComCtrls, страдают от этих несоответствий.

Короче
Там нет ничего, что вы можете сделать, чтобы TToolbar уважать свою собственность Color.
Вы уже нашли обходные пути:

  1. Установите градиент с одинаковым GradientEndColor и GradientStartColor.

  2. Поместите панель инструментов на другой элемент управления (например, TPanel) и измените цвет этого элемента управления, поскольку панель инструментов прозрачна, и цвет родителя будет близок.
    Вам необходимо установить BevelInner/ на bvNone.

  3. Включите стили VCL и устраните все проблемы, связанные с этим антиклеточным тикером.