PC SOFT

PROFESSIONAL NEWSGROUPS
WINDEVWEBDEV and WINDEV Mobile

Home → WINDEV 2025 → Champ RTF : enlever les dernier RC
Champ RTF : enlever les dernier RC
Started by bernard SOBRA, Nov., 09 2021 7:44 AM - 12 replies
Registered member
357 messages
Posted on November, 09 2021 - 7:44 AM
Bonjour les Kadors !

Voila, le titre est surement éloquent, je voudrai enlever lors de la saisie dans un champs de type RTF les derniers sauts de ligne éventuellement laissés par l'utilisateur (RC).

Ben voila, autant dans un champ de saisie classique c'est simple, autant avec un format de saisie RTF cela m'a l'air plus complexe.

Une idée ?

Merci de votre lecture

Bernard

--
Développeur Indépendant en Free-lance. Contactez moi par MP ou mel pour avoir mes conditions d'engagements.
Registered member
23 messages
Posted on November, 09 2021 - 11:26 AM
Bonjour.

SansCaractèreDroite(sChaîne, RC)

--
Cordialement Patrick.
Registered member
1,418 messages
Posted on November, 09 2021 - 1:20 PM
Bonjour, je ne pense pas que la fonction

https://doc.pcsoft.fr/?1000020479&name=sanscaracteredroite_fonction

sChaîne est une chaîne = "<<Je suis une chaîne de caractères>>"
sRésultat est une chaîne = SansCaractèreDroite(sChaîne, ">")
// sRésultat contient "<<Je suis une chaîne de caractères"


soit a elle seul la solution

je partirai sur une vérification que le dernier caractère du RTFversTexte

https://doc.pcsoft.fr/fr-FR/?3025032&name=RTFVersTexte

s est une chaîne

s = RTFVersTexte(SAI_SaisieRTF)
TANTQUE Droite(s,1) = RC
Info("J'ai un RC a la fin de mon RTF")

... // j'enlève le RC

s = RTFVersTexte(SAI_SaisieRTF)
FIN


--
Bertin CARRIERE
SRL RGPD.Zen-Project.be
support@zen-project.be
www.zen-project.be www.linkedin.com/in/bertincarriere

+32(0)498/10.18.58
Co-President de l'asbl Be-Dev Association des développeurs Windev de Belgique
www.be-dev.be
Registered member
1,418 messages
Posted on November, 09 2021 - 1:33 PM
Et pour ce qui est de supprimer le RC

https://doc.pcsoft.fr/?3025038&name=rtfremplace_fonction

--
Bertin CARRIERE
SRL RGPD.Zen-Project.be
support@zen-project.be
www.zen-project.be www.linkedin.com/in/bertincarriere

+32(0)498/10.18.58
Co-President de l'asbl Be-Dev Association des développeurs Windev de Belgique
www.be-dev.be
Registered member
357 messages
Posted on November, 10 2021 - 6:56 AM
En effet, la fonction "SansCaractèreDroite" n'est pas la solution avec du rtf. quand on voit le transcription d'un fichier rtf, on le comprend aisément.

Quand à la fonction décrite par Bertin, elle ne donne pas la possibilité de parcourir à l'envers, et elle va supprimer TOUS les RC du texte.
la doc de cette fonction dit que :
[Fin] : Entier optionnel
Précise si le texte doit être inséré ou s'il doit remplacer le texte existant.
Si [Début] = [Fin] (ou si [Début] est supérieur à [Fin]), le texte sera inséré à la position [Début].
Si [Début] est inférieur à [Fin], le texte remplacera les caractères présents entre [Début] et [Fin].


Ma question reste entière ? Pas moyen d'enlever les derniers RC sauf à le faire à la main.... ?

--
Développeur Indépendant en Free-lance. Contactez moi par MP ou mel pour avoir mes conditions d'engagements.
Registered member
215 messages
Posted on November, 10 2021 - 9:01 AM
Bonjour,
Chaîne1 est une chaîne
Chaîne2 est une chaîne
Chaîne1 = RTFVersTexte(Texte_RTF)
Chaîne2 = SansCaractèreDroite(Chaîne1, RC)
Texte_RTF = Chaîne2

Chez moi ça marche
Registered member
182 messages
Posted on November, 10 2021 - 9:44 AM
En utilisant RTFVersTexte, vous perdrez également le formatage du contenu.
Donc cela ne peut pas convenir à la demande initiale.
Registered member
1,173 messages
Posted on November, 10 2021 - 9:51 AM
Bonjour,

En RTF un retour chariot est fait avec "\par"+RC

J'ai trouvé ça dans ce post : https://forum.pcsoft.fr/fr-FR/pcsoft.fr.windev/120917-wd14-retour-chariot-dans-champs-rtf/read.awp

Mais est-ce toujours d'actualité?!

--
Thierry TILLIER
Développeur Windev-Webdev
Formation Windev : https://coursdinfo.teachable.com/
Formation bureautique : https://coursdinfo.net
Tuto WINDEV sur ma chaîne Youtube
Registered member
1,173 messages
Posted on November, 10 2021 - 9:55 AM
{\rtlch\fcs1 \af31507 \ltrch\fcs0 \insrsid5768974 Retour du }{\rtlch\fcs1 \af31507 \ltrch\fcs0 \insrsid2844985
\par }{\rtlch\fcs1 \af31507 \ltrch\fcs0 \insrsid5768974 chariot

pour :
Retour du
chariot

--
Thierry TILLIER
Développeur Windev-Webdev
Formation Windev : https://coursdinfo.teachable.com/
Formation bureautique : https://coursdinfo.net
Tuto WINDEV sur ma chaîne Youtube
Registered member
215 messages
Posted on November, 10 2021 - 11:41 AM
dans le code de sortie du champ:
MoiMême=SansCaractèreDroite(MoiMême,RC)
Registered member
357 messages
Posted on November, 10 2021 - 3:38 PM
THIERRY TILLIER a écrit :
Bonjour,
En RTF un retour chariot est fait avec "\par"+RC
J'ai trouvé ça dans ce post : https://forum.pcsoft.fr/fr-FR/pcsoft.fr.windev/120917-wd14-retour-chariot-dans-champs-rtf/read.awp
Mais est-ce toujours d'actualité?!
--
Thierry TILLIER


Oui, cela marche très bien, et dans mon cas, en doublant la recherche pour ne pas supprimer tout ceux du texte :

MoiMême = Remplace(MoiMême, "\par" + RC + "\par" , "")

Les RC intempestifs de fin de texte disparaissent alors, mais cela interdit de faire deux RC dans le texte. On ne peut pas avec cette méthode supprimer uniquement ceux à la fin de champ de saisie RTF.
Merci qui, encore une fois ??? Merci Thierry !! :merci: :merci:

--
Développeur Indépendant en Free-lance. Contactez moi par MP ou mel pour avoir mes conditions d'engagements.
Registered member
1,173 messages
Posted on November, 10 2021 - 4:23 PM
Pour supprimer que le dernier, il faut peut-être faire une recherche pour se positionner dessus.

--
Thierry TILLIER
Développeur Windev-Webdev
Formation Windev : https://coursdinfo.teachable.com/
Formation bureautique : https://coursdinfo.net
Tuto WINDEV sur ma chaîne Youtube
Registered member
1 message
Posted on November, 10 2021 - 9:09 PM
Bonjour
Il y a quelques années, j’avais créé une fonction pour répondre à ce problème. Elle permettait d’enlever les espaces (les blancs) en trop ainsi que les lignes en fin d’un champ RTF. Je l’ai retrouvée.
Je l’avais appelée EnlèveRCBlancs et l’appel se faisait par EnlèveRCBlancs("nom du champ RTF") ou EnlèveRCBlancs(nom du chamo RTF..nom)

C’est un peu une usine à gaz dont le code peut certainement être optimisé (notamment j’avais doublé le code pour faire une 2ème passe et j’avais eu la flemme de faire mieux.

Vous pouvez l’utiliser telle quelle ou vous en inspirer.

Procedure EnlèveRCBlancs(sRTF)

sTexte est une chaîne
nT1 est un entier
nT2 est un entier
nDif est un entier
bRC est un booléen
nPositionRC est un entier
nT est un entier
nCompteRC est un entier

// 1ère passe
//////////////////////////////////////////////////////////////////////////

nCompteRC=0
nDif=0
bRC=Vrai
sTexte=RTFVersTexte({sRTF, indChamp})

// Pour enlever les RC en fin de texte
// comptage du nombre de retours à la ligne en fin de texte : nCompteRC
SI SansEspace(sTexte)<>"" ALORS
TANTQUE bRC=Vrai ET sTexte<>""
nPositionRC=Position(sTexte,RC,Taille(sTexte),DepuisFin)
SI nPositionRC<>0 ALORS
nT=Taille(sTexte)-1
SI nT=nPositionRC ALORS
sTexte=Gauche(sTexte,nT-1)
nCompteRC++
SINON
bRC=Faux
FIN
SINON
bRC=Faux
FIN
FIN
DonneFocus(sRTF)
SI nCompteRC<>0 ALORS
// Tronque le RTF au nombre de caractères indiqués dans nCompteRC
{sRTF, indChamp}..Curseur=Taille(RTFVersTexte({sRTF, indChamp}))+1
POUR i=1 À nCompteRC
EnvoieTouche("{RA}",Handle({sRTF, indChamp}))
FIN
FIN
FIN

// Pour enlever les blancs en fin de texte RTF
// comptage du nombre de blancs à la ligne en fin de texte : nDif
sTexte=RTFVersTexte({sRTF, indChamp})
SI SansEspace(sTexte)<>"" ALORS
sTexte=Remplace(sTexte,RC,"@@@@")
nT1=Taille(sTexte)
sTexte=Gauche(sTexte) // sans blancs en fin de texte
nT2=Taille(sTexte)
nDif=nT1-nT2
DonneFocus(sRTF)
SI nDif<>0 ALORS
// Tronque le RTF au nombre de caractères indiqués dans nDif
{sRTF, indChamp}..Curseur=Taille(RTFVersTexte({sRTF, indChamp}))+1
POUR i=1 À nDif
EnvoieTouche("{RA}",Handle({sRTF, indChamp}))
FIN
FIN
FIN


// 2ème passe
//////////////////////////////////////////////////////////////////////////
nCompteRC=0
nDif=0
bRC=Vrai
sTexte=RTFVersTexte({sRTF, indChamp})

// Pour enlever les RC en fin de texte
// comptage du nombre de retours à la ligne en fin de texte : nCompteRC
SI SansEspace(sTexte)<>"" ALORS
TANTQUE bRC=Vrai ET sTexte<>""
nPositionRC=Position(sTexte,RC,Taille(sTexte),DepuisFin)
SI nPositionRC<>0 ALORS
nT=Taille(sTexte)-1
SI nT=nPositionRC ALORS
sTexte=Gauche(sTexte,nT-1)
nCompteRC++
SINON
bRC=Faux
FIN
SINON
bRC=Faux
FIN
FIN
DonneFocus(sRTF)
SI nCompteRC<>0 ALORS
// Tronque le RTF au nombre de caractères indiqués dans nCompteRC
{sRTF, indChamp}..Curseur=Taille(RTFVersTexte({sRTF, indChamp}))+1
POUR i=1 À nCompteRC
EnvoieTouche("{RA}",Handle({sRTF, indChamp}))
FIN
FIN
FIN

// Pour enlever les blancs en fin de texte RTF
// comptage du nombre de blancs à la ligne en fin de texte : nDif
sTexte=RTFVersTexte({sRTF, indChamp})
SI SansEspace(sTexte)<>"" ALORS
sTexte=Remplace(sTexte,RC,"@@@@")
nT1=Taille(sTexte)
sTexte=Gauche(sTexte) // sans blancs en fin de texte
nT2=Taille(sTexte)
nDif=nT1-nT2
DonneFocus(sRTF)
SI nDif<>0 ALORS
// Tronque le RTF au nombre de caractères indiqués dans nDif
{sRTF, indChamp}..Curseur=Taille(RTFVersTexte({sRTF, indChamp}))+1
POUR i=1 À nDif
EnvoieTouche("{RA}",Handle({sRTF, indChamp}))
FIN
FIN
FIN