Resumen Imprimir un FlexGrid   (2 mensajes )

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

Download printflex.zip  

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.



Resumen Resumen

Visual Basic Página de Visual Basic

Página principal Página principal

www.jrubi.com