• 🔥 Бесплатный курс от Академии Кодебай: «Анализ защищенности веб-приложений»

    🛡 Научитесь находить и использовать уязвимости веб-приложений.
    🧠 Изучите SQLi, XSS, CSRF, IDOR и другие типовые атаки на практике.
    🧪 Погрузитесь в реальные лаборатории и взломайте свой первый сайт!
    🚀 Подходит новичкам — никаких сложных предварительных знаний не требуется.

    Доступ открыт прямо сейчас Записаться бесплатно

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

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

vital

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

пс.
ещё там сообщение смотриться на предмет неких специальных команд, (Де)шифруется, но это врядли на что либо влияет..
 
Правильно, richedit2.lines.add(socket.receivetext); вставит весь текст как он есть. Чтобы у тебя в RichEdit появился отформатированный текст, сохрани socket.receivetext в файл или поток, а затем загружай в RichEdit2.Lines.LoadFromFile или RichEdit2.Lines.LoadFromStream
 
Попробовал в TStringStream..
Вместо текста вышли всякие кракозябры.

T:TStringStream;
msg:=socket.receivetext;
{операции с msg}
t:=TStringStream.create(msg);
richedit.loadfromstream(t);
t.free;
 
в общем, с потока вставляется прекрасный, все тот же RTF..
к тому же мне надо, что текст который там был до того, тоже оставался.
 
Текст, который ты получаешь в socket.receivetext, пробовал сохранять в rtf-файл и затем запускать в Worde?
 
хм..сейчас попробую..

результат-
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
 
Попробуй сравни текст до отправки (просматривай его в блокноте, а не в Worde) и после получения. Судя по всему у тебя какая то часть текста при пересылке теряется.
 
Просматривал я текст в Wordpad'e..
Текст идентичен.Перед отправкой я его ещё вывожу в специальном месте, тоже и на приёме.
 
Ну тогда не знаю..., все должно работать. Вот процедура отображения форматированного текста в ричедите с сохранением, предыдущего текста:
Код:
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;
 
<kznm! все тот же ртф..vfnm tuj pf yjeu!


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

Взломай свой первый сервер и прокачай скилл — Начни игру на HackerLab