Bonjour,
toute la question est dans le titre : je voudrais faire apparaître un TPopupMenu à droite du curseur clignotant de mon TEdit, et pour cela, j'ai besoin de sa position...
Merci d'avance.
Bonjour,
toute la question est dans le titre : je voudrais faire apparaître un TPopupMenu à droite du curseur clignotant de mon TEdit, et pour cela, j'ai besoin de sa position...
Merci d'avance.
Essaye de jouer avec GetCaretPos et GetForegroundWindow ...
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
Salut,
voici un petit code example reprennant l'une des fonctions que ShaiLeTroll te disais et te permettant de faire ce que tu cherches
je pense que cela devrais t'aider
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 procedure TForm1.Edit1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); Var pPoint : TPoint; begin If Button = mbRight Then Begin GetCaretPos(pPoint); pPoint.X := pPoint.X + Edit1.ClientOrigin.X; pPoint.Y := pPoint.Y + Edit1.ClientOrigin.Y; Edit1.ScreenToClient(pPoint); PopupMenu1.Popup(pPoint.X,pPoint.Y); End; end;
Ok merci, ca marche.
Voici un code fonctionnel :
Merci bcp pour votre aide
Code : 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 unit Utilities; interface uses Forms, StdCtrls, Types, Windows, Classes; function GetEditCarretPosition(Edit : TEdit) : TPoint; implementation // Returns the coordinates (X,Y) of the carret of a TEdit function GetEditCarretPosition(Edit : TEdit) : TPoint; var Point : TPoint; begin GetCaretPos(Point); Point.X := Point.X + Edit.ClientOrigin.X; Point.Y := Point.Y + Edit.ClientOrigin.Y; Edit.ScreenToClient(Point); result := Point; end; end.![]()
Euh, je suis intrigué par
cela ne sert à rien puisque le paramètre est passé en const ... donc Point ne bouge pas ... et le calcul de ClientOrigin remplace donc cette fonction
Code : Sélectionner tout - Visualiser dans une fenêtre à part Edit.ScreenToClient(Point);
et GetCaretPos renvoie la position en coordonnée client de le controle qui détient le focus
je dirais que ceci suffit
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 // Returns the coordinates (X,Y) of the carret of a TEdit function GetEditCarretPositionScreen(Edit : TEdit) : TPoint; begin GetCaretPos(Result); Result := Edit.ScreenToClient(Result); end;
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
+ 1, Shai,
fonctionne impec.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 procedure TForm1.Edit1Change(Sender: TObject); var tp: TPoint; begin tp := GetEditCarretPositionScreen(Edit1); Label1.Caption := IntToStr(tp.X); end;
--
jp
Partager