我在VST.TreeOptions.PaintOptions
中添加了toHotTrack
并将VST.Colors.HotColor
更改为clGreen
,但HotColor
不应用于HotNode
,只有节点的文本带有下划线。
- 如何解决这个问题?
- 是否可以删除下划线并仅对其应用
HotColor
?
Colors.HotColor
用于更改Font.Color
,而不是Brush.Color
。使用 toHotTrack
只会更改Font.Color
并将fsUnderLine
添加到Font.Style
,请参阅实现部分。
if (toHotTrack in FOptions.FPaintOptions) and (Node = FCurrentHotNode) then
begin
if not (tsUseExplorerTheme in FStates) then
begin
Canvas.Font.Style := Canvas.Font.Style + [fsUnderline];
Canvas.Font.Color := FColors.HotColor;
end;
end;
但是,更改很容易,例如在OnBeforeCellPaint
中。如果你不想要fsUnderline
,你需要从TreeOptions.PaintOptions
中删除toHotTrack
,在这种情况下不需要。
procedure VSTBeforeCellPaint(Sender: TBaseVirtualTree; TargetCanvas: TCanvas;
Node: PVirtualNode; Column: TColumnIndex; CellPaintMode: TVTCellPaintMode;
CellRect: TRect; var ContentRect: TRect);
begin
if (CellPaintMode = cpmPaint) and (Node = vstStrom.HotNode) then
begin
TargetCanvas.Brush.Color := clGreen;
TargetCanvas.FillRect(CellRect);
end;
end;