Wenn Sie Threading nicht benötigen, ist der einfachste Weg das:
%Vor% Wenn ich tricks
wie überschriebene geschützte Methoden machen muss, tendiere ich dazu, eine generische Lösung für das Problem zu verwenden ... ich mache einen Hack für die Klasse.
So machen Sie das mit TDirectoryListbox
.
Auf jedem Formular müssen Sie dieses hacked
TDirectoryListbox
verwenden, fügen Sie einfach unitTDirectoryListbox_WithHiddenAndSystemFolders
zur Schnittstelle uses
hinzu, auf diese Weise verwendet das Formular hacked
TDirectoryListbox
.
Erstellen Sie eine Datei namens unitTDirectoryListbox_WithHiddenAndSystemFolders.pas
in Ihrem Projektordner.
Setzen Sie diesen Text in diese Datei (ich werde später erklären, was ich getan habe):
%Vor%Jetzt erkläre ich, was ich getan habe:
unitTDirectoryListbox_WithHiddenAndSystemFolders
zur Schnittstelle uses
mache ich das Formular, um die modifizierte (aka, hacked
) Komponente zu verwenden. ReadDirectoryNames
zu kopieren (die eine Modifikation benötigt), kopiere sie aus der Unit FileCtrl
und bearbeite diese Kopie dann auf meiner eigenen Unit in fix
das Problem (ohne Hidden Ordner, keine Systemordner); Die trick
soll den Aufruf von FindFirst
bearbeiten, indem ich nach faDirectory
den Teil or faHidden or faSysFile
hinzufüge, ich ändere auch SlashSep
zu IncludeTrailingPathDelimiter
(vermeide einige zusätzliche Referenzen, etc) und mache auch eine Neuformatierung (Indizierung) usw.) so kann ich sehen, dass diese Methode diejenige ist, die ich modifiziert habe. BuildList
, die ich einfach einfach aus der Unit FileCtrl
ohne irgendeine Änderung kopiere (wenn nicht kopiert, funktioniert hack
nicht, seit dem Aufruf von ReadDirectoryNames
ist innerhalb BuildList
). FPreserveCase
und FCaseSensitive
und ihre Deklarationen (sie werden in BuildList
Methode verwendet). TDirectoryListBox
versteckte und Systemordner sehen Ich hoffe, dies hilft anderen, auf diese Weise können Sie sowohl TDirectoryListBox
(Original und Modified) gleichzeitig (aber nicht in derselben Form, sorry) für Ihr Projekt haben, ohne VCL zu ändern.
PD: Jemand mit zusätzlichen Kenntnissen ist vielleicht in der Lage, Eigenschaften hinzuzufügen, die konfiguriert werden müssen, wenn er versteckte und / oder Systemordner als Verbesserung anzeigen muss. Es darf nicht sehr schwierig sein, zwei private boolesche Variablen und ihre entsprechenden property
Deklaration mit Lese- und Schreibmethoden ... ich habe es nicht gemacht, da ich nicht nur solche zwei, auch SymLinks usw. hinzufügen möchte (suche nach faSymLink
in der Einheit SysUtils
und sehe wieviele es gibt, eine Menge davon arbeiten, um sie alle hinzuzufügen), Entschuldigung für die Unannehmlichkeiten dafür.
Ich habe diese Lösung vor kurzem für eine andere Frage gepostet:
Delphi: Kopieren Sie Dateien aus dem Ordner mit Gesamtfortschritt. CopyFileEx?
Tags und Links delphi