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

Previous  Top  Next

    
 

Автор: McAndrews

Code:

 

//Кидаем на форму 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;

 

©Drkb::01026

http://delphiworld.narod.ru/

DelphiWorld 6.0