IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 Delphi Discussion :

[TMemo] Comment se positionner à la fin ?


Sujet :

Delphi

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    117
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 117
    Points : 68
    Points
    68
    Par défaut [TMemo] Comment se positionner à la fin ?
    Bonjour,

    Je complète un TMemo en faisant une saisie dans un TEdit.

    Je veux que le TMemo affiche les n dernières lignes.

    Lorsque je charge un .txt dans le TMemo, pas de pb.

    Je fais (cf. FAQ) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
      with Memo1 do
     
                    Perform(WM_VSCROLL, SB_BOTTOM,0);
    Ça marche, j'ai bien les n dernières lignes (sans ce code, j'ai les n premières).

    Ensuite, je mets le focus sur le TEDit, et là,

    Plus moyen de pouvoir afficher les n dernières lignes, dès que je rajoute une ligne dans le TMemo, par un retour chariot depuis le TEdit, puis un Memo1.Lines.Add(maChaine).

    Une ligne se rajoute, mais le code ci dessus, ainsi que celui-ci affiche toujours les n premières lignes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
      with Memo1 do
      begin
        // Aller à la dernière ligne
        SelStart := Length(Text);
        Perform(EM_SCROLLCARET, 0, 0);
      end;
    Que je mette le focus sur le TMemo, avant ce code (puis un re-focus sur le TEdit), ou que je garde le code comme là ...nada de chez nada.

    Je peux scroller, mais je voudrais que mon ScrollBar se positionne en bas par défaut
    Kkun pourrait-il m'aider ?

    Merci par avance.

  2. #2
    Rédacteur/Modérateur
    Avatar de ero-sennin
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2005
    Messages
    2 965
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2005
    Messages : 2 965
    Points : 4 935
    Points
    4 935
    Par défaut
    Salut,

    Tu peux utiliser l'envoie de Message :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SendMessage(Memo1.Handle,WM_VSCROLL,SB_BOTTOM,0);
    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    procedure TForm1.BtnAddClick(Sender: TObject);
    begin
      Memo1.Lines.Add(Edit1.Text);
      SendMessage(Memo1.Handle,WM_VSCROLL,SB_BOTTOM,0);
    end;
    A+

  3. #3
    Modérateur

    Homme Profil pro
    Ingénieur retraité
    Inscrit en
    Octobre 2005
    Messages
    2 396
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur retraité

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 396
    Points : 3 266
    Points
    3 266
    Par défaut
    Salut,

    Ceci affiche aussi toujours les n dernières lignes (testé : marche)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    var       i : integer;
    procedure TfrmImgD.SpeedButton1Click(Sender: TObject);
    begin     with memo1 do
              begin inc(i);
                    Lines.Add('maChaine'+intToStr(i));
                    SelStart := Length(Text);
              end;
    end;
     
    initialization
     
             i:=0;
     
    End.
    A+

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    117
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 117
    Points : 68
    Points
    68
    Par défaut
    Bonjour,
    J'ai ré-essayé les 2 solutions, et ça marche pas.

    Même en rajoutant un SetFocus, avant le Lines.Add, et en laissant le focus sur le TMemo, ce fichu Memo insiste pour afficher les premières lignes , dès que le Lines.Add a été exécuté.

    Et je dois scroller à la main

  5. #5
    Rédacteur/Modérateur
    Avatar de ero-sennin
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2005
    Messages
    2 965
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2005
    Messages : 2 965
    Points : 4 935
    Points
    4 935
    Par défaut
    Re,

    Il nous faudrait ton code pour voir ... Ma méthode fonctionne très bien, je n'ai pas besoin de faire de SetFocus ou autre ...
    Pour t'en convaincre, mais un TEdit, un TMemo et un TButton sur une Form puis mets le code que j'ai posté dans le OnClick du TButton et tu verras par toi même

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    117
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 117
    Points : 68
    Points
    68
    Par défaut
    J'ai trouvé d'où ça venait : je copie le contenu du TMemo dans une TStringList tmp,
    et je recopie le contenu de cette TStringList par un Memo1..Lines.Assign(tmp)

    Ça me permet de faire un traitement sur le contenu du TMemo, sans mettre le souk.

    Sans ce tmp, ça marche.

    je vais voir comment gérer la situation.

    Recopier tout le tmp, ligne par ligne ??

  7. #7
    Modérateur

    Homme Profil pro
    Ingénieur retraité
    Inscrit en
    Octobre 2005
    Messages
    2 396
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur retraité

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 396
    Points : 3 266
    Points
    3 266
    Par défaut
    Re-Salut,

    Essaye donc :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    ...
    with memo1 do
    begin Memo1.Lines.Assign(tmp);
          SelStart := Length(Text);
    end;
    A+

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    117
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 117
    Points : 68
    Points
    68
    Par défaut
    Merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 3
    Dernier message: 17/03/2007, 14h59
  2. [C#] Comment se positionner dans un DataGridview
    Par Cazaux-Moutou-Philippe dans le forum Windows Forms
    Réponses: 4
    Dernier message: 12/05/2006, 12h45
  3. Réponses: 3
    Dernier message: 27/04/2006, 10h01
  4. [TMemo] Comment insérer les touches pressées ?
    Par Alexandre` dans le forum Composants VCL
    Réponses: 8
    Dernier message: 28/03/2005, 16h36
  5. Réponses: 2
    Dernier message: 25/03/2005, 09h23

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo