VirtualStringTree.HotColor не используется с toHotTrack - PullRequest
0 голосов
/ 30 января 2019

Я добавил toHotTrack к VST.TreeOptions.PaintOptions и изменил VST.Colors.HotColor на clGreen, но HotColor не применяется к HotNode, а подчеркнут только текст узла.

  1. Как решить эту проблему?
  2. Можно ли удалить подчеркивание и применить к нему только HotColor?

1 Ответ

0 голосов
/ 11 марта 2019

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, вам нужно удалить toHotTrack из TreeOptions.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;
...