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 :

Richedit mettre en évidence des mots


Sujet :

Delphi

  1. #1
    Membre habitué

    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    192
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 192
    Points : 176
    Points
    176
    Par défaut Richedit mettre en évidence des mots
    Bonjour,

    Sans doute simple mais je ne trouve pas. je débute avec richedit et sur les FAQs je ne trouve pas trop ce que je veux faire.

    Je lis un richedit1 et je l'affiche dans un richedit2 lettre par lettre en voulant mettre en évidence un mot.

    voici un bout de code mais je pense qu'il y a bcp mieux. car là (forcément... allez vous me dire...) il y a des retours à la ligne entre chaque lettre.. et question optimisation c'est sans doute pas terrible.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    procedure TForm1.Button2Click(Sender: TObject);
      var i:integer;
    begin
      for i:=1 to length(richedit1.text) do
      begin
        if (i>=3) and (i<=6) then
          RichEdit2.SelAttributes.Color := clRed
          else
          RichEdit2.SelAttributes.Color := clBlack;
     
        Richedit2.Lines.add(richedit1.text[i]);
      end;
    end;

    merci
    Un bon exemple vaut mieux qu'une longue explication confuse...

  2. #2
    Membre habitué
    Homme Profil pro
    Inscrit en
    Juin 2003
    Messages
    115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Juin 2003
    Messages : 115
    Points : 129
    Points
    129
    Par défaut
    Salut

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Richedit2.Lines.add(richedit1.text[i]);
    le Add ajoute forcément une ligne (c'est un TStrings). si tu veux concaténer à la dernière ligne, il faut écrire un truc du style
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    richedit2.Lines[richedit2.lines.count - 1] := richedit2.Lines[richedit2.lines.count - 1] + richedit1.text[i]
    On doit pouvoir en effet optimiser la recherche des mots ...
    JP
    JP

    N'ayez pas peur de la perfection, vous ne l'atteindrez jamais !
    Salvador Dali

  3. #3
    Membre habitué
    Homme Profil pro
    Inscrit en
    Juin 2003
    Messages
    115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Juin 2003
    Messages : 115
    Points : 129
    Points
    129
    Par défaut
    C'est marrant la concaténation marche bien, mais c'est la coloration qui marche plus ... on dirait que la modification de lignes existante n'utilise pas le SelAttributes ... c'est navrant
    je me rappelle que je m'y était cassé les dents à une époque !
    JP

    N'ayez pas peur de la perfection, vous ne l'atteindrez jamais !
    Salvador Dali

  4. #4
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 043
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 043
    Points : 40 957
    Points
    40 957
    Billets dans le blog
    62
    Par défaut
    Citation Envoyé par J-P-B
    C'est marrant la concaténation marche bien, mais c'est la coloration qui marche plus ... on dirait que la modification de lignes existante n'utilise pas le SelAttributes ... c'est navrant
    je me rappelle que je m'y était cassé les dents à une époque !
    effectivement ça ne marche qu'a la ligne

    pour travailler sur les mots regarde par ici http://www.developpez.net/forums/sho...18&postcount=6
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  5. #5
    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 263
    Points
    3 263
    Par défaut
    T'es pas le seul à t'être cassé les dents là-dessus.
    En fait la réponse est inscrite dans le libellé même de SelAttributes : Toute modification apportée aux proprétés (Color, etc) n'ont d'effet que sur la partie de texte sélectionnée et cette partie de texte sélectionnée se réduit en l'absence de sélection au caret ce qui a comme conséquences "qu'un coup ça marche et un coup ça marche pas" selon qu'il y a ou pas sélection et selon la position du caret.

    Pour éviter ceci il est préférable d'utiliser des séquences du type :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
          var selFin : integer;
          ...
          RichEdit2.SelAttributes.Color := clRed;
          Richedit2.Lines.add('Mon titre de paragraphe');
          selFin:=Richedit2.SelStart; //récupère la position du caret à la fin du Add
          //Et si je veux que le rouge ne s'applique que sur le mot 'titre' de 'Mon titre de paragraphe' :
          SelFin:=selFin-length(' de paragraphe');
          Richedit2.SelStart:=selFin-length('titre');
          Richedit2.SelLength:=SelFin-Richedit2.SelStart; // à ce stade le mot 'titre' est sélectionné et le rouge s'y applique
    :
    ... bien entendu on peut transformer ce bout de code par une petite procédure réutilisable du type :
    procedure redAjouterEnEvidence(red : tRichEdit; ligne : string; motEnEvidence : shortString; color : TColor);
    A+
    N'oubliez pas de consulter les FAQ Delphi et les cours et tutoriels Delphi

Discussions similaires

  1. [Dojo] Comment mettre en évidence des champs dojo obligatoire
    Par khattat dans le forum Bibliothèques & Frameworks
    Réponses: 3
    Dernier message: 19/10/2011, 16h28
  2. [AC-2003] Mettre en évidence un mot précis dans un état?
    Par electrosat03 dans le forum IHM
    Réponses: 8
    Dernier message: 24/08/2009, 20h04
  3. [BO 6.5.1] Mettre en évidence des valeurs décimales
    Par websurfer dans le forum Débuter
    Réponses: 4
    Dernier message: 20/07/2008, 17h57
  4. [FAQ][Characters] Mettre en évidence un mot
    Par cafeine dans le forum Contribuez
    Réponses: 1
    Dernier message: 20/02/2008, 16h52
  5. [Word] Comment mettre en évidence des mots dans un document ?
    Par ecocentric dans le forum Framework .NET
    Réponses: 1
    Dernier message: 03/08/2006, 16h31

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