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 :

Adaptation d'un code TMemo vers TRichEdit : problème de ScrollBars


Sujet :

Composants VCL Delphi

  1. #1
    Membre chevronné
    Avatar de Droïde Système7
    Homme Profil pro
    Inscrit en
    Septembre 2003
    Messages
    2 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 2 262
    Points : 1 928
    Points
    1 928
    Par défaut Adaptation d'un code TMemo vers TRichEdit : problème de ScrollBars
    Title : Adaptation code [TMemo] vers [TRichEdit], problème [ScrollBar]




    Bonjour tout le monde

    Je planche et je bute lamentablement sur une petite extrapolation de code prévu pour un TMemo que je tente d'adapter pour un TRichEdit.

    Avec un TMemo tout fonctionne nickel/chrôme, mais si je remplace ce TMemo par un TRichEdit, là j'ai un gros problème de ScrollBar.

    Je veux dire qu'avec un TRichEdit lorsque le texte à rechercher est plus loin que le bord inférieur de cet editor, alors le ScrollBar ne descend plus !

    Pas facile de bien expliquer, mais autrement dit : la procédure de Find fonctionne impec, mais l'utilisateur ne peux plus voir la suite de la recherche s'il ne manoeubre pas manuellement le ScrollBar

    J'ai tenté avec d'autres sortes de compos hérités de TRichEdit, mais rien à faire, c'est toujours pareil !

    Je suis débutant et là je suis bloqué car je ne comprends pas grand chose ; le TRichEdit doit pourtant doit avoir le TMemo comme ancêtre non ?

    Voici le code tout entier :

    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
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    unit Unit1;
     
    interface
     
    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls, ComCtrls;
     
    type
      TForm1 = class(TForm)
        FindDialog1: TFindDialog;
        Chercher: TButton;
        Editor: TRichEdit;
     
        procedure ChercherClick(Sender: TObject);
        procedure FindDialog1Find(Sender: TObject);
     
     
      private
        { Déclarations privées }
      public
        { Déclarations publiques }
      end;
     
    var
      Form1: TForm1;
     
    implementation
     
    {$R *.dfm}
     
     
     
    procedure TForm1.ChercherClick(Sender: TObject);
     begin
       FindDialog1.Position := Point(Editor.Left + Editor.Width, Editor.Top);
       FindDialog1.Execute;
    end;
     
     
    procedure TForm1.FindDialog1Find(Sender: TObject);
     var
        FoundPos, InitPos: Integer;
      begin
        {search in the text after the current selection}
        InitPos := Editor.SelStart + Editor.SelLength;
        FoundPos := Pos (FindDialog1.FindText,
          Copy (Editor.Text, InitPos + 1,
           Length (Editor.Text) - InitPos));
        if FoundPos > 0 then
       begin
         {activate the component, and select the text}
         Editor.SetFocus;
         Editor.SelStart := InitPos + FoundPos - 1;
         Editor.SelLength := Length(FindDialog1.FindText);
            end
         else
      begin
        MessageBeep(MB_ICONASTERISK);
          MessageDlg ('Text not found', mtInformation, [mbOK], 0);
       end;
    end;
     
     
     
     
    END.
    J'ajoute qu'hier je pensais avoir trouvé la solution en testant toutes les propriétés du ScrollBar, mais non, trop facile...,

    Merci beaucoup de vos lumières, là je suis curieux de connaître le fin mot de cette histoire.

  2. #2
    Membre éprouvé
    Avatar de octal
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    441
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 441
    Points : 957
    Points
    957
    Par défaut
    Normal ... faudra que tu force le glissement du CARET (curseur) pour remettre le texte trouvé dans le champs visuel.(faut pas oublier de mettre ScrollBars sur BOTH pour que le richedit scroll correctement).

    il suffit de rajouter
    Editor.Perform(EM_SCROLLCARET, 0, 0);
    dans ton code ...

    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
     
    procedure TForm1.FindDialog1Find(Sender: TObject); 
     var 
        FoundPos, InitPos: Integer; 
      begin 
        {search in the text after the current selection} 
        InitPos := Editor.SelStart + Editor.SelLength; 
        FoundPos := Pos (FindDialog1.FindText, 
          Copy (Editor.Text, InitPos + 1, 
           Length (Editor.Text) - InitPos)); 
        if FoundPos > 0 then 
       begin 
         {activate the component, and select the text} 
         Editor.SetFocus; 
         Editor.SelStart := InitPos + FoundPos - 1; 
         Editor.SelLength := Length(FindDialog1.FindText); 
    //>>>>>>>> LA LIGNE A RAJOUTER >>>>>>>>>>>>>>>>>>
         Editor.Perform(EM_SCROLLCARET, 0, 0); 
    //>>>>>>>> LA LIGNE A RAJOUTER >>>>>>>>>>>>>>>>>>
            end 
         else 
      begin 
        MessageBeep(MB_ICONASTERISK); 
          MessageDlg ('Text not found', mtInformation, [mbOK], 0); 
       end; 
    end;
    bon courage
    http://www.pocketmt.com GLCD Font Creator home site.

  3. #3
    Membre chevronné
    Avatar de Droïde Système7
    Homme Profil pro
    Inscrit en
    Septembre 2003
    Messages
    2 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 2 262
    Points : 1 928
    Points
    1 928
    Par défaut
    Bonjour à Tous,

    J'avais pourtant demandé autour de moi à bien des fortiches et pros sous Delphi en ce qui concerne ce blème très curieux puisque fonctionnement impec avec un TMemo mais pas avec un TRichEdit.

    octal, je te remercie particulièrement, car là je te dois une fière chandelle !

    Merci et bravo encore pour ton savoir

    Vive ce forum !

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

Discussions similaires

  1. Problème portage code Linux vers Windows
    Par scary dans le forum Windows
    Réponses: 14
    Dernier message: 11/01/2010, 17h56
  2. Traduction de code Oracle vers SQL Server
    Par randomcl dans le forum Langage SQL
    Réponses: 1
    Dernier message: 13/11/2005, 23h43
  3. Réponses: 1
    Dernier message: 01/11/2005, 12h04
  4. [VB.net]problème de conversion de code c# vers VB.net
    Par cladsam dans le forum Windows Forms
    Réponses: 2
    Dernier message: 18/10/2005, 14h07
  5. TMemo et TRichEdit
    Par Invité dans le forum C++Builder
    Réponses: 6
    Dernier message: 09/10/2002, 20h37

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