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

Composants VCL Delphi Discussion :

[D7] Sélection d'une ligne dans un Memo


Sujet :

Composants VCL Delphi

  1. #1
    Membre expert
    Avatar de Charly910
    Homme Profil pro
    Ingénieur TP
    Inscrit en
    Décembre 2006
    Messages
    2 370
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur TP
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 370
    Points : 3 144
    Points
    3 144
    Par défaut [D7] Sélection d'une ligne dans un Memo
    Bonjour,

    Quand je clique dans un Memo, je veux sélectionner la ligne sous le curseur. J'ai fait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    { ===================================================================== }
    procedure TF_Import.MemoClick(Sender: TObject);
    //  Sélection d'une ligne du mémo
    begin
      with TMemo(Sender) do
       begin
         FirstLine := SendMessage(TMemo(Sender).Handle, EM_LineFromChar, TMemo(Sender).SelStart, 0);
         Label1.Caption := 'Ligne : '+IntToStr(FirstLine) ;
         CaretPos:= Point(0, CaretPos.Y); // Début de la ligne
         SelLength:= length(Lines[CaretPos.Y]); // sélection de la ligne
         SetScrollPos(Memo.Handle, SB_HORZ, 0, True); // Essai de revenir en début de ligne sans déselection
       end;
    end;
    { ===================================================================== }
    ça marche, mais quand la ligne affichée est plus grande que la largeur du mémo, le texte se déplace vers la gauche et affiche la fin de ligne. Je voudrais revenir à un affichage du début de ligne sans la désélectionner. SetScrollPos ne fait que remettre la scrollbar à 0, mais ne bouge pas le texte.

    Comment faire ?
    Merci
    A+
    Charly

  2. #2
    Membre expert
    Avatar de Charly910
    Homme Profil pro
    Ingénieur TP
    Inscrit en
    Décembre 2006
    Messages
    2 370
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur TP
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 370
    Points : 3 144
    Points
    3 144
    Par défaut
    J'ai trouvé !
    à la place du setScrollbox :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
         SendMessage(Memo.Handle, WM_HSCROLL, SB_TOP, 0 );
    A+
    Charly

  3. #3
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 563
    Points : 25 165
    Points
    25 165
    Par défaut
    C'est le SelLength qui ne positionnerait pas à la fin justement ?
    C'est le principe même de la sélection, en tout cas, impossible de déplacer la position du curseur puisque cela déplacerait aussi la sélection.

    Avec WordWrap à False et une ligne dont la longueur est moins de 1Ko (ou 4Ko, je sais plus, même à WordWrap False, il y a un retour à la ligne pour les lignes très longues)

    Sous D10 Seattle

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    procedure TForm1.Button2Click(Sender: TObject);
    var
      S: string;
      I, J: Integer;
    begin
      for J := 1 to 40 do
      begin
        S := '';
        for I := 20 to Random(200) do
          S := S + Chr(Ord('0') + (I mod 10));
     
        Memo1.Lines.Add(S);
      end;
    end;
     
    procedure TForm1.Memo1Click(Sender: TObject);
    var
      FirstLine: Integer;
    begin
      with TMemo(Sender) do
       begin
        FirstLine := SendMessage(Handle, EM_LineFromChar, SelStart, 0);
        Label1.Caption := 'Ligne : '+IntToStr(FirstLine) ;
        CaretPos := Point(0, CaretPos.Y); // Début de la ligne
        SelLength:= length(Lines[CaretPos.Y]); // sélection de la ligne
        Perform(EM_LINESCROLL, -SelLength, 0);
      end;
    end;
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  4. #4
    Membre expert
    Avatar de Charly910
    Homme Profil pro
    Ingénieur TP
    Inscrit en
    Décembre 2006
    Messages
    2 370
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur TP
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 370
    Points : 3 144
    Points
    3 144
    Par défaut
    Oui, ta solution fonctionne bien, et la mienne aussi avec SendMessage(Handle, WM_HSCROLL, SB_TOP, 0 );

    Merci
    A+
    Charly

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

Discussions similaires

  1. Supprimer une ligne dans un memo
    Par Herostnic dans le forum Débuter
    Réponses: 1
    Dernier message: 21/09/2008, 07h34
  2. Changement de couleur d'une ligne dans un Memo
    Par andreditdd dans le forum Composants VCL
    Réponses: 8
    Dernier message: 19/08/2008, 13h47
  3. copier une ligne dans une autre table
    Par BoeufBrocoli dans le forum SQL
    Réponses: 5
    Dernier message: 24/10/2003, 22h59
  4. Supprimer une ligne dans un fichier
    Par sbeu dans le forum Langage
    Réponses: 3
    Dernier message: 13/05/2003, 10h30
  5. Déplacer la sélection d'une ligne dans un stringgrid
    Par jer64 dans le forum Composants VCL
    Réponses: 5
    Dernier message: 14/03/2003, 00h57

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