Impression d'une MsFlexGrid - VB6

Contenu du snippet

ce snippet est là à la suite d'une discussion concernant l'impression du contenu d'une MsFlexGrid non alimentée à partir d'une table de données (et donc, sans possibilité d'utiliser CrystalReport)
l'exemple montre comment remplir une PictureBox. Remplacer cet objet par l'objet Printer pour une véritable impression
Ce code est valable quelles que soient
- l'échelle choisie pour le Form (ScaleMode du Form)
- les caractéristiques de la police utilisée par la MsFlexGrid
- l'échelle (scalemode) choisie pour l'objet de destination (picturebox ou printer)
Si objet printer utilisé (pour une impression réelle) : définir comme vous l'entendez ses
autres propriétés (Taille du papier, etc ...)
j'ai très largement commenté ce code, notamment en ce qui concerne les largeurs de colonne,
leur échelle et leur transposition en unités de l'échelle de l'objet de destination (c'est en fait
la partie la moins simple à comprendre, sauf à lire très attentivement ce qui est dit dans l'aide VB6 à propos des unités logiques utilisées par une MsFlexGrid (elles sont TOUJOURS définies
en Twips et indépendamment de l'échelle choisie pour le Form.

Private pos_cols() As Single ' array qui servira à stocker les positions des colonnes de la grille
Private Sub Form_Activate()
  With MSFlexGrid1 '-----------------------------------------
    .Font.Name = "Tahoma" '                                  | Toute cette partie n'est là que pour avoir
    .Font.Size = 12 '                                        | une "matière" (une msflexgrid rmplie de 5
    .ColWidth(0) = 2200 '                                    | lignes sur 3 colonnespour y faire notre test)
    .ColWidth(1) = 2700 '                                    | Dans la pratique, tout cela a été construit
    .ColWidth(2) = 3000 '                                    | avec vos propriétés (en mode création) et
    For i = 0 To 4 '                                         | vos données.
      For j = 0 To 2 '                                       |
        .TextMatrix(i, j) = "Ligne " & i & "/colonne " & j ' |
      Next '                                                 |
    Next '                                                   |
  End With '-------------------------------------------------
  
  With Picture1 '-----------------------  on utilise, pour ce test, une picturebox, de sorte à
    .Font.Name = MSFlexGrid1.Font.Name '| ne pas gaspiller encre et papier
    .Font.Size = MSFlexGrid1.Font.Size '| Pour une impression : utiliser l'objet Printer au lieu de cette picturebox
    .ScaleMode = 6  '                   | On donne à l'objet de destination (ici une picturebox) l'échelle
  End With  '---------------------------  de son choix et la même police que celle de la grille à traiter
  
  '-------------- on crée un array des positions des fins de colonne------------------
  ReDim pos_cols(MSFlexGrid1.Cols - 1)
  For i = 1 To UBound(pos_cols)
    ' important : quelle que puisse être l'échelle du Form, les largeurs de colonnes d'une msflexgrid
    ' sont toujours définies en Twips (lire l'aide VB6 à ce sujet) et non dans l'échelle du Form
    ' il nous faut dont convertir ces twips en unités logiques de l'objet de destination.
    ' donc : ne surtout pas toucher à vbTwips dans la ligne ci-dessous
    pos_cols(i) = pos_cols(i - 1) + ScaleX(MSFlexGrid1.ColWidth(i - 1), vbTwips, Picture1.ScaleMode)
  Next
End Sub
Private Sub Command1_Click()
  With Picture1
    hautligne = .TextHeight("N'importe quoi") ' calcul de la hauteur graphique d'une ligne, dans cette police
    For i = 0 To MSFlexGrid1.Rows - 1 '-------------------
      For j = 0 To MSFlexGrid1.Cols - 1 '                | Il ne nous reste plus qu'à envoyer le contenu
       .CurrentX = pos_cols(j) '                         | de chaque cellule de chaque ligne (double boucle)
        Picture1.Print MSFlexGrid1.TextMatrix(i, j); '   | Aux positions définies dans l'array des positions
      Next '                                             | A chaque saut de ligne, on revient au 1er index (0)
      .CurrentX = pos_cols(0) '                          | de cet array
      .CurrentY = .CurrentY + hautligne * 1.06 '         | (* 1.06 ou par ce que vous préférez, pour "aérer un peu)
    Next '                                               |
  End With '---------------------------------------------
End Sub

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.