Страница 4 из 5

Re: Компонент Richmemo

СообщениеДобавлено: 18.04.2016 20:01:44
kazalex
скалогрыз писал(а):Нужен тест!

richmemo_rtf_editor_xpsp3.png

В редакторе компонента всё хорошо, но после нажатия на OK текст в компонент не попадает.

Re: Компонент Richmemo

СообщениеДобавлено: 18.04.2016 21:01:47
скалогрыз
это потому что редактор использует "ручную" запись RTF. а она "ручная" запись таблицы не признаёт... к слову о прямых руках...

Re: Компонент Richmemo

СообщениеДобавлено: 18.04.2016 21:37:00
kazalex
RichMemo на W2K:
richmemo_w2k.png

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

Re: Компонент Richmemo

СообщениеДобавлено: 18.04.2016 21:48:45
скалогрыз
kazalex писал(а):А вот на Windows 98 RichEdit и правда не умеет таблицы

по-моему он там может уметь, но только если распоследний IE установить.... то ли 6й то ли 7й.
но т.к. LCL от поддержки Win9x отказалася, то и RichMemo поддерживать 9x не стремится. Только за деньгу.

Re: Компонент Richmemo

СообщениеДобавлено: 18.04.2016 21:54:29
woodhead
Вот под Windows XP. Вроде всё корректно работает. На форме компонент RichMemo. Doc1.rtf - исходный файл RTF, открытый в WordPad, Doc2.rtf - сохранённый из RichMemo. Как видим, отображение идентичное.
RichMemoXP.jpg
RichMemo и RTF в Windows XP SP3

Re: Компонент Richmemo

СообщениеДобавлено: 18.04.2016 21:55:51
kazalex
скалогрыз писал(а):но т.к. LCL от поддержки Win9x отказалася

Ну вот у меня LCL-тестилка и не запустилась, проверял WordPad'ом.

Re: Компонент Richmemo

СообщениеДобавлено: 19.04.2016 00:44:08
pupsik
Кстати, когда запросы превышают возможности RichMemo, я всем рекомендую использовать Kmemo.

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

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

Re: Компонент Richmemo

СообщениеДобавлено: 19.04.2016 01:09:35
скалогрыз
pupsik писал(а):Уж сори но Richmemo - не отобразил.

так и не должен, ибо линукс, а под него таблички грустно делать.
Имхо, Кmemo проще допилить

Re: Компонент Richmemo

СообщениеДобавлено: 19.04.2016 03:03:51
pupsik
он не только табличку не потянул. А и то что слева.
Кстати: kmemo не втащил картинки из richmemo. :mrgreen:

Re: Компонент Richmemo

СообщениеДобавлено: 19.04.2016 12:48:05
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);

Re: Компонент Richmemo

СообщениеДобавлено: 19.04.2016 16:01:03
pupsik
kmemo очень медленно работает
только недавно адаптировали. Возможно будут правки. Да и самому можно подправить.
Есть еще lzrichedit. Уж не знаю как он к таблице "отнесётся".

Re: Компонент Richmemo

СообщениеДобавлено: 19.04.2016 16:10:19
скалогрыз
pupsik писал(а):Есть еще lzrichedit. Уж не знаю как он к таблице "отнесётся".

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

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

а зачем две разные процедуры, которые делают одно и то же? или append только в конец текста добавляет?

Re: Компонент Richmemo

СообщениеДобавлено: 19.04.2016 16:45:48
AlexEr81
append добавляет новую строку, add дописывает текст в последнюю строку.

Re: Компонент Richmemo

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

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

Re: Компонент Richmemo

СообщениеДобавлено: 01.09.2016 22:58:30
скалогрыз
Пример бы кода?!
Eсть мнение, что проблема в использовании старой версии RichMemo - какая ревизия?

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

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

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