Компонент Richmemo

Модератор: Модераторы

kazalex
постоялец
Сообщения: 296
Зарегистрирован: 01.06.2012 14:54:10

Сообщение kazalex »

скалогрыз писал(а):Нужен тест!

richmemo_rtf_editor_xpsp3.png

В редакторе компонента всё хорошо, но после нажатия на OK текст в компонент не попадает.
скалогрыз
долгожитель
Сообщения: 1804
Зарегистрирован: 03.09.2008 02:36:48

Сообщение скалогрыз »

это потому что редактор использует "ручную" запись RTF. а она "ручная" запись таблицы не признаёт... к слову о прямых руках...
kazalex
постоялец
Сообщения: 296
Зарегистрирован: 01.06.2012 14:54:10

Сообщение kazalex »

RichMemo на W2K:
richmemo_w2k.png

А вот на Windows 98 RichEdit и правда не умеет таблицы :)
скалогрыз
долгожитель
Сообщения: 1804
Зарегистрирован: 03.09.2008 02:36:48

Сообщение скалогрыз »

kazalex писал(а):А вот на Windows 98 RichEdit и правда не умеет таблицы

по-моему он там может уметь, но только если распоследний IE установить.... то ли 6й то ли 7й.
но т.к. LCL от поддержки Win9x отказалася, то и RichMemo поддерживать 9x не стремится. Только за деньгу.
woodhead
новенький
Сообщения: 21
Зарегистрирован: 24.12.2014 11:23:20

Сообщение woodhead »

Вот под Windows XP. Вроде всё корректно работает. На форме компонент RichMemo. Doc1.rtf - исходный файл RTF, открытый в WordPad, Doc2.rtf - сохранённый из RichMemo. Как видим, отображение идентичное.
RichMemo и RTF в Windows XP SP3
RichMemo и RTF в Windows XP SP3
kazalex
постоялец
Сообщения: 296
Зарегистрирован: 01.06.2012 14:54:10

Сообщение kazalex »

скалогрыз писал(а):но т.к. LCL от поддержки Win9x отказалася

Ну вот у меня LCL-тестилка и не запустилась, проверял WordPad'ом.
pupsik
энтузиаст
Сообщения: 1154
Зарегистрирован: 20.08.2014 16:20:13
Контактная информация:

Сообщение pupsik »

Кстати, когда запросы превышают возможности RichMemo, я всем рекомендую использовать Kmemo.

В принципе нормально отображает (в лине - жтк). Есть баги. Под виндой не смотрел.

п.с.
Уж сори но Richmemo - не отобразил.
Вложения
kmemo.png
скалогрыз
долгожитель
Сообщения: 1804
Зарегистрирован: 03.09.2008 02:36:48

Сообщение скалогрыз »

pupsik писал(а):Уж сори но Richmemo - не отобразил.

так и не должен, ибо линукс, а под него таблички грустно делать.
Имхо, Кmemo проще допилить
pupsik
энтузиаст
Сообщения: 1154
Зарегистрирован: 20.08.2014 16:20:13
Контактная информация:

Сообщение pupsik »

он не только табличку не потянул. А и то что слева.
Кстати: kmemo не втащил картинки из richmemo. :mrgreen:
AlexEr81
новенький
Сообщения: 17
Зарегистрирован: 24.01.2014 19:57:31

Сообщение AlexEr81 »

kmemo очень медленно работает. у меня в проекте в kmemo вставляются данные около 120 строк текста. по времени это около 3 сек. а если еще применять стили к различным частям текста, то еще больше времени займет. в richmemo в течении секунды это делается. но есть проблема с richmemo.
так вставляется текст cStr в текущую строку:

Код: Выделить всё

procedure addColorTextToRichEdit(var rep:TRichMemo;cStr:string;codeS:string;ColorS:TColor;SizeS:integer;StyleS:TFontStyles);
var p,ns,n:integer;
     FontT:TFONT;
begin
 n:=rep.SelStart-1;
 if codeS='ansi' then cStr:=wincptoutf8(cStr);
 rep.SelStart:=n;
 rep.SelText:=cStr;
 FontT:=TFONT.create;
 FontT.Height:=rep.Font.Height;
 FontT.Style:=StyleS;
 FontT.Name:=rep.Font.Name;
 FontT.size:=SizeS;
 FontT.Color:=ColorS;
 rep.SetTextAttributes(n,Utf8length(cStr),FontT);
 FontT.Free;
end;


так добавляется строка с текстом cStr:

Код: Выделить всё

procedure appendColorTextToRichEdit(var rep:TRichMemo;cStr:string;codeS:string;ColorS:TColor;SizeS:integer;StyleS:TFontStyles);
var p:integer;
       FontT:TFONT;
begin
   p:=rep.SelStart;
   if codeS='ansi' then cStr:=wincptoutf8(cStr);
   rep.Lines.add(cStr);
   FontT:=TFONT.create;
   FontT.Height:=rep.Font.Height;
   FontT.Style:=StyleS;
   FontT.Name:=rep.Font.Name;
   FontT.size:=SizeS;
   FontT.Color:=ColorS;
   rep.SetTextAttributes(p,Utf8length((cStr)),FontT);
   FontT.Free;
end;


appendColorTextToRichEdit всегда работает правильно, а addColorTextToRichEdit применяет "SetTextAttributes" не к тексту cStr а смещается если до этого был вставлен текст с помощью appendColorTextToRichEdit .
т.е. если в appendColorTextToRichEdit убрать SetTextAttributes то addColorTextToRichEdit всегда срабатывает правильно. как мне победить эту ситуацию?

Добавлено спустя 2 часа 18 минут 33 секунды:
пока выход вижу один - считать самому, сколько добавил символов c:=c+utf8length(cstr)
и передавать в SetTextAttributes(c,....)

Добавлено спустя 27 минут 55 секунд:
всё разобрался:
надо было
n:=rep.utf8length(rep.text)-1;
p:=rep.utf8length(rep.text);
pupsik
энтузиаст
Сообщения: 1154
Зарегистрирован: 20.08.2014 16:20:13
Контактная информация:

Сообщение pupsik »

kmemo очень медленно работает
только недавно адаптировали. Возможно будут правки. Да и самому можно подправить.
Есть еще lzrichedit. Уж не знаю как он к таблице "отнесётся".
скалогрыз
долгожитель
Сообщения: 1804
Зарегистрирован: 03.09.2008 02:36:48

Сообщение скалогрыз »

pupsik писал(а):Есть еще lzrichedit. Уж не знаю как он к таблице "отнесётся".

точно так же, потому что тот же RICHEDIT виндовский.

Добавлено спустя 17 минут 59 секунд:
AlexEr81 писал(а):appendColorTextToRichEdit всегда работает правильно, а addColorTextToRichEdit

а зачем две разные процедуры, которые делают одно и то же? или append только в конец текста добавляет?
AlexEr81
новенький
Сообщения: 17
Зарегистрирован: 24.01.2014 19:57:31

Сообщение AlexEr81 »

append добавляет новую строку, add дописывает текст в последнюю строку.
sn-102
новенький
Сообщения: 16
Зарегистрирован: 24.08.2016 10:02:13

Сообщение sn-102 »

2 скалогрыз:
Обнаружились неприятные моменты в RichMemo при обращении к функциям GetTextAttributes и GetParaAlignment - с отрисовкой происходят странные вещи. Сразу оговорюсь для избежания лишних вопросов - смысл в том, чтобы панель управления текстового редактора реагировала на изменение текста под курсором. Обе эти функции ставлю в события onMouseUp и onKeyUp, в результате чего:
1) Нельзя выделить текст влево, только вправо при подключении любой из функций.
2) GetParaAlignment зацикливает перерисовку текста при его выделении - сплошное мерцание.
3) При использовании GetTextAttributes остаются не стёртые палочки текстового курсора.

Решил пока временно тем, что засунул эти функции в таймер и в события воткнул активацию таймера. Криво но хотя бы работает. При этом артефакты в виде не стёртого курсора всё равно остаются.
ОС Win7, IDE v1.6.
скалогрыз
долгожитель
Сообщения: 1804
Зарегистрирован: 03.09.2008 02:36:48

Сообщение скалогрыз »

Пример бы кода?!
Eсть мнение, что проблема в использовании старой версии RichMemo - какая ревизия?

Ещё я бы рекомендовал вместо OnMouseUp, OnKeyUp использовать OnSelectionChange.

Добавлено спустя 1 минуту 12 секунд:
sn-102 писал(а):Решил пока временно тем, что засунул эти функции в таймер и в события воткнул активацию таймера. Криво но хотя бы работает. При этом артефакты в виде не стёртого курсора всё равно остаются.

Вот это, конечно, очень неприятно и нужно компонент поправить.
Ответить