La Web del Programador: Comunidad de Programadores
 
    Pregunta:  29375 - PRINTER:FONTTRANSPARENT
Autor:  Agustín Dávila
Mi problema es el siguiente. Utilizo el objeto Printer para imprimir e incluyo un mapa de bits sobre el cual tengo que escribir encima. El problema surge cuando imprimo un texto sobre el mapa de bits, y el texto me aparece con fondo blanco y no con fondo transparente. Me comentaron que para este problema debía poner la propiedad "Fonttransparent=True" para el objeto Printer, pero ni con esas. Muchas gracias ante todo.

  Respuesta:  Pedro Perea
Fonttrasparente da problemas en algunos sistemas win 98, win95 ... y con algunos controladores de impresión por lo que aunque pongamos a true la propiedad cuando imprimamos el resultado es como si la tuvieramos a false. Si usas la siguiente llamada a la API de windows obtendrás el resultado deseado.

Agregua las declaracion siguiente a la sección General del formulario:

Private Declare Function SetBkMode Lib "gdi32" _
(ByVal hdc As Long, ByVal nBkMode As Long) As Long

Private iBKMode as Long

Private Const TRANSPARENT = 1
Private Const OPAQUE = 2

Corrije el código en el evento Click del formulario:

Private Sub Form_Click()

Printer.Print ""
Printer.Line (0,0)-(10000, 2000), &HC0C0C0, BF
Printer.CurrentX = 0
Printer.CurrentY = 0
Printer.FontTransparent = True
'Aqui consigues cabiar a transparente
iBKMode = SetBKMode(Printer.Hdc, TRANSPARENT)
Printer.Print "Printer.FontTransparent = " & Printer.FontTransparent
Printer.FontTransparent = False
'Aquí cambias a Opaco
iBKMode = SetBKMode(Printer.Hdc, OPAQUE)
Printer.Print "Printer.FontTransparent = " & Printer.FontTransparent
Printer.EndDoc

End Sub

Haz clic el en el formulario. El texto se debería imprimir ahora como se espera