Numéro de la ligne dans un textbox

Soyez le premier à donner votre avis sur cette source.

Snippet vu 6 065 fois - Téléchargée 41 fois

Contenu du snippet

Ce code permet de donner le numéro de la ligne où se trouve le curseur dans un textbox.
Placer un textbox (Text1) avec les propriété 'MultiLigne=True", "ScrollBars=3 - Both" et un label (Label1) puis copier le code.

Ce code fonctionne mais il ralentit lorsqu'il y a beaucoup de lignes.

Source / Exemple :


Private Sub Text1_Click()
    '*******************************************************
    ' NLigne est à 1 pour la première ligne qui n'est pas
    ' comptée avec cette méthode
    '*******************************************************
    NLigne = 1
    
    '*******************************************************
    ' chr(10) -> saut de ligne
    ' chr(13) -> caractère de retour chariot
    ' chr(10)+chr(13) donne un passage à la ligne suivante
    '*******************************************************
    For X = 1 To Text1.SelStart + 1 Step 2
        If Mid(Text1.Text, X, 1) = Chr(13) Or Mid(Text1.Text, X, 1) = Chr(10) Then NLigne = NLigne + 1
    Next
    '*******************************************************
    ' Text1.selstart permet de compter jusque'à la position
    ' du curseur qui est sur la ligne à numéroter
    '*******************************************************
    ' Step 2 permet de tester un caractère sur deux
    ' ce qui permet d'être un peut plus rapide que
    ' de tester tous les carctères un à un.
    '*******************************************************

Suite:
    '*******************************
    ' Affiche le numéro de la ligne
    '*******************************
    Label1.Caption = "Ligne N°" + Str(NLigne)
End Sub

Private Sub Text1_KeyUp(KeyCode As Integer, Shift As Integer)
    '*****************************************************
    ' Exécute la fonction qui donne le numéro de la ligne
    '*****************************************************
    Text1_Click
End Sub

A voir également

Ajouter un commentaire

Commentaires

Messages postés
24
Date d'inscription
mardi 15 avril 2003
Statut
Membre
Dernière intervention
25 novembre 2016

Merci Renfield... C'est vrai que quand on sait où chercher çà va mieux...
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
66
pour ceux qui trouvent que le code présenté ici est trop lent....


Private Const EM_LINEFROMCHAR As Long = &HC9

Private Declare Function SendMessage Lib "user32.dll" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByRef lParam As Any) As Long

Private Sub Text1_Click()
Dim nLine As Long
nLine = 1 + SendMessage(Text1.hwnd, EM_LINEFROMCHAR, Text1.SelStart, ByVal 0&)
Label1.Caption = "Ligne N°" & nLine
End Sub

Private Sub Text1_KeyUp(KeyCode As Integer, Shift As Integer)
Text1_Click
End Sub
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
66
gaffe au Byval :
MsgBox SendMessage(Form1.Text1.hWnd, EM_GETLINECOUNT, 0, Byval 0)

ravi de voir que tu a cherché un peu par toi même.
Messages postés
24
Date d'inscription
mardi 15 avril 2003
Statut
Membre
Dernière intervention
25 novembre 2016

Bon, ben j'ai la réponse grâce à Renfield :

Pour compter les lignes d'un contrôle txt avec ScrollBars = 2-Vertical :

'Compter les lignes d'un controle
Public Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Public Const EM_GETLINECOUNT = &HBA

MsgBox SendMessage(Form1.Text1.hWnd, EM_GETLINECOUNT, 0, 0)

Merci !!!!!!
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
66
Afficher les 12 commentaires

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.