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 :

TRichEdit position fonction de x et y (pixels)


Sujet :

Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de Speed41
    Homme Profil pro
    Inscrit en
    Novembre 2002
    Messages
    718
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 718
    Par défaut TRichEdit position fonction de x et y (pixels)
    Bonjour,

    Comment connaître la position (ligne, colonne) dans un TRichEdit en fonction de sa position x, y en pixel donné lors d'un évènement "onmousemove" par exemple ?

    J'ai trouvé ces codes mais cela ne correspond pas complètement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    function ClientPosToCharIndex(AnEdit: TCustomEdit; ClientPos: TPoint): Integer;
                  var lParam: Integer;
                  begin
                    lParam:= Integer(@ClientPos);
                    result:= AnEdit.Perform(EM_CHARFROMPOS, 0, lParam);
                  end;
    Par avance merci de votre aide

  2. #2
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 127
    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 : 14 127
    Par défaut
    La Propriété publique CaretPos du TRichEdit ne serait-elle pas suffisante ?

    Il y a aussi GetCaretPos de l'API, qui doit faire la même chose que EM_CHARFROMPOS si le Memo a le Focus !

    Quel est le problème ?
    GetCaretPos donne une position fixe dans le Memo, même si tu as défilé plusieurs pages !
    Voir EM_LINEFROMCHAR et EM_LINESCROLL
    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é Avatar de Speed41
    Homme Profil pro
    Inscrit en
    Novembre 2002
    Messages
    718
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 718
    Par défaut
    Bonjour

    Merci pour CaretPos mais cela ne convient pas, il faut cliquer dans le TRichEdit alors que je veux juste promener ma sourie dessus
    J'ais donc :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MouseMove(Sender: TObject; Shift: TShiftState; X,  Y: Integer);
    Et avec ces coordonnées (x,y) je voudrais connaître ma position ligne, colonne dans mon TRichEdit. Il ne faut pas que je change le texte sélectionné ou la position de mon curseur dans mon texte

    Merci d'avance

  4. #4
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 127
    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 : 14 127
    Par défaut
    Tu as le résultat de EM_CHARFROMPOS
    The return value specifies the character index in the low-order word and the line index in the high-order word.
    je changerais ta fonction ClientPosToCharIndex comme ci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    function ClientPosToCharIndex(AnEdit: TCustomEdit; ClientPos: TPoint): TSmallPoint;
                  var lParam: Integer;
                  begin
                    lParam:= Integer(@ClientPos);
                    result:= TSmallPoint(AnEdit.Perform(EM_CHARFROMPOS, 0, lParam));
                  end;
    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é Avatar de Speed41
    Homme Profil pro
    Inscrit en
    Novembre 2002
    Messages
    718
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 718
    Par défaut
    Merci

    Ca fonctionne mieux mais le numéro de ligne est toujours à 0 et la colonne n'est autre que le n° caractère du memo

  6. #6
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 127
    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 : 14 127
    Par défaut
    utilise un Perform avec EM_LINEFROMCHAR et lui passant la position fourni par EM_CHARFROMPOS

    J'ai retrouvé l'origine du source, effectivement le EM_CHARFROMPOS fonctionne différemment pour un TMemo et un TRichEdit (pour ce dernier, il ne faut pas caster en TSmallPoint)
    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

Discussions similaires

  1. [XSLT] [PHP 5] fonction position()
    Par sharper dans le forum XSL/XSLT/XPATH
    Réponses: 4
    Dernier message: 01/12/2005, 13h58
  2. for-each et traitement alternatif en fonction de la position
    Par Bernard Grosdoy dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 15/09/2005, 18h12
  3. Position d'une ScrollBar dans un TRichEdit (ou TMemo)
    Par Troll dans le forum C++Builder
    Réponses: 9
    Dernier message: 24/02/2005, 16h18
  4. TRichEdit Position du caret
    Par AlainR dans le forum Composants VCL
    Réponses: 6
    Dernier message: 25/10/2002, 11h42
  5. FOnction api specifiant la position de la souris
    Par florent dans le forum C++Builder
    Réponses: 4
    Dernier message: 15/05/2002, 21h07

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