![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
||||
|
||||
|
Установил себе 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. |