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/)
-   -   TVirtualStringTree Nodes klappen nicht auf/ zu (https://www.delphipraxis.net/211190-tvirtualstringtree-nodes-klappen-nicht-auf-zu.html)

Aromanaut 10. Aug 2022 14:38

TVirtualStringTree Nodes klappen nicht auf/ zu
 
Hallo!

Ich habe einen TVirtualStringTree mit Header und 4 Spalten.
Die Daten werden alle ordentlich dargestellt.
Wenn ich dann aber auf das + bzw. - vor dem Node klicke und ihn zuklappen möchte reagiert es erst wenn ich mit der Maus über den Header fahre.
Würde man das nicht tun, würde auch der Node nicht auf- bzw. zuklappen.
Es zeigt sich auch nur beim Bewegen der Maus über den Header und nicht über die Fensterseiten oder über den unteren Fensterrand.
Kann mir bitte jemand helfen, ich weiß nicht weiter.

Danke euch wie verrückt!

himitsu 10. Aug 2022 15:13

AW: TVirtualStringTree Nodes klappen nicht auf/ zu
 
Wirklich bloß beim Move über den Header
oder fehlt einfach nur ein Repaint?


Form.Repaint oder TreeView.Repaint
oder pack mal die Titelleiste an und schiebe kurz die Form aus bem Bildschirm und zurück.

Aromanaut 10. Aug 2022 15:21

AW: TVirtualStringTree Nodes klappen nicht auf/ zu
 
Danke für die schnelle Antwort.
Ja, wenn ich ein Node anklicke, dann mit der Maus über den linken Rand raus auf die Titelleiste gehe und das Fenster über den Bildschirm rausziehe,
macht er ein Vollbild und auch den angeklickten Node auf.
Was heißt das für mich jetzt genau?

Edit: Habe im GetText noch nen tv.repaint angehängt und jetzt läuft es.

Danke vielmals!

himitsu 10. Aug 2022 16:07

AW: TVirtualStringTree Nodes klappen nicht auf/ zu
 
GetText ... ich fürchte da könnte es etwas zu oft passieren, bzw. eventuell sogar in einer Endloschleife landen.


Gibt es keine Events über Expand/Collapse?


[edit]
Jupp, "eigentlich" sollte es sich von alleine aktualisieren.

Uwe Raabe 10. Aug 2022 16:51

AW: TVirtualStringTree Nodes klappen nicht auf/ zu
 
Zitat:

Zitat von Aromanaut (Beitrag 1509980)
Habe im GetText noch nen tv.repaint angehängt und jetzt läuft es.

Also, ich würde ja lieber klären, warum das gerade in deinem Fall nicht von alleine läuft, wie vermutlich bei einer deutlichen Mehrheit hier.

Aromanaut 10. Aug 2022 21:33

AW: TVirtualStringTree Nodes klappen nicht auf/ zu
 
Ja, ich habe bei den Beispielen die ich mir angeschaut habe auch nirgends ein repaint gesehen.
In dem Tutorial vom VirtualTreeView
https://www.delphi-treff.de/tutorial...ualtreeview/5/
habe ich auch keine Hinweis darauf gesehen.
Und nein, ich habe keine weiteren Events implementiert. Ich bin noch relativ am Anfang und war davon ausgegangen, dass diese Art Funktionalität (Auf- und Zuklappen der Nodes)
irgendwie eine Grundfunktion ist, die das VirtualTreeView allein mitbringt.
Woran könnte es denn noch liegen?

[Edit]
Mein Kollege hat die Lösung gefunden. Es liegt an den BeginUpdate und Endupdate Funktionen. Ich hatte versehentlich die Die EndUpdate Funktion nicht in der selben Schleife wie die BeginUpdate und damit mehr BeginUpdate ausgeführt als EndUpdate. Sowohl BeginUpdate als auch EndUpdate haben intern einen Zähler, der mitzählt, wie oft die jeweilige Funktion aufgerufen wird. Nur wenn der Zähler bei 0 im EndUpdate angekommen ist, wird der UpdateModus tatsächlich beendet.

Gausi 11. Aug 2022 08:17

AW: TVirtualStringTree Nodes klappen nicht auf/ zu
 
Normalerweise ist das auch eine Standard-Funktionalität von dem VST. Ich nutze den VST selber auch sehr gerne - allerdings entweder als Baumstruktur (mit den [+] / [-] zum Ein- und Ausklappen) oder als Grid mit mehreren Spalten. In der Kombination bisher nicht.

Kann sein, dass du da noch in den (sehr umfangreichen) Optionen des VST rumspielen musst. Vielleicht toGridExtensions in den MiscOptions oder so?

Ansonsten ist das Tutorial ja etwas in die Jahre gekommen. Diese Record-Typen PTreeData und TTreeData braucht man ja gar nicht mehr. Mit Generics kann man die eigenen Objekte direkt reinhängen

Delphi-Quellcode:
// einfügen
newNode := VST.AddChild(Nil, myData); // ggf. anderen Node statt NIL als ersten Parameter

// Zugriff, z.B. bei OnGetText
myData := VST.GetNodeData<TMyData>(Node);
Das macht die Verwendung deutlich einfacher.

Aviator 11. Aug 2022 21:39

AW: TVirtualStringTree Nodes klappen nicht auf/ zu
 
Wird mal das Repaint() im GetText Event wieder raus und beobachte mal die CPU Auslastung deines Programms. Ich könnte wetten, dass die höher als die üblichen 0-2% ist. Das wäre dann ein Zeichen dafür, dass der Tree immer wieder in einer Endlosschleife malt was hier auch schon erwähnt wurde. In dem Fall würde ich dann einfach mal nacheinander die Events abkoppeln oder einfach alle abkoppeln und nacheinander wieder einschalten.


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:43 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