cs_philpas
Messages postés77Date d'inscriptionlundi 17 octobre 2005StatutMembreDernière intervention 4 septembre 2008
-
5 avril 2006 à 20:42
Cirec
Messages postés3833Date d'inscriptionvendredi 23 juillet 2004StatutModérateurDernière intervention18 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?
cs_philpas
Messages postés77Date d'inscriptionlundi 17 octobre 2005StatutMembreDerniè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*
Cirec
Messages postés3833Date d'inscriptionvendredi 23 juillet 2004StatutModérateurDernière intervention18 septembre 202250 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
Messages postés3833Date d'inscriptionvendredi 23 juillet 2004StatutModérateurDernière intervention18 septembre 202250 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
Messages postés3833Date d'inscriptionvendredi 23 juillet 2004StatutModérateurDernière intervention18 septembre 202250 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
Vous n’avez pas trouvé la réponse que vous recherchez ?
cs_philpas
Messages postés77Date d'inscriptionlundi 17 octobre 2005StatutMembreDerniè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.