PC SOFT

FOROS PROFESIONALES
WINDEVWEBDEV y WINDEV Mobile

Inicio → WINDEV 2025 → Bug RTF
Bug RTF
Iniciado por aurelien.machabert, 11,jul. 2019 16:34 - 2 respuestas
Miembro registrado
65 mensajes
Publicado el 11,julio 2019 - 16:34
Bonjour, j’essaie de mettre en place une liste de produits dans un champs RTF en formatant celle-ci

Or après plusieurs heures de recherche avec toutes les fonctions RTF connues, je n'arrive à ce que je veux :

Voici le résultat que j'aimerais avoir en pièce jointe :
https://drive.google.com/open…

Pour le code :
* 1 Code Principal déclenché d'un bouton
* 1 Fonction pour le formatage des Entêtes
* 1 Fonction pour le Formatage des Valeurs

Code Bouton
//** Déclaration des Variables **
St_UnAccessoire est un Gp_TypS_LigneCmdeAccessoiresPose
Tab_MesAccessoires est un tableau de Gp_TypS_LigneCmdeAccessoiresPose
Ch_MaListe est une chaîne = RC //** En formatant comme cela on sautera obligatoirement 2 lignes **
Ch_TypePolice est une chaîne
i est un entier
j est un entier
Ch_ChaineRecap est une chaîne = ""
Ch_LigneAccessoire est une chaîne
Ent_PositionValeur est un entier
Ent_LongueurValeur est une entier
Ch_ValeurTexteEnCours est une chaîne
Ch_ValeurEntete_Ref est une chaîne = "Réf : "
Ch_ValeurEntete_Libelle est une chaîne = "Libellé : "
Ch_ValeurEntete_Qte est une chaîne = " Qté : "
Ch_ValeurEntete_Condit est une chaîne = "Condit : "
Ch_ValeurEntete_Longueur est une chaîne = "Lg : "
//** Création des Articles dans mon tableau normalement issu d'une fenêtre annexe mais pour test, on les valide dans le code **
POUR j = 1 À 5 PAS 1
St_UnAccessoire.MemStr_Ch_RefAcc = "REF " + j
St_UnAccessoire.MemStr_Ch_LibelleAcc = "ARTICLE " + j
St_UnAccessoire.MemStr_Num_QteAcc = j
SELON EstPair(j)
CAS Vrai :
St_UnAccessoire.MemStr_Ch_Conditionnement = "U"
St_UnAccessoire.MemStr_Ent_LongueurAcc = 0
CAS Faux :
St_UnAccessoire.MemStr_Ch_Conditionnement = "ML"
St_UnAccessoire.MemStr_Ent_LongueurAcc = j * 1000
FIN
//** Ajout dans le tableau **
TableauAjoute(Tab_MesAccessoires,St_UnAccessoire)
FIN
//** On parcours tous les accessoires **
POUR TOUT St_UnAccessoire de Tab_MesAccessoires
//**************************************************************************
//** Ajout et récupération des éléments de positionnement de l'entête REF **
//**************************************************************************
Ch_ValeurTexteEnCours = Ch_ValeurEntete_Ref
RTFAjoute(TxtChampRTF,Ch_ValeurTexteEnCours)
Ent_LongueurValeur = Taille(TxtChampRTF)
Ent_PositionValeur = RTFRecherche(TxtChampRTF,Ch_ValeurTexteEnCours)
Ent_LongueurValeur = Taille(Ch_ValeurTexteEnCours)
//** Ensuite je sélectionne pour mettre en Forme les entêtes **
ProcL_FormateEntete(Ent_PositionValeur,Ent_LongueurValeur)
//***************************************************************************
//** Ajout et récupération des éléments de positionnement de la Valeur REF **
//***************************************************************************
Ch_ValeurTexteEnCours = St_UnAccessoire.MemStr_Ch_RefAcc
RTFAjoute(TxtChampRTF,Ch_ValeurTexteEnCours + TAB + TAB)
Ent_LongueurValeur = Taille(TxtChampRTF)
Ent_PositionValeur = RTFRecherche(TxtChampRTF,Ch_ValeurTexteEnCours)
Ent_LongueurValeur = Taille(Ch_ValeurTexteEnCours)
//** Ensuite je sélectionne pour mettre en Forme les Valeurs **
ProcL_FormateValeur(Ent_PositionValeur,Ent_LongueurValeur)
//******************************************************************************
//** Ajout et récupération des éléments de positionnement de l'entête LIBELLE **
//******************************************************************************
Ch_ValeurTexteEnCours = Ch_ValeurEntete_Libelle
RTFAjoute(TxtChampRTF,Ch_ValeurTexteEnCours)
Ent_LongueurValeur = Taille(TxtChampRTF)
Ent_PositionValeur = RTFRecherche(TxtChampRTF,Ch_ValeurTexteEnCours)
Ent_LongueurValeur = Taille(Ch_ValeurTexteEnCours)
//** Ensuite je sélectionne pour mettre en Forme les entêtes **
ProcL_FormateEntete(Ent_PositionValeur,Ent_LongueurValeur)
//*******************************************************************************
//** Ajout et récupération des éléments de positionnement de la Valeur LIBELLE **
//*******************************************************************************
Ch_ValeurTexteEnCours = St_UnAccessoire.MemStr_Ch_LibelleAcc
RTFAjoute(TxtChampRTF,Ch_ValeurTexteEnCours + TAB + TAB)
Ent_LongueurValeur = Taille(TxtChampRTF)
Ent_PositionValeur = RTFRecherche(TxtChampRTF,Ch_ValeurTexteEnCours)
Ent_LongueurValeur = Taille(Ch_ValeurTexteEnCours)
//** Ensuite je sélectionne pour mettre en Forme les Valeurs **
ProcL_FormateValeur(Ent_PositionValeur,Ent_LongueurValeur)
//**************************************************************************
//** Ajout et récupération des éléments de positionnement de l'entête QTE **
//**************************************************************************
Ch_ValeurTexteEnCours = Ch_ValeurEntete_Qte
RTFAjoute(TxtChampRTF,Ch_ValeurTexteEnCours)
Ent_LongueurValeur = Taille(TxtChampRTF)
Ent_PositionValeur = RTFRecherche(TxtChampRTF,Ch_ValeurTexteEnCours)
Ent_LongueurValeur = Taille(Ch_ValeurTexteEnCours)
//** Ensuite je sélectionne pour mettre en Forme les entêtes **
ProcL_FormateEntete(Ent_PositionValeur,Ent_LongueurValeur)
//***************************************************************************
//** Ajout et récupération des éléments de positionnement de la Valeur QTE **
//***************************************************************************
Ch_ValeurTexteEnCours = St_UnAccessoire.MemStr_Num_QteAcc
RTFAjoute(TxtChampRTF,Ch_ValeurTexteEnCours + TAB + TAB)
Ent_LongueurValeur = Taille(TxtChampRTF)
Ent_PositionValeur = RTFRecherche(TxtChampRTF,Ch_ValeurTexteEnCours)
Ent_LongueurValeur = Taille(Ch_ValeurTexteEnCours)
//** Ensuite je sélectionne pour mettre en Forme les Valeurs **
ProcL_FormateValeur(Ent_PositionValeur,Ent_LongueurValeur)
//*****************************************************************************
//** Ajout et récupération des éléments de positionnement de l'entête CONDIT **
//*****************************************************************************
Ch_ValeurTexteEnCours = Ch_ValeurEntete_Condit
RTFAjoute(TxtChampRTF,Ch_ValeurTexteEnCours)
Ent_LongueurValeur = Taille(TxtChampRTF)
Ent_PositionValeur = RTFRecherche(TxtChampRTF,Ch_ValeurTexteEnCours)
Ent_LongueurValeur = Taille(Ch_ValeurTexteEnCours)
//** Ensuite je sélectionne pour mettre en Forme les entêtes **
ProcL_FormateEntete(Ent_PositionValeur,Ent_LongueurValeur)
//******************************************************************************
//** Ajout et récupération des éléments de positionnement de la Valeur CONDIT **
//******************************************************************************
Ch_ValeurTexteEnCours = St_UnAccessoire.MemStr_Ch_Conditionnement
RTFAjoute(TxtChampRTF,Ch_ValeurTexteEnCours + TAB + TAB)
Ent_LongueurValeur = Taille(TxtChampRTF)
Ent_PositionValeur = RTFRecherche(TxtChampRTF,Ch_ValeurTexteEnCours)
Ent_LongueurValeur = Taille(Ch_ValeurTexteEnCours)
//** Ensuite je sélectionne pour mettre en Forme les Valeurs **
ProcL_FormateValeur(Ent_PositionValeur,Ent_LongueurValeur)
//*******************************************************************************
//** Ajout et récupération des éléments de positionnement de l'entête LONGUEUR **
//*******************************************************************************
Ch_ValeurTexteEnCours = Ch_ValeurEntete_Longueur
RTFAjoute(TxtChampRTF,Ch_ValeurTexteEnCours)
Ent_LongueurValeur = Taille(TxtChampRTF)
Ent_PositionValeur = RTFRecherche(TxtChampRTF,Ch_ValeurTexteEnCours)
Ent_LongueurValeur = Taille(Ch_ValeurTexteEnCours)
//** Ensuite je sélectionne pour mettre en Forme les entêtes **
ProcL_FormateEntete(Ent_PositionValeur,Ent_LongueurValeur)
//********************************************************************************
//** Ajout et récupération des éléments de positionnement de la Valeur LONGUEUR **
//********************************************************************************
Ch_ValeurTexteEnCours = St_UnAccessoire.MemStr_Ent_LongueurAcc
RTFAjoute(TxtChampRTF,Ch_ValeurTexteEnCours + TAB + TAB)
Ent_LongueurValeur = Taille(TxtChampRTF)
Ent_PositionValeur = RTFRecherche(TxtChampRTF,Ch_ValeurTexteEnCours)
Ent_LongueurValeur = Taille(Ch_ValeurTexteEnCours)
//** Ensuite je sélectionne pour mettre en Forme les Valeurs **
ProcL_FormateValeur(Ent_PositionValeur,Ent_LongueurValeur)
//******************************
//** Ajout d'un RC à la liste **
//******************************
RTFAjoute(TxtChampRTF,RC)
FIN


Code Formatage Entete
Procedure ProcL_FormateEntete(LOCAL Ent_PosEntete est un entier,LOCAL Ent_LongueurEntete est un entier)
//** On formate les Titres **
RTFSelection(TxtChampRTF,rtfGras,Vrai,Ent_PosEntete,Ent_LongueurEntete)
RTFSelection(TxtChampRTF,rtfSouligné,Vrai,Ent_PosEntete,Ent_LongueurEntete)
RTFSelection(TxtChampRTF,rtfItalique,Faux,Ent_PosEntete,Ent_LongueurEntete)
RTFSelection(TxtChampRTF,rtfTaillePolice,10,Ent_PosEntete,Ent_LongueurEntete)
RTFSelection(TxtChampRTF,rtfNomPolice,"Arial",Ent_PosEntete,Ent_LongueurEntete)
RTFSelection(TxtChampRTF,rtfCouleur,Noir,Ent_PosEntete,Ent_LongueurEntete)


Code Formatage Valeurs
Procedure ProcL_FormateValeur(LOCAL Ent_PosValeur est un entier,LOCAL Ent_LongueurValeur est un entier)
//** On formate les Valeurs **
RTFSelection(TxtChampRTF,rtfGras,Vrai,Ent_PosValeur,Ent_LongueurValeur)
RTFSelection(TxtChampRTF,rtfSouligné,Faux,Ent_PosValeur,Ent_LongueurValeur)
RTFSelection(TxtChampRTF,rtfItalique,Vrai,Ent_PosValeur,Ent_LongueurValeur)
RTFSelection(TxtChampRTF,rtfTaillePolice,9,Ent_PosValeur,Ent_LongueurValeur)
RTFSelection(TxtChampRTF,rtfNomPolice,"Arial",Ent_PosValeur,Ent_LongueurValeur)
RTFSelection(TxtChampRTF,rtfCouleur,BleuClair,Ent_PosValeur,Ent_LongueurValeur)


--
Aurélien MACHABERT
Développeur Chez GAUTHIER Menuiserie
Miembro registrado
953 mensajes
Publicado el 12,julio 2019 - 09:58
bonjour Aurélien,

Perso, pour ce genre de mise en forme, je me créé un champ libelle RTF invisible , préformaté pour un 'enregistrement'.
Ensuite, avec un simple RTFAjoute()
et un Remplace()
çà donne un résultat plutôt fiable.






exemple de code :
_ref,_libelle,_condi,_qte,_longueur,_lib_longueur sont des chaînes
_avec_longueur est un booléen=Vrai
InitHasard()

POUR _i=1 _À_ 10
_ref=DonneGUID(guidBrut)
_libelle=DonneGUID(guidBrut)
_qte=NumériqueVersChaîne(Hasard())
_condi="U"
SI _avec_longueur ALORS
_longueur=NumériqueVersChaîne(Hasard())
_lib_longueur="Lg :"
SINON
_longueur=""
_lib_longueur=""
FIN

PROCEDURE INTERNE proc_int_formate_value(vp_ref,vp_lib,vp_condi,vp_qte,vp_lib_long,vp_long)
RENVOYER Remplace(Remplace(Remplace(Remplace(Remplace(Remplace(lib_modele_rtf,...
"%%REF%%",vp_ref),...
"%%LIBELLE%%",vp_lib),...
"%%CONDI%%",vp_condi),...
"%%QTE%%",vp_qte),...
"%%LG%%",vp_lib_long),...
"%%VALLG%%",vp_long)
FIN

RTFAjoute(lib_result_rtf,proc_int_formate_value(_ref,_libelle,_condi,_qte,_lib_longueur,_longueur))
_avec_longueur=PAS _avec_longueur
FIN
Miembro registrado
65 mensajes
Publicado el 12,julio 2019 - 11:48
Bonjour Christophe,

Tout d'abord merci beaucoup pour ta réponse qui m'a été énormément utile.

je viens de faire mon test et j'arrive exactement à ce que je voulais et en plus de cela de manière hyper simple !!!

MERCI BEAUCOUP

:merci: :merci: :merci: :merci: :merci: :merci:

--
Aurélien MACHABERT
Développeur Chez GAUTHIER Menuiserie