скалогрыз писал(а):Пример бы кода?!
Прошу прощения - не правильно определил в какой процедуре была главная загвоздка. Основная проблема крылась в подстановке функций в процедуру 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). В результате рекурсии нет, но нельзя выделять текст влево, и множество артефактов текстового курсора.