Impression flex grid

Contenu du snippet

ben ...impression de flex grid qui gere a peu pres tout ( taille des colonnes, positionnement, titre ....) en generique

Source / Exemple :


Public Sub imprime_grid(grid As Control, nb_to_print As Integer, topgrid As Integer, large_grid As Integer, hauteur_grid As Integer, left_grid As Integer, trace_ligne As Boolean, titre As String)

Printer.FontSize = 12

Rem initialisation des variables de gestion

Dim nbcol As Integer  ' nombre de colonne dans le grid
Dim nb_row As Integer  ' nombre de lignes dans le frid
Dim marge As Integer ' marge gauche et droite ( si trop faible, tronqué par imprimante
Dim ecartdubord As Integer 'ecart entre ligne de tableau et valeur, c plus bô
Dim largeur_imp As Integer
Dim mem_top As Integer
Dim nbcolfixed As Integer
Dim nbrow_fixed As Integer
Dim maxdown As Integer
Dim debut As Integer
Dim j As Integer
Dim i As Integer
Dim pourcent As Long
Dim same_page As Boolean
Dim not_end As Boolean
Dim index_grid_row As Integer
Dim larg As Integer
Dim newy As Integer

nbcol = grid.Cols
nb_row = grid.Rows
marge = 200
ecartdubord = 100
nbcolfixed = grid.FixedCols
nbrow_fixed = grid.FixedRows
Rem calcul de ces valeurs en fonction des params
If (large_grid = 0) Then
 largeur_imp = Printer.Width - (marge * 2)
Else
 largeur_imp = large_grid
End If

If (hauteur_grid = 0) Then
   maxdown = Printer.Height - 1000
Else
   maxdown = topgrid + hauteur_grid
End If

If (nb_to_print = 0) Then nb_to_print = grid.Rows - 1

Dim tab_col(0 To 100) As Long
debut = marge + left_grid

Rem definition de la largeur des colonnes
tab_col(0) = debut
j = 1
For i = 0 To nbcol - 1
  pourcent = (grid.ColWidth(i) * 100) / grid.Width
  tab_col(j) = debut + ((pourcent * largeur_imp) / 100)
  debut = tab_col(j)
  j = j + 1
Next i
Dim rapport As Double
rapport = largeur_imp / grid.Width
tab_col(j) = largeur_imp + marge

If (titre <> "") Then
  Printer.Print
  Printer.Print
  Printer.Print titre
  Printer.Print
  Printer.Print
End If
Dim memy As Integer
Rem et hop, c parti, mon kiki
memy = Printer.CurrentY
 Printer.Line (tab_col(0), memy)-(largeur_imp + marge, memy)
memy = Printer.CurrentY + 10

same_page = True
index_grid_row = 0
not_end = True

Do While not_end
  Rem tant que po fin de ligne a imprimer
        mem_top = Printer.CurrentY
        Do While same_page And not_end
           Rem et que l'on est sur la meme page
            memy = Printer.CurrentY
            grid.Row = index_grid_row
            For i = 0 To nbcol - 1
              If (i < nbcolfixed) Or (index_grid_row < nbrow_fixed) Then
                Printer.FontBold = True
              Else
                Printer.FontBold = False
              End If
              Rem on boucle sur les colonnes, on ecrit les valeurs
              grid.Col = i
              Printer.CurrentX = tab_col(i)
              Printer.CurrentY = memy
              If (grid.CellPicture = 0) Then
                  larg = tab_col(i + 1) - tab_col(i)
                  If (Printer.TextWidth(grid.Text) > larg) Then
                     Dim tmptxt As String
                     tmptxt = grid.Text
                     Do While Printer.TextWidth(tmptxt) > larg
                        tmptxt = Mid(tmptxt, 1, Len(tmptxt) - 2)
                     Loop
                     Printer.Print tmptxt
                  Else
                     Printer.Print grid.Text
                  End If
                  
                 newy = Printer.CurrentY
              Else
                    Dim rapporth As Double
                    rapporth = Printer.TextHeight("A") / grid.CellHeight
                  Call Printer.PaintPicture(grid.CellPicture, Printer.CurrentX, Printer.CurrentY, grid.CellPicture.Width / rapport, grid.CellPicture.Height / rapporth, 1, 1, grid.CellPicture.Width, grid.CellPicture.Height)
              End If
            Next i
            If (trace_ligne) Then
             Rem si besoin de trait entre les lignes
             Printer.Line (tab_col(0), Printer.CurrentY)-(largeur_imp + marge, Printer.CurrentY)
              Printer.CurrentY = newy + 10
            End If
           
            index_grid_row = index_grid_row + 1
             Rem on cintinue, ou bien ?
            If (index_grid_row > nb_to_print) Then not_end = False
            If (Printer.CurrentY > maxdown) Then same_page = False
        Loop
        
        Rem page fini, ou presque ...y'a plus qu'a tracer les lignes
        For i = 0 To nbcol - 1
      Printer.Line (tab_col(i), mem_top)-(tab_col(i), memy)
        Next i
          Printer.Line (largeur_imp + marge, mem_top)-(largeur_imp + marge, memy)
          Rem au choix ..on pourrait mettre un next page ...
          Rem mais je prefere le end doc, c moins chiant pour annuler en cours d'impression sans abandonner celle qui sont deja faites
        Printer.EndDoc
        Rem histoire de reprendre au debut de la page suivante,
        Rem mais pas non plus trop haut, sinon les premieres lignes seront tronques
        Printer.CurrentY = 200
        same_page = True
Loop

End Sub

Conclusion :


bon, niveau commentaire et explications, c pô top, mais la je suis a la bourre niveau boulot .
Si kkun a un besoin express, laisser un message, je passe souvent pour voir.
je commenterais mieux d'ici un mois

pour ls arguments, kan meme :
grid as control : passer votre grid
nb_to_print as integer : nombre de ligne a imprimer ( ou 0 si tout le grid )
topgrid as integer : top sur la feuille imprimé
largegrid as integer : largeur du resultat sur la feuille
hauteur as integer ...ben a peu pres pareil, mais dans l'autre sens
trace as booleen : oui pour avoir les interligne, non pour n'avoir que les ligne verticales
titre as string : si on nveut nommer le bazar

voila

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.