Foro de elhacker.net

Programación => Programación Visual Basic => Mensaje iniciado por: ActiveSheet en 29 Diciembre 2007, 07:15 am



Título: Mandato Print
Publicado por: ActiveSheet en 29 Diciembre 2007, 07:15 am
Es rutina es para comprender un poco de como utilizar el mandato print de una forma muy peculiar ;)

'Rutina que da formato a la salida del mandato Print
Private Sub Form_Paint()
Dim mensaje As String, pos As Long, PosEspacio As Long
mensaje = "Utilizará con frecuencia los métodos TextWidth y TextHeight" _
& "para ver si un mensaje cabe dentro  de un área determinada." _
& vbCrLf & "Esto es especialmente necesario cuando" _
& "imprima en un formulario, porque el método Print no" _
& "se ocupa automáticamente de dividir las líneas largas, y" _
& "será usted mismo quien tenga que resolver este problema" _
& "utilizando líneas de código."

Cls
Do While pos < Len(mensaje)
    pos = pos + 1
If Mid$(mensaje, pos, 2) = vbCrLf Then
    ' Un par de CR-LF imprime la cadena mas allá
    ' y redefine las variables.
    Print Left$(mensaje, pos - 1)
    mensaje = LTrim$(Mid$(mensaje, pos + 2))
    pos = 0
    PosEspacio = 0
    ElseIf Mid$(mensaje, pos, 1) = " " Then
    ' Si este es un espacio, recuerda su posición.
    PosEspacio = pos
    End If
'verifica la anchura del mensaje.
If TextWidth(Left$(mensaje, pos)) > ScaleWidth Then
    ' El mensaje es demasiado largo, hay que dividirlo.
    ' Si se localiza un espacio, divídelo aquí.
    If PosEspacio Then pos = PosEspacio
    ' Imprime el mensaje hasta el puno de división.
    Print Left$(mensaje, pos - 1)
    ' Descartar caracteres impresos, y volver a definir las variables.
    mensaje = LTrim$(Mid$(mensaje, pos))
    pos = 0: PosEspacio = 0
End If
   
Loop
' Imprime los caracteres restantes, si es que hay alguno.
If Len(mensaje) Then Print mensaje
End Sub
Private Sub Form_Resize()
Refresh
End Sub

(http://images-as.iespana.es/imagenes/4650359693e682ded933515247348018_jaja.png)