cs_Gerard
Messages postés121Date d'inscriptionjeudi 10 janvier 2002StatutMembreDernière intervention 7 août 2018
-
20 mai 2009 à 14:52
Caribensila
Messages postés2527Date d'inscriptionjeudi 15 janvier 2004StatutMembreDernière intervention16 octobre 2019
-
20 mai 2009 à 21:50
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?
JulioDelphi
Messages postés2226Date d'inscriptiondimanche 5 octobre 2003StatutMembreDernière intervention18 novembre 201014 20 mai 2009 à 17:09
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.
cs_Gerard
Messages postés121Date d'inscriptionjeudi 10 janvier 2002StatutMembreDernière intervention 7 août 2018 20 mai 2009 à 15:34
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"!...
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);
cs_Gerard
Messages postés121Date d'inscriptionjeudi 10 janvier 2002StatutMembreDernière intervention 7 août 2018 20 mai 2009 à 17:54
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!
cs_Gerard
Messages postés121Date d'inscriptionjeudi 10 janvier 2002StatutMembreDernière intervention 7 août 2018 20 mai 2009 à 19:11
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!
cs_Gerard
Messages postés121Date d'inscriptionjeudi 10 janvier 2002StatutMembreDernière intervention 7 août 2018 20 mai 2009 à 19:49
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...