• Jueves 14 de Noviembre de 2024, 04:11

Autor Tema:  Impresion  (Leído 2112 veces)

PAPELUCHO

  • Nuevo Miembro
  • *
  • Mensajes: 7
    • Ver Perfil
Impresion
« en: Sábado 12 de Agosto de 2006, 01:03 »
0
Hola estimados amigos
Tengo el siguiente Problema, en un form tengo un boton para imprimir con el siguiente codigo :

Private Sub Btnimprimir_Click()
Printer.ScaleMode = vbCentimeters
Printer.PaperSize = vbPRPSFolio
Printer.FontName = "COURIER NEW "
Printer.FontSize = 12
Printer.FontBold = True
Printer.CurrentX = 2.5
Printer.CurrentY = 2.5
Printer.Print NRO_CARGO

Printer.CurrentX = 1.5
Printer.CurrentY = 3.5
Printer.Print FE_CARGO

Printer.CurrentX = 1
Printer.CurrentY = 5.5
Printer.Print NOM

Printer.CurrentX = 11
Printer.CurrentY = 5.7
Printer.Print RUT

Printer.CurrentX = 1
Printer.CurrentY = 6.8
Printer.Print DIRE

Printer.CurrentX = 10
Printer.CurrentY = 6.8
Printer.Print CIU

Printer.CurrentX = 16
Printer.CurrentY = 2.2
Printer.Print DCTO

Printer.CurrentX = 17
Printer.CurrentY = 3.2
Printer.Print NRO_DCTO

Printer.CurrentX = 16.8
Printer.CurrentY = 4
Printer.Print FE_DCTO

Printer.CurrentX = 16.3
Printer.CurrentY = 15
Printer.Print CTA1

Printer.CurrentX = 17.7
Printer.CurrentY = 15
Printer.Print VAL_CTA1

Printer.CurrentX = 16.3
Printer.CurrentY = 15.8
Printer.Print CTA2

Printer.CurrentX = 17.7
Printer.CurrentY = 15.8
Printer.Print VAL_CTA2

Printer.CurrentX = 4.5
Printer.CurrentY = 21.7
Printer.Print RESOL

Printer.CurrentX = 8.5
Printer.CurrentY = 21.7
Printer.Print FE_RESOL

Printer.CurrentX = 17.7
Printer.CurrentY = 20.7
Printer.Print TOTAL

Printer.CurrentX = 13
Printer.CurrentY = 29
Printer.Print FUNCIONARIO

Printer.CurrentX = 1.5
Printer.CurrentY = 8.5
imprimeLineas MOTIVO, 70

Printer.EndDoc

End Sub

y en un modulo esta funcion para imprimir lo que contiene el TEXT MOTIVO, ya que este esta con propiedad mulltiline= True

Public Sub imprimeLineas(Texto As Object, Linea As Integer)
    Dim Bloque As String
    'Numero de caracteres = NumC
    'Numero de Bloques = NumB
    Dim I As Integer
   
    Dim NumC, NumB As Integer
    NumC = Len(Texto.Text)
    If NumC > Linea Then
        NumB = NumC \ Linea
        For I = 0 To NumB
            Texto.SelStart = (Linea * I)
            Texto.SelLength = Linea
            Bloque = Texto.SelText
       
            Printer.Print Bloque
        Next I
    Else
          Printer.Print Texto.Text
    End If
    Printer.EndDoc
End Sub


El problema se sucita que al imprimir el campo MOTIVO la primera linea lo hace respetando el margen asignado Printer.CurrentX = 1.5  
                                              Printer.CurrentY = 8.5

PERO AL IMPRIMIR LA SEGUNDA LINEA Y LAS SIGUIENTES SE DESCUADRA YA QUE EMPIEZA A IMPRIMIR CASI EN EL BORDE IZQUIERDO DE LA HOJA,

¿ Como lo puedo hacer para que me siga imprimiendo la 2da y posteriorers lineas con los margenes ya dados y nos se descuadre?

Si me pueden echar una manito
De antemano muchas gracias

ArKaNtOs

  • Miembro de PLATA
  • *****
  • Mensajes: 1253
  • Nacionalidad: mx
    • Ver Perfil
Re: Impresion
« Respuesta #1 en: Domingo 13 de Agosto de 2006, 01:58 »
0
mira lo que tienes que hacer es lo siguiente, en vez de hacer esto:

Código: Text
  1. Printer.CurrentX = 1.5
  2. Printer.CurrentY = 8.5
  3. imprimeLineas MOTIVO, 70
  4.  

debes de tener algo asi
Código: Text
  1.  
  2. 'Sin poner los Printer.currenx y currenty, ya que estos solo con un campo a la vez
  3. imprimeLineas MOTIVO, 70
  4. printer.enddoc
  5. ....
  6.  
  7. Dim NumC, NumB As Integer
  8. NumC = Len(Texto.Text)
  9. If NumC > Linea Then
  10. NumB = NumC \ Linea
  11. For I = 0 To NumB
  12. Texto.SelStart = (Linea * I)
  13. Texto.SelLength = Linea
  14. Bloque = Texto.SelText
  15.  
  16. printer.currentx=1.5
  17. printer.currenty=8.5 + linea
  18. Printer.Print Bloque
  19. Next
  20. Else
  21.  
  22.  
  23. printer.currentx=1.5
  24. printer.currenty=8.5
  25. Printer.Print Texto.Text
  26. End If
  27.  
  28. ' Printer.EndDoc no va ya que pones uno despues de llamar al sub
  29.  
  30.  

PAPELUCHO

  • Nuevo Miembro
  • *
  • Mensajes: 7
    • Ver Perfil
Re: Impresion
« Respuesta #2 en: Martes 15 de Agosto de 2006, 00:49 »
0
ESTIMADO ARKANTOS

LO REALICE COMO LO SEÑALAS PERO AHORA EL PROBLEMA
ES QUE LA IMPRESION DE EL TEXT MOTIVO NO SALE EN EL MARGEN
SEÑALADO SINO QUE AL FINAL DE LA HOJA UNA LINEA Y LA OTRA LINEA
SALE EN OTRA HOJA AL FINAL TAMBIEN.

DE ANTEMANO MUCHAS GRACIAS POR LA AYUDA PRESTADA.-

ArKaNtOs

  • Miembro de PLATA
  • *****
  • Mensajes: 1253
  • Nacionalidad: mx
    • Ver Perfil
Re: Impresion
« Respuesta #3 en: Martes 15 de Agosto de 2006, 07:15 »
0
Quitaste los enddoc repetidos?, esperame mañana te envio un codigo optimizado del tuyo es que ahora toy de paso :P jejeje

ArKaNtOs

  • Miembro de PLATA
  • *****
  • Mensajes: 1253
  • Nacionalidad: mx
    • Ver Perfil
Re: Impresion
« Respuesta #4 en: Miércoles 16 de Agosto de 2006, 14:53 »
0
No voy a decir que este optimizado pero pues asi debe de funcionar jejejeje

Private Sub Btnimprimir_Click()
Printer.ScaleMode = vbCentimeters
Printer.PaperSize = vbPRPSFolio
Printer.FontName = "COURIER NEW "
Printer.FontSize = 12
Printer.FontBold = True
Printer.CurrentX = 2.5
Printer.CurrentY = 2.5
Printer.Print NRO_CARGO

Printer.CurrentX = 1.5
Printer.CurrentY = 3.5
Printer.Print FE_CARGO

Printer.CurrentX = 1
Printer.CurrentY = 5.5
Printer.Print NOM

Printer.CurrentX = 11
Printer.CurrentY = 5.7
Printer.Print RUT

Printer.CurrentX = 1
Printer.CurrentY = 6.8
Printer.Print DIRE

Printer.CurrentX = 10
Printer.CurrentY = 6.8
Printer.Print CIU

Printer.CurrentX = 16
Printer.CurrentY = 2.2
Printer.Print DCTO

Printer.CurrentX = 17
Printer.CurrentY = 3.2
Printer.Print NRO_DCTO

Printer.CurrentX = 16.8
Printer.CurrentY = 4
Printer.Print FE_DCTO

Printer.CurrentX = 16.3
Printer.CurrentY = 15
Printer.Print CTA1

Printer.CurrentX = 17.7
Printer.CurrentY = 15
Printer.Print VAL_CTA1

Printer.CurrentX = 16.3
Printer.CurrentY = 15.8
Printer.Print CTA2

Printer.CurrentX = 17.7
Printer.CurrentY = 15.8
Printer.Print VAL_CTA2

Printer.CurrentX = 4.5
Printer.CurrentY = 21.7
Printer.Print RESOL

Printer.CurrentX = 8.5
Printer.CurrentY = 21.7
Printer.Print FE_RESOL

Printer.CurrentX = 17.7
Printer.CurrentY = 20.7
Printer.Print TOTAL

Printer.CurrentX = 13
Printer.CurrentY = 29
Printer.Print FUNCIONARIO

Printer.CurrentX = 1.5
Printer.CurrentY = 8.5

j=0
For i = 1 To Len(Textto)
    If i mod 70=0 Then
        printer.currentx=1.5
        printer.currenty=8.5 + j
        Printer.Print s
        s = ""
        j = 0
    Else
        s = s + Mid(Texto, i, 1)
    End If
Next

Printer.EndDoc
end sub