2015-09-04 2 views
0

Заголовок VirtualStringTree имеет свойство «Background», но установка его на другой цвет не изменяет цвет. Я подозреваю, что дерево отображается с использованием тем Windows.Как установить цвет заголовка VirtualStringTree?

Как установить цвет?

+0

Это свойство используется для фона заголовка, а не для пластин. И вам придется отключать темы для элемента управления (исключая 'toThemeAware' из' TreeOptions.PaintOptions'). То, о чем вы просите, больше похоже на задачу для пользовательского рисования. Что именно вы хотите рисовать (изображение было бы идеальным)? – TLama

+0

Отключение ThemeAware - это не вариант, потому что он уже не плоский. Мне просто нужен более темный оттенок серого, как цвет фона заголовка ... –

+0

[Нравится] (http://i.imgur.com/xevOLcX.png)? Обратите внимание, что фон не имеет градиента на этом изображении. Этот градиент нуждается в дополнительной работе. – TLama

ответ

2

Вы можете использовать свойство 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; 
+0

Лучше добавить 'if not Assigned (PaintInfo.Column) then' statement к элементу элементов запроса. Элемент 'hpeBackground' используется также для рисования пластин. А в событии рисования просто заполните прямоугольник. – TLama

+0

@TLama Что значит «тарелки»? –

+0

Отличный ответ! Я приму это, когда код станет окончательным. –

0
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;