Numéro de la ligne dans un textbox

0/5 (12 avis)

Snippet vu 6 712 fois - Téléchargée 44 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
cs_dabro Messages postés 24 Date d'inscription mardi 15 avril 2003 Statut Membre Dernière intervention 25 novembre 2016
26 mars 2007 à 14:12
Merci Renfield... C'est vrai que quand on sait où chercher çà va mieux...
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 75
26 mars 2007 à 13:45
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
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 75
26 mars 2007 à 13:40
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.
cs_dabro Messages postés 24 Date d'inscription mardi 15 avril 2003 Statut Membre Dernière intervention 25 novembre 2016
26 mars 2007 à 13:36
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 !!!!!!
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 75
26 mars 2007 à 11:44

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.