Mit nur wenigen Zeilen Code statten Sie Ihre Anwendungen ab sofort mit schnellen
Zip- und Unzip-Funktionen aus (für VB, Delphi, .NET, Office/VBA).
Hierbei lassen sich entweder einzelnen Dateien oder auch gesamte Ordner
zippen bzw. entpacken.
Der Dateiauswahldialog ist ein Windows eigener Systemdialog. Aus diesem Grund kann er von Windows Version zu Windows Version unterschiedlich aussehen – die Handhabung ist aber identisch.
Man kann nun diesen Dialog entweder mithilfe des ActiveX-Controls (Microsoft Common Dialog Control bzw. Comdlg32.ocx im System-Verzeichnis) aufrufen oder mittels der Win32-API. Darüber hinaus gibt es eine Reihe von Freeware-/Shareware-Tools, die ebenfalls diesen Dialog aufrufen können – grundsätzlich funktionieren alle auf die gleichen Art und Weise; sie rufen den in Windows vorhandenen Systemdialog auf.
Vorteil des ActiveX-Controls (Comdlg32.ocx):
Einfache Handhabung
Nachteil des ActiveX-Controls (Comdlg32.ocx):
Das Control steht nur zur Verfügung, wenn entweder die Access Developer Edition oder aber Visual Basic Professional (oder höher) vorliegt. Das Control bzw. dessen Update ist zwar im Internet verfügbar, aber ohne eine bestehende Lizenzdatei nicht einsetzbar.
Lösung 1: Nutzung des ActiveX-Controls (Comdlg32.ocx)
Um das ActiveX-Control nutzen zu können, muss dieses Control zunächst eingebunden werden: Access: in der Formularansicht im Menü Einfügen den Punkt ActiveX-Steuerelement auswählen. In der daraufhin erscheinenden Liste Microsoft Common Dialog Control auswählen. Visual Basic: im Menü Projekt den Punkt Komponenten auswählen. In der daraufhin erscheinenden Liste Microsoft Common Dialog Control durch Aktivierung des Kontrollkästchens auswählen.
Das Microsoft Common Dialog Control besitzt eine Vielzahl von Eigenschaften (Properies), da mit diesem Control nicht nur der Dateiauswahldialog aufgerufen werden kann, sondern auch weitere Systemdialoge:
• Farbauswahldialog
• Schriftenauswahldialog
• Druckerauswahldialog
• Aufruf des Windows Hilfesystems für eigene Hilfedateien
Bei der Nutzung dieses Controls muss man sich zunächst entscheiden, ob der Dialog zum Öffnen einer Datei bestimmt ist, oder aber zum Speichern einer Datei. Der Unterschied liegt darin, dass beim Öffnen die ausgewählte Datei vorhanden sein muss, beim Speichern aber dies nicht unbedingt gegeben sein muss (Neuanlage einer Datei).
Grundsätzlich jedoch führt das Control keinerlei Dateimanipulationen durch (Erstellen neuer Dateien etc.), sondern ist lediglich eine Schnittstelle zum Windows Dateisystem.
Die Vielzahl der erwähnten Eigenschaften decken die genannten Systemdialoge ab. Daher sind für den Dateidialog auch alle diese Eigenschaften notwendig. Um das Control ordnungsgemäß benutzen zu können, stehen folgende Eigenschaften für den Dateiauswahldialog zur Verfügung:
Die hier genannten und nachfolgend erläuterten Eigenschaften beziehen sich auf das Control in der Version 6.0.
Die Eigenschaft CancelError
Mit dieser Eigenschaft kann man dafür sorgen, dass im Fall eines Abbruchs des Dialogs (Abbrechen-Schaltfläche) ein Laufzeitfehler erzeugt wird, der über ein entsprechendes Fehlerhandling abgefangen werden kann. Ist dieser Wert nicht gesetzt, wird auch beim Abbruch kein Laufzeitfehler erzeugt.
Da es sich um einen Boolean-Wert handelt, muss diese Eigenschaft entweder mit True oder False gesetzt werden, wobei False die Standardeinstellung ist.
Die Eigenschaft DefaultExt
Mit dieser Eigenschaft kann man eine Standarddateierweiterung bestimmen. Wird beispielsweise der Dialog zum Speichern aufgerufen, die Standarddateierweiterung auf „.txt“ gesetzt und ein Dateiname ohne Erweiterung eingegeben, so wird diese Erweiterung automatisch an den Dateinamen angehängt.
Die Eigenschaft DialogTitle
Diese Eigenschaft steht nur für den Dateiauswahldialog zur Verfügung und erlaubt es, den Dialogtitel selbst auszuwählen. Die Standardtitel sind „Öffnen“ bzw. „Speichern unter…“.
Die Eigenschaft FileName
Mit dieser Eigenschaft hat man die Möglichkeit, einen Standarddateinamen im Dateidialog vorzubelegen. Nach Beendigung des Dialogs kann über diese Eigenschaft der komplette Dateipfad ermittelt werden.
Die Eigenschaft FileTitle
Über diese Eigenschaft steht nach Beendigung des Dialogs der Dateiname ohne Pfad zur Verfügung.
Die Eigenschaften Filter und FilterIndex
Über diese Eigenschaft kann man die Auswahlliste für die Dateitypen und somit das Verhalten des Controls in der (gefilterten) Anzeige von Datei beeinflussen.
Jeder Eintrag in dieser Dateitypenliste ist zweigeteilt. Zum einen wird die Beschreibung angezeigt und zum anderen wird die Filterung der Dateien im Control entsprechend der Dateiendung gesteuert. Alle Einträge in dieser Eigenschaft müssen durch das Pipe-Symbol | (ASCII 124) voneinander getrennt werden.
Beispiele:
Beschreibender Teil
Filtertyp
Eigenschaftswert
Textdateien (*.txt)
*.txt
Textdateien (*.txt)|*.txt
Grafiken (*.bmp;*.ico)
*.bmp;*.ico
Grafiken (*.bmp;*.ico)|*.bmp;*.ico
Stehen mehrere Dateitypen zur Auswahl, so sind diese Dateiendungen jeweils durch ein Semikolon voneinander zu trennen.
Diese Filter lassen sich auch entsprechend kombinieren:
Die FilterIndex-Eigenschaft wiederum bestimmt, welcher Eintrag in der Dateitypenliste beim Öffnen des Dialogs voreingestellt sein soll. Dabei ist zu beachten, dass der erste Listeneintrag den Index 1 besitzt! Wird der Filter „Textdateien (*.txt)|*.txt| Grafiken (*.bmp;*.ico)|*.bmp;*.ico
„ mit dem FilterIndex = 2 eingesetzt, so wird der Dialog beim Öffnen Grafiken vom Tap *.bmp bzw. *.ico anzeigen.
Die Eigenschaft Flags
Mit dieser Eigenschaft kann das Verhalten des Dialogs beeinflusst werden. Dazu steht eine Reihe von Konstanten zur Verfügung, welche in Kombination miteinander angewendet werden können:
Konstantenname
Flags-Wert
Beschreibung
cdlOFNAllowMultiselect
&H200
Ermöglicht, dass im Listenfeld Dateiname mehrere Dateien ausgewählt werden. Die FileName-Eigenschaft gibt einen String zurück, der alle ausgewählten Dateinamen enthält (die Namen sind im String durch Leerzeichen voneinander getrennt).
cdlOFNCreatePrompt
&H2000
Fragt den Benutzer, ob eine Datei angelegt werden soll, die noch nicht existiert. Dieses Flag setzt automatisch die Flags cdlOFNPathMustExist und cldOFNFileMustExist.
cdlOFNExplorer
&H80000
Verwendet das dem Explorer ähnliche Dialogfeld zum Öffnen von Dateien.
cdlOFNExtensionDifferent
&H400
Weist darauf hin, dass sich die Dateinamenerweiterung des zurückgegebenen Dateinamens von der in der DefaultExt-Eigenschaft angegebenen Erweiterung unterscheidet. Dieses Flag wird nicht gesetzt, wenn die DefaultExt-Eigenschaft Null enthält, wenn die Erweiterungen übereinstimmen, oder wenn die Datei keine Erweiterung hat. Man kann den Wert dieses Flags überprüfen, nachdem das Dialogfeld geschlossen wurde.
cdlOFNFileMustExist
&H1000
Die Benutzer dürfen nur Dateinamen eingeben, die existieren. Wenn dieses Flag gesetzt ist und der Benutzer gibt einen ungültigen Dateinamen ein, wird eine Warnung angezeigt. Dieses Flag setzt automatisch das Flag cdlOFNPathMustExist.
cdlOFNHelpButton
&H10
Zeigt die Hilfe-Schaltfläche für das Dialogfeld an.
cdlOFNHideReadOnly
&H4
Verbirgt das Kontrollkästchen Mit Schreibschutz öffnen.
cdlOFNLongNames
&H200000
Erlaubt lange Dateinamen.
cdlOFNNoChangeDir
&H8
Zwingt das Dialogfeld, das aktuelle Verzeichnis so zu setzen, wie es beim Öffnen des Dialogfelds gesetzt war.
cdlOFNNoDereferenceLinks
&H100000
Verbietet die Dereferenzierung von Shell-Links (auch als Shortcuts bezeichnet). Standardmäßig bewirkt die Auswahl eines Shell-Links, dass dieser von der Shell dereferenziert wird.
cdlOFNNoLongNames
&H40000
Verbietet lange Dateinamen.
cdlOFNNoReadOnlyReturn
&H8000
Spezifiziert, dass die zurückgegebene Datei das Attribut Read-Only nicht gesetzt hat und sich nicht in einem schreibgeschützten Verzeichnis befindet.
cdlOFNNoValidate
&H100
Erlaubt ungültige Zeichen im zurückgegebenen Dateinamen.
cdlOFNOverwritePrompt
&H2
Bewirkt, dass das Dialogfeld Speichern unter eine Warnung erzeugt, wenn der angegebene Dateiname bereits existiert. (Die Benutzer können dann wählen, ob die Datei überschrieben werden soll.)
cdlOFNPathMustExist
&H800
Die Benutzer dürfen nur gültige Pfade eingeben. Wenn dieses Flag gesetzt ist und die Benutzer einen ungültigen Pfad eingeben, erscheint eine Warnung.
cdlOFNReadOnly
&H1
Markiert das Kontrollkästchen Mit Schreibschutz öffnen, wenn das Dialogfeld erzeugt wird. Dieses Flag gibt außerdem den Status des Kontrollkästchens Mit Schreibschutz öffnen nach dem Schließen des Dialogfelds an.
cdlOFNShareAware
&H4000
Zeigt an, dass mögliche Freigabe-Fehler ignoriert werden.
Die Verknüfpung von mehreren Flags erfolgt mittels des Or-Operators:
Flags = cdlOFNAllowMultiselect Or cdlOFNFileMustExist
Die Eigenschaft InitDir
Mit dieser Eigenschaft kann man das Standardverzeichnis vorbelegen, den das Control zur Anzeige der Dateien benutzen soll. Ohne diese Vorbelegung wird der gerade aktuelle Ordner benutzt.
Die Eigenschaft MaxFileSize
Mit dieser Eigenschaft kann man die maximale Stringgröße für die FileName -Eigenschaft bestimmen. Standardmäßig werden 256 Bytes reserviert, was der maximalen Pfadlänge entspricht. Wenn jedoch das Flag cdlOFNAllowMultiselect gesetzt und entsprechend viele Dateien ausgewählt, so reichen diese 256 Bytes unter Umständen nicht mehr aus. Dieser Wert kann zwischen 1 und 32 KB liegen (32 KB = 32.768 Bytes = 128 Pfadmaximallängen).
Aufrufbeispiel des Öffnen-Dialogs:
Code:
Function Dateiauswahl() AsStringOn Error GoTo Dlg_Error
With CommonDialog1
'// Beim Abbruch Laufzeitfehler erzeugen
.CancelError = True '// Standard-Dialogtitel überschreiben
.DialogTitle = "Bitte wählen Sie eine Datei aus:"
'// Auswahlfilter bestimmen
.Filter = "Alle Dateien (*.*)|*.*|" & _
"Microsoft Access Datenbank (*.mdb)|*.mdb|" & _
"Webseiten (*.htm;*.html)|*.htm;*.html"
'// Zweiten Listeneintrag vorbelegen
.FilterIndex = 2
'// Flags setzen
.Flags = cdlOFNAllowMultiselect Or _
cdlOFNFileMustExist Or _
cdlOFNExplorer
'// Dilalog aufrufen
.ShowOpen
'// Ergebnisse ausgeben
Dateiauswahl = .FileName
EndWithExit Function
Dlg_Error:
If Err.Number = cdlCancel Then'32755 (&H7FF3)
MsgBox "Abbruch wurde gewählt!"
Else: MsgBox "Fehler #" & Err.Number & ": " & Err.Description
EndIfEndFunctionSub Beispiel()
Dim sFilepath AsString
sFilepath = Dateiauswahl()
If Len(sFilepath) Then
MsgBox "Dateiauswahl: " & sFilepath, vbInformation
EndIfEndSub
Lösung 2: Nutzung des Win32-API
Die Lösung mittels Win32-API ähnelt in vielen Dingen der ActiveX-Lösung.
Statt dem Control wird hier mit einer entsprechenden Struktur gearbeitet, in deren Elemente die verschiedenen Einstellungen vorgenommen werden.
Type OPENFILENAME
nStructSize As Long Länge der Struktur in Bytes
hwndOwner As Long Windows-Handle des “Besitzerfensters”
hInstance As Long für VB/A uninteressant
sFilter As String s.o. die Eigenschaft Filter
sCustomFilter As String für VB/A uninteressant
nCustFilterSize As Long für VB/A uninteressant
nFilterIndex As Long s.o. die Eigenschaft FilterIndex
sFile As String s.o. die Eigenschaft FileName
nFileSize As Long s.o. die Eigenschaft MaxFileSize
sFileTitle As String s.o. die Eigenschaft FileTitle
nTitleSize As Long Länge des Buffers für sFileTitle
sInitDir As String s.o. die Eigenschaft InitDir
sDlgTitle As String s.o. die Eigenschaft DialogTitle
Flags As Long s.o. die Eigenschaft Flags
nFileOffset As Integer Offset des ersten Dateinamens bei Mehrfachauswahl
nFileExt As Integer Offset des ersten Dateiendung bei Mehrfachauswahl
sDefFileExt As String s.o. die Eigenschaft DefaultExt
nCustData As Long Message für Hook-Funktion des Dialogs
fnHook As Long Funktionsadresse einer Hook-Funktion
sTemplateName As String für VB/A uninteressant
End Type
Copyright 2000-2003 Microsys
Kramer– Alle Rechte vorbehalten - Der Download von Tipps und
Programmen von den Seiten www.access-paradies.de erfolgt auf eigene
Gefahr. Microsys Kramer haftet nicht für Schäden, die
aus der Installation oder der Nutzung von Tipps oder Software aus
dem Download-Bereich erfolgen. Trotz aktueller Virenprüfung
ist eine Haftung für Schäden und Beeinträchtigungen
durch Computerviren ausgeschlossen. Schadenersatzansprüche,
aus welchem Rechtsgrund auch immer, sind ausgeschlossen, wenn Microsys
Kramer nicht Vorsatz oder grobe Fahrlässigkeit zu vertreten
hat. Dies gilt auch für Ansprüche auf Ersatz von Folgeschäden
wie Datenverlust.
Microsoft, Access, Word, Excel, Outlook, Outlook Express, Visual Basic und Windows sind eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.