TEdit : metre le curseur à la fin [Résolu]

Messages postés
162
Date d'inscription
dimanche 19 novembre 2000
Dernière intervention
14 avril 2009
- - Dernière réponse : Cirec
Messages postés
4229
Date d'inscription
vendredi 23 juillet 2004
Dernière intervention
3 août 2018
- 7 juin 2006 à 16:47
Bonjour,
Je voudrai savoir comment placer automatiquement le curseur d'édition à la suite du texte d'un TEdit

[MonTexte avec le curseur à la suite ->|                ]

merci
Afficher la suite 

Votre réponse

3 réponses

Meilleure réponse
Messages postés
1529
Date d'inscription
samedi 12 juin 2004
Dernière intervention
5 juillet 2010
3
Merci
Salut,

Déjà, il faut attribuer le focus à ton Edit, sinon le curseur ne sera pas visible. Pour cela, fais simplement :
Edit1.SetFocus;

Ensuite, pour placer le curseur à la fin du texte saisi, utilise ce code :
Edit1.SelStart := Length(Edit1.Text);

Voilà...

@+
Nico {www.ni69.info}


N'oubliez pas de cliquer sur Réponse Acceptée lorsque la réponse vous convient !

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 104 internautes ce mois-ci

Commenter la réponse de ni69
Messages postés
4229
Date d'inscription
vendredi 23 juillet 2004
Dernière intervention
3 août 2018
1
Merci
Salut,

pour connaitre la position du curseur où pour le positionner sans sélectionner le texte :

Function GetCaretPos(aHandle : THandle): TPoint;
Begin
  Result.X := LongRec(SendMessage(aHandle, EM_GETSEL, 0, 0)).Hi;
  Result.Y := SendMessage(aHandle, EM_LINEFROMCHAR, Result.X, 0);
  Result.X := Result.X - SendMessage(aHandle, EM_LINEINDEX, -1, 0);
End ;



Procedure SetCaretPos(aHandle : THandle; Value: TPoint);
var
  CharIdx: Integer;
begin
  SetFocus(aHandle);
  CharIdx : = SendMessage(aHandle, EM_LINEINDEX, Value.y, 0) + Value.x;
  SendMessage(aHandle, EM_SETSEL, CharIdx, CharIdx);
end;





procedure TForm1.btn_GetCaretPosClick(Sender: TObject);
Var Point : TPoint;
begin
  Point := GetCaretPos(Edit1.Handle);
  Label1.Caption := Format('X : %d, Y : %d', [Point.X, Point.Y]);
end ;



procedure TForm1.btn_SetCaretPosClick(Sender: TObject);
var
  Value : TPoint;
begin
  Value.x : = 2;
  Value.y := 0;
  SetCaretPos(Edit1.Handle, Value);
end ;


J'ai laisser volontairement Y qui représente la ligne (malgré qu'il n'y ait qu'une seul ligne dans un TEdit) pour la simple et bonne raison que ce code fonctionne également avec un TMemo

Il suffit de remplacer
  Point : = GetCaretPos(Edit1.Handle);
par
  Point := GetCaretPos(Memo1.Handle);
Et
  SetCaretPos(Edit1.Handle, Value);
par
  SetCaretPos(Memo1.Handle, Value);

@+
Cirec
Commenter la réponse de Cirec
Messages postés
162
Date d'inscription
dimanche 19 novembre 2000
Dernière intervention
14 avril 2009
0
Merci
Merci beaucoup ni69 !
Commenter la réponse de flo160fr

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.