Delphi World - Загрузка нескольких RTF файлов в RichEdit
Delphi World - это проект, являющийся сборником статей и малодокументированных возможностей  по программированию в среде Delphi. Здесь вы найдёте работы по следующим категориям: delphi, delfi, borland, bds, дельфи, делфи, дэльфи, дэлфи, programming, example, программирование, исходные коды, code, исходники, source, sources, сорцы, сорсы, soft, programs, программы, and, how, delphiworld, базы данных, графика, игры, интернет, сети, компоненты, классы, мультимедиа, ос, железо, программа, интерфейс, рабочий стол, синтаксис, технологии, файловая система...
Загрузка нескольких 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;
Проект Delphi World © Выпуск 2002 - 2017
Автор проекта: Эксклюзивные курсы программирования