Компонент Richmemo

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

sn-102
новенький
Сообщения: 16
Зарегистрирован: 24.08.2016 10:02:13

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

скалогрыз писал(а):Пример бы кода?!


Прошу прощения - не правильно определил в какой процедуре была главная загвоздка. Основная проблема крылась в подстановке функций в процедуру onChange.
При удалении из неё - остальные процедуры заработали без зависания (только артефакты остаются).

Procedure DefineBttns;
begin With HlpFileEditorF do begin
EW.GetTextAttributes(EW.SelStart, FP);
EW.GetParaAlignment(EW.SelStart, ewAlign);
{далее код приводить не буду - большой, я его задокументировал, но толку это не дало}
end; end;

procedure THlpFileEditorF.EWChange(Sender: TObject);
begin
DefineBttns; // если убрать здесь - работает с артефактами.
EW.Tag := 1;
end;

procedure THlpFileEditorF.EWKeyUp(Sender: TObject; var Key: Word;
Shift: TShiftState);
var c: Char;
begin
DefineBttns; // если убрать здесь или ниже то поведение как в первом моем посте
c := Chr(Key);
if (Shift=[ssAlt]) then
if (c='A') or (c='a') or (c='Ф') or (c='ф') then AddSymbCondClick(Sender) else
if (c='R') or (c='r') or (c='К') or (c='к') then ChgSymbClick(Sender);
end;

procedure THlpFileEditorF.EWMouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
DefineBttns; // если убрать здесь или выше то поведение как в первом моем посте
end;

скалогрыз писал(а):Eсть мнение, что проблема в использовании старой версии RichMemo - какая ревизия?

Ревизия 5112

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

Попробовал - толку нет. Всё то же самое.

Следующий опыт - оставил DefineBttns только в событии onChange:
Оставляя в DefineBttns GetTextAttributes получаем отсутствие артефактов и зависания, но нельзя выделять текст влево.
Оставляя в DefineBttns GetParaAlignment получаем артефакты и рекурсию отрисовки, но выделять текст влево можно.

Добавлено спустя 5 минут 15 секунд:
Следующий опыт - удалил DefineBttns из события onChange - думаю нафиг он там не нужен (был там, т.к. портировал старый дельфинский редактор в своё время написанный на скорую руку, и при этом работавший на 5), при этом оставив обе функции в DefineBttns (GetTextAttributes и GetParaAlignment). В результате рекурсии нет, но нельзя выделять текст влево, и множество артефактов текстового курсора.
скалогрыз
долгожитель
Сообщения: 1804
Зарегистрирован: 03.09.2008 02:36:48

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

sn-102 писал(а):Ревизия 5112

хмм... а если откатиться до 4971

из командной строки:

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

svn update -r 4971


проблема останется?
sn-102
новенький
Сообщения: 16
Зарегистрирован: 24.08.2016 10:02:13

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

скалогрыз писал(а):а если откатиться до 4971

Я в Лазаре только осваиваюсь (чуть более недели). Раньше много на Delphi кодил. Ещё не знаю как это сделать. Где эту командную строку искать? В команды компилятора вписать параметров сборки пакета? До или после компиляции?
скалогрыз
долгожитель
Сообщения: 1804
Зарегистрирован: 03.09.2008 02:36:48

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

sn-102 писал(а):Я в Лазаре только осваиваюсь (чуть более недели). Раньше много на Delphi кодил. Ещё не знаю как это сделать. Где эту командную строку искать? В команды компилятора вписать параметров сборки пакета? До или после компиляции?

хм. понятно.
А RichMemo как скачал по ссылке из вики или из репозитория через svn?
sn-102
новенький
Сообщения: 16
Зарегистрирован: 24.08.2016 10:02:13

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

скалогрыз писал(а):хм. понятно.
А RichMemo как скачал по ссылке из вики или из репозитория через svn?

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

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

Сделай копию той что есть у тебя, и попробуй вот эту! Это та самя r4971
Вложения
richmemo4971.zip
(158.74 КБ) 1571 скачивание
sn-102
новенький
Сообщения: 16
Зарегистрирован: 24.08.2016 10:02:13

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

скалогрыз писал(а):Сделай копию той что есть у тебя, и попробуй вот эту! Это та самя r4971

Артефакты почти пропали (один упорно остаётся), но не в них проблема - они легко затираются командой refresh после вызова процедур GetTextAttributes и GetParaAlignment. Все остальные неприятности, как то рекурсия и не возможности выделить текст слева от курсора остались на месте.

Добавлено спустя 3 минуты 36 секунд:
Рекурсия появляется в событии onChange
скалогрыз
долгожитель
Сообщения: 1804
Зарегистрирован: 03.09.2008 02:36:48

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

sn-102 писал(а):но нельзя выделять текст влево

проблема должна быть решена в r5117 (в аттаче, или сутки подождать и по ссылке с вики скачать можно)
Вложения
richmemo5117.zip
(160.33 КБ) 1493 скачивания
sn-102
новенький
Сообщения: 16
Зарегистрирован: 24.08.2016 10:02:13

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

Да, всё отлично. И в рекурсию не впадает в onChange, и выделение работает и артефактов нет. Огромное спасибо!
Аватара пользователя
Лекс Айрин
долгожитель
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград
Контактная информация:

Сообщение Лекс Айрин »

Разбираю пример с принтером из стандартной поставки. Собрал, запустил и пытаюсь распечатать на pdf принтер...

Если поля печати выставить по нолям, то все нормально, а если их выставить свои, то создает кучу пустых страниц (для крайнего файла 1857) с небольшим кружком.

Это нормально или где-то косяк?
win 7, сегодняшний транк Lazarus. правда, fpc староват.
скалогрыз
долгожитель
Сообщения: 1804
Зарегистрирован: 03.09.2008 02:36:48

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

Лекс Айрин писал(а):Собрал, запустил и пытаюсь распечатать на pdf принтер...

это стандартный pdf принтер или какой-то дополнительный (из ms office)

есть мнение что косяк
Аватара пользователя
Лекс Айрин
долгожитель
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград
Контактная информация:

Сообщение Лекс Айрин »

это foxit reader-овский принтер + потом пользовался doPDF. Если вручную задавать границы страницы, то печатает нормально, если убрать встроенную процедуру выставления границ, конечно.
AlexEr81
новенький
Сообщения: 17
Зарегистрирован: 24.01.2014 19:57:31

Сообщение AlexEr81 »

Здравствуйте. Подскажите пожалуйста как установить этот компонент. Скачал с Github, распаковал в lazaruscomponentsrichmemo-master. Открыл richmemopackage.lpk . Нажал компиляция. После успешной компиляции, жму "Использовать". Пункт установить недоступен. Lazarus 2.0.12 x64

Добавлено спустя 41 минуту 50 секунд:
AlexEr81 писал(а):дравствуйте. Подскажите пожалуйста как установить этот компонент. Скачал с Github, распаковал в \lazarus\components\richmemo-master\. Открыл richmemopackage.lpk . Нажал компиляция. После успешной компиляции, жму "Использовать". Пункт установить недоступен. Lazarus 2.0.12 x64

Увидел "сетевой диспетчер пакетов" через него поставил
Аватара пользователя
kotompazb
постоялец
Сообщения: 156
Зарегистрирован: 21.06.2012 13:03:39
Откуда: Novosibirsk, xUSSR

Сообщение kotompazb »

Здрасьте.
А что? Richmemo нельзя установить в 4.2? Открываю lpk. Пункт Установить недоступен.
svk12
постоялец
Сообщения: 411
Зарегистрирован: 09.06.2008 18:42:47

Сообщение svk12 »

AlexEr81 писал(а):Открыл richmemopackage.lpk
Этот пакет не для установки, его нужно просто скомпилировать. А потом установить /ide/richmemo_design.lpk.
Ответить