Zweifellos bieten die VCL Datei Dialoge eine Vielzahl von Konfigurationsmöglichkeiten, die die meisten Standardanwendungsfälle abdecken. Aber manchmal reicht das vielleicht nicht aus und Sie möchten einen speziellen benutzerdefinierten Dialog mit einem anderen Layout, zusätzlichen Steuerelementen (z. B. für Import/Export-Dialoge) oder einem anderen Aussehen erstellen.
Ein Neuaufbau des Dialogs von Grund auf, einschließlich aller dateisystembezogenen Komponenten, wird jedoch in den meisten Fällen keine praktikable Alternative sein. An dieser Stelle können die ShellBrowser Komponenten die Lücke recht komfortabel füllen: Die gesamte Win32-Shell-bezogene Funktionalität ist in einfach zu bedienende Komponenten verpackt, so dass Sie sich auf Ihren speziellen Anwendungsfall konzentrieren können.
Sie können eine Testversion der ShellBrowser Components über den GetIt Package Manager von Embarcadero oder über den Link am Ende dieses Artikels beziehen.
Nach der Installation finden Sie die ShellBrowser-Komponenten im Bereich „JAM Software“ der Komponentenpalette.
Der Windows-Explorer-Stil
Der schnellste Weg ist die Verwendung einer „TJamExplorerBrowser“ Komponente als Hauptbaustein des Dialogs. Ähnlich wie die FileDialog-Komponenten der VCL ist ExplorerBrowser um ein Windows COM-Objekt herum aufgebaut und stellt einen konfigurierbaren Dateisystem-Browser dar, der die meisten Teile mit dem Windows Datei-Explorer teilt.
Mit der Eigenschaft „VisiblePanes“ können Sie konfigurieren, welche Teile des Steuerelements Sie anzeigen möchten (die Ordneransicht auf der rechten Seite kann nicht ausgeblendet werden).
Weitere Optionen zur Entwurfszeit für das Steuerelement sind die Einstellung des Pfades oder „Special Folder“ – eine Sammlung von benannten Speicherorten, einschließlich Dateisystemordnern (z. B. SF_DOWNLOADS) und virtuellen Ordnern (SF_DRIVES), sowie verschiedene Filter- und Ansichtseinstellungen.
Um den Dialog zu vervollständigen, fügen wir zwei weitere typische Dateidialog-Komponenten hinzu, die „TJamOpenSaveComboBox“ für den zu öffnenden oder zu speichernden Dateinamen und die „TJamFilterCombo“ für die Angabe von Dateierweiterungsfiltern, die angewendet werden können.
Steuerelemente synchronisiert halten
Es ist nicht notwendig, zusätzlichen Code zu schreiben, um die Komponenten zu synchronisieren! Dies kann mit einem „TJamShellLink“ durchgeführt werden. Sie können einfach eine Instanz aus der Komponentenpalette fallen lassen und sie als „ShellLink“-Eigenschaft der ShellBrowser-Steuerelemente zuweisen, die synchronisiert werden sollen. Lassen Sie es mich in diesem kleinen Beispiel zeigen: Alle ShellBrowser Controls auf dem Formular verwenden den gleichen ShellLink.
TJamShellLink synchronisiert ausgewählte Pfade, Dateien und Filter zwischen den angeschlossenen Controls. Der ShellLink kann auch verwendet werden, um den Navigationszugriff auf einen erlaubten Bereich von Ordnern zu beschränken.
Im Beispiel unten wird der Filter, der in der TJamFilterCombo gesetzt ist, auf den ExplorerBrowser angewendet, der Text der „TJamOpenSaveComboBox“ auf den Dateinamen gesetzt, der im ExplorerBrowser ausgewählt ist und zu dem Pfad navigiert, den der Benutzer in der TJamOpenSaveComboBox im ExplorerBrowser eingibt.
Die Verwendung des ExplorerBrowser in diesem Beispiel als Hauptkomponente des Dateisystems hat den Vorteil, dass er – da er ein Windows-Steuerelement ist – genau wie der Windows Explorer aussieht und sich verhält. Der Nachteil ist, dass nicht auf alle Details des Aussehens oder Verhaltens zugegriffen werden kann oder diese verändert werden können. Es gibt z.B. keine Möglichkeit, die sichtbaren Wurzelknoten des Navigationsbaums zu filtern; ExplorerBrowser unterstützt auch keine VCL Styles oder eine andere Form von Dark Theme.
Noch mehr Kontrolle: TJamShellTree und TJamShellList
Als alternativer Ansatz kann die ExplorerBrowser-Komponente durch verschiedene andere ShellBrowser-Steuerelemente ersetzt werden, wie z. B. TJamShellList, TJamShellTree und TJamShellBreadCrumbBar. Diese basieren nicht auf einem Windows COM-Objekt, sondern replizieren dessen Aussehen und Verhalten so genau wie möglich, während sie von Standard-VCL-Steuerelementen abgeleitet sind und deren Anpassungsfähigkeit erben. TJamShellLink wird wie zuvor beschrieben unterstützt und diese Steuerelemente unterstützen die VCL-Stile vollständig.
Als Fazit bleibt also festzuhalten, dass es von Ihren genauen Anforderungen abhängt, ob Sie den ExplorerBrowser verwenden oder das VCL-basierte Control-Set einsetzen.
Wofür auch immer Sie sich entscheiden, ein einfacher Dateidialog ist mit wenigen Klicks im Handumdrehen erstellt.
Holen Sie sich kompilierte Beispiel-Applikationen dieser und anderer ShellBrowser-Komponenten oder probieren Sie die Testversion aus.