IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Lazarus Pascal Discussion :

Position du curseur dans un TEdit


Sujet :

Lazarus Pascal

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2008
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2008
    Messages : 17
    Par défaut Position du curseur dans un TEdit
    Bonjour,

    J'ai bien noté que la propriété CaretPos retourne un TPoint qui contient les coordonnées X et Y du curseur dans un mémo : ie si le curseur est sur la première ligne entre le 3eme et 4eme caractère alors x=3 et y=0. Donc, en toute logique, dans un TEdit monoligne, TEdit.CaretPos.y devrait toujours être a 0 et TEdit.CaretPos.x devrait donner la position du curseur dans la ligne.

    Mais, en appelant cette propriété pour TEdit, x et y sont toujours mis à 0.

    Ma question toute bête : comment fait-on pour connaître la position du curseur dans un TEdit ?

    Pour plus de claté, voilà mon code qui devrait me donner la position du curseur après insertion d'un caractère (ou modif de la position du curseur par les touches flêchées) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    procedure Tmenuppl. Edit1KeyUp( Sender : TObject; var Key : Word;   Shift : ShiftState);
    var
        coord :TPoint ;
    begin
        coord:=Edit1.CaretPos;
        MessageDlg('x='+inttostr(coord.x)+' /y='+inttostr(coord.y),MaskEdit1.text,mtInformation,[mbOk,mbCancel,mbYes],0);
     
    end;
    En vous remerciant par avance.

    Cordialement.

  2. #2
    Membre émérite
    Avatar de chris37
    Homme Profil pro
    Directeur des systèmes d'information
    Inscrit en
    Juillet 2007
    Messages
    378
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France

    Informations professionnelles :
    Activité : Directeur des systèmes d'information
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 378
    Par défaut
    Bonjour,

    Il faut utiliser la propriété SelStart du Tedit pour faire cela....
    Edit1.SelStart
    Regardez dans le code du TMaskEdit pour en comprendre le fonctionnement

  3. #3
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2008
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2008
    Messages : 17
    Par défaut
    Merci. Ca marche pour récupérer la position du curseur.
    Mais je n'ai pas trouvé pour positionner le curseur.
    J'ai étudié MaskEdit.pp comme recommandé.
    MaskEdit utilise une procédure virtuelle SetselStart de TCustomEdit qui fixe la position du curseur.
    SetSelStart n'apparait pas dans la liste des propriétés de l'outil d'aide.

    J'ai donc une deuxième question : comment appeler une procédure virtuelle ?

    Avec mes remerciements.

  4. #4
    Membre émérite
    Avatar de chris37
    Homme Profil pro
    Directeur des systèmes d'information
    Inscrit en
    Juillet 2007
    Messages
    378
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France

    Informations professionnelles :
    Activité : Directeur des systèmes d'information
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 378
    Par défaut
    Pas besoin de tout cela mon cher

    SelStart:=Nouvelle position
    Cette propriété fonctionne dans les deux sens, elle récupère ou affecte la position du curseur.

    Je l'ai utilisé dans un lointain passé pour refaire un MaskEdit quand celui de Lazarus était bancal

    Voilou

  5. #5
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2008
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2008
    Messages : 17
    Par défaut
    Merci pour la réponse, mais j'avais déjà essayé l'affectation à SelStart mais sans succès.
    J'ai quand même réessayé après avoir pris connaissance de votre réponse (dans un Edit et dans un MaskEdit) mais il n'y a pas eu de miracle

    Voilà le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    procedure Tmenuppl. MaskEdit1Change( Sender : TObject);
     
    begin
    	MaskEdit1.SelStart:=0;
    	MessageDlg('x='+inttostr(MaskEdit1.SelStart),MaskEdit1.text,mtInformation,[mbOk],0);
    end;
    Avec ça, en principe, quoi que l'on fasse, le curseur devrait se trouver en début de saisie systématiquement. C'est comme si ce code n'était pas exécuté. Donc, dans le doute, j'ai rajouté le message qui confirme l'exécution.

    Je ne vois pas où est l'erreur.

    En vous remerciant d'avance.

  6. #6
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    SelStart fonctionne... après la fonction SetFocus ce qui induit que SelStart ne peut pas être placé par exemple dans la procédure onCreate de la Form (SetFocus provoquerait une erreur "normale") mais au moins après le passage par la procédure onShow de la Form...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    procedure TForm1.FormShow(Sender: TObject);
    begin
      MaskEdit1.Text:='coucou';
      MaskEdit1.SetFocus;
      MaskEdit1.SelStart:=4;
    end;
    ... ou par exemple directement dans onEnter du TEdit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    procedure TForm1.Edit1Enter(Sender: TObject);
    begin
       Edit1.SelStart:=4;
    end;
     
    procedure TForm1.SpeedButton1Click(Sender: TObject);
    begin
      Edit1.Text:='coucou';
      Edit1.Setfocus;
    end;
    Testé sur 0.9.29 [SVN 25892]/FPC 2.4.1-XP

    Cordialement. Gilles
    Dernière modification par Invité ; 05/06/2010 à 12h37.

Discussions similaires

  1. Position du curseur dans un TEdit
    Par Captain_JS dans le forum C++Builder
    Réponses: 2
    Dernier message: 16/07/2005, 15h16
  2. [PDE] Récupérer position du curseur dans un éditeur
    Par simsky dans le forum Eclipse Platform
    Réponses: 2
    Dernier message: 05/07/2005, 15h50
  3. Obtenir la position du curseur dans une Image
    Par bastoune dans le forum Composants VCL
    Réponses: 6
    Dernier message: 14/11/2003, 21h02
  4. Position du curseur dans un TMemo
    Par yokito dans le forum Composants VCL
    Réponses: 3
    Dernier message: 28/08/2003, 16h35
  5. Position du curseur dans Edit
    Par MrJéjé dans le forum C++Builder
    Réponses: 3
    Dernier message: 20/06/2002, 17h09

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo