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

Signaler
Messages postés
157
Date d'inscription
dimanche 19 novembre 2000
Statut
Membre
Dernière intervention
14 avril 2009
-
Messages postés
3825
Date d'inscription
vendredi 23 juillet 2004
Statut
Modérateur
Dernière intervention
1 février 2021
-
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

3 réponses

Messages postés
1418
Date d'inscription
samedi 12 juin 2004
Statut
Membre
Dernière intervention
5 juillet 2010
11
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 !
Messages postés
3825
Date d'inscription
vendredi 23 juillet 2004
Statut
Modérateur
Dernière intervention
1 février 2021
38
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
Messages postés
157
Date d'inscription
dimanche 19 novembre 2000
Statut
Membre
Dernière intervention
14 avril 2009

Merci beaucoup ni69 !