Tmemo Sans Defilement Auto [Résolu]

Signaler
Messages postés
30
Date d'inscription
jeudi 24 juillet 2008
Statut
Membre
Dernière intervention
13 novembre 2012
-
Messages postés
3793
Date d'inscription
samedi 22 décembre 2007
Statut
Membre
Dernière intervention
3 juin 2016
-
Bonjour,

petite question: est-il possible d'ajouter des lignes(append) a un TMemo sans avoir le scroll automatique à la fin du memo.
En d'autres termes, si je charge des données à la volé dans un Tmemo, est il possible de faire un Arret Defilement?


Bonne weekend a tous!

11 réponses

Messages postés
30
Date d'inscription
jeudi 24 juillet 2008
Statut
Membre
Dernière intervention
13 novembre 2012

Il semble que Memo.BeginUpdate et Memo.EndUpadte me permette de faire.

Bonne journée
Messages postés
302
Date d'inscription
jeudi 29 septembre 2005
Statut
Membre
Dernière intervention
17 septembre 2013
1
Salut,

oui, c'est possible

bon w-e à toi.
Messages postés
30
Date d'inscription
jeudi 24 juillet 2008
Statut
Membre
Dernière intervention
13 novembre 2012

Et comment fait-on cela, svp?
Messages postés
1418
Date d'inscription
samedi 12 juin 2004
Statut
Membre
Dernière intervention
5 juillet 2010
9
Alors deux solutions se présentent à toi, ayant chacune un effet différent :

1) une solution qui consiste à mettre Visible à False avant l'ajout de données, puis le remettre de nouveau à true par la suite. Ainsi l'affichage ne change pas du tout.
Memo.Visible := false;
Memo.Lines.Add('...');
Memo.Visible := true;


2) une solution qui consiste à repositionner le curseur au tout début du Memo à la fin de l'ajout de texte, ce qui fait revenir l'affichage aux premières lignes.
Memo.Lines.Add('...');
SendMessage(Memo.Handle, EM_SETSEL, 0, 0);
SendMessage(Memo.Handle, EM_SCROLLCARET, 0, 0);


@+
Nico { www.ni69.info }
Messages postés
1418
Date d'inscription
samedi 12 juin 2004
Statut
Membre
Dernière intervention
5 juillet 2010
9
Oh, je n'avais pas eu le temps de voir ton post.
Dans ma version de Delphi (2005), les procédures :
Memo.BeginUpdate;
Memo.EndUpdate;

n'existent pas !
Peut-être est-ce un ajout de versions ultérieures ? (A confirmer...)


@+
Nico { www.ni69.info }
Messages postés
30
Date d'inscription
jeudi 24 juillet 2008
Statut
Membre
Dernière intervention
13 novembre 2012

en faite, c'est Memo.lines.BeginUpdate; et Memo.lines.EndUpdate;
Messages postés
1418
Date d'inscription
samedi 12 juin 2004
Statut
Membre
Dernière intervention
5 juillet 2010
9
Je pense que tu voulais dire :
Memo.Lines.BeginUpdate;
Memo.Lines.EndUpdate;

à la place !

@+
Nico { www.ni69.info }
Messages postés
1418
Date d'inscription
samedi 12 juin 2004
Statut
Membre
Dernière intervention
5 juillet 2010
9
Nous nous sommes donc finalement compris
Et c'est en effet une bonne solution.

@+
Nico { www.ni69.info }
Messages postés
3793
Date d'inscription
samedi 22 décembre 2007
Statut
Membre
Dernière intervention
3 juin 2016
8
@ni69 : Mettre Visible à False puis à True revient à faire de manière moins élégante un BeginUpdate et un EndUpdate. En effet, lorsque tu mets Visible à False, la VCL suppose que tu n'as pas besoin de redessiner le contrôle (puisqu'il est pas visible). Il appelle donc BeginUpdate. Puis quand tu mets Visible à True, la VCL met à jour et réaffiche, ce qui revient à un EndUpdate. C'est la même chose ... sauf qu'on a un léger clignotement avec la méthode des Visible ? Non ?

Cordialement, Bacterius !
Messages postés
1418
Date d'inscription
samedi 12 juin 2004
Statut
Membre
Dernière intervention
5 juillet 2010
9
@ Bacterius : Effectivement. Cependant, le "clignotement" dont tu parles n'est pas visible en pratique car dans le cas du code suivant :
Memo.Visible := false;
Memo.Lines.Add('...');
Memo.Visible := true;

Le Memo n'est en fait redessiné que lorsque le programme rend la main, c'est à dire après la remise à true de la propriété Visible du Memo (cet effet est d'ailleurs caractéristique de tous les effets de freeze des applications qui exécutent un code long sans inclure des "Application.ProcessMessages"...)

Reste que l'emploi de BeginUpdate/EndUpdate est préférable, nous sommes d'accord là dessus.


@+
Nico { www.ni69.info }
Messages postés
3793
Date d'inscription
samedi 22 décembre 2007
Statut
Membre
Dernière intervention
3 juin 2016
8
Effectivement, bien vu

Cordialement, Bacterius !