Hallo udg,
zuerst einmal:
Mit dem Design hast Du Dir wirklich Mühe gegeben - sieht sehr gut aus.
Wenn nun noch die Funktion dem Design standhält wird's perfekt.
Anbei noch ein paar Tipps:
1. Nachdem ich einfach mal auf "Starten" geklickt und den File-Requester dann abgebrochen hatte, dachte ich zuerst dass das Programm komplett abgestürzt sei, da keine Reaktion mehr erfolgte.
Nachdem ich mir dein Programm mal etwas näher angeschaut hatte, war klar was passierte.
Deine Examine() Routine versuchte, alle Namen meiner ~542.000 Dateien auf meiner Platte auszulesen und in eine Text-Variable zu speichern.
Zu Text-Variablen solltest Du wissen, dass diese in PB unter bestimmten Bedingungen extrem langsam verarbeitet werden.
Und je mehr Zeichen eine solche Variable enthält, desto langsamer wird die Verarbeitung.
Ich habe Dein Programm nach etwas über 20 Minuten abgebrochen, wobei die Text-Variable zu diesem Zeitpunkt rund 34 MB Speicher in Anspruch genommen hat.
Bei jedem weiteren Eintrag mussten also zuerst ~34 MB Daten verarbeitet werden ... und es wären noch gut 80 MB an weiteren Daten hinzu gekommen.
In Anbetracht dessen, dass die Routine mit größer werdender Datenmenge immer langsamer wird, dürfte das Einlesen geschätzte 2-3 Stunden gedauert haben.
Wie Du siehst - nicht wirklich praktikabel.
Du solltest Dir vielleicht nochmal den Hinweis von TS-Soft bzgl. der LinkedList anschauen.
Ich habe Deine Examine() Routine mal probehalber auf eine LinkedList umgebaut, und das Einlesen von ~542.000 Dateien mit einer Textmenge von ~117 MB war nach knapp
8 Sekunden (ja ... 8 SEKUNDEN) beendet.
Wie Du siehst ... ein 'kleiner' Unterschied zu voraussichtlichen 2-3 Stunden.
Ich wollte Dir jetzt aber hier nicht einfach meinem Code posten, um Dir nicht den 'Spaß' beim selber herausfinden zu nehmen.
Solltest Du aber nicht klar kommen, dann kannst Du gerne nochmal fragen.
Aber mal so als Starthilfe:
- eine globale LinkedList erstellen (mit String-Variable)
- statt den aktuellen Directory-Eintrag an den bisherigen Text anzufügen, ein neues LinkedList Element erstellen und den Text dort speichern (also jeder Directory-Eintrag in ein neues LinkedList-Element).
- später, beim speichern, einfach alle Elemente der LinkedList mit einer ForEach-Schleife durchlaufen und deren Inhalt Zeile für Zeile abspeichern.
Solltest Du schaffen können.
2. Wie ich ja oben bereits geschrieben hatte, habe ich den Speichern-Filerequester abgebrochen.
Dies hat zur Folge, dass später bei Speichern die Fehlermeldung "Konnte Datei nicht erstellen!" ausgegeben wurde.
Aber eben erst NACHDEM die Dateien eingelesen wurde.
Was glaubst Du wie ärgerlich das für den Anwender ist, wenn er (bei der jetzigen Geschwindigkeit) mehrer Minuten oder gar Stunden wartet und am Ende dann gesagt bekommt, dass die Daten nicht gespeichert werden konnten.
Hier solltest Du also das Ergebnis der Filerequesters besser abfragen und prüfen ob Du in die angegebene Datei überhaupt schreiben kannst bzw. ob eine vorhandene Datei überschrieben werden soll.
Und das ganze natürlich BEVOR Du mit dem aufwändigen Sammeln der Daten beginnst.
3. Wie Du ja selber schon bemerkt hast, kann man auf "Starten" klicken bevor ein Verzeichnis ausgesucht wurde.
Da ein 'DisableGadget()' für Dich nicht in Frage kommt, könntest Du Dir ein Flag (also eine Variable) erstellen, in der Du speicherst ob der Benutzer bereits ein Verzeichnis gewählt hat und dieses Flag in Deinem #Button_Start-Event abfragen.
Weiterhin könntest Du im #Button_Start-Event den Inhalt vom StringGadget(#String_Path,...) auslesen und prüfen ob sich dort eine legaler Pfadangabe befindet.
4. Zum 'Progress':
Ein Progress-Balken fällt ja aus bereits beschriebenen Gründen flach.
Aber Nichts ist schlimmer für den Anwender als wenn er irgendwo klickt und kein Feedback bekommt ob sich was tut.
Um den User zu informieren was gerade geschieht, könntest Du z.B. in einem Textfeld das aktuell bearbeitete Verzeichnis (ggfl. in gekürzter Form) ausgeben. Dann würde der User sehen dass das Programm arbeitet. (Ähnlich der Such-Anzeige im 'TotalCommander' - falls Du das Programm kennst.)
So, ... das soll's aber jetzt erst mal gewesen sein.
Ich hoffe Du kannst was mit den Tipps anfangen.
Wünsche Dir und auch allen anderen PBlern 'nen guten Rutsch und ein glückliches und erfolgreiches 2017 !!!

PL.