Position dans textbox

Résolu
Sinistrus Messages postés 1017 Date d'inscription mercredi 12 décembre 2007 Statut Membre Dernière intervention 6 juin 2023 - 24 juin 2016 à 10:56
Sinistrus Messages postés 1017 Date d'inscription mercredi 12 décembre 2007 Statut Membre Dernière intervention 6 juin 2023 - 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

9 réponses

ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
24 juin 2016 à 11:03
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.
0
Sinistrus Messages postés 1017 Date d'inscription mercredi 12 décembre 2007 Statut Membre Dernière intervention 6 juin 2023
24 juin 2016 à 11:07
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"
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
24 juin 2016 à 11:30
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.
0
Sinistrus Messages postés 1017 Date d'inscription mercredi 12 décembre 2007 Statut Membre Dernière intervention 6 juin 2023
24 juin 2016 à 11:34
Merci beaucoup ucfoutu mais (lol) tu m'a montré comment lire la ligne et pas comment afficher le numéro de la ligne :D
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
24 juin 2016 à 11:56
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 ????

0
Sinistrus Messages postés 1017 Date d'inscription mercredi 12 décembre 2007 Statut Membre Dernière intervention 6 juin 2023
24 juin 2016 à 12:42
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.
0
Sinistrus Messages postés 1017 Date d'inscription mercredi 12 décembre 2007 Statut Membre Dernière intervention 6 juin 2023
24 juin 2016 à 12:56
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
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
24 juin 2016 à 13:01
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 !

0
Sinistrus Messages postés 1017 Date d'inscription mercredi 12 décembre 2007 Statut Membre Dernière intervention 6 juin 2023
24 juin 2016 à 13:54
Merci ucfoutu,

J'ai oublié le "=" désolé
0
Rejoignez-nous