VirtualStringTree 标头具有“背景”属性,但将其设置为不同的颜色不会改变颜色。我怀疑树是使用 Windows 主题呈现的。
如何设置颜色?
VirtualStringTree 标头具有“背景”属性,但将其设置为不同的颜色不会改变颜色。我怀疑树是使用 Windows 主题呈现的。
如何设置颜色?
您可以使用属性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;