• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

    На последнюю неделю приходится экзамен, где нужно будет показать свои навыки, взломав ряд уязвимых учебных сайтов, и добыть флаги. Успешно сдавшие экзамен получат сертификат.

    Запись на курс до 25 апреля. Получить промодоступ ...

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

  • Автор темы vital
  • Дата начала
V

vital

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

vital

ну..
Текст идет с сокета.
Отправляю примерно так
Код:
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

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

vital

Попробовал в TStringStream..
Вместо текста вышли всякие кракозябры.

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

vital

в общем, с потока вставляется прекрасный, все тот же RTF..
к тому же мне надо, что текст который там был до того, тоже оставался.
 
Z

zubr

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

vital

хм..сейчас попробую..

результат-
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

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

vital

Просматривал я текст в Wordpad'e..
Текст идентичен.Перед отправкой я его ещё вывожу в специальном месте, тоже и на приёме.
 
Z

zubr

Ну тогда не знаю..., все должно работать. Вот процедура отображения форматированного текста в ричедите с сохранением, предыдущего текста:
Код:
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;
 
V

vital

<kznm! все тот же ртф..vfnm tuj pf yjeu!


и почему у меня такой талант нарываться на персональные грабли..
 
Z

zubr

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

vital

мля, я наверно похож идиота больше чем думаю..
и в design-time и программно я выставил Plaintext:=false. с самого начала.
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!