Autor Beitrag
hRb
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 267
Erhaltene Danke: 12



BeitragVerfasst: Mo 10.12.18 18:28 
Hallo Freunde,
hänge an einem neuen Problem. Ich möchte Dateien in einer Stringgridliste und als Listview anzeigen und dabei nach Dateiendungen selektieren. Für einen einzigen Ordner ist alles gelöst.
Nun will ich die Programmfunktion auf mehrere Ordner erweitern.
Mein Lösungsansatz war wie folgt:
1. Ich wähle per FileOpenDialog einen Ordner aus und erhalte in einer FileListBox2 die Dateinamen des Verzeichnises.
2. Diese Dateinamen kopiere ich inklusive dem kompletten Pfad in eine zentrale FileListBox1
ausblenden Delphi-Quelltext
1:
2:
   for j:=0 to FileListbox2.Items.Count-1 do    // Pfad + Dateien in Box1 hinzufügen
     FileListbox1.Items.Add(vAktuPfad + '\' + FileListbox2.Items.Strings[j]);
3. Den Pfadname vom aktuell gewählten Ordner (vAktuPfad) merke ich mir in einer ListBox
4. Aus der FileListBox1 heraus bereite ich die StringGridliste und die Listview auf.
5. Diesen Vorgang wiederhole ich für alle gewünschten Ordner.

Meine FileListbox1 ist also der "Sammelbehälter" und enthält in den einzelnen Strings nicht nur den Dateinamen, sondern den komplett langen Pfad+Dateinamen. So weit so gut - funktioniert.
Nun mein Problem:
Selektiere ich über Parameter FileListBox1.Mask meine Dateien, dann werden die "unerwünschten" Dateien nicht nur ausgeblendet, sondern FileListBox1 wird automatisch komplett neu gefüllt. Da jedoch FileListBox1.Drive und FileListBox1.Directory nicht vorbesetzt werden können (mehrere unterschiedliche Pfade), ist mein "Sammelbehälter" weg und ich erhalte nur noch die Dateien aus meinem Programmpfad. Ich hoffe das Problem verständlich erläutert zu haben.

Welche Lösungsmöglichkeiten gibt es hier? Ich habe eine zweite FileListBox (1) gewählt, um per Mask-Befehl einfach zu selektieren - was bei einer normalen ListBox nicht der Fall ist. Hatte allerdings nicht damit gerechnet, dass bei Mask-Änderung der gesamte Ordner neu eingelesen wird (Denkfehler).
Eine Möglichkeit wäre nach einer Mask-Änderung in einer Schleife über alle gemerkten Ordner (siehe Pkt.3 ListBox) alle Ordner und Dateien neu einlesen (scheint mir jedoch aufwändig, da dahinter noch einiges mehr abläuft). Wie bearbeitet man mehrere Ordner?
Guter Rat ist willkommen.
hRb
Frühlingsrolle
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Mo 10.12.18 19:54 
- Nachträglich durch die Entwickler-Ecke gelöscht -
hRb Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 267
Erhaltene Danke: 12



BeitragVerfasst: Mi 12.12.18 01:03 
Hallo Frühlingsrolle,
Genannte Funktionen kenne ich alle, nutze auch viele davon im Programm, hilft aber nicht zur einfachen DateiSelection, z.B. aller Grafikdatei-Typen - es sei denn ich schreibe eine eigene Mask-Routine. Und selbst wenn, welches Objekt sollte Deiner Meinung nach der Container für alle Dateien sein? Letztlich muss auch dieses bei *.* wieder mit den Dateien aller Verzeichnisse gefüllt werden. Nachdem mein Programm für ein einziges Verzeichnis fertig programmiert ist und funktioniert, scheint mir eine Schleife (wie angedeutet) schneller realisiert. Geht eben bei vielen Dateien nur auf die Laufzeit. Fragt da heut noch jemand danach?
hRb
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10181
Erhaltene Danke: 1254

W10ent
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Mi 12.12.18 01:49 
Moin!

Du hast bereits festgestellt, dass die von dir missbrauchten visuellen Komponenten für den gewünschten Zweck mindestens ungeeignet, wenn nicht gar völlig falsch sind. Andererseits hast du dich aber auch bereits entschieden, den angefragten und erhaltenen, guten Rat nicht anzunehmen. Also worüber diskutieren wir hier eigentlich?! :nixweiss:

cu
Narses

_________________
There are 10 types of people - those who understand binary and those who don´t.
jasocul
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 6386
Erhaltene Danke: 146

Windows 7 + Windows 10
Sydney Prof + CE
BeitragVerfasst: Mi 12.12.18 08:46 
Wie Narses schon schrieb und du auch festgestellt hast, ist dein Ansatz mit den Komponenten "ungünstig". Du musst offensichtlich einen Teil deiner Anforderungen selbst im Programm verwalten.

Leider steht in deinem Profil nicht, welche Delphi-Version du hast.

Es gibt schon seit ein paar Jahren die Klasse TDirectory mit der Klassen-Methode GetFiles.
Mit dieser kannst du auch rekursiv und mit Filter-Maske die Verzeichnisse durchsuchen lassen.

Weitere Klassen, die für dich in diesem Zusammenhang interessant sein könnten, sind TFile und TPath.
hRb Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 267
Erhaltene Danke: 12



BeitragVerfasst: Mi 12.12.18 18:24 
Tut mir Leid, wenn ich mit meinem Einwand den "heiligen Zorn" der Experten erregt habe.
Hätte ja sein können, dass es an der FileListbox ein unbekanntes "Schräubchen" gibt, das die automatische Aktualisierung zeitweise unterbindet. Bei soviel fachlichem Gegenwind werde ich wohl meinen Ansatz neu überdenken. Danke jedenfalls für alle bisherige und hoffentlich auch künftige Hilfe.
PS: arbeite mit Delphi Berlin 10.2
hRb
jasocul
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 6386
Erhaltene Danke: 146

Windows 7 + Windows 10
Sydney Prof + CE
BeitragVerfasst: Do 13.12.18 08:58 
user profile iconhRb hat folgendes geschrieben Zum zitierten Posting springen:
Tut mir Leid, wenn ich mit meinem Einwand den "heiligen Zorn" der Experten erregt habe.

Ich denke, weder Narses noch ich wollten, dass das so bei dir ankommt.
An sich ist es ja auch richtig, dass du erstmal bei deinem eingeschlagenen Weg nach einer Lösung suchst. Es klappt nur leider so nicht. Und mehr sollte unsere "Kritik" auch nicht aussagen.

Für diesen Beitrag haben gedankt: Narses