Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   VirtualStringTree Header Mousemove (https://www.delphipraxis.net/185240-virtualstringtree-header-mousemove.html)

newbe 25. Mai 2015 06:13

VirtualStringTree Header Mousemove
 
Hallo allerseits!

Ich benutze AdvancedHeaderDraw um meine Headercolums selber zu zeichnen. Das klappt auch schon alles wie es soll. Jetzt hätte ich gerne das Sich der Headercolum selbst neu zeichnet wenn ich mit der Mouse über einen bestimmten Teil des HeaderColumns fahre. Die Koordinaten bekomme ich schon über Headermouesemove, jedoch muss ich ja dann einen Paintevent für den Headercolumn auslösen, sprich ein AdvandedHeaderDraw event. Jedoch weis ich nicht wie ich dort an die TPaintinfo komme. Komplettes Neuzeichnen des Tree's hilft anscheinend nicht und wär auch worstcase in dem Fall. Es muss doch ne Möglichkeit geben ein neuzeichen des HeaderColumns auszulösen?

mfg newbe

Aviator 25. Mai 2015 10:32

AW: VirtualStringTree Header Mousemove
 
Du könntest die Funktion vst.Header.Invalidate benutzen. Die zeichnet die Spalte des Headers komplett neu. Wenn ExpandToRight true ist, werden alle Columns rechts davon ebenfalls neu gezeichnet. Nützlich beim Resizen von Columns. Und bei dieser Funktion musst du nur den ColumnIndex übergeben und brauchst dir nicht die Arbeit zu machen, irgendwie an die PaintInfo dran zu kommen. :)

newbe 25. Mai 2015 10:40

AW: VirtualStringTree Header Mousemove
 
@Aviator

vielen Dank für Deinen Tip, funktioniert bestens. :)

mfg newbe

Aviator 25. Mai 2015 10:45

AW: VirtualStringTree Header Mousemove
 
Bitte bitte. Hier kann man sich natürlich noch die Funktionen der Klasse TVirtualTreeColumns zu Hilfe nehmen. Da du ja im OnHeaderMouseMove Event des Trees neu zeichnen möchtest, könntet das dann so aussehen:

Delphi-Quellcode:
procedure TfrmMain.vstHeaderMouseMove(Sender: TVTHeader; Shift: TShiftState; X, Y: Integer);
begin
  Sender.Invalidate(Sender.Columns[Sender.Columns.ColumnFromPosition(Point(X, Y))]);
end;
Das nur noch als Ergänzung hierzu. Viel Spaß weiterhin mit dem VST. :thumb:


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:19 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz