[Clos] RichTextBox curseur

Fermé
cs_dayvid Messages postés 212 Date d'inscription mardi 18 janvier 2011 Statut Membre Dernière intervention 12 février 2013 - 11 févr. 2013 à 15:05
 cptpingu - 13 févr. 2013 à 12:54
Bonjour,

Ayant pas trouvé se que je cherchais, je voudrais vous demander:

Je voudrais que quand il se passe quelque chose dans le RichTextBox, que la position
du curseur soit renseigné dans ma barre de statue

Comment renvoyer / changer la position (En X et Y, en caractère et colonne) du curseur dans le RichTextBox
C'est tout pour le moment, le reste viendra après.

49 réponses

cs_dayvid Messages postés 212 Date d'inscription mardi 18 janvier 2011 Statut Membre Dernière intervention 12 février 2013 1
11 févr. 2013 à 18:38
J'ai trouvé ça mais ça ne marche pas
Private Const EM_LINEINDEX As Long = &HBB
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

Function GetRowCaret(ByRef oRtb As RichTextBox) As Long
GetRowCaret = oRtb.GetLineFromChar(oRtb.SelStart) + 1
End Function

Function GetColCaret(ByRef oRtb As RichTextBox) As Long
GetColCaret = oRtb.SelStart - SendMessage(oRtb.hwnd, EM_LINEINDEX,  GetRowCaret - 1,  ByVal 0&)
End Function
0
cs_dayvid Messages postés 212 Date d'inscription mardi 18 janvier 2011 Statut Membre Dernière intervention 12 février 2013 1
11 févr. 2013 à 18:47
Mais c'est pas vrais ça
VB.net est très évoluer mais il ne sais pas faire ça changer et renvoyer la position du curseur
Ya aucune fonction pour faire ça !

J’arrête pas de chercher mais ya rien
J'suis vers moi
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
11 févr. 2013 à 19:00
Bonjour,
mais ça ne marche pas

1) "ça ne marche pas" n'est pas une formulation explicite (on ne cessera jamais de le dire).
2) "trouver" et copier sans comprendre ne mène jamais bien loin :
--- ta déclaration de la fonction SendMessage : typée en long : écrite poiur VB6 et non pour VB.Net
--- cette ligne :
GetColCaret = oRtb.SelStart - SendMessage(oRtb.hwnd, EM_LINEINDEX, GetRowCaret - 1, ByVal 0&)

appelle, sans aucun paramètre passé, une fonction qui en attend un !

________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
0
Du calme dayvid.

Usuellement, la position du curseur est celle de la souris. Dans ce cas, on la détecte par l'événement MouseMove.

Si maintenant vous parlez du point d'insertion, vous devriez vous en sortir avec la propriété SelectionStart, qui donne la position cherchée en termes de nombre de caractères, puis avec la fonction SetPositionFromCharIndex, qui à partir de la position en termes de nombre de caractères donne la position géométrique. Mais je n'ai pas testé.

Vos gesticulations écrites ont été sans effet sur le temps qu'il m'a fallu pour vous trouver cette éventuelle solution.

Cordialement.


Étant illettré, je signe d'une croix : ×
0

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

Posez votre question
Utilisateur anonyme
11 févr. 2013 à 20:35
Bonjour,

Du calme dayvid.


Lui, c'est monsieur Me Me Me, Myself, Myself, Myself, and I, and I and I. Il se fiche des autres. Tout ce qu'il veut, c'est d'avoir tout le monde à ses pieds.

S'il faisait l'effort d'ouvrir son aide, il finirait par trouver la classe TextPointer qui lui permet de déterminer la position du curseur par programmation. Il finirait aussi par trouver PointF qui lui prmettrait d'obtenir les coordonnées d'un point sur l'écran. Mais bon, il est trop lâche pour ouvrir son aide.

Il pourrait aussi rechercher dans les réponses que j'ai données à Micoute le lien que j'ai mis vers un exemple de Microsoft lié à la manipulation de texte. Mais non, la seule chose qui intéresse Monsieur, c'est une réponse en triple exemplaire qui lui donne tout cuit dans la bouche. Quand il a supposément cherché et qu'il vient ici, c'est pour avoir un code tout fait, sans effort.
0
cs_dayvid Messages postés 212 Date d'inscription mardi 18 janvier 2011 Statut Membre Dernière intervention 12 février 2013 1
11 févr. 2013 à 20:37
Usuellement, la position du curseur est celle de la souris. Dans ce cas, on la détecte par l'événement MouseMove.

Je ne vois pas en quoi MouseMove va m'aider ?!

Si maintenant vous parlez du point d'insertion, vous devriez vous en sortir avec la propriété SelectionStart, qui donne la position cherchée en termes de nombre de caractères, puis avec la fonction SetPositionFromCharIndex, qui à partir de la position en termes de nombre de caractères donne la position géométrique. Mais je n'ai pas testé.

Effectivement, SelectionStart est utile pour savoir le nombre de caractère taper depuis le début... mais c'est insuffisant pour moi.
Je cherche à savoir ou se trouve le curseur qui se trouve dans l'éditeur, renvoyer / modifier la position en X et Y en caractères
C'est très étrange que VB.net n'est rien pour faire ça

Vos gesticulations écrites ont été sans effet sur le temps qu'il m'a fallu pour vous trouver cette éventuelle solution.

Hein ?!!!

Merci.
0
Utilisateur anonyme
11 févr. 2013 à 20:39
Bonjour,

SetPositionFromCharIndex


Celle-là, je ne l'ai pas trouvée dans l'aide de VB 2012.
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
11 févr. 2013 à 20:53
Celle-là, je ne l'ai pas trouvée dans l'aide de VB 2012.

Salut tout lke monde,
Peu taitre becose le esse est en fête un j'ai.
________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
11 févr. 2013 à 21:07
Trêve de rigolade, maintenant ===>>
1) Le caret et le cuseur sont deux choses distinctes*
2) le demandeur n'a pas précisé s'il voulait ces informations au survol ou au clic
3) s'il les veut au survol, les choses ne seront pas simples et il devra passer par un tremplin
4) je suis toujours estomaqué de constater que l'on veut le complexe alors que l'on ignore les bases les plus simples (relire mon message de 19 h 00)

________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
0
cs_dayvid Messages postés 212 Date d'inscription mardi 18 janvier 2011 Statut Membre Dernière intervention 12 février 2013 1
11 févr. 2013 à 21:37
Re,

Je souhaiterais cella des que il y a:

- Une modification dans l'éditeur
- Appuie sur les touche Haut, Bas, Gauche, Droite (Déplacement du curseur dans l'éditeur)
- L'or d'un clique avec le bouton gauche de la souris

Je suis désoler de pas l'avoir préciser.
0
cs_dayvid Messages postés 212 Date d'inscription mardi 18 janvier 2011 Statut Membre Dernière intervention 12 février 2013 1
11 févr. 2013 à 21:38
Le caret et le cuseur sont deux choses distinctes

Heu... ah bon ?!
Le caret, c'est bien le curseur dans l'éditeur non ?!
Merci de votre aide.
0
Le caret est le petit machin qui clignote pour indiquer où se trouve le point d'insertion, ainsi nommé parce ce que vous tapez s'écrira là. Libre à vous d'appeler cela un curseur, mais vous serez bien le seul. Si j'ai bien compris, ce que vous voulez est la position géométrique du point d'insertion. D'après ce que j'ai lu dans l'explorateur d'objets, vous pouvez l'obtenir en employant successivement la propriété puis la fonction que je vous indiqués.


Étant illettré, je signe d'une croix : ×
0
Toutes mes excuses à dayvid et cmarcotte.

La fonction que j'ai proposée n'est pas
SetPositionFromCharIndex

mais
GetPositionFromCharIndex



Bonne nuit.

Étant illettré, je signe d'une croix : ×
0
cs_dayvid Messages postés 212 Date d'inscription mardi 18 janvier 2011 Statut Membre Dernière intervention 12 février 2013 1
12 févr. 2013 à 00:04
Je vous remercie Zermelo pour votre aide
Le caret est le petit machin qui clignote pour indiquer où se trouve le point d'insertion, ainsi nommé parce ce que vous tapez s'écrira là

Ok, ont est d'accord sur ceci

Pour la fonction, j'avais compris

Si j'ai bien compris, ce que vous voulez est la position géométrique du point d'insertion. D'après ce que j'ai lu dans l'explorateur d'objets, vous pouvez l'obtenir en employant successivement la propriété puis la fonction que je vous indiqués.

Oui tous à fait ça, en X et Y (Pas en pixel mais bien en caractères)
Par contre je ne vois pas du tout comment je pourrais mettre ça en place
Bon, je vais encore chercher et vous tenir au courent, merci encore
0
cs_dayvid Messages postés 212 Date d'inscription mardi 18 janvier 2011 Statut Membre Dernière intervention 12 février 2013 1
12 févr. 2013 à 00:10
Alors je viens de trouver ceci qui est pas se que je cherche mais qui me serra tous de même très utile plus tard
pour calculer la position d'un TextBox dans l'éditeur pour simuler un Input comme dans une console

Ceci me renvoie la position en pixel ou se trouve la caret depuis le bord haut gauche de l'éditeur:
RichTextBox1.GetPositionFromCharIndex(RichTextBox1.SelectionStart).ToString

Très utile !

Mais elle ne conviens pas à se que je veux faire, moi je voudrais la position
en caractères et non en pixel comme dit plus haut justement à ce sujet

Merci encore !
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
12 févr. 2013 à 07:10
Il te suffit pourtant de corriger tes erreurs flagrantes que j'ai dénoncées dans mon message plus haut (du lundi 11 février 2013 à 19:00:18)

Et donc :
1) transposer pour VB.Net la déclaration de la fonction SendMessage que tu as copiée d'un code écrit pour VB6
2) corriger l'énorme erreur commise sur cette ligne de code :
GetColCaret = oRtb.SelStart - SendMessage(oRtb.hwnd, EM_LINEINDEX, GetRowCaret - 1, ByVal 0&)

________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
12 févr. 2013 à 07:58
Une fois ton code corrigé (et je refuse catégoriquement de le faire, surtout en ce qui concerne l'énorme erreur dénoncée) :
Sous VB6 (puisque tu copies un code VB6) , il suffirait d'appeler tes deux fonctions dans l'évènement SelChange qui, sous VB6 intervient à chaque modification de la sélection, mais également à chaque modification de la position du caret.
Sous VB.Net (que je ne pratique pas) : j'ignore si l'évènement selectionChange constate, comme sous VB6, également la modification de la position du caret.===>>
Si oui : utiliser ce seul évènement
Si non : appeler tes deux fonctions tant depuis le Keydown, que le SelectiobnChange et que le mouseDown

Voilà. Je te laisse maintenant là en ce qui me concerne. Je t'en ai suffisamment dit pour que tu parviennes à tes fins si tu es un tant soit peu développeur (et pas seulement copieur).


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
12 févr. 2013 à 08:33
Et pour en revenir à la distinction IMPORTANTEZ entre le caret et le curseur, maintenant :
Lorsque l'on est dans une zone d'édition : le curseur revêt la même forme apparente que le caret, mais le déplacement du curseur n'entraîne pas celui du caret.
Question de terminologie ? Certes, mais la terminologie a ici toute son importance et traduit la clarté de l'esprit.


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
0
cs_dayvid Messages postés 212 Date d'inscription mardi 18 janvier 2011 Statut Membre Dernière intervention 12 février 2013 1
12 févr. 2013 à 09:27
Whaaaouuuuuu, c'est bon, ça marche ça
selectionChange

Merci BEAUCOUP ucfoutu !!!

Bon, désormais, il me reste plus qu'a trouver un moyen de savoir
la position du caret en caractère en X et Y.

Encore merci !
0
Bonjour dayvid.

la position du caret en caractère en X et Y

est du français franchement douteux. Mais maintenant que j'ai réussi à le décrypter, je suis en mesure de vous proposer ce qu'il vous faut :
SelectionStart
GetLineFromCharIndex
GetFirstCharIndexOfCurrentLine

sauf erreur de ma part bien entendu.
Autre chose. Vous est-il parfois venu à l'esprit que la lecture des grands auteurs pourrait vous être très utile ?

Cordialement

Étant illettré, je signe d'une croix : ×
0
Rejoignez-nous