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

flo160fr 162 Messages postés dimanche 19 novembre 2000Date d'inscription 14 avril 2009 Dernière intervention - 7 juin 2006 à 12:02 - Dernière réponse : Cirec 4231 Messages postés vendredi 23 juillet 2004Date d'inscription 3 août 2018 Dernière intervention
- 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
ni69 1529 Messages postés samedi 12 juin 2004Date d'inscription 5 juillet 2010 Dernière intervention - 7 juin 2006 à 12:42
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 !

Merci ni69 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 95 internautes ce mois-ci

Commenter la réponse de ni69
Cirec 4231 Messages postés vendredi 23 juillet 2004Date d'inscription 3 août 2018 Dernière intervention - 7 juin 2006 à 16:47
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
flo160fr 162 Messages postés dimanche 19 novembre 2000Date d'inscription 14 avril 2009 Dernière intervention - 7 juin 2006 à 12:48
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.