mxn |
Отправлено: 12.01.2006, 10:02 |
|
Ученик-кочегар
Группа: Участник
Сообщений: 12
|
Уважаемые ГУРУ!!! ПОМОГИТЕ!!!
Проблема такова: есть форма, на ней RxRichEdit_1 и RxRichEdit_2. Надо скопировать текст из RxRichEdit_2 в RxRichEdit_1 С СОХРАНЕНИЕМ ФОРМАТИРОВАНИЯ и таким образом, что б в RxRichEdit_1 текст ДОБАВИЛСЯ в конец уже существующего в нем ФОРМАТИРОВАННОГО текста!!! А так же надо что б в RxRichEdit_1 можно было ДОБАВИТЬ форматированный текст из полученного со стороны TMemoryStream.
Решение есть, но оно ужасно... Я копирую текст из RxRichEdit_2 в буфер обмена и вставляю в RxRichEdit_1 из буфера обмена. Форматирование при этом сохраняется. А как засунуть полученный TMemoryStream в буфер обмена в виде RTF я не знаю, поэтому приделал RxRichEdit_3 (Visible = false) и делаю LoadFromStream в него, оттуда в буфер обмена и в RxRichEdit_1. Но это же УЖАС! Про оптимальность я молчу, конечно же... но даже пользовательские данные теряются в буфере обмена (если таковые там есть) + очень не желательно что б вся инфа оседала в прогах-следилках за буфером обмена...
ЛЮДИ, — сутки сидел, ночь не спал — ПОМОГИТЕ!!!!!!!!!!! Может кто-то уже решал подобную задачу человеческим способом!?!?!?!?!?!?!? |
|
mxn |
Отправлено: 12.01.2006, 16:49 |
|
Ученик-кочегар
Группа: Участник
Сообщений: 12
|
Битва продолжалась... :-) Вот так работает. То есть текст переносится с сохранением форматирования. Таким же образом можно вставлять полученный откуда-то TStringStream :
void __fastcall TForm1::Button1Click(TObject *Sender)
{
String tmp;
TStringStream *R1_S = new TStringStream("");
TStringStream *R2_S = new TStringStream("");
RxRichEdit_1->Lines->SaveToStream(R1_S);
RxRichEdit_2->Lines->SaveToStream(R2_S);
tmp = R1_S->DataString;
R1_S->Position = 0;
// tmp.Delete(tmp.Length()-2, 2); // Не знаю как правильно
// tmp.Insert("par par par ", tmp.Length()); // Не знаю как правильно
tmp.Insert(R2_S->DataString, tmp.Length());
//ShowMessage(tmp); //Здесь можно увидеть объедененные строки в RTF
R1_S->WriteString(tmp);
R1_S->Position = 0;
RxRichEdit_1->Lines->LoadFromStream(R1_S);
delete R1_S;
delete R2_S;
НО! В двух стоках tmp.Delete и tmp.Insert надо что-то удалить и что-то добавить, согласно правилам RTF-формата. Только тогда будет настоящее объеденение. Сейчас RxRichEdit просто не показывает вторую часть...
Может кто знает что надо удалить/вставить в конец одного RTF, что б можно было прикрутить к нему второй ??? |
|
AVC |
Отправлено: 13.01.2006, 09:27 |
|
Ветеран
Группа: Модератор
Сообщений: 1583
|
QUOTE |
Может кто знает что надо удалить/вставить в конец одного RTF, что б можно было прикрутить к нему второй ???
|
Очень подозреваю, что эта операция будет работать не корректно, так как rtf желательно объединять разумно, но можно попробовать следующее: убираем фигурную скобку в конце первого rtf, убираем открывающую фигурную скобку и заголовок в начале второго rtf ({\rtf1), дописавем 2 в 1. По крайней мере быстрый тест в простом редакторе показал дееспособность полученного файла.
Варант 2 — поискать на msdn функцию, которая сама грамотно сливает два rtf. |
|
|