Как установить цвет заголовка VirtualStringTree?
Заголовок VirtualStringTree имеет свойство Background, но установка его на другой цвет не меняет цвет. Я подозреваю, что дерево отображается с использованием тем Windows.
Как я могу установить цвет?
2 ответа
Решение
Вы можете использовать собственность THeader.Background
но вам придется исключить toThemeAware
от TreeOptions.PaintOptions
, Это отключит темы, как уже сказал TLama в своем комментарии выше.
Я рекомендую вам использовать события OnAdvancedHeaderDraw
а также OnHeaderDrawQueryElements
, hoOwnerDraw
должен быть включен в Header.Options
чтобы они вступили в силу.
В OnHeaderDrawQueryElements
Ты устанавливаешь Elements
по крайней мере [hpeBackground]
И в OnAdvancedHeaderDraw
Вы делаете заказной рисунок.
Смотрите этот пример ( источник):
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;
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;