VirtualStringTree Spaltenkopf individuell einfärben

Rund um die LCL und andere Komponenten
Antworten
Ronny58
Beiträge: 87
Registriert: So 27. Apr 2014, 20:35

VirtualStringTree Spaltenkopf individuell einfärben

Beitrag von Ronny58 »

Hallo Zusammen,

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;
Damit färbe ich die aber ganze Spalte unter dem Cursor ein. Das war auch meine erste Idee, so eine Art Fadenkreuz im VST.
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?
Dateianhänge
VST Fadenkreuz.zip
(129.29 KiB) 8-mal heruntergeladen

Ronny58
Beiträge: 87
Registriert: So 27. Apr 2014, 20:35

Re: VirtualStringTree Spaltenkopf individuell einfärben

Beitrag von Ronny58 »

Ich habe nochmal eine Alternative ausprobiert.

Hier färbe ich den Font der Zeile unter der Maus Blau und Fett ein.
Damit wäre ich auch zufrieden, wenn mir gleiches für die Spalte unter der Maus gelänge. Da komme ich aber an den Font.Color nicht ran.
Dateianhänge
VST Fadenkreuz.zip
(129.48 KiB) 8-mal heruntergeladen

Ronny58
Beiträge: 87
Registriert: So 27. Apr 2014, 20:35

Re: VirtualStringTree Spaltenkopf individuell einfärben

Beitrag von Ronny58 »

Hab's gelöst.

SpaltenHeader wird eingefärbt, je nach Maus-Position in der Tabelle
Node in der ersten Spalte wird eingefärbt

Für alle, die sowas gebrauchen können habe ich die Lösung mal angehängt.
VST Fadenkreuz.zip
(129.17 KiB) 10-mal heruntergeladen
Dateianhänge
VST Fadenkreuz.jpg
VST Fadenkreuz.jpg (67.84 KiB) 143 mal betrachtet

Antworten