Die TVirtualStringTree kann schon selbst HotTrack. Leider gibt es nach außen keine Information zur Spalte, so dass man diese selbst ermitteln müsste.
Am einfachsten ist aber das interne Feld dafür schlicht zu veröffentlichen (VirtualTrees.pas):
Delphi-Quellcode:
TBaseVirtualTree = class(TCustomControl)
[..]
public
[..]
property HotNode: PVirtualNode read FCurrentHotNode write SetHotNode;
property HotColumn: TColumnIndex read FCurrentHotColumn; // NEU
[..]
In der aktuellen Version ist das die Zeile 3219.
Und dann kannst du einfach OnBeforeCellPaint verwenden (toHotTrack muss natürlich in den TreeOptions unter PaintOptions aktiviert sein!):
Delphi-Quellcode:
procedure TForm118.VirtualStringTree1BeforeCellPaint(Sender: TBaseVirtualTree;
TargetCanvas: TCanvas; Node: PVirtualNode; Column: TColumnIndex;
CellPaintMode: TVTCellPaintMode; CellRect: TRect; var ContentRect: TRect);
begin
if (Node = VirtualStringTree1.HotNode) and (Column = VirtualStringTree1.HotColumn) then
TargetCanvas.Brush.Color := clLime
else
TargetCanvas.Brush.Color := clWhite;
TargetCanvas.FillRect(ContentRect);
end;
Ich werde einmal einen Pull Request für diese Änderung senden.
// EDIT:
Erledigt,
pull request ist drin.