Remplacer un caractère par un autre dans un RichEdit [Résolu]

Signaler
Messages postés
43
Date d'inscription
samedi 3 août 2013
Statut
Membre
Dernière intervention
17 décembre 2019
-
 TheDelph -
Bonjour,

Comment puis je remplacer un caractère spécial (ex : $F8) par ($27) dans un RichEdit
Je travail autour de ce code :

richEditRecept.Lines.Add(trameCp);  // ecriture dans le RicheditRecept
            Cpt_Evt := Cpt_Evt + 1;
            if (Pos(' $F8 ', TrameCp)) <> 0 then
             // TrameCp := '$27 ' ;

10 réponses

Messages postés
420
Date d'inscription
samedi 17 mai 2003
Statut
Membre
Dernière intervention
6 mai 2019
15
Salut,

Utilise "StringReplace" !
(voir aide en ligne de Delphi)
Messages postés
420
Date d'inscription
samedi 17 mai 2003
Statut
Membre
Dernière intervention
6 mai 2019
15
Au fait, je te fais remarquer que tu veux remplacer une chaîne (string) par une autre, pas un caractère :-p
Messages postés
273
Date d'inscription
samedi 13 juin 2009
Statut
Membre
Dernière intervention
18 avril 2015
9
Salut,

var TramCptramecp :string;
    p:integer;
begin
   p:= pos( chr($F8), trameCp);
   if p>0 then
   begin
      TrameCp := copy(TrameCp, 1, p-1) +
          chr($27) + copy(TrameCp, p+1, l-p);
      RichEdit1.lines[xxx] := TrameCp;
   end;     

Bonne journée.
solilog
Messages postés
3809
Date d'inscription
vendredi 23 juillet 2004
Statut
Modérateur
Dernière intervention
25 janvier 2020
35
Salut,

pas la peine de faire aussi lourd pour changer un caractère:

var TrameCp :string;
    p:integer;
begin
  p:= pos( chr($F8), TrameCp);
  if p>0 then
    // si le caractère est présent on le remplace
    TrameCp[p] := chr($27);
  // dans tous les cas la trame est ajoutée
  RichEdit1.lines.Add(TrameCp);
end;


Messages postés
4200
Date d'inscription
samedi 16 octobre 2004
Statut
Modérateur
Dernière intervention
2 janvier 2019
26
Et attention à l'unicode !

Messages postés
273
Date d'inscription
samedi 13 juin 2009
Statut
Membre
Dernière intervention
18 avril 2015
9
Oups,
Oui F0xi tu as raison je l'ai pourtant fait 100 fois
(à part ta dernière parenthèse):
RichEdit1.lines.Add(TrameCp) );
Mais je pense qu'il se plante sur le $27, il veut mettre un escape chr(27) et il met $27 chr(39).

solilog
Messages postés
675
Date d'inscription
jeudi 17 avril 2008
Statut
Membre
Dernière intervention
19 février 2019
10
Salut
Et AnsiReplaceStr ne pourrait il pas être utilisé ?
Messages postés
3809
Date d'inscription
vendredi 23 juillet 2004
Statut
Modérateur
Dernière intervention
25 janvier 2020
35
Et attention à l'unicode !
Delphi le gère très bien et en toute transparence avec le code que j'ai donné ;-)
Et AnsiReplaceStr ne pourrait il pas être utilisé ?
si mais AnsiReplaceStr utilise StringReplace qui se trouve être très lent et particulièrement gourmand en ressources
Messages postés
43
Date d'inscription
samedi 3 août 2013
Statut
Membre
Dernière intervention
17 décembre 2019

Un grand merci à CIREC pour son code qui fonctionne très bien et à solilog, fOxi, dubois77 et korgis pour leur aide.
Voici mon code :

 procedure TForm1.ComPort1RxChar(Sender: TObject; Count: Integer);
var
    NouveauMsg : string;
    PosEndTrame,i,p : Integer;
 begin
 {*** lecture du port com 1  ***}
     ComPort1.ReadStr(NouveauMsg, Count);

    MonMessage := MonMessage + NouveauMsg;
    MonMessage := Uppercase(MonMessage);
    PosEndTrame := Pos(#13, MonMessage);
    if PosEndTrame <> 0 then
        while PosEndTrame <> 0 do
        begin
            TrameCp := Copy(MonMessage, 0, PosEndTrame -1);
            //richEditRecept.Lines.Add(trameCp);  // ecriture dans le RicheditRecept
            //Inc (Cpt_Evt);
        { *** Remplacement du caractère $F8 par $B0 ***}
            p := pos( chr($F8), TrameCp);
              if p>0 then
                TrameCp[p] := chr($B0);
                richEditRecept.Lines.Add(TrameCp);
                Inc (Cpt_Evt);

        { *** Mis en couleur de certaines lignes et écriture dans les RichEdit respectif  *** }
             if (pos(' OPR ', TrameCP)) <> 0 then
                begin
               RichEdit_OPR.SelAttributes.Color := clBlue;
               RichEdit_OPR.Lines.Add(TrameCp);
               Inc (Cpt_Alm_Inhi);

                end;
             if (Pos(' ALM ', TrameCp)) <> 0 then
                begin
                  RichEditLog.SelAttributes.Color := clred ;
                  richEditLog.Lines.Add(TrameCp);
                  Inc (Cpt_ALM);

                end;
              if (Pos(' ACK ', TrameCp)) <> 0 then
                begin
                   //RichEditLog.SelAttributes.Color := $000080FF; // Orange
                   RichEditLog.SelAttributes.Color := clTeal;
                   richEditLog.Lines.Add(trameCp);
                end;
              if (Pos(' RTN ', TrameCp)) <> 0 then
                begin
                  RichEditLog.SelAttributes.Color := clLime;
                  RichEditLog.Lines.Add(trameCp);
                end;
    MonMessage := Copy(MonMessage, PosEndTrame +1, Length(MonMessage));
            PosEndTrame := Pos(#13, MonMessage);

        end;
end;