Los procedimientos para obtener dicho resultado podrían ser:
El título.
Public Sub Titulo(ByRef Cy As Single, _
ByVal e As System.Drawing.Printing.PrintPageEventArgs, _
ByVal Texto As String)
Dim Fuente As Font = New Font("Arial", 16, FontStyle.Italic)
Dim Pincel As New System.Drawing.SolidBrush(System.Drawing.Color.Black)
Dim Ancho As Long = e.PageSettings.PaperSize.Width
Dim Cx As Long ' Coordenada horizontal
Cx = CLng(Ancho * 0.05) ' Margen izquierdo
Cy = Cy + Fuente.Height ' Separación de línea
e.Graphics.DrawString(Texto, Fuente, Pincel, Cx, Cy)
Cy = Cy + Fuente.Height ' Separación de línea
End Sub
El siguiente paso sería la cabecera de detalle.
Public Sub Cabecera(ByRef Cy As Single, _
ByVal TextoCab() As CabecDetalle, _
ByVal e As System.Drawing.Printing.PrintPageEventArgs)
Dim Fuente As Font
Dim Pincel As New System.Drawing.SolidBrush(System.Drawing.Color.Black)
Dim Lapiz As New Pen(Color.Black, 3)
Dim Ancho As Long = e.PageSettings.PaperSize.Width
Dim X As Integer
Select Case e.PageSettings.Landscape
Case True
Ancho = e.PageSettings.PaperSize.Height
Case Else
Ancho = e.PageSettings.PaperSize.Width
End Select
Fuente = Est_Cabecera
Cy = Cy + Fuente.Height ' Separación del título
While X < UBound(TextoCab)
e.Graphics.DrawString(TextoCab(X).Texto, Fuente, Pincel, TextoCab(X).Cx, Cy)
X = X + 1
End While
Cy = Cy + Fuente.Height ' Avance de línea
Cy = Cy + 10 ' Línea de subrayado
e.Graphics.DrawLine(Lapiz, CInt(Ancho * 0.05), Cy, CInt(Ancho * 0.95), Cy)
End Sub
Observemos el siguiente fragmento de código:
While X < UBound(TextoCab)
e.Graphics.DrawString(TextoCab(X).Texto, Fuente, Pincel, TextoCab(X).Cx, Cy)
X = X + 1
End While
En el bucle vemos como a partir del contenido del vector TextoCabecera, colocamos el contenido de la Cabecera de detalle.
TextoCab(X).Texto
Y utilizamos
TextoCab(X).Cx
Para colocar en el punto adecuado dicho texto.
Esta es la forma de asignar los datos al vector en el que creamos el contenido de los campos del listado:
' Campos del listado
TextoCabecera(0).Texto = "Num. "
TextoCabecera(1).Texto = "Servicio "
TextoCabecera(2).Texto = "Fecha "
TextoCabecera(3).Texto = "Hora "
TextoCabecera(4).Texto = ""
Después lo usamos para calcular la coordenada X de cada campo:
' Bucle de cálculo
While X < UBound(Textocabecera)
Textocabecera(X).Cx = Cx
' Ancho del texto
AnchoString = Grafico.MeasureString(StrDup(Len(Textocabecera(X).Texto), "n"), Fuente)
Cx = CLng(Cx + AnchoString.Width)
X = X + 1
End While
Este cálculo se realiza en base a una fuente definida para la línea de detalle.
' Fuente a utilizar
Fuente = New Font("Arial", 12, FontStyle.Italic)
El valor inicial del lateral del listado será:
' Margen lateral
Cx = CLng(Hoja.DefaultPageSettings.Margins.Left)
De esta forma conseguimos tener un punto donde colocar cada uno de los campos en el objeto de listado.
Síguenos en: Facebook Sobre aulaClic Política de Cookies