[GELÖST]VirtualStringTree - Setzen Checkbox aus Code

Rund um die LCL und andere Komponenten
Antworten
Benutzeravatar
Zvoni
Beiträge: 550
Registriert: Fr 5. Jul 2024, 08:26
OS, Lazarus, FPC: Windoof 10 Pro (Laz/FPC fixes)
CPU-Target: 64Bit
Wohnort: BW

[GELÖST]VirtualStringTree - Setzen Checkbox aus Code

Beitrag von Zvoni »

Mahlzeit Leute,

nutze zum ersten mal VTV als VirtualStringTree mit Checkboxen (checkType=TriState)
User ruft Form auf, und aus der Datenbank wird das VST befüllt - 3 Level tief.
User kann jetzt wie er will Knoten aus- oder abwählen.
Nur Checks/Unchecks im Level 3 werden aber in Echtzeit in die Datenbank zurückgeschrieben (im VSTOnChecked-Ereignis - hier prüfe ich für den gewählten Node das CheckState)
Das funktioniert auch alles.

Jetzt aber meine Frage: Solange der User im Baum herumclickt, und Knoten im 3. Level an/abwählt, ändert sich ja auch der Zustand der 2 übergeordneten Knoten (komplett abgewählt, dieser "halb" gewählte Zustand, alle Knoten im Level 3 angewählt) - Screenshot 1
Unbenannt.PNG
Unbenannt.PNG (20.76 KiB) 148 mal betrachtet
Beim nächsten Start des Programms, will der User weitermachen. Hierzu hole ich aus einer DB-Tabelle seine bereits gewählten Knoten des dritten Levels.
Ich iteriere über alle Knoten, bis ich die passenden Knote(n) zum DB-Eintrag gefunden habe, und setze im Code

Code: Alles auswählen

Node^.CheckState:=csCheckedNormal;  
"Problem": Der Zustand wird nicht an die übergeordneten Knoten durchvererbt.
Screenshot 2
Unbenannt2.PNG
Unbenannt2.PNG (12.92 KiB) 148 mal betrachtet
Was muss ich noch machen (ein anderes Ereignis feuern?), damit es "durchvererbt" als ob der User den Eintrag manuell gewählt hätte?
Hintergrund: das VST wird im eingeklappten Zustand geladen/gezeigt (man sieht nur die Knoten des obersten/ersten Levels), und der User soll eben erkennen
"Unterhalb dieses Knotens hast du schon Auswahlen getroffen"

ein

Code: Alles auswählen

vst.Refresh;
ist es nicht (schon gestestet).

Hoffe ich war verständlich
Zuletzt geändert von Zvoni am Do 19. Feb 2026, 15:08, insgesamt 2-mal geändert.
Ein System sie alle zu knechten, ein Code sie alle zu finden,
Eine IDE sie ins Dunkel zu treiben, und an das Framework ewig zu binden,
Im Lande Redmond, wo die Windows drohn.

Benutzeravatar
fliegermichl
Lazarusforum e. V.
Beiträge: 1753
Registriert: Do 9. Jun 2011, 09:42
OS, Lazarus, FPC: Lazarus Fixes FPC Stable
CPU-Target: 32/64Bit
Wohnort: Echzell

Re: VirtualStringTree - Setzen Checkbox aus Code

Beitrag von fliegermichl »

Das Problem ist das direkte setzen der Eigenschaft CheckState in der Node. Dann bekommt der Tree das nicht mit.
Versuche mal

Code: Alles auswählen

Tree.CheckState[Node] := csCheckedNormal;

Benutzeravatar
Zvoni
Beiträge: 550
Registriert: Fr 5. Jul 2024, 08:26
OS, Lazarus, FPC: Windoof 10 Pro (Laz/FPC fixes)
CPU-Target: 64Bit
Wohnort: BW

Re: VirtualStringTree - Setzen Checkbox aus Code

Beitrag von Zvoni »

fliegermichl hat geschrieben: Do 19. Feb 2026, 13:38 Das Problem ist das direkte setzen der Eigenschaft CheckState in der Node. Dann bekommt der Tree das nicht mit.
Versuche mal

Code: Alles auswählen

Tree.CheckState[Node] := csCheckedNormal;
Michl?
Ich könnt dich knutschen :lol: :lol:
Jepp, genau das war es.
Es wird sogar das OnChecked gefeuert.
Leicht repariert mit ner Sperr-Variablen "CheckFromCode"

Danke!
Ein System sie alle zu knechten, ein Code sie alle zu finden,
Eine IDE sie ins Dunkel zu treiben, und an das Framework ewig zu binden,
Im Lande Redmond, wo die Windows drohn.

Antworten