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 :

Limiter la taille des lignes dans un TMemo


Sujet :

Composants VCL Delphi

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    121
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2002
    Messages : 121
    Points : 48
    Points
    48
    Par défaut Limiter la taille des lignes dans un TMemo
    Bonjour.
    Je souhaiterais pouvoir limiter le nombre de caractères saisies dans une ligne d'un Tmemo sans limiter le nombre de lignes.
    (J'aurais besoin d'en faire un composant)

    J'ai trouvé deux solutions mais elles ne me conviennent pas :
    _utilisation de wordwrap : oblige à utiliser une police fixe et à tailler le composant correctement
    _contrôle à la mimine dans onkeypress : m'oblige à surveiller aussi onpaste, loadfromfile etc..

    Pour l'instant je me dirige vers la seconde solution que je trouve moyenne.
    Si quelqu'un a une autre solution du style message windows à envoyer au composant, cela me rendrait un immense service.

    Merci d'avance

  2. #2
    Membre éprouvé Avatar de Caine
    Inscrit en
    Mai 2004
    Messages
    1 028
    Détails du profil
    Informations personnelles :
    Âge : 52

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 028
    Points : 1 122
    Points
    1 122
    Par défaut
    Bonjour,
    Personnellement je ferais ça dans le OnDraw.

    Car pour la ligne courante, la propriété Length te donne le nombre de caractères de la chaîne.

    Ca a le mérite de ne pas gérer la copie et autres, puisque l'évènement est déclenché après ces insertions éventuelles.

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    121
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2002
    Messages : 121
    Points : 48
    Points
    48
    Par défaut
    Il n'y a pas d'evenement ondraw dans le composant TMemo.

  4. #4
    Membre expert
    Avatar de TicTacToe
    Inscrit en
    Septembre 2005
    Messages
    1 940
    Détails du profil
    Informations personnelles :
    Âge : 51

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 940
    Points : 3 575
    Points
    3 575
    Par défaut
    Ce code semble faire ce que tu veux ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    procedure TMAForm.Memo1Change(Sender: TObject);
    var
       ILigne: Integer;
    begin
         ILigne := Memo1.CaretPos.y;
         if Length( Memo1.Lines.Strings[ ILigne ] ) > MAXNBCAR
           then  Memo1.Lines.Strings[ ILigne ] := Copy(  Memo1.Lines.Strings[ ILigne ], 1, MAXNBCAR );
    end;
    bon courage !

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    121
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2002
    Messages : 121
    Points : 48
    Points
    48
    Par défaut
    Bonjour.
    Effectivement, ça marche, mais ce n'est pas très propre.
    par exemple, si tu modifie un caractère au début d'une ligne, ton curseur saute à la fin.
    Je vais voir si je peux améliorer ça.
    Mais l'idéal aurait été que les lettres en trop passent à la ligne suivante comme avec un wordwrap à true.Visiblement microsoft n'a pas prévu cela.

  6. #6
    Membre expérimenté
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    1 132
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 132
    Points : 1 418
    Points
    1 418
    Par défaut
    Bonjour,

    Pour régler le problème du curseur, il suffit de mémoriser sa position avant toute modification afin de le restituer après.

    Par contre, tu risques avec ceci :

    Voici le texte
    contenu initial
    ement dans le m
    émo avec un sau
    t automatique t
    ous les 15 cara
    ctères.
    d'obtenir cela en ajoutant du texte dans une ligne (pas en fin de texte) :
    Voici le texte
    contenu initial
    ement dans le m
    émo avec "TEXTE

    A
    J
    O
    U
    T
    E
    "

    u
    n

    s
    a
    u
    t automatique t
    ous les 15 cara
    ctères.
    Il vaudrait mieux avoir ton texte en mémoire sans les sauts de ligne "forcés" (seulement ceux réellement saisis) et refaire le formattage à chasue modifcation du texte (risque de lenteur sur des gors volumes de texte)

Discussions similaires

  1. Limiter le nombre de lignes dans un TMemo
    Par Stevens.Georges dans le forum Langage
    Réponses: 5
    Dernier message: 07/05/2015, 02h38
  2. ne pas limiter la taille des lignes à 132 caractères
    Par Infra_Red dans le forum Fortran
    Réponses: 2
    Dernier message: 30/07/2014, 22h11
  3. Limiter le nombre de lignes dans un TMemo
    Par Stevens.Georges dans le forum Langage
    Réponses: 16
    Dernier message: 18/03/2014, 10h08
  4. [Divers] Limitation de la taille des lignes
    Par apqmwnqmap dans le forum Cobol
    Réponses: 13
    Dernier message: 18/12/2007, 10h16
  5. Taille des tabulations dans un TMemo ?
    Par dergen dans le forum Composants VCL
    Réponses: 2
    Dernier message: 07/01/2003, 19h38

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