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

Langage Delphi Discussion :

Comment déterminer le dernier numéro ligne afficher?


Sujet :

Langage Delphi

  1. #1
    Membre régulier
    Inscrit en
    Novembre 2006
    Messages
    317
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 317
    Points : 88
    Points
    88
    Par défaut Comment déterminer le dernier numéro ligne afficher?
    Bonjour a tous.
    Comment savoir dans un richedit le nombre total de ligne afficher a l'écran,
    avec ce code on détermine la position de la 1ière ligne.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SendMessage(RichEdit1.Handle,EM_GETFIRSTVISIBLELINE,0,0);
    ou comment déterminer la position de la dernière ligne afficher???
    Les fonts sont toujours de même grandeur.

    Merci beaucoup et salutations.

  2. #2
    Rédacteur/Modérateur
    Avatar de ero-sennin
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2005
    Messages
    2 965
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2005
    Messages : 2 965
    Points : 4 935
    Points
    4 935
    Par défaut
    Salut,

    Le nombre total de lignes à afficher à l'écran ? Je vois pas trop ce que tu veux dire...

    Tu souhaites sans doute récupérer le nombre de lignes dans le RichEdit non ?
    Pour ce faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    RichEdit1.Lines.Count // Renvoie le nombre de ligne du RichEdit
    Pour connaitre la position de la dernière ligne, il suffit alors de faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    RichEdit1.Lines.Count - 1
    Je ne sais pas si je réponds correctement à la question
    A+

  3. #3
    Membre éprouvé
    Avatar de CapJack
    Homme Profil pro
    Prof, développeur amateur vaguement éclairé...
    Inscrit en
    Mars 2004
    Messages
    624
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Prof, développeur amateur vaguement éclairé...
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2004
    Messages : 624
    Points : 988
    Points
    988
    Par défaut
    C'est simple : il veut le nombre de lignes qui apparaissent à l'écran, pas le nombre de lignes total, donc Lines.Count n'est d'aucun intérêt.

    Par contre, je n'ai aucune solution à apporter. tu peux toujours chercher sur msdn :

    http://msdn2.microsoft.com/en-us/library/bb530929.aspx

    mais ça m'étonnerait que tu trouves, je ne crois pas que ce soit prévu dans l'API de Windows.

    À la rigueur dans un Memo on peut au pire le calculer par une simple division en utilsant les FontMetrics de la police en cours, mais pour un RichEdit ça soulève un problème de taille (dans les deux sens du terme ) puisque les lignes peuvent avoir des hauteurs différentes.

  4. #4
    Rédacteur/Modérateur
    Avatar de ero-sennin
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2005
    Messages
    2 965
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2005
    Messages : 2 965
    Points : 4 935
    Points
    4 935
    Par défaut


    Désolé d'avoir répondu à coté de la plaque
    Ma réponse aurait était trop simple!

    Je n'ai pas de solutions à donner dans ce cas ...

    A+

  5. #5
    Membre régulier
    Inscrit en
    Novembre 2006
    Messages
    317
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 317
    Points : 88
    Points
    88
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    // ceci donnant une information de la première ligne affichable
    SendMessage(RichEdit1.Handle,EM_GETFIRSTVISIBLELINE,0,0);
    J'aimerais bien avoir une information de la dernière ligne voyant afficher à l'écran
    un peut comme .... EM_GETLASTVISIBLELINE ...

  6. #6
    Membre régulier
    Inscrit en
    Novembre 2006
    Messages
    317
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 317
    Points : 88
    Points
    88
    Par défaut
    NO problem, Merci pour les infos...

    Bon,si ce n'est pas possible... alors est-il possible de détecter si le caret est caché en haut ou en bas!
    Je m'explique..

    Si je travaille dans mon fichier Richedit et si je scroll le texte avec le scrollbar (ascenseur) j'aimerai bien avoir une information ou se trouve mon caret, dans la parti haut du texte caché ou dans la partie bas du texte caché.
    Par example 0 veut dire le caret est en Haut, 1 veut dire le caret est en bas...

    Merci et bonne journée

  7. #7
    Modérateur

    Homme Profil pro
    Ingénieur retraité
    Inscrit en
    Octobre 2005
    Messages
    2 396
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur retraité

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 396
    Points : 3 263
    Points
    3 263
    Par défaut
    Bonjour,

    A toutes fins utiles voiçi du code que j'avais récupéré un jour sur le site Torry et qui propose deux fonctions RE_GetLastVisibleLine() et RE_GetFirstVisibleLine mais que je n'ai pas encore testées :
    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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
     
    ...get the first/last visible line of a TRichEdit?	
    Author: Thomas Stutz 	
     
    function RE_GetLastVisibleLine(RichEdit: TRichEdit): Integer;
    const
    EM_EXLINEFROMCHAR = WM_USER + 54;
    var
    r: TRect;
    i: Integer;
    begin
    {
    The EM_GETRECT message retrieves the formatting rectangle
    of an edit control.
    }
    RichEdit.Perform(EM_GETRECT, 0, Longint(@r));
    r.Left := r.Left + 1;
    r.Top := r.Bottom - 2;
    {
    The EM_CHARFROMPOS message retrieves information about the character
    closest to a specified point in the client area of an edit control
    }
    i := RichEdit.Perform(EM_CHARFROMPOS, 0, Integer(@r.topleft));
    {
    The EM_EXLINEFROMCHAR message determines which
    line contains the specified character in a rich edit control
    }
    Result := RichEdit.Perform(EM_EXLINEFROMCHAR, 0, i);
    end;
     
    {
    Sending the EM_GETFIRSTVISIBLELINE message to a multi-line edit control
    finds out which line is the first line visible.
    This is the line that is currently displayed at the top of the control.
    }
     
    function RE_GetFirstVisibleLine(RichEdit: TRichEdit): Integer;
    begin
    Result := RichEdit.Perform(EM_GETFIRSTVISIBLELINE, 0, 0);
    end;
    A+
    N'oubliez pas de consulter les FAQ Delphi et les cours et tutoriels Delphi

  8. #8
    Membre éprouvé
    Avatar de CapJack
    Homme Profil pro
    Prof, développeur amateur vaguement éclairé...
    Inscrit en
    Mars 2004
    Messages
    624
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Prof, développeur amateur vaguement éclairé...
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2004
    Messages : 624
    Points : 988
    Points
    988
    Par défaut
    La propriété CaretPos de ton RichEdit renvoie la colonne (X) et la ligne (Y) courante.
    Il suffit alors de comparer CaretPos.Y à la valeur renvoyée par EM_GETFIRSTVISIBLELINE. On saura au moins si c'est avant la première ligne affichée, ou après. Par contre on ne saura pas si le caret est visible ou caché au-delà de la dernière ligne visible.

  9. #9
    Membre éprouvé
    Avatar de CapJack
    Homme Profil pro
    Prof, développeur amateur vaguement éclairé...
    Inscrit en
    Mars 2004
    Messages
    624
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Prof, développeur amateur vaguement éclairé...
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2004
    Messages : 624
    Points : 988
    Points
    988
    Par défaut
    Grillé par GG.

    La fonction est intéressante, il fallait y penser.

  10. #10
    Membre régulier
    Inscrit en
    Novembre 2006
    Messages
    317
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 317
    Points : 88
    Points
    88
    Par défaut
    J'ai introduit cette fonction dans mon application, je l'ai testé pour mes
    besoins et qui fonctionne très bien.
    Merci beaucoup pour tes Infos.
    Très bonne soirée, salutations.

  11. #11
    Membre à l'essai
    Homme Profil pro
    Concepteur Electronique
    Inscrit en
    Novembre 2010
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Concepteur Electronique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2010
    Messages : 9
    Points : 12
    Points
    12
    Par défaut Peut importe l'âge de la pierre du moment qu'elle consolide l'édifice !
    Pour un TRichEdit, la hauteur de ligne étant potentiellement variable, le problème se résout moins facilement que pour un TMemo.

    Ceci étant, une technique possible est de soustraire le numéro de la première ligne visible au numéro de ligne en cours de saisie . Si le numéro de première ligne change, c'est que l'on a attend le bas du control. Si les lignes ont la même hauteur, le nombre issu de la soustraction sera invariable depuis ce moment sauf sur un redimensionnement du control.
    Si le bas du texte est très en dessous du bas du control, la même technique peut être employée : noter la première ligne visible (N1),... faire évoluer le caret vers le bas jusque ce que N-N1 ne change plus. C'est le nombre de ligne du control.

    Technique radicalement différente et néanmoins efficace : diviser CustomEdit.ClientHeight par la hauteur de caractère de la police en cours. Cela suppose la même police sur l'étendue considérée ainsi que la même mise en forme.

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

Discussions similaires

  1. Récupérer un dernier numéro pour afficher
    Par atoss77 dans le forum Langage
    Réponses: 6
    Dernier message: 25/09/2014, 08h36
  2. Réponses: 7
    Dernier message: 04/06/2008, 14h53
  3. Comment extraire le dernier numéro d'une adresse IP ?
    Par looping dans le forum Langage
    Réponses: 2
    Dernier message: 19/12/2007, 20h55
  4. Réponses: 2
    Dernier message: 09/11/2005, 13h08
  5. Comment déterminer un numéro de série d'un processeur ?
    Par rarfaoui dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 29/07/2005, 10h36

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