Question peut-être idiote pour laquelle je cale !
Comment connaître la position du curseur dans un Tedit quand on y entre par un click souris ?
Merci d'avance,
Fred
Question peut-être idiote pour laquelle je cale !
Comment connaître la position du curseur dans un Tedit quand on y entre par un click souris ?
Merci d'avance,
Fred
SelStart pourrait t'aider
sinon GetCaretPos
Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !![]()
Attention Troll Méchant !
"Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
L'ignorance n'excuse pas la médiocrité !
L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
Il faut avoir le courage de se tromper et d'apprendre de ses erreurs
Merci pour ta réponse mais:
1 - getcarretpos n'est utilisé qu'avec des TMEMO.
2 - on ne peut pas utiliser selstart car on veut connaitre la position (c'est-à-dire après quel caractère le curseur est positionné). Selstart est toujours à 0 quand on entre dans l'edit en cliquant.
J'ai pensé envoyer un sendmessage(handle, EM_POSFROMCHAR,....) mais je n'y arrive pas.
Merci quand même.
Fred
Tu as vraiment testé avant de répondre ?
J'ai posé un Edit, j'ai renommé ce Edit en EditShowCaretPos, j'ai laissé le contenu par défaut, lorsque je clique, le curseur | est à la position de mon clic et les coordonnées en Pixels et SelStart sont corrects dès le 1er clic !
J'ai posé un Edit, j'ai renommé ce Edit en EditShowCaretPosEmpty, j'ai vidé le Text, SelStart est à zéro, c'est vrai, le Text est vide, une fois que l'on tape quelque chose, SelStart est actualisé !
Ne confond pas le curseur | d'un Edit et le curseur ou le pointeur de la souris !
| est géré par SelStart ou GetCaretPos
le Souris, utilise un GetCursorPos, tu pourras avec une bidouille sur Edit->Canvas->TextWidth tenter de calculer une hypothétique position dans un texte qui n'est pas !
Je ne sais pas ce que tu cherches ?!
Code c++ : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35 //--------------------------------------------------------------------------- void __fastcall TVCLManipForm::EditShowCaretPosEnter(TObject *Sender) { ShowCaretPosOfEdit((TEdit*)Sender); } //--------------------------------------------------------------------------- void __fastcall TVCLManipForm::EditShowCaretPosKeyPress(TObject *Sender, char &Key) { ShowCaretPosOfEdit((TEdit*)Sender); } //--------------------------------------------------------------------------- void __fastcall TVCLManipForm::EditShowCaretPosMouseUp(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y) { ShowCaretPosOfEdit((TEdit*)Sender); } //--------------------------------------------------------------------------- void TVCLManipForm::ShowCaretPosOfEdit(TEdit *Sender) { TPoint CP; GetCaretPos(&CP); TPoint MP; GetCursorPos(&MP); MP = Sender->ScreenToClient(MP); int CFP = Sender->Perform(EM_CHARFROMPOS, 0, MAKELPARAM(MP.x, MP.y)); LabelEditShowCaretPos->Caption = AnsiString().sprintf("%d (Caret Px : %d, %d) - (Mouse Px : %d, %d) - EM_CHARFROMPOS : %d", ((TEdit*)Sender)->SelStart, CP.x, CP.y, MP.x, MP.y, CFP); } //---------------------------------------------------------------------------
Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !![]()
Attention Troll Méchant !
"Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
L'ignorance n'excuse pas la médiocrité !
L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
Il faut avoir le courage de se tromper et d'apprendre de ses erreurs
Merci pour ta réponse. Je vais essayer ce soir ou demain.
J'ai dans cet Edit n (n compris entre 1 et 20) valeurs séparées par des virgules.
Quand l'user entre dans l'Edit ou s'y déplace, un label lui indique quelle valeur va être modifiée.
A +,
Fred
Ca y est, j'ai trouvé:
l'Edit est un labelededit. nbrevirgdev est une fonction qui indique le rang d'un nombre dans l'edit (les nombres sont séparés par des virgules).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 procedure TNveBatfrm.massarrayLEditMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin masselabel.Caption := inttostr(nbrevirgdev((sender as Tlabelededit).Text,sendmessage((sender as Tlabelededit).handle,EM_CHARFROMPOS,0,X))); end;
Dans le label masselabel, on lit ce rang.
La solution marche bien.
A +,
Fred
Juste pour tester, lit SelStart dans OnMouseUp au lieu de OnMouseDown, je pense que cela sera plus lisible que EM_CHARFROMPOS !
Pense aussi )![]()
Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !![]()
Attention Troll Méchant !
"Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
L'ignorance n'excuse pas la médiocrité !
L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
Il faut avoir le courage de se tromper et d'apprendre de ses erreurs
Bravo, tu as raison !!!
Mais comme je voudrais généraliser ce cas à un Tmemo en trouvant la ligne et la colonne d'une matrice de valeurs, je garde EM_....
A +,
Fred
Partager