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

 Delphi Discussion :

position curseur dans Tedit


Sujet :

Delphi

  1. #1
    Membre éclairé
    Inscrit en
    Juillet 2006
    Messages
    298
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 298
    Par défaut position curseur dans Tedit
    Question peut-être idiote pour laquelle je cale !

    Comment connaître la position du curseur dans un Tedit quand on y entre par un click souris ?

    Merci d'avance,

    Fred

  2. #2
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 982
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 982
    Par défaut
    SelStart pourrait t'aider
    sinon GetCaretPos
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  3. #3
    Membre éclairé
    Inscrit en
    Juillet 2006
    Messages
    298
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 298
    Par défaut
    Merci pour ta réponse mais:
    1 - getcarretpos n'est utilisé qu'avec des TMEMO.
    2 - on ne peut pas utiliser selstart car on veut connaitre la position (c'est-à-dire après quel caractère le curseur est positionné). Selstart est toujours à 0 quand on entre dans l'edit en cliquant.
    J'ai pensé envoyer un sendmessage(handle, EM_POSFROMCHAR,....) mais je n'y arrive pas.

    Merci quand même.

    Fred

  4. #4
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 982
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 982
    Par défaut
    Tu as vraiment testé avant de répondre ?

    J'ai posé un Edit, j'ai renommé ce Edit en EditShowCaretPos, j'ai laissé le contenu par défaut, lorsque je clique, le curseur | est à la position de mon clic et les coordonnées en Pixels et SelStart sont corrects dès le 1er clic !

    J'ai posé un Edit, j'ai renommé ce Edit en EditShowCaretPosEmpty, j'ai vidé le Text, SelStart est à zéro, c'est vrai, le Text est vide, une fois que l'on tape quelque chose, SelStart est actualisé !

    Ne confond pas le curseur | d'un Edit et le curseur ou le pointeur de la souris !
    | est géré par SelStart ou GetCaretPos
    le Souris, utilise un GetCursorPos, tu pourras avec une bidouille sur Edit->Canvas->TextWidth tenter de calculer une hypothétique position dans un texte qui n'est pas !

    Je ne sais pas ce que tu cherches ?!

    Code c++ : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
     
    //---------------------------------------------------------------------------
    void __fastcall TVCLManipForm::EditShowCaretPosEnter(TObject *Sender)
    {
      ShowCaretPosOfEdit((TEdit*)Sender);
    }
     
    //---------------------------------------------------------------------------
    void __fastcall TVCLManipForm::EditShowCaretPosKeyPress(TObject *Sender,
          char &Key)
    {
      ShowCaretPosOfEdit((TEdit*)Sender);
    }
     
    //---------------------------------------------------------------------------
    void __fastcall TVCLManipForm::EditShowCaretPosMouseUp(TObject *Sender,
          TMouseButton Button, TShiftState Shift, int X, int Y)
    {
      ShowCaretPosOfEdit((TEdit*)Sender);
    }
     
    //---------------------------------------------------------------------------
    void TVCLManipForm::ShowCaretPosOfEdit(TEdit *Sender)
    {
      TPoint CP;
      GetCaretPos(&CP);
     
      TPoint MP;
      GetCursorPos(&MP);
      MP = Sender->ScreenToClient(MP);
      int CFP = Sender->Perform(EM_CHARFROMPOS, 0, MAKELPARAM(MP.x, MP.y));
     
      LabelEditShowCaretPos->Caption = AnsiString().sprintf("%d (Caret Px : %d, %d) - (Mouse Px : %d, %d) - EM_CHARFROMPOS : %d", ((TEdit*)Sender)->SelStart, CP.x, CP.y, MP.x, MP.y, CFP);
    }
    //---------------------------------------------------------------------------
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  5. #5
    Membre éclairé
    Inscrit en
    Juillet 2006
    Messages
    298
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 298
    Par défaut
    Merci pour ta réponse. Je vais essayer ce soir ou demain.
    J'ai dans cet Edit n (n compris entre 1 et 20) valeurs séparées par des virgules.
    Quand l'user entre dans l'Edit ou s'y déplace, un label lui indique quelle valeur va être modifiée.

    A +,

    Fred

  6. #6
    Membre éclairé
    Inscrit en
    Juillet 2006
    Messages
    298
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 298
    Par défaut
    Ca y est, j'ai trouvé:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    procedure TNveBatfrm.massarrayLEditMouseDown(Sender: TObject;
      Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
    begin
      masselabel.Caption := inttostr(nbrevirgdev((sender as Tlabelededit).Text,sendmessage((sender as Tlabelededit).handle,EM_CHARFROMPOS,0,X)));
    end;
    l'Edit est un labelededit. nbrevirgdev est une fonction qui indique le rang d'un nombre dans l'edit (les nombres sont séparés par des virgules).
    Dans le label masselabel, on lit ce rang.

    La solution marche bien.

    A +,

    Fred

  7. #7
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 982
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 982
    Par défaut
    Juste pour tester, lit SelStart dans OnMouseUp au lieu de OnMouseDown, je pense que cela sera plus lisible que EM_CHARFROMPOS !


    Pense aussi )
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  8. #8
    Membre éclairé
    Inscrit en
    Juillet 2006
    Messages
    298
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 298
    Par défaut
    Bravo, tu as raison !!!
    Mais comme je voudrais généraliser ce cas à un Tmemo en trouvant la ligne et la colonne d'une matrice de valeurs, je garde EM_....

    A +,

    Fred

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Positionner le curseur dans TEDIT ?
    Par colorid dans le forum Langage
    Réponses: 3
    Dernier message: 27/06/2008, 23h10
  2. Position curseur dans formulaire
    Par cheuch dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 03/08/2007, 23h08
  3. Positionner le curseur dans TEdit
    Par Drooxy dans le forum Delphi
    Réponses: 2
    Dernier message: 09/12/2006, 12h04
  4. position curseur dans TEdit
    Par bandit boy dans le forum C++Builder
    Réponses: 3
    Dernier message: 30/03/2006, 16h53
  5. [win32][D5] - position curseur dans paintbox
    Par bregolhen dans le forum Composants VCL
    Réponses: 3
    Dernier message: 05/11/2005, 23h45

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