Загрузка нескольких RTF файлов в RichEdit
Автор: 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;
|