Freeware
Programme
VB-Bibliotheken
VB-Sourcecode Tipps&Tricks
|
|
|
|
Common-Dialogboxen ohne VBX/OCX
Die Common-Dialogboxen, z.B.
zum Öffnen und Speichern von Dateien, zur Druckerkonfiguration
oder zur Schriftarten- bzw. Farb-Auswahl, haben sowohl für den
Benutzer als auch für den Programmierer entscheidende Vorteile.
Der Benutzer findet in allen Anwendungen dieselben Dialoge vor
und kommt somit schnell damit zurecht. Und auch der Programmierer
muß das Rad nicht neu erfinden. Daß diese Dialogboxen auch ohne
die bekannten Controls commdlg.vbx (VB 3.0), comdlg16.ocx (VB
4.0/16) und comdlg32.ocx (32-Bit) verwendet werden können, möchte
ich Ihnen hier zeigen.
Die eigentliche Funktionalität steckt in
der Datei comdlg32.dll (bzw. commdlg.dll für 16-Bit). Da der
Anwendungsfall immer sehr ähnlich ist, möchte ich hier nicht
die vielen API-Funktionen und sonstigen Deklarationen einzeln
beschreiben, sondern direkt anwendbare VB-Funktionen in einem
Modul dialog.bas bereitstellen und im folgenden kurz erläutern.
Ein Beispiel-Projekt (inkl. dialog.bas) steht zum Download bereit:
Sourcecode Standard-Dialoge (33 KBytes; 01.04.98)
Die Anwendung erfolgt folgendermaßen:
Dialog 'Datei öffnen':
p$ = CurDir$
a$ = Dialog_Open$(Me, "Datei öffnen", p$, "", "Text-Dateien|*.txt|Alle Dateien|*.*", "txt")
Der Funktion Dialog_Open$ werden
sechs Parameter übergeben. Der erste Parameter ist - für alle
der hier beschriebenen Funktionen - ein Fenster, welches das
Eltern-Fenster angibt und für die Positionierung benötigt wird.
Der zweite Parameter gibt den Titel der Dialogbox an (falls eine
leere Zeichenkette übergeben wird, wird der Standardwert
"Öffnen" verwendet). Der dritte Parameter gibt den
Start-Pfad an und der vierte ggf. eine vorzuschlagende Datei. Mit
dem fünften Parameter kann wie bei den VBX/OCX-Controls eine
Filterliste definiert werden. Der sechste Parameter gibt die
Standard-Dateierweiterung an. Wenn der Benutzer auf Abbrechen
drückt, ist die zurückgegebene String-Variable leer. Ansonsten
erhält sie den gewählten Dateinamen (ohne Pfad). Der gewählte
Pfad wird durch den ggf. veränderten dritten Parameter
zurückgegeben.
Dialog 'Datei speichern':
p$ = CurDir$
a$ = Dialog_Save$(Me, "Datei speichern", p$, "",
"Text-Dateien|*.txt|Alle Dateien|*.*", "txt")
Diese Funktion gestaltet sich sehr
ähnlich. Die Standardvorgabe für den zweiten Parameter lautet
hier "Speichern unter". Hauptsächlich unterscheiden
sich die beiden Varianten in der Art und Weise, wie auf eine
Dateinamen-Auswahl reagiert wird, wenn die Datei schon existiert.
Während die Funktion Dialog_Open$ eine Auswahl einer
nicht existierenden Datei ausschließt, wird bei der Funktion Dialog_Save$
auf die Auswahl einer existierenden Datei mit der Frage
"Vorhandene Datei ersetzen?" geantwortet. Vorgaben wie
diese sind über spezielle Flags beim API-Aufruf möglich, wobei
die wichtigsten Kombinationen hier abgedeckt sind. Ähnlich wie Dialog_Save$
verhält sich die hier nicht weiter erklärte Funktion Dialog_Append$,
welche zum Speichern auch bereits existierende Dateien zuläßt,
um diesen Dateien Daten anzuhängen.
Dialog 'Drucken':
fhdc& = Printer.hdc
fmark% = 0: fab% = 2: fbis% = 3
If Dialog_Printer%(Me, fhdc&, fmark%, 1, 5, fab%, fbis%) Then
If fmark% Then
MsgBox "Markierung drucken"
Else
MsgBox "Seiten" + Str$(fab%) + " bis" + Str$(fbis%) + "drucken"
End If
End If
Mit dem Aufruf Dialog_Printer%
wird der Windows-typische Druck-Dialog angezeigt. Der zweite
Parameter gibt den Drucker-Devicekontext an. Per drittem
Parameter wird dem Dialog mitgeteilt, ob in der Anwendung ein
Bereich markiert ist und dieser Punkt ausgewählt werden kann.
Die Funktion ist so gestaltet, daß, falls eine Markierung
existiert, diese auch standardmäßig vorausgewählt wird. Der
Code dafür kann aber bei Bedarf geändert werden (Flag PD_SELECTION).
Vierter und fünfter Parameter geben den maximal druckbaren
Seitenbereich an, die letzten beiden Parameter den
vorgeschlagenen Seitenbereich. Deckt sich dieser Bereich mit dem
Maximalbereich, so wird die Option "Alle Seiten"
standardmäßig aktiviert, ansonsten der Seitenbereich. Kann nur
eine Seite ausgedruckt werden (vierter und fünfter Parameter
gleich), so ist der Seitenbereich deaktiviert. Der Rückgabewert
zeigt den Erfolg an (=0: vom Benutzer abgebrochen).
Dialog 'Drucker einrichten':
fhdc& = Printer.hdc
r% = Dialog_Printer%(Me, fhdc&, -1, 0, 0, 0, 0)
Mit dem Aufruf Dialog_Printer%
und -1 als dritten Parameter wird der 'Drucker einrichten'-Dialog
geöffnet.
Dialog 'Schriftarten':
If Dialog_Font%(Me, ffont$, fsize%, fstyle$, CF_SCREENFONTS+CF_EFFECTS) Then ...
Die Funktion Dialog_Font% zeigt
die Dialogbox zur Auswahl von Schriftarten an. Per zweitem,
drittem und viertem Parameter werden dem Dialog die
vorzuschlagenden Werte für Schriftart, -größe und -stil
(Kombination aus "b"=fett, "u"=unterstrichen,
"i"=kursiv, "s"=durchgestrichen) übergeben
und bei erfolgreichem Anschluß (Rückgabewert ungleich null)
zurückgegeben. Als fünfter Parameter muß eine Konstante
angegeben werden: CF_SCREENFONTS teilt mit, daß alle
Bildschirmschriften und CF_PRINTERFONTS, daß alle
Druckerschriften verwendet werden. Auch die Kombination der
beiden Konstanten ist möglich. Wird zusätzlich CF_EFFECTS
angegeben, dann erweitert sich die Auswahlmöglichkeit um
'unterstrichen' und 'durchgestrichen' sowie 'Farbe'.
Dialog 'Farben':
If Dialog_Color%(Me, color&) Then ...
Die einfachste Dialogbox-Funktion ist Dialog_Color%,
welcher als zweiten Parameter eine Farbe übergeben wird. Dieser
enhält bei erfolgreichem Abschluß (Rückgabewert ungleich null)
den geänderen Wert.
Soweit ansatzweise zu den Funktionen für
die Common-Dialogboxen. Falls man spezielle Eigenschaften
benötigt (z.B. Multiselect in den Dateiboxen), kann ggf. ein
entsprechendes Flag gesetzt werden (hierfür z.B. OFN_ALLOWMULTISELECT).
Eine reichliche Auswahl an Konstanten ist in dialog.bas
definiert. Die Beschreibung ist den Hilfedateien der Controls zu
entnehmen.
Da die Datei commdlg.dll erst seit
Windows 3.1 standardmäßig installiert ist, sollte sie bei einem
Setup für 16-Bit-Anwendungen mit aufgenommen werden - da sie
sonst auf einem System mit Windows 3.0 (falls es sowas noch geben
sollte...) unter Umständen fehlt.
|
|