TEdit : metre le curseur à la fin

Résolu
flo160fr Messages postés 157 Date d'inscription dimanche 19 novembre 2000 Statut Membre Dernière intervention 14 avril 2009 - 7 juin 2006 à 12:02
Cirec Messages postés 3833 Date d'inscription vendredi 23 juillet 2004 Statut Modérateur Dernière intervention 18 septembre 2022 - 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

3 réponses

ni69 Messages postés 1418 Date d'inscription samedi 12 juin 2004 Statut Membre Dernière intervention 5 juillet 2010 12
7 juin 2006 à 12:42
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 !
3
Cirec Messages postés 3833 Date d'inscription vendredi 23 juillet 2004 Statut Modérateur Dernière intervention 18 septembre 2022 50
7 juin 2006 à 16:47
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
1
flo160fr Messages postés 157 Date d'inscription dimanche 19 novembre 2000 Statut Membre Dernière intervention 14 avril 2009
7 juin 2006 à 12:48
Merci beaucoup ni69 !
0
Rejoignez-nous