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

Messages postés
42
Date d'inscription
samedi 3 août 2013
Dernière intervention
15 août 2014
- - Dernière réponse :  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 ' ;
Afficher la suite 

Votre réponse

10 réponses

Messages postés
426
Date d'inscription
samedi 17 mai 2003
Dernière intervention
16 février 2019
15
0
Merci
Salut,

Utilise "StringReplace" !
(voir aide en ligne de Delphi)
Commenter la réponse de korgis
Messages postés
426
Date d'inscription
samedi 17 mai 2003
Dernière intervention
16 février 2019
15
0
Merci
Au fait, je te fais remarquer que tu veux remplacer une chaîne (string) par une autre, pas un caractère :-p
Commenter la réponse de korgis
Messages postés
273
Date d'inscription
samedi 13 juin 2009
Dernière intervention
18 avril 2015
8
0
Merci
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
Commenter la réponse de solilog
Messages postés
4229
Date d'inscription
vendredi 23 juillet 2004
Statut
Modérateur
Dernière intervention
3 août 2018
42
0
Merci
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;


Commenter la réponse de Cirec
Messages postés
4307
Date d'inscription
samedi 16 octobre 2004
Statut
Modérateur
Dernière intervention
2 janvier 2019
33
0
Merci
Et attention à l'unicode !

Commenter la réponse de f0xi
Messages postés
273
Date d'inscription
samedi 13 juin 2009
Dernière intervention
18 avril 2015
8
0
Merci
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
Commenter la réponse de solilog
Messages postés
693
Date d'inscription
jeudi 17 avril 2008
Dernière intervention
19 février 2019
19
0
Merci
Salut
Et AnsiReplaceStr ne pourrait il pas être utilisé ?
Commenter la réponse de dubois77
Messages postés
4229
Date d'inscription
vendredi 23 juillet 2004
Statut
Modérateur
Dernière intervention
3 août 2018
42
0
Merci
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
Commenter la réponse de Cirec
Messages postés
42
Date d'inscription
samedi 3 août 2013
Dernière intervention
15 août 2014
0
Merci
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;
Commenter la réponse de marin1617
Commenter la réponse de TheDelph

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.