Thomas Füssl
 
  zurück      Startseite      Gästebuch      Kontakt 
  ©2003 by thfu - Mail an Webmaster   

Freeware

nach Themen:
 Internet
 Multimedia
 System
 Visual Basic

nach Kategorien:
 Programme
 VB-Bibliotheken
 VB-Sourcecode

Index:
 Alle Downloads
 Alle Artikel


Über...

 Sinn und Unsinn
 Gästebuch
 über mich


Partner-Link
EMails und 1 GB kostenloser Speicher bei
GMX

Partner-Link
Bücher bestellen bei
Amazon

 

Freeware
Programme

Mini-WebServer
kleinster Web-Server
VBTools
Werkzeuge für Visual Basic
KeyReMap
Tasten umbelegen
Exe/Bmp-PropertyPage
Eigenschaftsseite
VB-Setup
Setup-Programm
Registry-Tricks


VB-Bibliotheken


Apfel.Ocx
Apfelmännchenprogramm
RegExp.Dll
Reguläre Ausdrücke für VB
SerialID.Dll
Disk-Nummer r/w


VB-Sourcecode Tipps&Tricks


TCP/IP-Klassen
Rekursiv
MIME-Kodierung (base64)
Internet
MinMax
Format 8.3
Standard-Dialoge


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.