Windev : RTF : Concaténer des chaines RTF de polices différentes dans un libellé avec mise en forme RTF
Voici un code permettant de concaténer des chaines RTF de polices différentes, pour les afficher dans un champ de type "Libellé avec mise en forme RTF" (Champ Libellé Onglet détail, cocher "Texte avec mise en forme (R.T.F)"), sans passer par un champ de saisie RTF.
Dans cet exemple, la chaine finale obtenue est la suivante : "Verdana10RougeArial8VertTahoma12BleuGras Trebuchet10NoirSouligne" (Chaque partie étant mise en forme avec la police représentée) :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
|
//Champ de Type "Libellé avec mise en forme RTF"
Lib_RTF = ""
LOCAL
sTexteRTF est une chaîne
sTexteRTF = Texte_Vers_RTF(sTexteRTF)
sTexteRTF = RTF_Concat_Texte(sTexteRTF,"Verdana10Rouge","Verdana",10,iRougeFoncé)
sTexteRTF = RTF_Concat_Texte(sTexteRTF,"Arial8Vert","Arial",8,iVertFoncé)
sTexteRTF = RTF_Concat_Texte(sTexteRTF,"Tahoma12BleuGras","Tahoma",12,iBleuFoncé,Vrai)
sTexteRTF = RTF_Concat_Texte(sTexteRTF," ")
sTexteRTF = RTF_Concat_Texte(sTexteRTF,"Trebuchet10NoirSouligne","Trebuchet",10,iNoir,Faux,Vrai)
Lib_RTF = sTexteRTF |
Procédure RTF_Concat_Texte :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
|
PROCEDURE RTF_Concat_Texte(...
LOCAL _sTexteRTF1 est une chaîne,...
LOCAL _sTexteRTF2 est une chaîne,...
_sPolice est une chaîne="",...
_iTaille est un entier=-1,...
_iCouleur est un entier=-1,...
_iGras est un entier=-1,...
_iSouligne est un entier=-1)
_sTexteRTF2 = Texte_Vers_RTF(_sTexteRTF2)
_sTexteRTF2 = RTF_Police(_sTexteRTF2,_sPolice,_iTaille,_iCouleur,_iGras,_iSouligne)
_sTexteRTF2 = RTF_Concat(_sTexteRTF1,_sTexteRTF2)
RENVOYER _sTexteRTF2 |
Procédure Texte_Vers_RTF :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
|
PROCEDURE Texte_Vers_RTF(LOCAL _sTexte est une chaîne)
//En attendant la procédure W-Langage "Texte_Vers_RTF" implémentée à partir de Windev 18
LOCAL
sTexteRTF est une chaîne
sTexteRTF = ""
sTexteRTF = RTFAjoute(sTexteRTF,_sTexte)
//La fonction RTFAjoute ajoute 2 RC en fin de chaine
//Je les supprime
sTexteRTF = Gauche(sTexteRTF,Taille(sTexteRTF)-5)
sTexteRTF += "}"
RENVOYER sTexteRTF |
Procédure RTF_Police :
Code:
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
|
PROCEDURE RTF_Police(__sTexteRTF est une chaîne,...
_sPolice est une chaîne="",...
_iTaille est un entier=-1,...
_iCouleur est un entier=-1,...
_iGras est un entier=-1,...
_iSouligne est un entier=-1)
LOCAL
iTaille est un entier
iTaille = Taille(__sTexteRTF)
SI _sPolice <> "" ALORS
__sTexteRTF = RTFSélection(__sTexteRTF,rtfNomPolice,_sPolice,1,iTaille)
FIN
SI _iTaille <> -1 ALORS
__sTexteRTF = RTFSélection(__sTexteRTF,rtfTaillePolice,_iTaille,1,iTaille)
FIN
SI _iCouleur <> -1 ALORS
__sTexteRTF = RTFSélection(__sTexteRTF,rtfCouleur,_iCouleur,1,iTaille)
FIN
SI _iGras <> -1 ALORS
__sTexteRTF = RTFSélection(__sTexteRTF,rtfGras,_iGras,1,iTaille)
FIN
SI _iSouligne <> -1 ALORS
__sTexteRTF = RTFSélection(__sTexteRTF,rtfSouligné,_iSouligne,1,iTaille)
FIN
RENVOYER __sTexteRTF |
Procédure RTF_Concat :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
|
PROCEDURE RTF_Concat(LOCAL _sTexteRTF1 est une chaîne,LOCAL _sTexteRTF2 est une chaîne)
LOCAL
sTexteRTFFinal est une chaîne
sTexteRTFFinal = RTFAjoute(_sTexteRTF1,_sTexteRTF2)
//La fonction RTFAjoute ajoute 2 RC en fin de chaine
//Je les supprime ainsi que la balise \par
sTexteRTFFinal = Gauche(sTexteRTFFinal,Taille(sTexteRTFFinal)-9)
sTexteRTFFinal += "}"
RENVOYER sTexteRTFFinal |
Bonne prog :ccool:
Traitement de TXT vers RTF
Bonjour,
Merci pour ce code parfaitement fonctionnel.
Je suis en version 16 et donc très peu évolué...
Il est effectivement très difficile de bien maîtriser les attributs RTF et de ce fait, j'ai pu résoudre mon problème avec.
En fait je devais intégrer dans un champ RTF de ma table une compilation de 3 messages de types différents et provenant d'un fichier.
La lecture dans le fichier des valeurs à concaténer avec RC et aspect différent :
Valeur 1 = texte +RC
Valeur 2 = Texte + RC
Valeur 3 = RTF
J'ai juste modifié un extrait de la fonction RTF_Concat_Texte pour ne pas avoir à changer l'aspect de ma valeur 3 (déjà mise en forme)
Code:
1 2 3 4 5 6 7
| SI _sPolice <> "" ALORS
_sTexteRTF2 = Texte_Vers_RTF(_sTexteRTF2)
_sTexteRTF2 = RTF_Police(_sTexteRTF2,_sPolice,_iTaille,_iCouleur,_iGras,_iSouligne)
_sTexteRTF2 = RTF_Concat(_sTexteRTF1,_sTexteRTF2)
SINON
_sTexteRTF2 = RTF_Concat(_sTexteRTF1,_sTexteRTF2)
FIN |
Encore merci