Drucker: Printer.FontTransparent unter Windows 9x/Me wirkungslos

Veröffentlicht: 04. Okt 2001 | Aktualisiert: 14. Jun 2004

Von Mathias Schiffer

Wird unter Windows 95, Windows 98 oder Windows Me die FontTransparent-Eigenschaft des Printer-Objekts auf True gesetzt, wirkt sich diese Einstellung nicht auf das Druckergebnis aus. Der Text wird nach wie vor so gedruckt, als sei die Eigenschaft mit False versorgt worden: Er erhält einen weißen Hintergrund, der den eigentlichen Hintergrund überdeckt.

Das fehlerhafte Verhalten können Sie mit dem folgenden Beispielcode reproduzieren:

' Demonstration des FontTransparent-Bugs 
Printer.Line (0, 0)-(10000, 2000), &HC0C0C0, BF 
Printer.CurrentX = 0 
Printer.CurrentY = 0 
Printer.FontTransparent = True 
Printer.Print "Printer.FontTransparent = " & Printer.FontTransparent 
Printer.FontTransparent = False 
Printer.Print "Printer.FontTransparent = " & Printer.FontTransparent 
Printer.EndDoc

Um diesen Fehler in Ihrem Code auszugleichen, können Sie sich der API-Funktion SetBkMode bedienen:

Private Const TRANSPARENT As Long = 1& 
Private Const OPAQUE      As Long = 2& 
Private Declare Function SetBkMode _ 
  Lib "gdi32" ( _ 
  ByVal hDC As Long, _ 
  ByVal BackgroundMode As Long _ 
  ) As Long

Stellen Sie einer Printer.Print-Anweisung den Aufruf von SetBkMode. Dem ersten Parameter übergeben Sie mittels Printer.hDC den Gerätekontext des Druckers, im zweiten Parameter verwenden Sie TRANSPARENT für transparentes, OPAQUE für opakes Drucken.

Mithilfe dieser Funktion erweitert funktioniert der oben vorgestellte Beispielcode auch unter Windows 9x/Me:

' Demonstration des Workarounds 
Printer.Line (0, 0)-(10000, 2000), &HC0C0C0, BF 
Printer.CurrentX = 0 
Printer.CurrentY = 0 
Printer.FontTransparent = True 
SetBKMode Printer.hdc, TRANSPARENT ' <- 
Printer.Print "Printer.FontTransparent = " & Printer.FontTransparent 
Printer.FontTransparent = False 
SetBKMode Printer.hdc, OPAQUE      ' <- 
Printer.Print "Printer.FontTransparent = " & Printer.FontTransparent 
Printer.EndDoc

Weitere Informationen

Weitere Informationen zu diesem Problem finden Sie in Ihrer MSDN Library oder im MSDN Online: