Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Delphi TreeView Verwaltung (https://www.delphipraxis.net/171105-treeview-verwaltung.html)

Dunkelbunt27 20. Okt 2012 12:44

TreeView Verwaltung
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo Delphi-PRAXIS,

ich lade in ein TreeView alle Pfade und Unterpfade aus einem bestimmten Verzeichnis um damit arbeiten zu können.
Das sieht dann etwa so aus wie in dem Screenshot, nur mit verschiedenen anderen Ordnern und Dateien.

Jetzt möchte ich zwei Dinge realisieren:
1) Wie kann ich die aktuelle Auswahl sichern, also sprich:
den aktuell geöffneten Ordner und das markierte Dokument

Das ist dafür notwendig, wenn ich eines der Dokumente mit meinem Programm rauslösche, dann lade ich die Verzeichnisse/Dateien neu in das TreeView, mach es also tot und schreibe die Verzeichnisse wieder neu rein. Dabei gehen dann natürlich alle Ordner zu. Ich möchte dann den Ordner der vor dem löschen offen war wieder automatisch 'öffnen', also markieren lassen.

2) Ich lege die Dateinamen so an, dass die Erstellungszeit im Namen beinhaltet ist, also "17:30 Neues Dokument.txt" und "17:35 Veränderung.txt".
Wie kann ich die Liste so sortieren lassen, dass das neuer Dokument, also "17:35 Veränderung.txt", oben steht?
(Oder siehe Screenshot:
4.txt
3.txt
2.txt
1.txt
0.txt sortieren)


Ich hoffe jemand kennt sich damit aus und kann es mir nachvollziehbar erklären, denn mit TreeViews und deren Struktur kenne ich mich noch nicht so gut aus...

FG Dunkelbunt

RWarnecke 20. Okt 2012 13:52

AW: TreeView Verwaltung
 
Für die Sortierung würde ich die Eigenschaft SortType entsprechend setzen.

Dunkelbunt27 20. Okt 2012 14:25

AW: TreeView Verwaltung
 
Danke für die Antwort.

Das Problem beim Sortieren war immer, dass alles absteigend sortiert wurde, also oben das Älteste und unten das Neuer angezeigt wurde.
Das Sortieren klappt jetzt (halbwegs) so wie ich es wollte.

_____________________________________________
Erklärung für andere mit dem selben Problem:
Ich habe
Delphi-Quellcode:
TreeView.SortType := stText
gesetzt,
nach dem Beschreiben des TreeView, dann
Delphi-Quellcode:
ATreeViewlphaSort(True);
aufgerufen
(true, damit auch die Unterzweige sortiert werden).
AlphaSort sucht dann ob im OnCompare etwas steht, also habe ich in das OnCompare folgenden Code geschrieben:
Delphi-Quellcode:
Compare := -AnsiCompareStr(Node1.Text, Node2.Text);
Wichtig in meinem Fall war das MINUS vor Compare, weil dadurch die Sortierung umgekehrt wurde.
Jetzt wird so sortiert 4,3,2,1,0 anstelle von 0,1,2,3,4.


Das erste Problem ist dadurch aber noch nicht gelöst :/

Popov 20. Okt 2012 18:17

AW: TreeView Verwaltung
 
Es gibt ein wunderbares Tutorial zu TreeView in Internet, das läßt zum Schluß kaum Fragen offen:

http://users.iafrica.com/d/da/dart/z.../TreeView.html

Ist zwar schon sehr alt (ja, so spartanisch sah das Internet in seinen Anfängen 1997 aus), aber immer noch gut.

nuclearping 21. Okt 2012 08:03

AW: TreeView Verwaltung
 
Zitat:

Zitat von Dunkelbunt27 (Beitrag 1187727)
2) Ich lege die Dateinamen so an, dass die Erstellungszeit im Namen beinhaltet ist, also "17:30 Neues Dokument.txt" und "17:35 Veränderung.txt".
Wie kann ich die Liste so sortieren lassen, dass das neuer Dokument, also "17:35 Veränderung.txt", oben steht?

Du musst auf jeden Fall die Zeit aus dem String während der Sortierung extrahieren und gesondert verarbeiten (String -> TTime). Dann kannst du mit < und > vergleichen.

Kenne mich mit dem TTreeView nicht aus, arbeite fast ausschließlich mit dem TVirtualStringTree, aber ich glaube im TTreeView gibt's auch einen "OnCompareNode"-Event? :stupid:

Dunkelbunt27 21. Okt 2012 09:48

AW: TreeView Verwaltung
 
Okay, danke Leute.
Das Tutorial schau ich mir dann mal an, ist wirklich schon etwas älter :-D

himitsu 21. Okt 2012 09:49

AW: TreeView Verwaltung
 
Wozu extrahieren?

Wenn die Zeit immer im Format HH:MM ist, also mit führenden Nullen ala 01:02, dann kann man dieses auch problemlos per String vergleichen, da die höherwertigen Werte immer vorne und deren Reihenfolge immer gleich sind.

Genauso läßt sich ein Datum wie YYYY-MM-DD oder eine Zahl 0000002 (solang es immer gleichviel Ziffern mit führernder Null gibt) völlig ohne Probleme als String vergleichen.

Nur eben DD.MM.YYYY geht natürlich nicht, da hier die größten Werte hinten stehen, oder wenn der Wochentag als Wort/Abkürzung vorkommt, da diese ebenfalls nicht alphabetisch sortierbar sind.

nuclearping 21. Okt 2012 12:48

AW: TreeView Verwaltung
 
Zitat:

Zitat von himitsu (Beitrag 1187788)
Wozu extrahieren?

Wenn die Zeit immer im Format HH:MM ist, also mit führenden Nullen ala 01:02, dann kann man dieses auch problemlos per String vergleichen, da die höherwertigen Werte immer vorne und deren Reihenfolge immer gleich sind.

Genauso läßt sich ein Datum wie YYYY-MM-DD oder eine Zahl 0000002 (solang es immer gleichviel Ziffern mit führernder Null gibt) völlig ohne Probleme als String vergleichen.

Nur eben DD.MM.YYYY geht natürlich nicht, da hier die größten Werte hinten stehen, oder wenn der Wochentag als Wort/Abkürzung vorkommt, da diese ebenfalls nicht alphabetisch sortierbar sind.

Sagmal stalkst du mich? :gruebel: Kaum schreibe ich irgendwo was, dauerts kaum paar Stunden und du hast irgendwas auszusetzen, selbst wenn's völlig banal und überflüssig ist.

Wenn du lieber Strings vergleichst, um vlt. den Aufwand zu sparen und das Datum zu vergleichen (was es ja nunmal ist), dann tu das. Ich persönlich bevorzuge den Weg, dann in so einem Fall auch mit einem Datum zu arbeiten, statt einem String.

Popov 21. Okt 2012 15:29

AW: TreeView Verwaltung
 
Zitat:

Zitat von Dunkelbunt27 (Beitrag 1187787)
Das Tutorial schau ich mir dann mal an, ist wirklich schon etwas älter :-D

Auf das Alter kommt es nicht an.


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:22 Uhr.

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