Некорректная работа Richview

mchmch Киров
отредактировано 11:27 Раздел: FastReport 4.0
Пытаюсь загрузить в RichView содержимое в rtf-формате.
var Memo1:TfrxRichView;
...
Memo1:=dbApplication.ReportEngine.FindObject('Shtamp') as TfrxRichView;
Memo1.RichEdit.Text:=shtamp.Text;

shtamp.Text содержит:
{\rtf1\ansi\ansicpg1251\deff0\deflang1049{\fonttbl{\f0\fnil\fcharset0 Tahoma;}{\f1\fnil\fcharset204 Tahoma;}{\f2\fnil Tahoma;}}
{\colortbl;\red0\green0\blue0;}
\viewkind4\uc1\pard\cf1\lang1033\f0\fs16 hjbhbh\lang1049\f1  \'ee\'f0\'eb\f2\par
}

До перехода на D2010 и с предыдущими версиями FR всё работало нормально, т.е. отображался бы корректный текст в RichView:
написал:
hjbhbh орл

Теперь же отображается то, что содержится в переменной, т.е.
{\rtf1\ansi\ansicpg1251\deff0\deflang1049{\fonttbl{\f0\fnil\fcharset0 Tahoma;}{\f1\fnil\fcharset204 Tahoma;}{\f2\fnil Tahoma;}}
{\colortbl;\red0\green0\blue0;}
\viewkind4\uc1\pard\cf1\lang1033\f0\fs16 hjbhbh\lang1049\f1  \'ee\'f0\'eb\f2\par
}

Как правильно загрузить в RichView содержимое в rtf-формате?

Комментарии

  • gpigpi
    отредактировано 11:27
    Попробуйте
    Memo1.RichEdit.Lines:=shtamp.Lines;
    или перебросьте содержимое Lines через TMemoryStream
  • mchmch Киров
    отредактировано 11:27
    shtamp.Lines - не существует, есть только Text:TAnsiString, содержащий текст в rtf-формате, который нужно корректно отобразить.

    Если присваивать значение Memo1.RichEdit.Lines.Text:=shtamp.Text; или Memo1.RichEdit.Lines.Add(shtamp.Text); то результат как и с Memo1.RichEdit.Text, т.е. выдаёт исходный rtf-текст.

    Если присваивать значение используя TMemoryStream "Memo1.LoadFromStream(Stream);", то выдаёт ошибку "Invalid file format", ссылаясь на "raise TfrxInvalidXMLException.Create('Invalid file format');"

    Если присваивать значение используя TMemoryStream "Memo1.RichEdit.Lines.LoadFromStream(Stream);", то пусто и ошибки нет.

    При этом исходный текст rtf верный, если сохранить через блокнот и открыть в MsWord - всё отображается корректно.
  • gpigpi
    отредактировано 11:27
    Выложите простой тестовый проект, демонстрирующий проблему
  • mchmch Киров
    отредактировано 11:27
    Прикладываю пример.
  • gpigpi
    отредактировано 11:27
    procedure TForm1.Button1Click(Sender: TObject);
    var Rich1: TfrxRichView;
        Stream:  TMemoryStream;
    begin
      Stream := TMemoryStream.Create;
      RichEdit1.Lines.SaveToStream(Stream);
      if ReportEngine.LoadFromFile(extractFilePath(paramSTR(0))+'111.fr3',true) then
        begin
          Rich1:=ReportEngine.FindObject('shtamp') as TfrxRichView;
          Stream.Position := 0;
          Rich1.RichEdit.Lines.LoadFromStream(Stream);
       end;
       ReportEngine.DesignReport;
    end;
    

Оставить комментарий

Многофункциональный текстовый редактор. Чтобы отредактировать стиль параграфа, нажмите TAB, чтобы перейти к меню абзаца. Там вы можете выбрать стиль. По умолчанию не выбран ни один стиль. Когда вы выберете текст, появится встроенное меню форматирования. Нажмите TAB, чтобы войти в него. Некоторые элементы, такие как многофункциональные вставки ссылок, картинок, индикаторов загрузки и сообщений об ошибок могут быть вставлены в редактор. Вы можете перемещаться по ним, используя стрелки внутри редактора и удалять с помощью клавиш delete или backspace.