Заголовок VirtualStringTree имеет свойство «Background», но установка его на другой цвет не изменяет цвет. Я подозреваю, что дерево отображается с использованием тем Windows.Как установить цвет заголовка VirtualStringTree?
Как установить цвет?
Заголовок VirtualStringTree имеет свойство «Background», но установка его на другой цвет не изменяет цвет. Я подозреваю, что дерево отображается с использованием тем Windows.Как установить цвет заголовка VirtualStringTree?
Как установить цвет?
Вы можете использовать свойство THeader.Background
, но вы должны будете исключить toThemeAware
из TreeOptions.PaintOptions
. Это бы отключило темы, как уже сказал в своем комментарии выше.
Я рекомендую вам использовать событие OnAdvancedHeaderDraw
и OnHeaderDrawQueryElements
. hoOwnerDraw
должен быть включен в Header.Options
, чтобы они вступили в силу.
В OnHeaderDrawQueryElements
вы установите Elements
(по крайней мере) [hpeBackground]
и OnAdvancedHeaderDraw
вы делаете на заказ чертеж.
Смотрите этот пример (source):
procedure TfrmMain.MyVSTHeaderDrawQueryElements(Sender: TVTHeader;
var PaintInfo: THeaderPaintInfo; var Elements: THeaderPaintElements);
begin
Elements := [hpeBackground];
end;
procedure TfrmMain.MyVSTAdvancedHeaderDraw(Sender: TVTHeader;
var PaintInfo: THeaderPaintInfo; const Elements: THeaderPaintElements);
begin
if hpeBackground in Elements then
begin
PaintInfo.TargetCanvas.Brush.Color := clFuchsia; // <-- your color here
if Assigned(PaintInfo.Column) then
DrawFrameControl(PaintInfo.TargetCanvas.Handle, PaintInfo.PaintRectangle, DFC_BUTTON, DFCS_FLAT or DFCS_ADJUSTRECT); // <-- I think, that this keeps the style of the header background, but I'm not sure about that
PaintInfo.TargetCanvas.FillRect(PaintInfo.PaintRectangle);
end;
end;
Лучше добавить 'if not Assigned (PaintInfo.Column) then' statement к элементу элементов запроса. Элемент 'hpeBackground' используется также для рисования пластин. А в событии рисования просто заполните прямоугольник. – TLama
@TLama Что значит «тарелки»? –
Отличный ответ! Я приму это, когда код станет окончательным. –
procedure TfrmDepositDefrayalSingly.vstItemsManuallyHeaderDrawQueryElements(Sender: TVTHeader;
var PaintInfo: THeaderPaintInfo; var Elements: THeaderPaintElements);
begin
Elements := [hpeBackground];
end;
procedure TfrmDepositDefrayalSingly.vstItemsManuallyAdvancedHeaderDraw(Sender: TVTHeader;
var PaintInfo: THeaderPaintInfo; const Elements: THeaderPaintElements);
begin
if hpeBackground in Elements then
begin
PaintInfo.TargetCanvas.Brush.Color := cGlobalVar.BasicColor;
PaintInfo.TargetCanvas.FillRect(PaintInfo.PaintRectangle);
if Assigned(PaintInfo.Column) then
begin
PaintInfo.TargetCanvas.Brush.Color := clGray;
PaintInfo.TargetCanvas.FrameRect(PaintInfo.PaintRectangle);
end;
end;
end;
Это свойство используется для фона заголовка, а не для пластин. И вам придется отключать темы для элемента управления (исключая 'toThemeAware' из' TreeOptions.PaintOptions'). То, о чем вы просите, больше похоже на задачу для пользовательского рисования. Что именно вы хотите рисовать (изображение было бы идеальным)? – TLama
Отключение ThemeAware - это не вариант, потому что он уже не плоский. Мне просто нужен более темный оттенок серого, как цвет фона заголовка ... –
[Нравится] (http://i.imgur.com/xevOLcX.png)? Обратите внимание, что фон не имеет градиента на этом изображении. Этот градиент нуждается в дополнительной работе. – TLama