und wieder komme ich nicht weiter, obwohl ich mich bei Google bemüht habe.
In meiner großen VST mit vielen Spalten und Zeilen möchte ich dem Nutzer gerne zeigen, wo er sich gerade mit der Maus befindet, indem ich den SpaltenHeader und den Node in der ersten Spalte sagen wir mal in clAqua einfärbe.
Dann müsste der Nutzer nicht durch Anklicken einer einzelnen Zelle nicht über Trail and Error herausfinden ob er das richtige Element erwischt hat.
Dazu habe ich im OnMOuseMove folgendes gemacht:
Code: Alles auswählen
procedure TForm1.vstMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
var i : Integer;
HitInfo: THitInfo;
begin
vst.GetHitTestInfoAt(x,y,true,HitInfo);
if HitInfo.HitNode <> NIL then
begin
for i := 0 to vst.Header.Columns.Count-1 do
begin
vst.Header.Columns.Header.Columns.Items[i].Color:=clActiveBorder;
if i = HitInfo.HitColumn then vst.Header.Columns.Header.Columns.Items[i].Color:=clAqua;
end;
end;
end;
Das ist mir dann aber doch irgendwie zuviel Farbe. Nur die Zelle unter dem Cursor einzufärben ist mir zu wenig, damit ist dem Nutzer immer noch nicht klar wo er sich in der Tabelle gerade befindet.
Ich habe HitInfo auch schon global versucht und im OnPaintText genutzt für den Node in der erste Spalte.
Den Header-Background einer Spalte habe noch gar nicht erreicht. Ich habe es erfolglos mit
- OnAdvancedHeaderDraw
- OnHeaderDraw
- OnPaintText
versucht.
Gefallen würde mir beim MouseMove nur den Hintergrund
- des Nodes in der in der ersten Spalte
- und die Spaltenüberschrift einzufärben
Ich scheitere aber schon beim SpaltenHeader.
Ich hab mein kleines Test-Programm dazu mal angehängt.
Toll wäre es auch, wenn ich das ganze Färben im MouseMove gekapselt hätte und ich nicht mit einem globalen HitInfo über die Events gehen müsste. Würde zur Not aber auch gehen.
Kann mir jemand helfen?