1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71
| ' Pour rappel : 1cm = 567 tiwps
Private Const Retrait = 300 ' marge gauche entre chaque niveau en twips
Private Const Espacement = 225 ' Espacement des lignes en twips
Private Const EncrageTrait = 100 ' Hauteur entre le coin supérieur du label et le trait en twips
Dim Ligne As Integer
Public Function ImprimeTreeView(oTree As TreeView, Optional TVNode As Node, Optional Niveau As Integer = 0)
On Error GoTo Fin:
'Initialisation des variables et de l'état
If Niveau = 0 Then
Ligne = 0
Niveau = 1
If TVNode Is Nothing Then
Set TVNode = oTree.Nodes(1)
Else
Set TVNode = oTree.Nodes(TVNode.Key)
BrancheLimit = 1
End If
DoCmd.OpenReport "ETreeView", acViewDesign
' Effacement des objets de l'état et redimensionnement
Do While Reports![ETreeView].Count > 0
St = Reports![ETreeView].Controls.Item(0).Name
DeleteReportControl "ETreeView", St
Loop
Reports![ETreeView].Section(acDetail).Height = 567
Reports![ETreeView].Width = 567 * 19 ' Rétablit la largeur à 19 cm
End If
'Recherche des éléments du TreeView
HautLigne = Ligne
Do Until TVNode Is Nothing
Ligne = Ligne + 1
' Dessine une ligne pour chaque noeud...
Set tBox = CreateReportControl("EtreeView", acLabel, acDetail, "", TVNode.Text, Retrait * Niveau, Espacement * (Ligne - 1))
With tBox
.FontSize = 8
.FontName = "Arial"
.Height = Espacement
'.Weight = (567 * 17) - Retrait * Niveau
.ForeColor = TVNode.ForeColor
If TVNode.Bold = True Then .FontWeight = 700
End With
Set Li = CreateReportControl("ETreeView", acLine, acDetail, , , Retrait * Niveau - 300, Espacement * (Ligne - 1) + EncrageTrait, 300, 0)
BasLigne = Ligne
' Recherche des enfants si vue non limitée
If TVNode.Expanded = True Then
ImprimeTreeView oTree, TVNode.Child, Niveau + 1
End If
Set TVNode = TVNode.Next
If BrancheLimit = 1 Then Exit Do
Loop
If BasLigne > HautLigne Then
Set Li = CreateReportControl("ETreeView", acLine, acDetail, , , Retrait * Niveau - 300, Espacement * HautLigne, 0, Espacement * (BasLigne - HautLigne) - EncrageTrait)
End If
If Niveau = 1 Then
' Fin de la création de l'état
DoCmd.Close acReport, "EtreeView", acSaveYes
' Affichage
DoCmd.OpenReport "ETreeView", acViewPreview
Set oTree = Nothing
End If
Exit Function
Fin:
A = MsgBox("Nb de lignes : " & Ligne & vbCrLf _
& "L'état ne peut pas s'afficher correctement, choississez une branche plus courte", vbCritical + vbOKOnly, "Dépassement de capacité")
End Function |
Partager