Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2003.07.10;
Скачать: [xml.tar.bz2];

Вниз

Как у TRichEdit убрать выделение?   Найти похожие ветки 

 
Всеволод Соловьёв   (2003-06-28 23:11) [0]

При подсвечивании слов (симвлов/строк етц) в ричэдите приходится изменять SelStart, SelLength, а потом SelAttributes. Но при изменении SelStart и SelLength перескакивает курсор с одного места на другое и изменяется выделение. Но это выделение некрасиво и очень раздражает. Решено было убрать. Были перепробованы методы:
1) Rich.HideSelection := True;
2) API-шная HideCaret(Rich.Handle);
3) Пробовал даже делать еще один компонент (ран-тайм, Parent := nil, чтоб не видно было), присваивать RichDynamic := Rich; делать все манипуляции, а потом обратно присваивать. Но получается, что сам компонент один, но два на него указателя. Скопировать не получиловь. Assign ругается на невозможность преобразования TRichEdit в TRichEdit (В справке точно то же написано).
4) Ползание по исходному коду понимания дела не дало. В справке не было найдено. В различных ФАКах и поиском тоже не было найдено.
Я вижу два пути решения:
I. Должен же где-то RichEdit хранить форматирование каждого символа? При ползании по сорцу его я не нашел такого. Там все сводится к message"ам.
II. Как-нибудь приостановить отрисовывание ричэдита на момент выполнения процедуры.
Подскажите, как пройти по любому из этих путей. Прохождение обоих и помощь листингами (особенно с комментариями) оскорблением не считается :)


 
Songq   (2003-06-28 23:15) [1]

По II: TRichEdit.Lines.BeginUpdate/EndUpdate
А также LockWindowUpdate()


 
jack128   (2003-06-28 23:17) [2]


> Там все сводится к message"ам.

так и есть. RichEdit винда сама реализововает

По второму пункту

LockWindowUpdate(RichEdit1.Handle);
// Форматируй текст
LockWindowUpdate(0);



 
Всеволод Соловьёв   (2003-06-28 23:21) [3]

Все! спасибо, помогло LockWindowUpdate(RichEd.Handle);
Покорнейше благодарю :)
То что ричэдит сама винда реализовывает это я сразу понял, как только в хелп залез и на иерархию посмотрел: происходит от WinControl :)


 
Всеволод Соловьёв   (2003-06-28 23:23) [4]

2Song
>TRichEdit.Lines.BeginUpdate/EndUpdate
Может я неправльно делал, но это у меня вызывало Access Violation


 
Novice   (2003-06-28 23:28) [5]

У Sha © :) есть компонент TLogger - наследник TRichEdit.
Там сделано так:

function TLogger.LogLinesBeginUpdate: integer;
begin;
Result:=Perform(EM_SETEVENTMASK, 0, 0);
Perform(WM_SETREDRAW, 0, 0);
end;

procedure TLogger.LogLinesEndUpdate(EventMask: integer);
begin;
Perform(WM_SETREDRAW, 1, 0);
InvalidateRect(Handle, nil, true);
Perform(EM_SETEVENTMASK, 0, EventMask);
end;


А между вызовом этих функций изменяй цвета и все такое.


 
Всеволод Соловьёв   (2003-06-29 12:07) [6]

Novice © (28.06.03 23:28)
да уже все сделано... LockWindowUpdate.
разбираюсь щас с исходником, может сделаю компонент-наследник, в котором можно будет получить доступ к форматированию каждой буквы отдельно (через массив).


 
Просто прохожий   (2003-06-29 12:46) [7]

Всеволод Соловьёв © (29.06.03 12:07)
Плюс предложенного метода заключается в том, что он отключает не только отрисовку, но и нотификацию. Это самый быстрый, известный
мне, вариант обновления RichEdita.


 
Всеволод Соловьёв   (2003-06-29 12:51) [8]

Ну хорошо, но что именно вставлять на место EventMask?
procedure TLogger.LogLinesEndUpdate(EventMask: integer);
begin;
Perform(WM_SETREDRAW, 1, 0);
InvalidateRect(Handle, nil, true);
Perform(EM_SETEVENTMASK, 0, EventMask);
end;


 
Просто прохожий   (2003-06-29 16:42) [9]

Результат от первой функции передавай во вторую процедуру.



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2003.07.10;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.013 c
1-31231
SeAl
2003-06-26 14:05
2003.07.10
нужна помощь с переводом из real в integer


14-31471
Dmitriy O.
2003-06-24 09:51
2003.07.10
Био программирование.


14-31444
gn
2003-06-21 07:41
2003.07.10
КТО ЛУЧШЕ*??????


1-31248
jack128
2003-06-29 19:20
2003.07.10
абстрактные свойства


14-31456
sapsi
2003-06-23 11:19
2003.07.10
Телевизионные каналы теперь все контролируются государством





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский