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

Composants VCL Delphi Discussion :

[D7] Numéro de la ligne sous le curseur de la souris dans un RichRdit


Sujet :

Composants VCL Delphi

  1. #1
    Membre Expert
    Avatar de Charly910
    Homme Profil pro
    Ingénieur TP
    Inscrit en
    Décembre 2006
    Messages
    2 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur TP
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 577
    Par défaut [D7] Numéro de la ligne sous le curseur de la souris dans un RichRdit
    Bonjour,
    j'essaye de récupérer dans MouseMove, le numéro de la ligne sous le curseur de la souris du RichEdit M1. J'ai trouvé ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    var  Pt: TPoint;
            CharIndex, Col, Row : Integer;
    begin
      Pt:= Point(X, Y);
      CharIndex := SendMessage(M1.Handle, EM_CHARFROMPOS,  0, Integer(@Pt));
      Row       := SendMessage(M1.Handle, EM_EXLINEFROMCHAR, 0, CharIndex);
    mais EM_EXLINEFROMCHAR n'est pas déclaré (j'ai ShellApi dans mes uses)

    si je mets EM_LINEFROMCHAR à la place, j'obtiens Row = 0

    Pouvez vous m'aider ?

    Merci
    A+
    Charly

    PS : le code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Row := HiWord(M1.Perform(EM_CHARFROMPOS, 0, MakeLong(X, Y)));
    Que n'avait donné Andnotor ne fonctionne que pour un Memo

  2. #2
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 952
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Biologiste ; Progr(amateur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 952
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    On trouve sa valeur ici : https://github.com/tpn/winsdk-10/blo.../um/Richedit.h
    Code c++ : Sélectionner tout - Visualiser dans une fenêtre à part
    #define EM_EXLINEFROMCHAR		(WM_USER + 54)
    Delphi 5 Pro - Delphi 12 Athènes Community Edition - CodeTyphon 8.80 sous Windows 10 ; CT 6.40 sous Ubuntu 18.04 (VM)
    . Ignorer la FAQ Delphi et les Cours et Tutoriels Delphi nuit gravement à notre code !

  3. #3
    Membre Expert
    Avatar de Charly910
    Homme Profil pro
    Ingénieur TP
    Inscrit en
    Décembre 2006
    Messages
    2 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur TP
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 577
    Par défaut
    Merci Tourlourou,

    avec cette valeur, ça fonctionne parfaitement (M1 de type TRichEdit) :

    Code : 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
    procedure TF_ListeRep.M1MouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
     
    Const
      EM_EXLINEFROMCHAR = WM_USER + 54 ;
     
    var  Pt: TPoint;
            CharIndex, Col, Row : Integer;
    begin
      Pt:= Point(X, Y);
      CharIndex := SendMessage(M1.Handle, EM_CHARFROMPOS,  0, Integer(@Pt));
      Row       := SendMessage(M1.Handle, EM_EXLINEFROMCHAR, 0, CharIndex);
      Col       := CharIndex - SendMessage(M1.Handle, EM_LINEINDEX, Row, 0);
      StatusBar1.Panels.Items[0].Text:= ' X: ' + inttostr(X)
                                    + ' Y: ' + Inttostr(Y)
                                    +' CharIndex: ' + inttostr(CharIndex)
                                    + ' Col: ' + inttostr(Col)      // GetOffSetIndent=0
                                    +' Row: ' + inttostr(Row);
     end;
    A+
    Charly

  4. #4
    Invité
    Invité(e)
    Par défaut
    Ajouter RichEdit dans les uses

  5. #5
    Membre Expert
    Avatar de Charly910
    Homme Profil pro
    Ingénieur TP
    Inscrit en
    Décembre 2006
    Messages
    2 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur TP
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 577
    Par défaut
    Bonjour,
    Oui, c'est vrai, mais ça rajoute aussi un tas de trucs inutiles.
    A+
    Charly

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

Discussions similaires

  1. [D7] Récupération de la ligne sous le curseur d'un Memo
    Par Charly910 dans le forum Débuter
    Réponses: 5
    Dernier message: 17/03/2025, 15h50
  2. Bloquer le curseur de la souris dans une zone
    Par Andalor dans le forum IHM
    Réponses: 9
    Dernier message: 02/11/2017, 11h42
  3. Afficher UserForm sous le curseur de la souris
    Par pastis.vi dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 24/05/2015, 13h24
  4. Afficher UserForm sous le curseur de la souris
    Par fred65200 dans le forum Contribuez
    Réponses: 0
    Dernier message: 02/12/2007, 01h47
  5. Réponses: 10
    Dernier message: 14/05/2006, 17h14

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