首页 > 解决方案 > VirtualStringTree.HotColor 不与 toHotTrack 一起使用

问题描述

我添加了toHotTracktoVST.TreeOptions.PaintOptions并将其更改VST.Colors.HotColorclGreen,但HotColor没有应用于HotNode并且只有节点的文本带有下划线。

  1. 如何解决这个问题呢?
  2. 是否可以删除下划线并仅适用HotColor于它?

标签: delphivirtualtreeviewtvirtualstringtree

解决方案


Colors.HotColor用于更改,而Font.Color不是Brush.Color。的使用toHotTrack仅更改Font.Color和添加fsUnderLineFont.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中删除,在这种情况下不需要。toHotTrackTreeOptions.PaintOptions

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;

推荐阅读