Sources
Delphi Russian Knowledge Base
DRKB - это самая большая и удобная в использовании база знаний по Дельфи в рунете, составленная Виталием Невзоровым

Загрузка нескольких RTF-файлов в TRichEdit

01.01.2007
Автор: McAndrews

 
//Кидаем на форму RichEdit1, Button1, OpenDialog1
//и по клику кнопки создаём следующую процедуру:
procedure TForm1
.Button1Click(Sender: TObject);
var
  i
, nFiles: integer;
 
FileNames, UnitedText, Separator, Tmp: string;
 
TextStream: TStringStream;
begin
 
TextStream := TStringStream.Create('');
 
Separator := '\par \par \par '; // это разеделитель между выводимыми
 
// файлами, в данном случае - 3 параграфа
 
UnitedText := '';
 
  OpenDialog1
.Options := OpenDialog1.Options
   
// что бы можно было выбрать несколько
 
+ [ofAllowMultiSelect]; // файлов
 
  RichEdit1
.MaxLength := $7FFFFFF0; // предусмотрительно увеличиваем максимальный
 
// объём загружаемых данных в RichEdit1
 
 
try // а вдруг что..
 
   
if OpenDialog1.Execute then
   
begin
      nFiles
:= OpenDialog1.Files.count - 1;
     
for i := 0 to nFiles do
     
begin
 
       
FileNames := OpenDialog1.Files.Strings[i];
        RichEdit1
.Lines.LoadFromFile(FileNames);
       
// открываем каждый файл поочереди
       
// в RichEdit1
        RichEdit1
.Lines.SaveToStream(TextStream);
       
// и записываем данные уже от туда в
       
// поток TextStream,
       
Tmp := TextStream.DataString; // а из потока во временную
       
// переменную Tmp типа String,
 
       
TextStream.Position := 0; // ставим указатель в потоке на 0,
 
       
if i = 0 then // проверяем - является ли данный
         
Tmp := copy(Tmp, 0, length(Tmp) - 5) // файл первый, последним, или
       
else if i = nFiles then // или между ними, в зависимости
         
Tmp := Separator + copy(Tmp, 2, length(Tmp))
           
// от этого удаляем управляющие
       
else // символы начала или окончания
         
Tmp := Separator + copy(Tmp, 2, length(Tmp) - 5);
           
//  RTF-файла и всталяем разделитель.
       
// дело в том, что каждый RTF-файл
       
// начинаетcz c символа '{' и заканчивается '}'.
       
UnitedText := UnitedText + Tmp; // записываем всё в переменную UnitedText
     
end;
 
     
TextStream.WriteString(UnitedText);
     
// помещаем уже объеденённый текст в поток
 
     
TextStream.Position := 0; // ставим указатель на 0
      RichEdit1
.Lines.LoadFromStream(TextStream);
     
// и записываем потом в RichEdit1
   
end;
 
finally
   
TextStream.Free;
 
end;
end;

https://delphiworld.narod.ru/

DelphiWorld 6.0