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 :

Remplacement mots en texte .RTF avec respect du formatage


Sujet :

Delphi

  1. #1
    Membre chevronné
    Avatar de Droïde Système7
    Homme Profil pro
    Inscrit en
    Septembre 2003
    Messages
    2 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 2 288
    Points : 1 935
    Points
    1 935
    Par défaut Remplacement mots en texte .RTF avec respect du formatage
    Bonjour

    Cela est-il possible sans tartiner un code "usine à gaz" de permettre de remplacer un ou des mots en Rich Text dans un RichEdit ; mais le problème est qu'il faut respecter le formatage des mots situés à côté de ce ou ces remplacements.

    Par exemple ici lors du remplacement, hé bien le formatage est uniformisé et donc non respecté :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    ...
    RichEdit1.Text := StringReplace(RichEdit1.Text, 'toto', 'albert', [rfReplaceAll]);
    ...
    J'ai recherché et pas trouvé grand-chose sur ce sujet ; mais peut-être pas avec de bons mots-clés.

    Merci de vos idées.

  2. #2
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 885
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Biologiste ; Progr(amateur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 885
    Points : 11 403
    Points
    11 403
    Billets dans le blog
    6
    Par défaut
    regarde en réglant PlainText, mais cela ne marche pê pas une fois le texte chargé (accepte comme texte brut ou enrichi, je crois)

  3. #3
    Membre chevronné
    Avatar de Droïde Système7
    Homme Profil pro
    Inscrit en
    Septembre 2003
    Messages
    2 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 2 288
    Points : 1 935
    Points
    1 935
    Par défaut
    Citation Envoyé par tourlourou
    regarde en réglant PlainText, mais cela ne marche pê pas une fois le texte chargé (accepte comme texte brut ou enrichi, je crois)
    En fait j'ai testé en plaçant (une fois lancé le programme) un morceau de texte riche dans un RichEdit.

    Au dessous j'ai un bouton qui "false" le PlainText et un autre qui le "True", avec toutes les combinaisons avant/après, mais ça ne change rien.


    mais cela ne marche pê pas une fois le texte chargé
    En effet.

    J'avais aussi testé en ayant chargé le .RTF via une TStringList, mais pas possible de respecter le formatage (les lettres faisaient 2 cm de haut), en plus aucun saut de ligne, alors des tas de pages pour quelques ligne. Pour cette raison que je me suis rabattu en testant directo dans le RichEdit

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 36
    Points : 38
    Points
    38
    Par défaut
    Voila une adaptation d'une procédure que j'utilisais pour faire du surlignage de certains mots. Ca semble fonctionner, mais j'ai pas tous testé non plus.

    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
     
    procedure RTFStringReplace(RichEdit : TRichEdit; sOldValue, sNewValue : string);
    var
      i : integer;
      iSelStart, iSelLength : integer;
    begin
      iSelStart := RichEdit.SelStart;
      iSelLength := RichEdit.SelLength;
      RichEdit.SelStart := 0;
      i := 0;
      while i <= length(RichEdit.Text) - length(sOldValue) do
      begin
        RichEdit.SelStart := i;
        RichEdit.SelLength := length(sOldValue);
        if SameText(sOldValue, RichEdit.SelText) then
        begin
          RichEdit.SelText := sNewValue;
          if iSelStart < i then
            iSelStart := iSelStart + (length(sNewValue) - length(sOldValue));
        end;
        Inc(i);
      end;
      RichEdit.SelStart := iSelStart;
      RichEdit.SelLength := iSelLength;
    end;
    Birdyz

  5. #5
    Membre chevronné
    Avatar de Droïde Système7
    Homme Profil pro
    Inscrit en
    Septembre 2003
    Messages
    2 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 2 288
    Points : 1 935
    Points
    1 935
    Par défaut
    Citation Envoyé par birdyz
    Voila une adaptation d'une procédure que j'utilisais pour faire du surlignage de certains mots. Ca semble fonctionner, mais j'ai pas tous testé non plus.

    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
     
    procedure RTFStringReplace(RichEdit : TRichEdit; sOldValue, sNewValue : string);
    var
      i : integer;
      iSelStart, iSelLength : integer;
    begin
      iSelStart := RichEdit.SelStart;
      iSelLength := RichEdit.SelLength;
      RichEdit.SelStart := 0;
      i := 0;
      while i <= length(RichEdit.Text) - length(sOldValue) do
      begin
        RichEdit.SelStart := i;
        RichEdit.SelLength := length(sOldValue);
        if SameText(sOldValue, RichEdit.SelText) then
        begin
          RichEdit.SelText := sNewValue;
          if iSelStart < i then
            iSelStart := iSelStart + (length(sNewValue) - length(sOldValue));
        end;
        Inc(i);
      end;
      RichEdit.SelStart := iSelStart;
      RichEdit.SelLength := iSelLength;
    end;
    Birdyz
    Bonjour,

    Tu sais quoi ?

    Wahouuuuuuuuuuhhhhhh !

    J'en ai pourtant fait des pages et des pages de recherches + bidouilles perso.

    Ça marche impec de chez impec, bravo et merci encore !
    Jean-Pierre

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 36
    Points : 38
    Points
    38
    Par défaut
    Citation Envoyé par Droïde Système7
    Bonjour,

    Tu sais quoi ?

    Wahouuuuuuuuuuhhhhhh !

    J'en ai pourtant fait des pages et des pages de recherches + bidouilles perso.

    Ça marche impec de chez impec, bravo et merci encore !
    Jean-Pierre
    De rien, c'est avec plaisir.

    D'ailleur, voila une version corrigé car sinon tu peux bouclé dans le cas ou la chaine de remplacement contient le contenue de la chaine a remplacé (essaye de remplacer E par EE par exemple et tu comprendra )

    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
     
    procedure RTFStringReplace(RichEdit : TRichEdit; sOldValue, sNewValue : string);
    var
      i : integer;
      iSelStart, iSelLength : integer;
    begin
      iSelStart := RichEdit.SelStart;
      iSelLength := RichEdit.SelLength;
      RichEdit.SelStart := 0;
      i := 0;
      while i <= length(RichEdit.Text) - length(sOldValue) do
      begin
        RichEdit.SelStart := i;
        RichEdit.SelLength := length(sOldValue);
        if SameText(sOldValue, RichEdit.SelText) then
        begin
          RichEdit.SelText := sNewValue;
          if iSelStart < i then
            iSelStart := iSelStart + (length(sNewValue) - length(sOldValue));
          i := i + length(sNewValue);
        end
        else
          Inc(i);
      end;
      RichEdit.SelStart := iSelStart;
      RichEdit.SelLength := iSelLength;
    end;
    Birdyz

  7. #7
    Membre chevronné
    Avatar de Droïde Système7
    Homme Profil pro
    Inscrit en
    Septembre 2003
    Messages
    2 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 2 288
    Points : 1 935
    Points
    1 935
    Par défaut
    Re birdyz

    C'est remplacé


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

Discussions similaires

  1. Réponses: 9
    Dernier message: 23/07/2012, 18h00
  2. sauvegarde avec comme nom un mot du texte
    Par bakaladiakouba dans le forum VBA Word
    Réponses: 4
    Dernier message: 16/09/2011, 11h42
  3. Remplacer mot dans un fichier text !
    Par Marie.B dans le forum Entrée/Sortie
    Réponses: 2
    Dernier message: 25/01/2009, 14h38
  4. [03]Texte RTF avec module MsgBoxPLUS d'Arkham
    Par seb92400 dans le forum VBA Access
    Réponses: 2
    Dernier message: 22/06/2007, 12h54
  5. [RegEx] Remplacement rapide dans un fichier texte (RTF)
    Par johweb dans le forum Langage
    Réponses: 12
    Dernier message: 17/01/2007, 10h04

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