Position dans textbox [Résolu]

Messages postés
925
Date d'inscription
mercredi 12 décembre 2007
Dernière intervention
16 novembre 2018
- - Dernière réponse : Sinistrus
Messages postés
925
Date d'inscription
mercredi 12 décembre 2007
Dernière intervention
16 novembre 2018
- 24 juin 2016 à 13:54
Bonjour à tous !

Je met à jour une appli VB6 et j'ai une petite question svp :
Comment avoir le numéro de la ligne où j'ai mon curseur dans un textbox ?
J'ai réussi à le faire avec un Richtextbox mais je le veux pour un textbox...

Merci de m'aider
Cordialement
Afficher la suite 

Votre réponse

9 réponses

Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
0
Merci
Bonjour,
de quel "numéro de ligne" parles-tu ?
Car il faut distinguer :
- les lignes réelles (elles sont séparées par de véritables sauts de ligne)
et
- les "lignes d'affichage", qui ne sont qu'une disposition d'affichage et ne sont pas fixes (dépendantes de la largeur de la textbox, mais également de la police de caractères). On voit d'ailleurs mal à quoi il serait véritablement utile de distinguer ces lignes de simple affichage.
Commenter la réponse de ucfoutu
Messages postés
925
Date d'inscription
mercredi 12 décembre 2007
Dernière intervention
16 novembre 2018
0
Merci
Merci ucfoutu,

Les lignes d'affichage :
'' Position ligne actuelle
'Dim lNumber, CPosition
'lNumber = txt.GetLineFromChar(txt.SelStart) + 1
'CPosition = txt.SelStart - Message(txt.hWnd, EM_LINEINDEX, 'txt.GetLineFromChar(txt.SelStart), vbNull) + 1
'AAA = lNumber
'----------------------------------------
' Nombre de ligne au total
BBB = UBound(Split(TXT_FichierHosts, vbCrLf)) + 1
'----------------------------------------
'Position caractère
CCC = TXT_FichierHosts.SelStart
'----------------------------------------
'Nombre caractères au total
DDD = ""
'----------------------------------------
LBL_Rapport.Caption = AAA & "/" & BBB & " lignes | " & CCC & "/" & DDD & " mots"
Commenter la réponse de Sinistrus
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
0
Merci
s'il s'agit des lignes d'affichage (non réelles, donc), on n'utilise pas les vrais sauts de ligne (vbcrlf).
Voilà alors comment faire (exemple)
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long

Private Sub Command1_Click()
Dim ligne_a_lire As Long
ligne_a_lire = 3 ' pour lire la 3ème ligne, ici
MsgBox GetLine(Text1.hwnd, ligne_a_lire)
End Sub

Public Function GetLine(hwnd As Long, ligne_a_lire) As String
Dim tampon As String, x As Long
tampon = Space(200)
x = SendMessage(hwnd, &HC4, ligne_a_lire - 1, ByVal tampon)
GetLine = Left$(tampon, x)
End Function

Ta textbox doit bien évidemment être en multiline.
Commenter la réponse de ucfoutu
Messages postés
925
Date d'inscription
mercredi 12 décembre 2007
Dernière intervention
16 novembre 2018
0
Merci
Merci beaucoup ucfoutu mais (lol) tu m'a montré comment lire la ligne et pas comment afficher le numéro de la ligne :D
Commenter la réponse de Sinistrus
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
0
Merci
Je ne sais pas quelle espèce de soupe tu fabriques, mais si tu y tiens vraiment, voilà :
 Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long

Private Sub Command1_Click()
Dim temp As String, ou As Long
temp = Text1.Text
Text1.Text = Left(Text1.Text, Text1.SelStart)
ou = SendMessage(Text1.hWnd, 186, 0, 0)
MsgBox ou
Text1.Text = temp
End Sub

cela implique que tu as placé le caret sur une ligne de la textbox. En cliquant sur Command1, tu connaîtras le n° de cette ligne d'affichage.

A quoi diable cela peut-il te servir ????

Commenter la réponse de ucfoutu
Messages postés
925
Date d'inscription
mercredi 12 décembre 2007
Dernière intervention
16 novembre 2018
0
Merci
Hummm... dis, pourquoi quand je veux remplacer le MsgBox par un label j'ai un message d'erreur :$

et pourquoi ?
Je dois cataloguer et rechercher avec précision des données pour ma boîte et le Richtextbox ne fait pas trop mon affaire...
Il faut que le texte affiché soit brut.
Commenter la réponse de Sinistrus
Messages postés
925
Date d'inscription
mercredi 12 décembre 2007
Dernière intervention
16 novembre 2018
0
Merci
J'ai essayé ceci aussi :

Dim lCount As Long
lCount = SendMessageAsLong(text1.hWnd, EM_GETLINECOUNT, 0, 0)
label.Caption = lCount

Mais là j'ai le nombre total de ligne qui s'affiche :D
Commenter la réponse de Sinistrus
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
0
Merci
Hummm... dis, pourquoi quand je veux remplacer le MsgBox par un label j'ai un message d'erreur :$

Moi, je n'en ai pas ... mais avec mon code.
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long

Private Sub Command1_Click()
Dim temp As String, ou As Long
temp = Text1.Text
Text1.Text = Left(Text1.Text, Text1.SelStart)
ou = SendMessage(Text1.hWnd, 186, 0, 0)
Label1.Caption = ou
Text1.Text = temp
End Sub

Drôle, non ?
Où est le tien ????????? Je ne le vois pas !

Commenter la réponse de ucfoutu
Messages postés
925
Date d'inscription
mercredi 12 décembre 2007
Dernière intervention
16 novembre 2018
0
Merci
Merci ucfoutu,

J'ai oublié le "=" désolé
Commenter la réponse de Sinistrus

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.