TreeView Alphasort

Rund um die LCL und andere Komponenten
Antworten
lzuser
Beiträge: 97
Registriert: Sa 20. Jun 2009, 16:00
OS, Lazarus, FPC: Win10 20H2, Laz 2.0.8 auch Linux Mint Mate 20, Laz 2.0.6
CPU-Target: 64Bit

TreeView Alphasort

Beitrag von lzuser »

Laz. 1.8.4 auf Win10 Experimente mit TreeView

1.) Nach Selected.AlphaSort; ein Repaint oder Refresh zeigt nur Bruchstücke an.
Gibt es einen Befehl, mit der die Anzeige im gleichen Zustand nur neusortiert erscheint?
Ich meine nicht: FullCollapse; Selected.AlphaSort; FullExpand;
Das funktioniert, aber dann sind ja alle Knoten auf.

2.) Bei der Sortierung erscheint "acer" vor "Aber", "fisch" vor "Fach" ...
Welcher Regel folgt das? Oder ist das ein Fehler?

Danke für eure Erfahrungen.

Warf
Beiträge: 1909
Registriert: Di 23. Sep 2014, 17:46
OS, Lazarus, FPC: Win10 | Linux
CPU-Target: x86_64

Re: TreeView Alphasort

Beitrag von Warf »

1) keine Ahnung ob’s einfacher geht, aber ich hab mal vor nem ähnlichem Problem gestanden (der tree view wurde automatisch gefüllt, wobei der alte State eventuell gelöscht wurde und daher alles neu zusammengeklappt war) da hab ich einfach am Anfang mir den State gespeichert, geupdated und Danach die die offen waren neu geöffnet

2) wird Mac ascii werten sortiert, a = 97, A = 65 (oder so) und für f und F gilt das selbe

wp_xyz
Beiträge: 4885
Registriert: Fr 8. Apr 2011, 09:01

Re: TreeView Alphasort

Beitrag von wp_xyz »

(1) kann ich nun mit dem beigefügten Programm reproduzieren, ohne das im einzelnen zu verstehen. Folge den Anleitungen auf dem Formular. Wenn man das TreeView.Refresh gegen ein TreeView.Invalidate austauscht, ist der Fehler weg.

(2) Wenn man in den Quellcode schaut, dann sieht man, dass die Sortierung über AnsiCompareStr läuft, und dazu findet man, zumindest für Delphi, auf http://www.delphibasics.co.uk/RTL.asp?N ... CompareStr:
"The comparison is not affected by length - it is carried out on a letter by letter basis. But a longer string is greater than a shorter, otherwise matching string. The comparison is case sensitive.
Upper case letters > Lower case letters; Lower case letters > Numbers".
Dateianhänge
TreeView_AlphaSort.zip
(2.43 KiB) 89-mal heruntergeladen

lzuser
Beiträge: 97
Registriert: Sa 20. Jun 2009, 16:00
OS, Lazarus, FPC: Win10 20H2, Laz 2.0.8 auch Linux Mint Mate 20, Laz 2.0.6
CPU-Target: 64Bit

Re: TreeView Alphasort

Beitrag von lzuser »

Danke für die Hinweise.
zu 1.)
Ich habe 3 Knotenebenen: 0=Root 1=Ordner 2=Dateinamen
Wenn ich einen Ordner hinzugefügt habe, also Ebene 1, dann landet der richtig am Ende.
Jetzt Root selektieren und Selected.AlphaSort.
Der Baum wird neu gezeichnet, aber nur bis incl. des neuen richtig einsortierten Ordners. Danach kommt nichts mehr.
Da hilft auch Invalidate statt Repaint nichts.
Erst wenn ich das Fenster (und damit auch das TreeView) per Maus in der Größe ändere, wird der Baum vollständig angezeigt.
Ein Auslösen von FormResize(Self); (leere Prozedur) hilft jedoch nichts.
Sehr merkwürdig.
zu 2.)
AnsiCompareText (berücksichtigt nicht die Klein/Grossschreibung) statt AnsiCompareStr wäre für mich die richtige Sortierweise.
Kann man das beim TreeView irgendwo einstellen?

wp_xyz
Beiträge: 4885
Registriert: Fr 8. Apr 2011, 09:01

Re: TreeView Alphasort

Beitrag von wp_xyz »

lzuser hat geschrieben:Danke für die Hinweise.
zu 2.)
AnsiCompareText (berücksichtigt nicht die Klein/Grossschreibung) statt AnsiCompareStr wäre für mich die richtige Sortierweise.
Kann man das beim TreeView irgendwo einstellen?

Du kannst du mit CustomSort eine eigene Sortier-Routine aufrufen.

Antworten