|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
||||
|
||||
Проблема RxRichEdit в Delphi 2010
Установил себе D2010 и столкнулся просто с непреодолимой проблемой.
Имеется D2006 и D2010 с установленными компонентами ZipForge, RxLib. Есть архив zip внутри которого есть файл f_name содержимое которого есть rtf-файл. Извлекаю файл в Stream Код:
Var S:TStringStream; Begin S := TStringStream.Create(''); ZipForge1.FileName := NameZipFile; ZipForge1.OpenArchive(fmOpenReadWrite); ZipForge1.ExtractToStream(f_name,s); ... Тут все нормально. А далее идет волшебство, Нужно в RxRichEdit загрузить содержимое. Делаю так: Код:
RxRichEdit1.Text:=s.datastring; в D2006 - Документ корректно загрузился и отобразился со всем форматированием, объектами, картинками и прочим. А вот D2010 Загружается как обычный PlainText, - теги форматирования и прочие радости rtf формата. А если сначала StringStream сохранить в файл и после в RxRichEdit загрузить через LoadFromFile, то открывается нормально. Почему так? и как Сделать, что бы StringStream загружался в RxRichEdit как rtf-файл в D2010? Использовать Именно StringStream - не принципиально, главное Stream, т.е. без промежуточного сохранения в файл. Попытка сделать через Код:
RxRichEdit1.Lines.LoadFromStream(s); ничего не загружает - чистый белый лист. А использование Код:
RxRichEdit1.Lines.Text:=s.datastring; Програмистами не рождаются, ими становятся! |
#2
|
|||
|
|||
Попробуй в D2010 использовать TMemoryStream вместо TStringStream. Вспоминаем, что D2010 юникодная, соответсвенно, String там по дефолту есть UnicodeString со всеми вытекающими.
|
#3
|
||||
|
||||
Я ожидал такого ответа. У TMemoryStream нет понятия .DataString, следовательно как строки передать в RxRichEdit? Загрузка через LoadFromStream - Не помогает. Ничего не загружается вообще. И проблема вовсе даже не в Юникоде, т.к. PlainText отображается нормально.
В качестве примера - вот исходник и ехе'шки собранные на D2006 и D2010. Попробуйте загрузить rtf файл. test_rxrichedit.zip Код:
procedure TForm1.Button1Click(Sender: TObject); var s:TstringStream; ms:TMemoryStream; I:Integer; SB:Byte; begin if opendialog1.Execute then begin S:=TStringStream.Create(''); ms:=TMemoryStream.Create; MS.LoadFromFile(opendialog1.FileName); for I := 0 to MS.Size do begin MS.Position:=I; MS.Read(SB,1); S.Write(SB,1); end; RxRichEdit1.Text:=S.DataString; S.Free; MS.Free; end; end; Думал может проблема в компоненте, но нет, они абсолютно идентичны. Програмистами не рождаются, ими становятся! Последний раз редактировалось SCrat.ORS, 07.10.2013 в 17:04. |