freepascal.ru • Просмотр темы - Компонент Richmemo
 

Компонент Richmemo

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

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

Сообщение kazalex » 18.04.2016 20:01:44

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

richmemo_rtf_editor_xpsp3.png

В редакторе компонента всё хорошо, но после нажатия на OK текст в компонент не попадает.
kazalex
постоялец
 
Сообщения: 296
Зарегистрирован: 01.06.2012 14:54:10

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

Сообщение скалогрыз » 18.04.2016 21:01:47

это потому что редактор использует "ручную" запись RTF. а она "ручная" запись таблицы не признаёт... к слову о прямых руках...
скалогрыз
долгожитель
 
Сообщения: 1660
Зарегистрирован: 03.09.2008 02:36:48

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

Сообщение kazalex » 18.04.2016 21:37:00

RichMemo на W2K:
richmemo_w2k.png

А вот на Windows 98 RichEdit и правда не умеет таблицы :)
kazalex
постоялец
 
Сообщения: 296
Зарегистрирован: 01.06.2012 14:54:10

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

Сообщение скалогрыз » 18.04.2016 21:48:45

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

по-моему он там может уметь, но только если распоследний IE установить.... то ли 6й то ли 7й.
но т.к. LCL от поддержки Win9x отказалася, то и RichMemo поддерживать 9x не стремится. Только за деньгу.
скалогрыз
долгожитель
 
Сообщения: 1660
Зарегистрирован: 03.09.2008 02:36:48

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

Сообщение woodhead » 18.04.2016 21:54:29

Вот под Windows XP. Вроде всё корректно работает. На форме компонент RichMemo. Doc1.rtf - исходный файл RTF, открытый в WordPad, Doc2.rtf - сохранённый из RichMemo. Как видим, отображение идентичное.
RichMemoXP.jpg
RichMemo и RTF в Windows XP SP3
woodhead
новенький
 
Сообщения: 21
Зарегистрирован: 24.12.2014 12:23:20

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

Сообщение kazalex » 18.04.2016 21:55:51

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

Ну вот у меня LCL-тестилка и не запустилась, проверял WordPad'ом.
kazalex
постоялец
 
Сообщения: 296
Зарегистрирован: 01.06.2012 14:54:10

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

Сообщение pupsik » 19.04.2016 00:44:08

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

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

п.с.
Уж сори но Richmemo - не отобразил.
Вложения
kmemo.png
pupsik
энтузиаст
 
Сообщения: 1116
Зарегистрирован: 20.08.2014 16:20:13

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

Сообщение скалогрыз » 19.04.2016 01:09:35

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

так и не должен, ибо линукс, а под него таблички грустно делать.
Имхо, Кmemo проще допилить
скалогрыз
долгожитель
 
Сообщения: 1660
Зарегистрирован: 03.09.2008 02:36:48

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

Сообщение pupsik » 19.04.2016 03:03:51

он не только табличку не потянул. А и то что слева.
Кстати: kmemo не втащил картинки из richmemo. :mrgreen:
pupsik
энтузиаст
 
Сообщения: 1116
Зарегистрирован: 20.08.2014 16:20:13

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

Сообщение AlexEr81 » 19.04.2016 12:48:05

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);
AlexEr81
новенький
 
Сообщения: 14
Зарегистрирован: 24.01.2014 19:57:31

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

Сообщение pupsik » 19.04.2016 16:01:03

kmemo очень медленно работает
только недавно адаптировали. Возможно будут правки. Да и самому можно подправить.
Есть еще lzrichedit. Уж не знаю как он к таблице "отнесётся".
pupsik
энтузиаст
 
Сообщения: 1116
Зарегистрирован: 20.08.2014 16:20:13

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

Сообщение скалогрыз » 19.04.2016 16:10:19

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

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

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

а зачем две разные процедуры, которые делают одно и то же? или append только в конец текста добавляет?
скалогрыз
долгожитель
 
Сообщения: 1660
Зарегистрирован: 03.09.2008 02:36:48

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

Сообщение AlexEr81 » 19.04.2016 16:45:48

append добавляет новую строку, add дописывает текст в последнюю строку.
AlexEr81
новенький
 
Сообщения: 14
Зарегистрирован: 24.01.2014 19:57:31

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

Сообщение sn-102 » 01.09.2016 22:33:39

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

Решил пока временно тем, что засунул эти функции в таймер и в события воткнул активацию таймера. Криво но хотя бы работает. При этом артефакты в виде не стёртого курсора всё равно остаются.
ОС Win7, IDE v1.6.
sn-102
новенький
 
Сообщения: 16
Зарегистрирован: 24.08.2016 11:02:13

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

Сообщение скалогрыз » 01.09.2016 22:58:30

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

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

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

Вот это, конечно, очень неприятно и нужно компонент поправить.
скалогрыз
долгожитель
 
Сообщения: 1660
Зарегистрирован: 03.09.2008 02:36:48

Пред.След.

Вернуться в Компоненты

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1

Рейтинг@Mail.ru