Ajouter des RichEdit formatés les uns aux autres.

Signaler
Messages postés
121
Date d'inscription
jeudi 10 janvier 2002
Statut
Membre
Dernière intervention
7 août 2018
-
Caribensila
Messages postés
2527
Date d'inscription
jeudi 15 janvier 2004
Statut
Membre
Dernière intervention
16 octobre 2019
-
Je souhaite gérer un fil de messagerie avec des RichEdit qui peuvent avoir une grande variété de format; On peut sauvegarder le contenu d'un RichEdit formatté dans un fichier rtf mais comment fait-on pour en ajouter un suivant?

10 réponses

Messages postés
2226
Date d'inscription
dimanche 5 octobre 2003
Statut
Modérateur
Dernière intervention
18 novembre 2010
13
Ok j'ai bien saisi. Je parviens a coller le contenu d'un rich dans un autre mais pas 2 contenus dans 1 autre :/
Ce qui est sur, c'est qu'il faut passer par un Stream pour copier/coller les contenus.
Le soucis est qu'un LoadFrom... écrase el contenu actuel pour mettre le nouveau -_- il n'y pas de AddLinesFromStream par exemple :(
Regarde aussi la propriété PlainText qui doit être a faux.
Messages postés
2226
Date d'inscription
dimanche 5 octobre 2003
Statut
Modérateur
Dernière intervention
18 novembre 2010
13
Salut
Je ne comprends pas bien la question, qu'entends tu par "ajouter un suivant" : "un" quoi ?
Essaie de développer merci
Messages postés
121
Date d'inscription
jeudi 10 janvier 2002
Statut
Membre
Dernière intervention
7 août 2018

J'ai des discussions qui sont en RichEdit donc que je sauvegarde en fichier .rtf ce qui est très sympa puisque cela enregistre la mise en forme qui peut être très riche (comme son nom l'indique).


mais voilà: quelqu'un ajoute en ligne un message lui aussi formaté et je voudrais le mettre à la suite. Je sais le réceptionner correctement avec des Strea:m (un peu laborieux mais cela marche) Comment fait-on pour récupérer le fichier et y ajouter pour ajouter ce nouveau texte au précédent en respectant la mise en forme de chacun?

j'ai essayé de copier ligne à ligne le nouveau texte dans un RichEdit annexe ouvert pour l'occasion, cela ajoute des textes non formatés, j'ai essayé d'utiliser le clipboard le résultat est désopilant : il m'insère:  "RichEdit.lines"!...

merci de ton aide...


 
Messages postés
2226
Date d'inscription
dimanche 5 octobre 2003
Statut
Modérateur
Dernière intervention
18 novembre 2010
13
Peut on avoir du code ?
Messages postés
121
Date d'inscription
jeudi 10 janvier 2002
Statut
Membre
Dernière intervention
7 août 2018

Ca c'est un petit module qui me sert pour la mise au point;


j'ai deux fichiers .rtf l'un que j'ouvre avec ouvrir et l'autre avec ajouter.


Il y a la trace de quelques uns de mes essais...


type
  TForm1 = class(TForm)
    RichEdit1: TRichEdit;
    Sauver: TButton;
    SaveDialog1: TSaveDialog;
    OpenDialog1: TOpenDialog;
    Ouvrir: TButton;
    RichEdit2: TRichEdit;
    Ajouter: TButton;
    procedure SauverClick(Sender: TObject);
    procedure OuvrirClick(Sender: TObject);
    procedure AjouterClick(Sender: TObject);
  private
    { Déclarations privées }
  public
    { Déclarations publiques }
  end;


var
  Form1: TForm1;


implementation


{$R *.dfm}


procedure TForm1.AjouterClick(Sender: TObject);
Var I: integer;
copier: TStrings;
begin
    OpenDialog1.Execute;
  if OpenDialog1.FileName<>'' then
  RichEdit2.Lines.LoadFromFile(OpenDialog1.FileName);
  //RichEdit1.Lines:= RichEdit1.lines+RichEdit2.Lines;
  RichEdit2.SelStart:=0;
  RichEdit2.SelLength:= RichEdit2.GetTextLen;
  //copier:= RicheDit2.Lines;
  RichEdit1.SelStart:= RichEdit1.GetTextLen;
  RichEdit1.seltext:= richEdit2.seltext;
  //for I := 0 to RichEdit2.Lines.Count - 1 do
    //RichEdit1.lines.Append(RichEdit2.Lines[I]);
    //richEdit1.PasteFromClipboard;
end;


procedure TForm1.OuvrirClick(Sender: TObject);
begin
  OpenDialog1.Execute;
  if OpenDialog1.FileName<>'' then
  RichEdit1.Lines.LoadFromFile(OpenDialog1.FileName);
  //RichEdit1.Lines.LoadFromStream();
end;


procedure TForm1.SauverClick(Sender: TObject);
VAR AStream: TStream;
      MemStrm  : TMemoryStream;
begin
  SaveDialog1.Execute;
  if SaveDialog1.FileName<>'' then
  RichEdit1.Lines.SaveToFile(SaveDialog1.FileName);
  //MemStrm  := TMemoryStream.Create;
  //RichEdit1.Lines.SaveToStream(MemStrm);


  //Astream:= TStream.Create;
  //RichEdit1.Lines.SaveToStream(Astream);
end;


 
Messages postés
121
Date d'inscription
jeudi 10 janvier 2002
Statut
Membre
Dernière intervention
7 août 2018

Je crois que je vais essayer cela:
Loader le nouveau texte à ajouter dans un RichEdit annexe dédié à cette manip.
balayer tous les caractères de ce second RichEdit en copiant leur Selattributes et en les ajoutant un par un au premier RichEdit pour enfin sauvegarder sous le format RTF...

Lourd, mais enfin c'est la bécane qui le fera, pas moi.
Je pense qu'ainsi cela devrait marcher.

je voulais savoir s'il y avait une méhode que je n'avais pas trouvée. Apparemment il n'y en a pas. Pourtant les fils de discussion, comme ici sont devenus des objets courants!

merci
Messages postés
121
Date d'inscription
jeudi 10 janvier 2002
Statut
Membre
Dernière intervention
7 août 2018

Bon effectivement le code suivant fait (presque!) ce que je cherche à faire:


  J:= RichEdit1.GetTextLen;
  for I := 0 to RichEdit2.GetTextLen - 1 do
  begin
    RichEdit2.SelStart:=I;
    RichEdit2.SelLength:=1;
    RichEdit1.SelStart:=J+I;
    RichEdit1.SelAttributes:=RichEdit2.SelAttributes;
    RichEdit1.SelText:=RichEdit2.SelText;
  end;

Sauf que...


Cela ne traite pas les sauts de ligne!
Cela met donc tout bout à bout...
Courage!
Messages postés
121
Date d'inscription
jeudi 10 janvier 2002
Statut
Membre
Dernière intervention
7 août 2018

Finalement pour recopier les saut de ligne on arrive à


  J:= RichEdit1.GetTextLen;
  I:=0;
  For K:= 0 to RichEdit2.Lines.Count-1 do
  BEGIN
    cOPIER:= RichEdit2.Lines[K];
    for L := 0 to length(copier)+1 do //deux octets pour le CR et le LF
    begin
      RichEdit2.SelStart:=I;
      RichEdit2.SelLength:=1;
      RichEdit1.SelStart:=J+I;
      RichEdit1.SelAttributes:=RichEdit2.SelAttributes;
      RichEdit1.SelText:=RichEdit2.SelText;
      Inc(I);
    end;
    RichEdit1.Lines.Append('');
  END;

On pourrait faire plus sophistiqué et peut-être plus rapide en ne reprogrammant le selattributes que lorsqu'il change et copier des seltext par bloc homogène...
Messages postés
2527
Date d'inscription
jeudi 15 janvier 2004
Statut
Membre
Dernière intervention
16 octobre 2019
13
Salut,

... Et en sauvegardant tes RichEdit avec WriteComponentResFile ...

(cela sauvegarderait tes compos et leur contenu, je crois... )

Pour charger : ReadComponentResFile
Messages postés
2527
Date d'inscription
jeudi 15 janvier 2004
Statut
Membre
Dernière intervention
16 octobre 2019
13
J'oubliais...

@ Géraaaaarrrrrrd !
   

Le réglement est valable pour tous :
- que ton age affiché ne te dispense pas des traditionnels "bonjour" et "merci", STP.

Merci