El procedimiento completo es el que sigue:
Private Sub ConfigCabeceraCodigo(ByRef Textocabecera() As CabecDetalle)
Dim Fuente As Font
Dim Lapiz As New System.Drawing.SolidBrush(System.Drawing.Color.Black)
Dim AnchoString As New SizeF
Dim Formato As New System.Drawing.StringFormat
Dim Cx As Long
Dim Grafico As Graphics = Me.CreateGraphics
Dim X As Integer
Fuente = Est_Lin_Det
' Campos del listado
TextoCabecera(0).Texto = "Num. "
TextoCabecera(1).Texto = "Servicio "
TextoCabecera(2).Texto = "Fecha "
TextoCabecera(3).Texto = "Hora "
TextoCabecera(4).Texto = ""
' Formato del texto
Formato.FormatFlags = StringFormatFlags.MeasureTrailingSpaces
' Margen lateral
Cx = CLng(Hoja.DefaultPageSettings.Margins.Left)
' Fuente a utilizar
Fuente = New Font("Arial", 12, FontStyle.Italic)
' 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
End Sub
Hasta aquí, el código se ejecuta desde este procedimiento al cual llamaremos cuando se de la situación de cambio de página.
Private Sub Cabeceras(ByRef Cy As Single, _
ByVal e As System.Drawing.Printing.PrintPageEventArgs)
LineaIden(Cy, ContPag, e) ' Línea de identificación
Titulo(Cy, e, "Listado de reservas por sócios") ' Título del listado
Cabecera(Cy, TextoCabecera, e) ' Cabecera de detalle
End Sub
Si en nuestro listado necesitamos unas líneas de ampliación de los datos del listado, podemos utilizar
Private Sub SubCabecera(ByRef Cy As Single, _
ByVal Texto As String, _
ByVal D As String, _
ByVal H As String, _
ByVal e As System.Drawing.Printing.PrintPageEventArgs)
Dim Grafico As Graphics = Me.CreateGraphics
Dim AnchoString As New SizeF
Dim Fuente As Font
Dim Pincel As New System.Drawing.SolidBrush(System.Drawing.Color.Black)
Dim Cx As Single
Fuente = Est_Cabecera
D = Strings.Left(D, 2) & "-" & Strings.Mid(D, 3, 2) & "-" & Strings.Right(D, 4)
H = Strings.Left(H, 2) & "-" & Strings.Mid(H, 3, 2) & "-" & Strings.Right(H, 4)
Cx = CSng(e.PageBounds.Width * 0.07)
e.Graphics.DrawString("Nombre del sócio ", Fuente, Pincel, Cx, Cy)
Cx = CSng(e.PageBounds.Width * 0.25)
e.Graphics.DrawString(" : " & Texto, Fuente, Pincel, Cx, Cy)
Cy = Cy + Fuente.Height
Cx = CSng(e.PageBounds.Width * 0.07)
e.Graphics.DrawString("Desde ", Fuente, Pincel, Cx, Cy)
Cx = CSng(e.PageBounds.Width * 0.25)
e.Graphics.DrawString(" : " & D, Fuente, Pincel, Cx, Cy)
Cy = Cy + Fuente.Height
Cx = CSng(e.PageBounds.Width * 0.07)
e.Graphics.DrawString("Hasta ", Fuente, Pincel, Cx, Cy)
Cx = CSng(e.PageBounds.Width * 0.25)
e.Graphics.DrawString(" : " & H, Fuente, Pincel, Cx, Cy)
Cy = Cy + Fuente.Height
End Sub
Que llamaríamos desde el procedimiento de cabeceras.
Private Sub Cabeceras(ByRef Cy As Single, _
ByVal e As System.Drawing.Printing.PrintPageEventArgs)
LineaIden(Cy, ContPag, e) ' Línea de identificación
Titulo(Cy, e, "Listado de reservas por sócio.") ' Título del listado
SubCabecera(Cy, Reg.Item("NomSocio").ToString, Campo01.Text, Campo02.Text, e)
Cabecera(Cy, TextoCabecera, e) ' Cabecera de detalle
End Sub
El siguiente paso sería las líneas de detalle.

Síguenos en: Facebook Sobre aulaClic Política de Cookies