вставка ртф текста в ричедит

vital

Больной Компом Детектед
29.01.2006
2 432
33
#1
вобсчем, нужно вставить в TRichedit текст, простое Lines.add выдает ошибку. Ошибку скорее всего потому, что вставляемый текст имеет примрно следующий формат
Код:
text:='самый обычный текст длинна которого неизвестна'+'текст отртфвенный длинна которого неизвестна';
вот.
Что бы тут сделать..
 

vital

Больной Компом Детектед
29.01.2006
2 432
33
#3
ну..
Текст идет с сокета.
Отправляю примерно так
Код:
function GetRTFText(Arich: trichedit): string;
var
ss: TStringStream;
emptystr: string;
begin
emptystr := '';
ss := TStringStream.Create(emptystr);
try
ARich.PlainText := False;
ARich.Lines.SaveToStream(ss);
Result := ss.DataString;
finally
ss.Free
end;
end;
-----------------------
Serversocket.sendtext('некий текст в опциях введенный юзверем: '+GetRtfText(richedit2); //или ClientSocket...
на приеме простое richedit2.lines.add(socket.receivetext); Выдает -Line Insertion Error и вставляет весь текст как он есть..{rtf\ansi\...

Я пробовал удалять 1 и последнюю скобки в от'RTF'венном тексте при посылке но толку не было..

пс.
ещё там сообщение смотриться на предмет неких специальных команд, (Де)шифруется, но это врядли на что либо влияет..
 
Z

zubr

#4
Правильно, richedit2.lines.add(socket.receivetext); вставит весь текст как он есть. Чтобы у тебя в RichEdit появился отформатированный текст, сохрани socket.receivetext в файл или поток, а затем загружай в RichEdit2.Lines.LoadFromFile или RichEdit2.Lines.LoadFromStream
 

vital

Больной Компом Детектед
29.01.2006
2 432
33
#5
Попробовал в TStringStream..
Вместо текста вышли всякие кракозябры.

T:TStringStream;
msg:=socket.receivetext;
{операции с msg}
t:=TStringStream.create(msg);
richedit.loadfromstream(t);
t.free;
 

vital

Больной Компом Детектед
29.01.2006
2 432
33
#6
в общем, с потока вставляется прекрасный, все тот же RTF..
к тому же мне надо, что текст который там был до того, тоже оставался.
 
Z

zubr

#7
Текст, который ты получаешь в socket.receivetext, пробовал сохранять в rtf-файл и затем запускать в Worde?
 

vital

Больной Компом Детектед
29.01.2006
2 432
33
#8
хм..сейчас попробую..

результат-
Some text: {\rtf1\ansi\ansicpg1251\deff0\deflang1049{\fonttbl{\f0\fswiss\fcharset0 Tahoma;}{\f1\fnil MS Sans Serif;}}
\viewkind4\uc1\pard\lang1033\f0\fs16 test\lang1049\f1
\par
\par }
вот такой вот test.rtf
 
Z

zubr

#9
Попробуй сравни текст до отправки (просматривай его в блокноте, а не в Worde) и после получения. Судя по всему у тебя какая то часть текста при пересылке теряется.
 

vital

Больной Компом Детектед
29.01.2006
2 432
33
#10
Просматривал я текст в Wordpad'e..
Текст идентичен.Перед отправкой я его ещё вывожу в специальном месте, тоже и на приёме.
 
Z
#11
Ну тогда не знаю..., все должно работать. Вот процедура отображения форматированного текста в ричедите с сохранением, предыдущего текста:
Код:
procedure RtfToRichEdit(richedit:TRichEdit; txtfromsocket:string);
var
str:TStringStream;
s:string;
begin
str:=TStringStream.Create(txtfromsocket);
try
s:=richedit.Lines.Text;
richedit.Lines.LoadFromStream(str);
richedit.Lines.Insert(0, s);
finally
str.Free;
end;
end;
 

vital

Больной Компом Детектед
29.01.2006
2 432
33
#12
<kznm! все тот же ртф..vfnm tuj pf yjeu!


и почему у меня такой талант нарываться на персональные грабли..
 
Z
#13
А наверно потому, что у тебя где то RichEdit1.PlainText:=True;, если так, поставь в False.
 

vital

Больной Компом Детектед
29.01.2006
2 432
33
#14
мля, я наверно похож идиота больше чем думаю..
и в design-time и программно я выставил Plaintext:=false. с самого начала.