AccueilCodes sourcesFreewaresArticlesRéponsesRechercheVotre avisNewsMon blogLiensContact
Samedi 30 Mai 2026

Valid HTML 4.01 Transitional

126 codes sources48 articles77 news24 Liens15 avis9 réponses.
Comment imprimer un arbre quelconque ?

Voici le code de la classe qui permet d’imprimer un arbre quelconque. Créez une classe et ses méthodes, copier / coller chaque partie dans la méthode correspondante.

 

Pour imprimmer : Instanciez l'objet en lui donnant le nom du Treeview et utiliser la méthode Imprime.

 

TreeImp est une classe

       // tableau pour l'impression des décalages

       Arbre               est un tableau fixe de 8000 entiers

      

       // nom du treeview

       NomTreeview est une chaîne

      

       // informations sur la police de caractère

       NoPolice            est un entier

       NomPolice           est une chaîne

       HauteurPolice       est un entier

       AttributsPolice est un entier

       MargePolice         est un entier

       PageEnCours         est un entier

      

       // informations sur la ligne à imprimer en mm

       HauteurLigne est un entier

      

       // Largeur d'un niveau à imprimer en mm

       LargeurNiveau       est un entier

      

       // position courante dans la page en mm

       PosCourante est un entier

       PosPrecedante       est un entier

      

      

       // position de départ en mm sur une page

       PosDepart           est un entier

      

       // position de fin en mm sur une page

       PosFin              est un entier

      

       // marge droite en mm

       MargeDroite         est un entier

      

       // couleur magenta transparente

       MagentaTransparent est un booléen

       CouleurCadreHautFinDocument est un entier

FIN

 

 

 

 

 

PROCEDURE Constructeur(NomTreeview,CouleurCadre)

 

//Paramètres :

//- nomTreeView : Nom complet du treeview (NomFenêtre.NomChampTreeView)

//- CouleurCadre : Couleur du cadre haut et bas de document lors de l'impression.

 

:NomTreeview = NomTreeview

 

// valeur par défaut pour la police

:NoPolice = 999

:NomPolice = "Arial"

:HauteurPolice = 10

:AttributsPolice = iNormal

:MargePolice = 1

 

// zone d'impression

:PosDepart = 20

:PosFin      = iHauteurPage()

:MargeDroite = 20

 

// niveau

:LargeurNiveau = 10

 

// couleur magenta transparente

:MagentaTransparent=Vrai

 

:CouleurCadreHautFinDocument = CouleurCadre

 

 

 

 

PROCEDURE TreeImp::ChHauteurLigne()

 

// calcul la hauteur d'une ligne en fonction de la police choisie

:HauteurLigne = iHauteurTexte(iPolice(:NoPolice)+"X") + (2 * :MargePolice)

 

 

PROCEDURE TreeImp::ChLargeurNiveau(LargeurNiveau)

 

:LargeurNiveau = LargeurNiveau

 

 

PROCEDURE TreeImp::ChMagentaTransp(MagentaTransparent)

 

SI MagentaTransparent = 1 ALORS

       :MagentaTransparent = Vrai

SINON

       :MagentaTransparent = Faux

FIN

 

 

PROCEDURE TreeImp::ChMargeDroite(MargeDroite)

 

:MargeDroite = MargeDroite

 

 

PROCEDURE TreeImp::ChPolice(Num, Nom, TaillePolice, Attributs)    

      

:NoPolice = Num

:NomPolice = Nom

:HauteurPolice = TaillePolice

:AttributsPolice = Attributs

 

 

PROCEDURE TreeImp::ChPosDepart(PosDepart)

 

:PosDepart = PosDepart

 

 

PROCEDURE TreeImp::ChPosFin(PosFin)

 

:PosFin = PosFin

 

 

PROCEDURE TreeImp::Imprime()

 

//initialise la page en cours

:PageEnCours=iNumPage()

 

// création de la police de caractère

iCréePolice(:NoPolice, :HauteurPolice, :AttributsPolice, :NomPolice)

 

//Calcul de la hauteur d'une ligne

:ChHauteurLigne()

 

//Position courante

:PosCourante = iPosY()+:PosDepart

:PosPrecedante=:PosCourante

 

// Liste les fils du treeview à partir de la racine pour l'imprimer

ArbreListeFils(:NomTreeview, Null, ":ImprimeTreeView")

 

PROCEDURE TreeImp::ImprimeElement(Element, Niveau, Identifiant)

 

Décalage est un entier = 0

 

//Vérifie si saut de page

//en cas de nouvelle page, on change la position courante

:VerifiePosCourant()

            

// impression de l'image

SI :ImprimeImage(identifiant, Niveau)=Vrai ALORS

       Décalage = :HauteurLigne

FIN

 

iImprime( iPolice(:NoPolice) + iPosY(:PosCourante+:MargePolice) +...

iPosX(:MargeDroite + (Niveau*:LargeurNiveau) + Décalage) + Element)

 

:PosPrecedante=:PosCourante+:HauteurLigne

:PosCourante+=(:HauteurLigne*PartieEntière((iPosY()-(:PosCourante+:MargePolice))/:HauteurLigne))

 

 

FONCTION TreeImp::ImprimeImage(Fichier, Niveau)

// renvoie vrai si une image est imprimé

 

// vérification de la validité du fichier image

SI ExtraitChaîne( InfoBitmap( Fichier ),  1)<> "BAD" ALORS

       // si la couleur magenta doit être transparente

       SI :MagentaTransparent=Vrai ALORS iMagentaTransparent(Vrai)

      

       // impression de l'image

       iImprimeImage(Fichier, :MargeDroite + (Niveau*:LargeurNiveau), :PosCourante,...

       :MargeDroite + (Niveau*:LargeurNiveau) + :HauteurLigne, :PosCourante+:HauteurLigne)

      

       iMagentaTransparent(Faux)

      

       RENVOYER Vrai

      

FIN

 

RENVOYER Faux

 

 

PROCEDURE TreeImp::ImprimeTrait(L1, C1, L2, C2)

 

Ligne2,Colonne2 sont des entiers 

 

//Vérifie si saut de page

//en cas de nouvelle page, on change la position courante

:VerifiePosCourant()

 

SI L2>iHauteurPage() ALORS

       Ligne2=iHauteurPage()

SINON

       Ligne2=L2

FIN

 

SI C2>iLargeurPage() ALORS

       Colonne2=iHauteurPage()

SINON

       Colonne2=C2

FIN   

 

iTrait(C1,L1,Colonne2,Ligne2,1,iNoir,1)

 

 

PROCEDURE PRIVÉ TreeImp::ImprimeTreeView(NomTV, Chemin, Element, Niveau, Pointeur)

 

// cette procédure est appelée par la fonction ArbreListeFils() pour chaque

// élément du treeview.

NomTV = :NomTreeview

// déclaration des variables

i est un entier

Identifiant est une chaîne        // contient l'identifiant du niveau en cours.

                                               // si l'identifiant contient une image elle est imprimée.

 

// on stocke le nombre de fils de l'élément en cours

:Arbre[ Niveau ] = ArbreOccurrence(NomTV, Chemin+Element, aUnNiveau)

 

// si on est pas à la racine, on décrémente le nombre de fils du pére

// Niveau est le niveau du fils, (Niveau-1) celui du père

SI Niveau <> 1 ALORS

       :Arbre[ Niveau - 1 ]--

FIN

 

// récupération de l'identifiant

Identifiant = ArbreRécupèreIdentifiant(NomTV, Chemin+Element)

 

// impression du niveau

SI Niveau > 1 ALORS

       POUR i=1 A (Niveau - 1)

             //Vérifie si saut de page

             //en cas de nouvelle page, on change la position courante

             :VerifiePosCourant()

 

             // impression du trait pour le niveau en cours

             SI (i = (Niveau - 1) ) ALORS

            

                    SELON :Arbre[ i ]

                   

                           CAS 0: // c'est le dernier fils, on imprime un retour

                                  :TraitRetour(i, Element, Identifiant)

                   

                           AUTRE CAS: // il y a encore des fils donc on imprime un croisement

                                  :TraitCroisement(i, Element, Identifiant)

                          

                    FIN

            

             SINON

             // impression du trait pour un niveau quelconque

                    SELON :Arbre[ i ]

                   

                           CAS 0: // plus de fils pour ce niveau donc aucun trait à imprimer

                                                     

                           AUTRE CAS: // il existe encore des fils donc on imprime un trait vertical

                                  :TraitVertical(i)

                          

                    FIN

            

             FIN

      

       FIN

SINON

       // cas particulier pour la racine

       :ImprimeElement(Element, 0, Identifiant)

FIN

 

// on augmente la position courante d'une hauteur de ligne

:PosCourante += :HauteurLigne

// si on dépasse le cadre d'impression on saute une page

SI :PosCourante > :PosFin ALORS

       iSautePage

       :PosCourante = :PosDepart

FIN

 

 

PROCEDURE TreeImp::Initialisation(NomTreeview,CouleurCadre)

//Paramètres :

//- nomTreeView : Nom complet du treeview (NomFenêtre.NomChampTreeView)

//- CouleurCadre : Couleur du cadre haut et bas de document lors de l'impression.

 

:NomTreeview = NomTreeview

 

// valeur par défaut pour la police

:NoPolice = 999

:NomPolice = "Arial"

:HauteurPolice = 10

:AttributsPolice = iNormal

:MargePolice = 1

 

// zone d'impression

:PosDepart = 20

:PosFin      = iHauteurPage()

:MargeDroite = 20

 

// niveau

:LargeurNiveau = 10

 

// couleur magenta transparente

:MagentaTransparent=Vrai

 

:CouleurCadreHautFinDocument = CouleurCadre

 

 

PROCEDURE TreeImp::RecupLargeurNiveau()

 

RENVOYER :LargeurNiveau

 

 

PROCEDURE TreeImp::RecupMagentaTransp()

 

RENVOYER :MagentaTransparent

 

 

PROCEDURE TreeImp::RecupMargeDroite()

 

RENVOYER :MargeDroite

 

 

PROCEDURE TreeImp::RecupPolice()

 

RENVOYER :NomPolice+TAB+:HauteurPolice+TAB+:AttributsPolice

 

 

PROCEDURE TreeImp::RecupPosDepart()

 

RENVOYER :PosDepart

 

 

PROCEDURE TreeImp::RecupPosFin()

 

RENVOYER :PosFin

 

 

PROCEDURE TreeImp::TraitCroisement(Niveau, Element, Identifiant)

 

// on imprime |

//:PosCourante

:ImprimeTrait(:PosPrecedante , :MargeDroite + ((Niveau-1)*:LargeurNiveau) + (:LargeurNiveau/2), ...

       :PosCourante + :HauteurLigne , :MargeDroite + ((Niveau-1)*:LargeurNiveau) + (:LargeurNiveau/2) )

 

// on imprime le retour

//:PosCourante

:ImprimeTrait(:PosCourante + (:HauteurLigne/2) , :MargeDroite + ((Niveau-1)*:LargeurNiveau) + (:LargeurNiveau/2), ...

       :PosCourante + (:HauteurLigne/2), :MargeDroite + ((Niveau-1)*:LargeurNiveau) + (:LargeurNiveau/2) + (:LargeurNiveau/4) )

 

// on imprime le nom de l'élément

:ImprimeElement(Element, Niveau, Identifiant)

 

 

PROCEDURE TreeImp::TraitRetour(Niveau, Element, Identifiant)

 

// on imprime |

//:PosCourante

:ImprimeTrait(:PosPrecedante , :MargeDroite + ((Niveau-1)*:LargeurNiveau) + (:LargeurNiveau/2), ...

       :PosCourante +  (:HauteurLigne/2), :MargeDroite + ((Niveau-1)*:LargeurNiveau) + (:LargeurNiveau/2) )

 

 

 

// on imprime le retour

//:PosCourante

:ImprimeTrait(:PosPrecedante + (:HauteurLigne/2) , :MargeDroite + ((Niveau-1)*:LargeurNiveau) + (:LargeurNiveau/2), ...

       :PosPrecedante + (:HauteurLigne/2), :MargeDroite + ((Niveau-1)*:LargeurNiveau) + (:LargeurNiveau/2) + (:LargeurNiveau/4) )

 

// on imprime le nom de l'élément

:ImprimeElement(Element, Niveau, Identifiant)

 

 

PROCEDURE TreeImp::TraitVertical(Niveau)

//Vérifie si saut de page

//en cas de nouvelle page, on change la position courante

:VerifiePosCourant()

 

// on imprime |

:ImprimeTrait(:PosCourante , :MargeDroite + ((Niveau-1)*:LargeurNiveau) + (:LargeurNiveau/2), ...

       :PosCourante + :HauteurLigne, :MargeDroite + ((Niveau-1)*:LargeurNiveau) + (:LargeurNiveau/2) )

 

 

PROCEDURE TreeImp::VerifiePosCourant()

//Vérifie si saut de page

//en cas de nouvelle page, on change la position courante

 

//hauteur suffisante pour imprimmer le prochaine niveau ?

SI :HauteurLigne+iPosY()>iHauteurPage() ALORS

       iSautePage()

FIN

            

 

SI :PageEnCours<>iNumPage()       ALORS

       :PageEnCours=iNumPage()

       :PosCourante=:PosDepart

FIN

 

 

PROCEDURE ImprimeTitre(sTitre1="",sTitre2="")

//Impression du titre du document :

 

//Création de polices

iCréePolice(1, 20, iGras, "Arial",iBlanc)

iCréePolice(2, 20, iGras, "Arial",iJauneBulle)

 

//Impression d'un cadre en haut du document

iCadre(0,17,iLargeurPage(),17+15,1,100,:CouleurCadreHautFinDocument)

 

//iPosY(iPosY()-17)

 

//RVB(127,157,185)

//iraz

//7F9DB9

iPosY(20)

iImprimeMot(iPolice(2)+iPosX(20)+sTitre1)

iImprimeMot(iPolice(1) + sTitre2)

 

 

 

// Syntaxe :

//iImprimeFinDocument ()

//Impression d'une fin de document

// Paramètres :

//     Aucun

// Valeur de retour :

//     Aucune

 

PROCEDURE iImprimeFinDocument()

iPosY(iPosY()+10)

iCadre(0,iPosY(),iLargeurPage(),iPosY()+10,1,100,:CouleurCadreHautFinDocument)

 

 

 

Liste des codes sources
®2006 - codel5g.com