Mensaje enviado por "Alex Arias" <aarias@rpp.com.pe>
Te envio un formulario que lo que hace es imprimir el FlexGrid ajustando sus columnas (osea que se vean los datos), OJO el formulario lo he separado de mi sistema, por lo que necesitaras, modificarlo en la parte de carga de datos al FLEX, la carga la realizo via un DATA CONTROL pero este no esta enlazado a una base de datos directa, sino esta seteado con una variable RECORDSET, ahora te recomiendo que configures el data que esta escondido a una base de datos y corrigas el paso del recordset al data (lo comentes).
Bueno el formulario y el código funcionan y estos seguro cumplira lo que deseas, solo que hay que cambiar alguito.
Con un poco de trabajo.. solución.
Alex Arias Calixtro
Analista Programador
Mensaje enviado por "Julian" <jfava@ec.gba.gov.ar>
la rutina imprime una grilla, esta un poco desactualizada con respecto a los nombre.
para que funcione, antes de llamarla tendras que llenar el coldata de cada columna,
los uso para asignar el ancho de columna
Sub imprimir_grilla(Formulario As Form, ByVal Grid1 As MSFlexGrid, ByRef inicioX As Integer, ByRef finY As Integer, ByVal titulo1 As String, Optional ByVal titulo2 As String)
Dim inicioY As Integer
Dim inicioFor As Integer
Dim ColInicio(0 To 10) As Integer
If Grid1.Rows = 1 Then Exit Sub
Printer.Print
'defino la escala
Printer.ScaleMode = vbMillimeters
'leo el tipo de papel y defino los limites
hoja = Printer.PaperSize
Select Case hoja
Case vbPRPSLetter
Printer.Scale (0, 0)-(216, 279)
Case vbPRPSLegal
Printer.Scale (0, 0)-(216, 356)
Case vbPRPSA4
Printer.Scale (0, 0)-(210, 297)
Case vbPRPSUser
Printer.Scale (0, 0)-(Printer.Height, Printer.Width)
End Select
'defino las coordenadas de inicio
inicioX = (Printer.ScaleWidth - Printer.ScaleLeft - 200) \ 2
inicioY = 64
finY = Printer.ScaleHeight - 30
'inicializo el tamaño e inicio de cada columna
ColInicio(0) = 0
For i = 1 To Grid1.Cols - 1
ColInicio(i) = 0
For J = 1 To i
ColInicio(i) = ColInicio(i) + Grid1.ColData(J - 1)
Next
Next
'calculo el total de paginas
'********************************* VER
If Grid1.Rows - 1 < 43 Then
total_pag = 1
Else
Filas = Grid1.Rows - 42
AreaImpresion = finY - 18
FilasXhoja = AreaImpresion \ 6
total_pag = (Filas \ FilasXhoja) + 2
End If
pagina = 1
GoSub cabecera
GoSub semicab
Grid1.Row = 0
'imprimo los datos
Printer.Print
With Printer
.Font.Name = "tahoma"
.Font.Size = 8
.Font.Bold = False
.Font.Italic = False
End With
i = 0
Do While Grid1.Row < Grid1.Rows - 1
Grid1.Row = Grid1.Row + 1
If inicioY + 17 + i > finY + 1 Then
GoSub Separadores
Printer.NewPage
inicioY = 10
GoSub semicab
i = 0
pagina = pagina + 1
'preparo la letra para seguir
Printer.Print
With Printer
.Font.Name = "tahoma"
.Font.Size = 8
.Font.Bold = False
.Font.Italic = False
End With
End If
For J = 1 To Grid1.Cols
With Grid1
.Col = J - 1
Printer.Font.Bold = Grid1.CellFontBold
Printer.Font.Italic = Grid1.CellFontItalic
If .FixedAlignment(J - 1) <> 4 Then
Printer.CurrentX = inicioX + ColInicio(J - 1) + 1
Printer.CurrentY = inicioY + 10 + i
If Printer.TextWidth(.Text) > Grid1.ColData(J - 1) Then
Printer.Print CortarTexto(.Text,Grid1.ColData(J - 1))
Else
Printer.Print .Text
End If
Else
Printer.CurrentX = inicioX + ColInicio(J - 1) +
(Grid1.ColData(J - 1) - 2 - Printer.TextWidth(.Text)) \ 2
Printer.CurrentY = inicioY + 10 + i
Printer.Print .Text
End If
End With
Next
i = i + 6
Loop
finY = inicioY + 8 + i
GoSub Separadores
'Final de la impresión
Exit Sub
cabecera:
Printer.Print
'selecciono el tipo de letra para la cabecera
Printer.Print
With Printer
.Font.Name = "arial"
.Font.Size = 10
.Font.Bold = True
.Font.Italic = False
End With
'imprimo el logo del sistema
On Error Resume Next
Printer.PaintPicture LoadPicture(PathBase + "\bb.jpg"), inicioX + 10, inicioY - 55, 17, 17
Err.Clear
Printer.CurrentX = inicioX + 50
Printer.CurrentY = inicioY - 54
Printer.Print "Circulo de Suboficiales y Guardias"
Printer.CurrentX = inicioX + 50
Printer.CurrentY = inicioY - 49
Printer.Print "57 N° 1031 e/15 y 16 - TE: 425-7656"
Printer.CurrentX = inicioX + 50
Printer.CurrentY = inicioY - 44
Printer.Print "La Plata (1900)"
Printer.CurrentX = inicioX + 170
Printer.CurrentY = inicioY - 54
Printer.Print Format(Now, fmt_fe)
Printer.CurrentX = inicioX + 170
Printer.CurrentY = inicioY - 49
Printer.Print Format(Now, fmt_hs)
'selecciono el tipo de letra para el titulo
Printer.Print
With Printer
.Font.Name = "arial"
.Font.Size = 16
.Font.Bold = True
.Font.Italic = False
End With
Printer.CurrentX = inicioX + 10
Printer.CurrentY = inicioY - 30
Printer.Print titulo1
If titulo2 <> "" Then
Printer.CurrentX = inicioX + 10
Printer.CurrentY = inicioY - 20
Printer.Print titulo2
End If
Return
semicab:
'defino el tipo de letra para la cabecera de la tabla
Printer.Print
With Printer
.Font.Name = "arial"
.Font.Size = 10
.Font.Bold = True
.Font.Italic = False
End With
fila = Grid1.Row
Grid1.Row = 0
For i = 1 To Grid1.Cols
With Grid1
.Col = i - 1
If .FixedAlignment(.Col) <> 4 Then
Printer.CurrentX = inicioX + ColInicio(i - 1) + 1
Else
Printer.CurrentX = inicioX + ColInicio(i - 1) + (Grid1.ColData(i - 1) - 2 - Printer.TextWidth(.Text)) \ 2
End If
Printer.CurrentY = inicioY
Printer.Print .Text
End With
Next
Grid1.Row = fila
Return
Separadores:
'imprimo separadores
Printer.DrawWidth = 4
'horizontales
Printer.Line (inicioX, inicioY - 3)-(inicioX + 200, inicioY - 3), vbBlack
Printer.Line (inicioX, inicioY + 7)-(inicioX + 200, inicioY + 7), vbBlack
Printer.DrawWidth = 1
Printer.Print
With Printer
.Font.Name = "ARIAL"
.Font.Size = 10
.Font.Bold = True
.Font.Italic = False
End With
'imprime numero de pagina
linea = "Página " + CStr(pagina)
Printer.CurrentX = inicioX + (200 - Printer.TextWidth(linea)) \ 2
Printer.CurrentY = Printer.ScaleHeight - 20
Printer.Print linea
Return
End Sub
nuevamente saludos.