Problème ascenseur sur richedit [Résolu]

cs_philpas 77 Messages postés lundi 17 octobre 2005Date d'inscription 4 septembre 2008 Dernière intervention - 5 avril 2006 à 20:42 - Dernière réponse : Cirec 4231 Messages postés vendredi 23 juillet 2004Date d'inscription 3 août 2018 Dernière intervention
- 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
Afficher la suite 

Votre réponse

6 réponses

Meilleure réponse
cs_philpas 77 Messages postés lundi 17 octobre 2005Date d'inscription 4 septembre 2008 Dernière intervention - 6 avril 2006 à 10:50
3
Merci
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*

Merci cs_philpas 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 97 internautes ce mois-ci

Commenter la réponse de cs_philpas
Meilleure réponse
Cirec 4231 Messages postés vendredi 23 juillet 2004Date d'inscription 3 août 2018 Dernière intervention - 6 avril 2006 à 11:53
3
Merci
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

Merci Cirec 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 97 internautes ce mois-ci

Commenter la réponse de Cirec
Cirec 4231 Messages postés vendredi 23 juillet 2004Date d'inscription 3 août 2018 Dernière intervention - 6 avril 2006 à 00:04
0
Merci
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
Commenter la réponse de Cirec
Cirec 4231 Messages postés vendredi 23 juillet 2004Date d'inscription 3 août 2018 Dernière intervention - 6 avril 2006 à 11:16
0
Merci
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
Commenter la réponse de Cirec
cs_philpas 77 Messages postés lundi 17 octobre 2005Date d'inscription 4 septembre 2008 Dernière intervention - 6 avril 2006 à 14:45
0
Merci
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
Commenter la réponse de cs_philpas
Cirec 4231 Messages postés vendredi 23 juillet 2004Date d'inscription 3 août 2018 Dernière intervention - 6 avril 2006 à 14:57
0
Merci
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
Commenter la réponse de Cirec

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.