Compter le nombre de lignes d'un TextArea?

peut être que dans la fonction comptage de ligne le caractère chr(13) n’est vu comme un caractère ?

Alors ajoutez ceci:

+if(Txt.Middle(Txt.Bytes-1,1)=EndOfLine,1,0))

à la fin de la ligne.

Il s’agit d’une fonction if:

Résultat=If(Condition,SiVrai,SiFaux)

Par exemple:

Var Résultat as String
Var X as integer=NImporteQuoi

Résultat=if((x mod 3)=0,“:heavy_check_mark:”,“✗”)

“Résultat” vaudra “:heavy_check_mark:" si x est un multiple de 3, sinon “✗”.

Cherchez “if” dans la référence du langage, et vous y verrez cette fonction.

Oui. Je crois que ça n’a jamais été fiable. Pour l’instant, faites au mieux avec les bugs de Xojo :man_shrugging:

Chr(13) est en déclin. C’était le code pour la fin de ligne sur Mac Classic (OS 9 et début OS X). Désormais, Mac OS utilise Chr(10), comme Linux et Windows utilise Chr(13)+Chr(10) (parce qu’un seul caractère, c’était trop simple…).
La classe EndOfLine vous permet d’accéder à la fin de ligne des trois systèmes. Sans argument (donc, s=EndOfLine), elle renvoie le(s) caractère(s) du système en cours.

avec la ligne en plus ça fonctionne comme si ce n’était pas bugé, franchement Xojo devrais songer à vous embaucher pour les corrections de bugs, on en aurait pas pour 5 ans :smiley:

sinon merci pour la petite leçon, ça me sera utile a l’avenir… je suis un amateur confirmer de Xojo :slight_smile:

je me développe des petites app perso pour un usage perso :wink:

Voilà la liste de mes apps, certaine sont en cours et d’autre à peine commencé mais comme je suis le dévelopeur elle serons toujours en cours temps que je serait vivant :slight_smile:

Astrologue
Gestion des Crédits
Horloge Free Box
Libido
Ram Disk Folder
Statistiques Capture d’écran
Trouveur Outils
Transfer Date Time

la plus grosse c’est Trouveur Outils , ça fait 3 ans que je bosse dessus…

ps : par contre si on valide après le texte par défaut sans le supprimer, le bug est de retour :smiley:

ça deviens un casse tête ce bug!

Apparemment, mon lien est passé inapperçu, alors:

Il s’agit d’un caractère de fin de ligne. Il ne crée pas de ligne. Ajouter un caractère après le caractère de fin de ligne crée une nouvelle ligne qui n’est une vraie ligne que lorsqu’un caractère de fin de ligne est ajouté.

Ce concept n’est pas difficile à comprendre ni à accepter.

En revanche, c’est à toi de voir comment tu veux traiter les derniers caractères d’un texte où aucun caractère de fin de ligne est présent.

Maintenant, parles-nous des paragraphes… :grinning:

Vous avez un site web?

je vous l’ai dis je suis un amateur confirmé sur Xojo, mes application ne sont pas destiné au publique, ce sont des outils que je développe, pour mes travaux occulte, je suis dans la spiritualité :

bon c’est vrai par exemple le logiciel sur l’horloge free box, je les distribué, ça peut être utile voir fun pour n’importe qui, si il y a un de mes logiciel vous intéressé dite le moi je vous met un lien si bien sur je peux le rendre publique, sinon bein oui j’ai trois site mais bof les site, mais sur ces site point de logiciel a téléchargé il sont tous sur la spiritualité, ma vitrine commercial est sur facebook c’est un groupe

ce qui est difficile a comprendre c’est ça

retrour → 1 ligne
retour → 1 ligne
retour – 1 ligne
en suite je tape un caractère 2 lignes
j’en tape un autre sur la même ligne et la il met 3 ligne

ça c’est difficile a comprendre

ps : j’avai pas vu votre message

Cette méthode fonctionne mieux.
Il faut juste l’affiner pour les phrases sur plusieurs qui passent juste à la ligne suivante.

Function CompteLignes(mTextArea As DesktopTextArea) As Integer
Var larg As Double = mTextArea.Width
Var leTexte As String = mTextArea.StyledText.Text
leTexte = leTexte.ReplaceAll(Chr(13)+Chr(10), Chr(13))
leTexte = leTexte.ReplaceAll(Chr(10), Chr(13))
Var tabLignes() As String = leTexte.Split(chr(13))
Var i, j As Integer
j = tabLignes.LastIndex
Var mPict As New Picture(100, 100)
Var mSTR As StyleRun = mTextArea.StyledText.StyleRun(0)   //Le cas avec plusieurs StyleRun n'est pas traité
mPict.Graphics.Bold = mSTR.Bold
mPict.Graphics.Italic = mSTR.Italic
mPict.Graphics.Underline = mSTR.Underline
mPict.Graphics.FontSize = mSTR.FontSize
mPict.Graphics.FontName = mSTR.FontName

Var nbLignes As Integer

for i = 0 to j
  Var mLigne As String = tabLignes(i)
  Var len As Double = mPict.Graphics.TextWidth(mLigne)
  if len > larg then
    nbLignes = nbLignes + Ceiling(len / larg)
  else
    nbLignes = nbLignes + 1
  end if
next i

Return nbLignes

Et pour l’appeler j’ai ajouté un Label6 :

Label6.text = "Nb Ligne(s):" + str(CompteLignes(me))

Eric Hamery,

J’ai un peu visité tes sites.
Et, désolé, mais il faudrait soigner l’orthographe…
Ca pique !

1 Like

Vous avez la possibilité de remplacer ça par “ReplaceLineEndings” :wink:

Au départ j’avais fait un Split(EndOfLine) mais qui ne fonctionnait pas.
Je suis donc revenu à du basic maitrisé…
A voir si ReplaceLineEndings fonctionne bien.

Il faut juste accepte le vrai nom du “caractère de fin de ligne”.
Tant que tu ne mets aucun caractère dans la ligne virtuelle, elle n’existe pas. Dès le premier caractère (“caractère de fin de ligne” compris), une nouvelle ligne est crée.

C’est une question de raisonnement et d’acceptation.

Mets un caractère de fin de ligne dans un mot en plein milieu de la ligne, et le reste du mot passe à la ligne suivante, et ton compteur affiche une ligne de plus…

Si son nom était “caractère de début de ligne”, je ne dirais rien.

Connais-tu la différence entre Retour et Entrée (indice: essaye avec Word après avoir affiché les invisibles).

Merci pour votre aide et vos leçons, je vais travailler sur le text dans un string, et faire moi même la découpe du texte a 83 caractères par ligne, dans le string je vais compter les chr(13) ou chr(10) faut que je vois pour ça… en faite c’est pour mon application Journal Secret, je vais essayer de copier le fonctionnement des lecteurs de news et leur limite de caractère par ligne…

Voilà le code qui fonctionne bien, sauf quand on arrive en fin de ligne, les deux dernier cararcter de la ligne sont compté comme nouvelle ligne, mais le passage a la ligne automatique n’ajoute pas une nouvelle ligne au compteur, c’est juste que le nombre de ligne est compté deux caractere a l’avance, car avant de compter les ligne j’ajoute deux caractère “BB” a la fin du TextArea, pour les suprimer une fois le comptage fait…

TextArea1.text = TextArea1.text + “BB”

Label5.text = “Nb Ligne(s):” + str(TextArea1.LineNumber(TextArea1.text.Bytes) + 1 )

TextArea1.text = TextArea1.text.LeftBytes(TextArea1.text.Length - 2)

Bon ça fonctionne pas vraiment bien quand le champ est pré remplis, mais si j’efface tout le champ et que j’écrit ça fonctionne plutôt bien… je pense que TextArea est bugé et pas qu’un seul bug…