Remplacer un caractère par un autre dans un RichEdit

Résolu
marin1617 Messages postés 42 Date d'inscription samedi 3 août 2013 Statut Membre Dernière intervention 17 décembre 2019 - 19 sept. 2013 à 16:04
 TheDelph - 17 oct. 2013 à 13:13
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

korgis Messages postés 420 Date d'inscription samedi 17 mai 2003 Statut Membre Dernière intervention 6 mai 2019 17
19 sept. 2013 à 16:22
Salut,

Utilise "StringReplace" !
(voir aide en ligne de Delphi)
0
korgis Messages postés 420 Date d'inscription samedi 17 mai 2003 Statut Membre Dernière intervention 6 mai 2019 17
19 sept. 2013 à 16:24
Au fait, je te fais remarquer que tu veux remplacer une chaîne (string) par une autre, pas un caractère :-p
0
solilog Messages postés 273 Date d'inscription samedi 13 juin 2009 Statut Membre Dernière intervention 18 avril 2015 10
20 sept. 2013 à 09:24
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
0
Cirec Messages postés 3833 Date d'inscription vendredi 23 juillet 2004 Statut Modérateur Dernière intervention 18 septembre 2022 50
20 sept. 2013 à 15:31
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;


0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
f0xi Messages postés 4205 Date d'inscription samedi 16 octobre 2004 Statut Modérateur Dernière intervention 12 mars 2022 35
20 sept. 2013 à 17:47
Et attention à l'unicode !

0
solilog Messages postés 273 Date d'inscription samedi 13 juin 2009 Statut Membre Dernière intervention 18 avril 2015 10
20 sept. 2013 à 19:04
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
0
dubois77 Messages postés 675 Date d'inscription jeudi 17 avril 2008 Statut Membre Dernière intervention 19 février 2019 14
28 sept. 2013 à 11:44
Salut
Et AnsiReplaceStr ne pourrait il pas être utilisé ?
0
Cirec Messages postés 3833 Date d'inscription vendredi 23 juillet 2004 Statut Modérateur Dernière intervention 18 septembre 2022 50
28 sept. 2013 à 18:21
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
0
marin1617 Messages postés 42 Date d'inscription samedi 3 août 2013 Statut Membre Dernière intervention 17 décembre 2019
1 oct. 2013 à 14:23
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;
0
super merci
0
Rejoignez-nous