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

C++Builder Discussion :

Faire défiler du texte dans un TRichEdit


Sujet :

C++Builder

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    78
    Détails du profil
    Informations personnelles :
    Localisation : France, Drôme (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2006
    Messages : 78
    Par défaut Faire défiler du texte dans un TRichEdit
    Bonjour à tous,

    J'aimerais savoir faire défiler (scroller) du texte dans un composant TRichEdit par programme, notamment atteindre raidement le début et la fin du texte. J'ai essayé la méthode ScrollBy mais je ne comprend pas bien son fonctionnement.

  2. #2
    Expert confirmé

    Avatar de pottiez
    Homme Profil pro
    Développeur C++
    Inscrit en
    Novembre 2005
    Messages
    7 152
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur C++
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2005
    Messages : 7 152
    Par défaut
    Salut,
    le fonctionnement de ScrollBy est le suivant :

    tu as deux paramètre DeltaX et DeltaY, qui permette de faire défiler les scroll des deux axes, DeltaX pour la droite ou la gauche et DeltaY pour le haut ou le bas.
    Ensuite en fonction de la valeur que tu met à ces paramètre, la scroll va aller plus ou moins vite par exemple si tu met 1 à DeltaX cela défilera moins vite que si tu lui met 5.
    Dernier point si tu met un valeur négative tu va à gauche pour DeltaX et en haut pour DeltaY, si tu met une valeur positive c'est l'inverse, et si tu met 0 ca ne bouge pas sur cet axe.

    J'espère avoir éclairé ta lanterne

  3. #3
    Membre Expert
    Avatar de sat83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2004
    Messages
    1 040
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 040
    Par défaut
    Utilise plutôt un TSrollBox (onglet Supplément) plus facile a gérer (ce n'est que mon avis) en utilisant les propriétés :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ScrollBox1->VertScrollBar->Position
    ScrollBox1->HorzScrollBar->Position

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    78
    Détails du profil
    Informations personnelles :
    Localisation : France, Drôme (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2006
    Messages : 78
    Par défaut
    TRichEdit a déjà ses scrollbars. Ce sont celles-ci que je cherche à déplacer par programme. La methode Scrollby me semble dédiée à cet effet, mais je cherche les valeurs à mettre dans les paramètres.
    Par exemple, RichEdit1->ScrollBy(0, -100); ne déplace qu'une partie du texte dans le contrôle et ne bouge pas l'ascenseur!!

  5. #5
    Membre éprouvé
    Avatar de Sunchaser
    Homme Profil pro
    OPNI (Objet Programmant Non Identifié)
    Inscrit en
    Décembre 2004
    Messages
    2 059
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : OPNI (Objet Programmant Non Identifié)
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 059
    Par défaut
    Bonsoir,

    De mémoire (et sans pouvoir approfondir): il faudrait peut etre regarder vers "PostMessage()" ou "SendMessage()" et "WM_SCROLL" (voir autour de cela car il y a des paramètres et cie qui permettent de travailler la dessus)

    Bon courage,
    @+

  6. #6
    Membre Expert
    Avatar de sat83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2004
    Messages
    1 040
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 040
    Par défaut
    Effectivement il faut regarder du coté de SendMessage :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    //pour scroller en haut
    SendMessage(RichEdit1->Handle, WM_VSCROLL, SB_TOP, 0);
     
    //pour scroller en bas
    SendMessage(RichEdit1->Handle, WM_VSCROLL, SB_BOTTOM, 0);

  7. #7
    Membre Expert

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    1 407
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 407
    Par défaut
    Salut !

    On peut utiliser le message suivant :

    EM_LINESCROLL
    wParam = (WPARAM) cxScroll; // characters to scroll horizontally
    lParam = (LPARAM) cyScroll; // lines to scroll vertically
    On peut donc utiliser :

    BOOL PostMessage(

    HWND hWnd, // handle of destination window
    UINT Msg, // message to post
    WPARAM wParam, // first message parameter
    LPARAM lParam // second message parameter
    );

    A l'usage :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    PostMessage(RichEdit1->Handle,
                EM_LINESCROLL,
                0, // nombre de caractères
                2 // nombre de lignes ... +/-);
    A tester. Chez moi le scroll horizontal n'a pas d'effet (WordWrap sur false)

    A plus !

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    78
    Détails du profil
    Informations personnelles :
    Localisation : France, Drôme (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2006
    Messages : 78
    Par défaut
    Merci à vous tous!
    J'ai désormais 2 solutions viables. Pour être complet, j'ajoute une troisième (moins bonne) que j'avais imaginé entre temps :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
      RichEdit1->SetFocus();
      PostMessage(RichEdit1->Handle, WM_KEYDOWN,VK_NEXT,0);
      Sleep(100);
      PostMessage(RichEdit1->Handle, WM_KEYUP,VK_NEXT, 0);
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
      RichEdit1->SetFocus();
      PostMessage(RichEdit1->Handle, WM_KEYDOWN,VK_PRIOR, 0);
      Sleep(100);
      PostMessage(RichEdit1->Handle, WM_KEYUP,VK_PRIOR, 0);

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 06/05/2012, 18h25
  2. Faire défiler un texte dans un bandeau
    Par Invité dans le forum Contribuez
    Réponses: 11
    Dernier message: 18/06/2009, 18h19
  3. [GTK] Comment faire défiler du texte dans un label ou autre container
    Par dupuyyann dans le forum GTK+ avec C & C++
    Réponses: 3
    Dernier message: 24/02/2008, 23h25
  4. Faire défiler un texte dans un label
    Par FluidBlow dans le forum C++Builder
    Réponses: 2
    Dernier message: 03/10/2006, 20h32
  5. Faire défiler un texte dans une cellule de tableau
    Par Furius dans le forum Général JavaScript
    Réponses: 18
    Dernier message: 01/12/2005, 17h06

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