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 - Scrollbar aktualisieren (https://www.delphipraxis.net/184387-virtualstringtree-scrollbar-aktualisieren.html)

dGeek 22. Mär 2015 15:36

VirtualStringTree - Scrollbar aktualisieren
 
Ich nutze eine VirtualStringTree und befülle diese mit vielen Daten. Etwa 3000 Einträge.

Wenn ich jetzt nur noch Nodes anzeigen lasse, die eine bestimmte Caption haben, so klappt das auch wunderbar.
Alle Nodes, die die Caption nicht haben, mache ich mit "IsVisible[Node] := False;" unsichtbar.

Nun das Problem: die Scrollbar wird nicht aktualisiert. Sie wird erst aktualisiert, wenn ich sie manuell rauf und runter bewege.

Was kann man da machen?
Habe schon verschiedene Möglichkeiten durch:
Mit SendMssage und PostMessage ans Ende der Scrollbar "fahren" und per VST ans Ende fahren. Klappt alles nicht.

jaenicke 22. Mär 2015 16:16

AW: VirtualStringTree - Scrollbar aktualisieren
 
Das passiert bei mir nicht. Ich filtere auf die gleiche Weise über Editfelder in einer ausklappbaren Titelleiste der VST und das funktioniert hier problemlos.

Hast du vielleicht ein kleines Beispielprojekt?

dGeek 22. Mär 2015 16:21

AW: VirtualStringTree - Scrollbar aktualisieren
 
A propos Edit:

während ich in einem Edit etwas eingebe, mache ich alle Nodes wieder sichtbar. Das zwingt die VST sich zu aktualisieren.
Danach lasse ich, wie bereits beschrieben, alles Nodes, die als Caption nicht das haben, was im Edit steht, ausblenden [ (Sender as TVirtualStringTree).IsVisible[Node] := False; ].

Kann es daran liegen, dass ich das Ausblenden im VSTBeforeItemErase-Event mache?

jaenicke 22. Mär 2015 16:28

AW: VirtualStringTree - Scrollbar aktualisieren
 
Zitat:

Zitat von dGeek (Beitrag 1294425)
Kann es daran liegen, dass ich das Ausblenden im VSTBeforeItemErase-Event mache?

Ja, davon gehe ich mal aus. Dort ist das denkbar ungünstig, weil du beim Zeichnen eines Eintrags Sichtbarkeiten umschaltest. :shock:

Ich glaube du solltest vielleicht erklären was du eigentlich vorhast bzw. warum du an der Stelle aktuell filtern möchtest. Normalerweise ändert sich die Sichtbarkeit der Einträge doch nicht in Abhängigkeit von einer Zeichenroutine. Bei uns z.B. klickt der Benutzer auf die Titelleiste, diese wird daraufhin doppelt so hoch und ein Editfeld wird darin eingeblendet (bzw. mehrere bei mehreren gefilterten Spalten). Die Sichtbarkeit wird dann im OnChange des Editfelds gesetzt.

dGeek 22. Mär 2015 16:42

AW: VirtualStringTree - Scrollbar aktualisieren
 
Im Prinzip möchte ich nur eine sehr einfache Filterung per Edit-Eingabe verwirklichen.

Man gibt etwas im Edit-Feld ein und daraufhin soll das TreeView nur noch die Nodes anzeigen, wo z.B. die Caption zum Edit-text passt.

Edit: ich habe das "IsVisible[Node] := False" jetzt mal in ein anderes Event gepackt - keine Änderung. Egal, welches Event ich zum Test nehme.

dGeek 22. Mär 2015 17:21

AW: VirtualStringTree - Scrollbar aktualisieren
 
Ich habe jetzt eine "Lösung" gefunden.

1. VST wird ganz normal befüllt
2. Im Edit-Feld wird etwas eingegeben und Prozedur "X" aufgerufen
3. In Prozedur X wird nun durch alle Nodes durch-iteriert. Passt das Node zum Edit (Filter), wird es angezeigt, anderen Falls verborgen.

Sprich: das Anzeigen und Verbergen der Nodes habe ich nun komplett von den Events des VST getrennt gestaltet. Funktioniert super bisher.

jaenicke 22. Mär 2015 18:06

AW: VirtualStringTree - Scrollbar aktualisieren
 
Genau so ist es auch am besten.

Und ich glaube jetzt verstehe ich auch warum es bei dir nicht geklappt hat. ;-)
Du hast vermutlich nur ein Neuzeichnen ausgelöst und dann in OnBeforeItemErase nur die Sichtbarkeit des aktuellen Knotens gesetzt. Habe ich richtig geraten?

Wenn ja:
Wenn die VST neu gezeichnet wird, werden nur die Knoten im sichtbaren Bereich neu gezeichnet. Das macht die Komponente ja unter anderem so schnell. Sprich du hast die Sichtbarkeit der anderen Knoten dann noch gar nicht gesetzt. Das passierte erst beim Scrollen, wenn die anderen Knoten in den sichtbaren Bereich kamen. Und deshalb blieb die Scrollbar auch unverändert.

dGeek 22. Mär 2015 19:26

AW: VirtualStringTree - Scrollbar aktualisieren
 
Ganz genau das war der Fall ;)

generic 24. Mär 2015 15:31

AW: VirtualStringTree - Scrollbar aktualisieren
 
Zitat:

Zitat von dGeek (Beitrag 1294428)
Ich habe jetzt eine "Lösung" gefunden.

1. VST wird ganz normal befüllt
2. Im Edit-Feld wird etwas eingegeben und Prozedur "X" aufgerufen
3. In Prozedur X wird nun durch alle Nodes durch-iteriert. Passt das Node zum Edit (Filter), wird es angezeigt, anderen Falls verborgen.

Beim 2. Stammtisch hab ich damals mal was in dieser Richtung gezeigt:
http://www.delphipraxis.net/internal_redirect.php?t=124431

Das arbeitet mit IterateSubtree.


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