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.