如何设置VirtualStringTree标头的颜色?

时间:2015-09-04 11:22:50

标签: delphi virtualtreeview tvirtualstringtree

VirtualStringTree标头具有“背景”属性,但将其设置为其他颜色不会更改颜色。我怀疑使用Windows主题渲染树。

如何设置颜色?

2 个答案:

答案 0 :(得分:3)

您可以使用媒体资源THeader.Background,但您必须从toThemeAware中排除TreeOptions.PaintOptions。这将关闭主题,正如TLama在上面的评论中已经说过的那样。

我建议您使用事件OnAdvancedHeaderDrawOnHeaderDrawQueryElements。 <{1}}必须包含hoOwnerDraw才能生效。

Header.Options中,您将OnHeaderDrawQueryElements设置为(至少)Elements,并在[hpeBackground]中设置自定义绘图。

请参阅此示例(source):

OnAdvancedHeaderDraw

答案 1 :(得分: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;