Problème ascenseur sur richedit

Résolu
cs_philpas Messages postés 77 Date d'inscription lundi 17 octobre 2005 Statut Membre Dernière intervention 4 septembre 2008 - 5 avril 2006 à 20:42
Cirec Messages postés 3833 Date d'inscription vendredi 23 juillet 2004 Statut Modérateur Dernière intervention 18 septembre 2022 - 6 avril 2006 à 14:57
Bonjour,
j'ai un problème avec mes affichages en fonction du système d'exploitation.
Voilà, j'ai un Richedit. Dedans j'ajoute des lignes par programme au fur et à mesure avec la fonction RichEdit.Lines.Add('bla... bla'). Je ne connais pas le nombre de ligne qu'il y aura au total. Sous Win2000 et plus, si le nb de ligne contenu dans richedit dépasse le nb de ligne que peut afficher le richedit, l'ascenseur vertical apparait et sa position est en bas. Ce qui fait que je vois toujours en bas du richedit la dernière ligne ajouté. Sous Win95 ou 98, l'ascenseur apparait mais sa position reste en haut, ce qui fait que je ne vois pas la dernière ligne ajouté. Pour la voir je dois derscendre manuellement l'ascenseur. Je voudrais que sous Win9* cela fonctionne comme sous Win2000.
On m'avait donné la fonction SendMessage(RichEdit.Handle, WM_VScroll, SB_BOTTOM, 0); pour afficher la dernière ligne du richedit. ça marche, le curseur du richedit est à la dernière ligne mais en haut du richedit, ce qui fait que je ne vois toujours pas le texte du richedit. Il faut que je remonte le curseur du richedit ou que je touche l'ascenseur pour voir la fin de mon texte. Donc je mettais dis je remonte mon curseur de x lignes avec la fonction
for i:=1 to Nb_Ligne do SendMessage(RichEdit.Handle, WM_VScroll, SB_LINEUP, 0);
ça fonctionne mais le résultat est nul et ne me plait pas. Y a t-il un moyen de dire à l'ascenseur vertical du richedit d'être en bas quelque soit le nombre de ligne qu'il y a dans le richedit?

Merci

6 réponses

cs_philpas Messages postés 77 Date d'inscription lundi 17 octobre 2005 Statut Membre Dernière intervention 4 septembre 2008
6 avril 2006 à 10:50
c'est jamais évident d'expliquer des problèmes d'affichage.
Pour faire simple, un exemple de programme à tester sur un Win2000 ou plus et le même sur un Win9* et là on voit la différence

sur une form, mettre un richedit et un bouton.

procedure TForm1.Button1Click(Sender: TObject);
var i:Integer;
begin
for i:=1 to 50 do RichEdit1.Lines.Add('hello'+InttoStr(i));
SendMessage(RichEdit1.Handle, WM_VScroll, SB_BOTTOM, 0);
end;

Sous Win2000 voilà le résulat que je veux obtenir. Mais ce même programme sous Win9* à un résultat différent, le texte disparait de l'écran

Voilà

la solution que j'ai adopté et qui semble acceptable pour Win9* est:

procedure TForm1.Button1Click(Sender: TObject);
var i:Integer;
begin
for i:=1 to 50 do
begin
RichEdit1.Lines.Add('hello'+InttoStr(i));
SendMessage(RichEdit1.Handle, WM_VScroll, SB_LINEDOWN, 0);
end;
SendMessage(RichEdit1.Handle, WM_VScroll, SB_BOTTOM, 0);
SendMessage(RichEdit1.Handle, WM_VScroll, SB_PAGEUP, 0);
SendMessage(RichEdit1.Handle, WM_VScroll, SB_LINEDOWN, 0);
end;

et comme ça j'obtiens la même chose que sous Win2*
3
Cirec Messages postés 3833 Date d'inscription vendredi 23 juillet 2004 Statut Modérateur Dernière intervention 18 septembre 2022 50
6 avril 2006 à 11:53
Bon alors essaye ce bout de code sous Win9*.
Comme précisé dans mon précédent post je n'ai plus cette version de Win mais sous XP ce code fait exactement la même chose (il place le curseur à la dernière ligne et sans défaut)

procedure TForm1.Button1Click(Sender: TObject);
var I : Integer;
begin
For I:=1 To 50 Do RichEdit1.Lines.Add('hello'+InttoStr(i));
SendMessage(RichEdit1.Handle, EM_SCROLLCARET, 0, 0);
End;

@+
Cirec
3
Cirec Messages postés 3833 Date d'inscription vendredi 23 juillet 2004 Statut Modérateur Dernière intervention 18 septembre 2022 50
6 avril 2006 à 00:04
Salut,
je ne suis pas certain d'avoir bien saisi ton problème mais voici la liste des paramètres possible pour WM_VSCROLL :
SB_BOTTOM, SB_ENDSCROLL, SB_LINEDOWN, SB_LINEUP,
SB_PAGEDOWN, SB_PAGEUP, SB_THUMBPOSITION,
SB_THUMBTRACK, SB_TOP
avec un peut de chance tu y trouveras ton bonheur

@+
Cirec
0
Cirec Messages postés 3833 Date d'inscription vendredi 23 juillet 2004 Statut Modérateur Dernière intervention 18 septembre 2022 50
6 avril 2006 à 11:16
Le problème c'est que je ne possède plus de Win9* donc pour faire des testes c'est pas gagné
Je vais essayer de faire quelques petits testes et je tiens au courant

@+
Cirec
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_philpas Messages postés 77 Date d'inscription lundi 17 octobre 2005 Statut Membre Dernière intervention 4 septembre 2008
6 avril 2006 à 14:45
Merci Cirec, je viens de tester sur un Win9* et ça marche. Je n'ai plus de différence d'affichage entre les versions de windows. Je vais donc garder ton code car il est beaucoup plus direct.

A+ et encore merci
0
Cirec Messages postés 3833 Date d'inscription vendredi 23 juillet 2004 Statut Modérateur Dernière intervention 18 septembre 2022 50
6 avril 2006 à 14:57
Content que ça fonctionne, je vais me garder ça sous le coude c'est toujours bon à savoir.
Surtout dans le cadre d'une application multi OS

@+
Cirec
0
Rejoignez-nous