Wenn Ihre Anwendung die Verwendung eines anderen Druckers als des Standard-Druckers ermöglichen soll, Sie aber den Anwender nicht vor jedem Druck erneut mit der Druckerauswahl (beispielsweise im Standard-Drucker-Dialog) belästigen wollen, können Sie ihm auch unabhängig davon eine Liste der verfügbaren Drucker zur Verfügung stellen. Aus dieser kann er dann einmal den gewünschten Drucker auswählen, der dann als Standard-Drucker Ihrer Anwendung gelten soll.
Dazu deklarieren Sie in einem Standard-Modul eine öffentliche ("Public") Objekt-Variable des Datentyps Printer.
Public AppPrinter As Printer
In Ihrer Anwendung verwenden Sie nun nur diesen "Drucker" anstelle des voreingestellten Visual Basic-Printer-Objekts, beispielsweise:
AppPrinter.NewDoc
Eine ListBox oder eine ComboBox zur Auswahl des Druckers, etwa in einem Optionen-Dialog, können Sie bequem mit der folgenden Hilfsprozedur FillPrintersList füllen. Sie übergeben ihr das Listen-Steuerelement (ListBox oder ComboBox) im ersten Parameter. Im zweiten, optionalen Parameter MarkDefaultPrinter legen Sie fest, ob der Name des im System eingestellten Standard-Druckers mit einem vorangestellten Sternchen "*" markiert werden soll (Voreinstellung True). Im dritten, ebenfalls optionalen Parameter geben Sie an, ob der System-Standard-Drucker zunächst auch als Standard-Drucker Ihrer Anwendung gesetzt werden soll.
Public Sub FillPrintersList(List As Object, _
Optional ByVal MarkDefaultPrinter As Boolean = True, _
Optional ByVal SetDefaultPrinter As Boolean = True)
Dim nPrinter As Printer
Dim i As Integer
Dim nDefaultPrinterNum As Integer
Dim nDefaultPrinterDeviceName As String
nDefaultPrinterDeviceName = Printer.DeviceName
With List
.Clear
If MarkDefaultPrinter Or SetDefaultPrinter Then
For i = 0 To Printers.Count - 1
Set nPrinter = Printers(i)
If nPrinter.DeviceName = nDefaultPrinterDeviceName Then
If MarkDefaultPrinter Then
.AddItem "*" & nDefaultPrinterDeviceName
Else
.AddItem nDefaultPrinterDeviceName
End If
nDefaultPrinterNum = i
Else
.AddItem nPrinter.DeviceName
End If
Next
If SetDefaultPrinter Then
.ListIndex = nDefaultPrinterNum
End If
Else
For Each nPrinter In Printers
.AddItem nPrinter.DeviceName
Next
End If
End With
End Sub
Diese Prozedur können Sie etwa gleich im Form_Load-Ereignis aufrufen, um beispielsweise eine "cboPrinters" genannte ComboBox mit den Druckernamen zu füllen.
Private Sub Form_Load()
FillPrintersList cboPrinters
End Sub
Wird die Auswahl des Druckers in dieser Liste geändert (entweder vom Anwender oder per Code), wird der oben erwähnten AppPrinter-Objekt-Variablen der dem gewählten Druckernamen entsprechende Drucker aus der Printers-Collection zugewiesen:
Private Sub cboPrinters _Click()
Set AppPrinter = Printers(cboPrinters.ListIndex)
End Sub
|