vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
SEPA-Dateien erstellen inkl. IBAN-, BLZ-/Kontonummernprüfung  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück
Rubrik: Controls · Sonstiges   |   VB-Versionen: VB4, VB5, VB617.01.02
CommonDialog innerhalb eines Moduls - ohne API

Dieser Tipp zeigt, wie sich die Windows Standard-Dialoge innerhalb eines Moduls verwenden lassen - also ohne OCX - und ohne API!

Autor:   Dieter OtterBewertung:     [ Jetzt bewerten ]Views:  32.415 
www.tools4vb.deSystem:  Win9x, WinNT, Win2k, WinXP, Win7, Win8, Win10, Win11 Beispielprojekt auf CD 

Unter Verwendung der Komponente COMCTL32.OCX lassen sich die Windows Standard-Dialoge, wie "Öffnen...", "Speichern unter...", "Farb-Auswahl" oder "Drucken" schnell und einfach aufrufen.

Der Nachteil: Es wird immer ein Form-Objekt benötigt, auf welches man zunächst eine Instanz des Controls plazieren muss.

Unser heutiger Tipp zeigt, wie sich die Standard-Dialog aber auch innerhalb eines (Klassen-) Moduls verwenden lassen - und das ohne auf die entsprechenden WinAPI-Funktionen zurückgreifen zu müssen.

Wie soll das gehen?

Fast wie gewohnt

Einziger Unterschied: Wir erstellen zunächst ein Objekt - eine Referenzierung der Microsoft Common Dialogs:

Dim Dialog As Object
Set Dialog = CreateObject("MSComDlg.CommonDialog")

Alles, was jetzt kommt, kennen Sie bereits. Die Eigenschaften werden exakt so festgelegt, als würde man direkt das CommonDialog-Control einer Form ansprechen.

' Öffnen-Dialog
On Error Resume Next
With Dialog
  .Filter = "alle Dateien (*.*)|*.*"
  .DialogTitel = "Datei öffnen"
  .MaxFileSize = 260
  .ShowOpen
  If Err = 0 Then
    MsgBox "Ausgewälte Datei: " & .Filename
  End If
End With
' Speichern unter
On Error Resume Next
With Dialog
  .Filter = "alle Dateien (*.*)|*.*"
  .Flags = &H2  ' cdlOFNOverwritePrompt
  .MaxFileSize = 260
  .ShowSave
  If Err = 0 Then
    MsgBox "Speichern unter: " & .Filename
  End If
End With
' Farbauswahl
On Error Resume Next
With Dialog
  .ShowColor
  If Err = 0 Then
    MsgBox "Ausgewählte Farbe: "  CStr(.Color)
  End If
End With
' Drucken
On Error Resume Next
With Dialog
  .ShowPrinter
End With

Und im Anschluss zerstören wir die Objekt-Variable wieder:

Set Dialog = Nothing

Auf diese Weise könnte man z.B. eine Funktion zum Auswählen und Einlesen einer Textdatei in ein Modul auslagern:

' Textdatei auslesen und als String zurückgeben
Public Function OpenFile( _
  Optional ByVal sFilter As String = _
  "Textdateien (*.txt)|*.txt") As String
 
  Dim sInhalt As String
  Dim F As Integer
 
  ' Standard-Rückgabe: vbNullChar
  ' (falls Dialog abgebrochen wird)
  OpenFile = vbNullChar
 
  ' CommonDialog "Öffnen"
  Dim Dialog As Object
 
  On Error Resume Next
  Set Dialog = CreateObject("MSComDlg.CommonDialog")
  With Dialog
    .CancelError = True
    .Filter = sFilter
    .ShowOpen
    If Err = 0 Then
      ' Datei einlesen
      F = FreeFile
      Open .FileName For Binary As #F
      sInhalt = Space$(LOF(F))
      Get #F, , sInhalt
      Close #F
 
      OpenFile = sInhalt
    End If
  End With
 
  ' Objekt zerstören
  Set Dialog = Nothing
  On Error GoTo 0
End Function

Sie können der Funktion OpenFile optional einen Filter übergeben, über den Sie die anzuzeigenden Dateitypen festlegen. Standardmässig werden im obigen Beispiel "nur Textdateien mit der Endung .txt" angezeigt.

Beispiel
Der Anwender soll über einen CommandButton eine Textdatei auswählen, deren Inhalt dann in einer MultiLine-Textbox angezeigtwird.

Private Sub cmdOpen_Click()
  Dim sText As String
 
  sText = OpenFile()
  If sText <> vbNullChar Then
    txtMultiText.Text = sText
  End If
End Sub

Anmerkung:
Diese Variante funktioniert nur, wenn auf dem System die VB-Entwicklungsumgebung installiert ist. Andernfalls lässt sich der CommonDialog nicht per "CreateObject" aktivieren. Eine Alternative wäre dann, den CommonDialog per API zu aktivieren. Wie das geht, erfahren Sie in unserem Workshop:  Mit VB die Windows-Standard-Dialoge nutzen.
 

Dieser Tipp wurde bereits 32.415 mal aufgerufen.

Voriger Tipp   |   Zufälliger Tipp   |   Nächster Tipp

Über diesen Tipp im Forum diskutieren
Haben Sie Fragen oder Anregungen zu diesem Tipp, können Sie gerne mit anderen darüber in unserem Forum diskutieren.

Neue Diskussion eröffnen

nach obenzurück


Anzeige

Kauftipp Unser Dauerbrenner!Diesen und auch alle anderen Tipps & Tricks finden Sie auch auf unserer aktuellen vb@rchiv  Vol.6
(einschl. Beispielprojekt!)

Ein absolutes Muss - Geballtes Wissen aus mehr als 8 Jahren vb@rchiv!
- nahezu alle Tipps & Tricks und Workshops mit Beispielprojekten
- Symbol-Galerie mit mehr als 3.200 Icons im modernen Look
Weitere Infos - 4 Entwickler-Vollversionen (u.a. sevFTP für .NET), Online-Update-Funktion u.v.m.
 
   

Druckansicht Druckansicht Copyright ©2000-2024 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder 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.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel