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

Вниз

Мерцание TRichEdit при скроллинге   Найти похожие ветки 

 
Tack   (2004-09-24 15:44) [0]

Использую TRichEdit (Delphi6) в качестве консоли, куда выводятся цветные сообщения программы. Консоль должна прокручиваться вниз автоматически при добавлении в нее строки. В общем, я реализовал это так:

var
 S: String;
 sm: TWMScroll;
 RichEd: TRichEdit;
begin
 .....
 RichEd.Lines.BeginUpdate;
 RichEd.Lines.Add(S); // Вставка строки S

 sm.Msg := WM_VSCROLL;
 sm.ScrollCode := SB_BOTTOM;
 RichEd.Dispatch(sm);
 Application.ProcessMessages;

 RichEd.Lines.EndUpdate;
 ....

При вставке строк происходит мерцание контрола. Такое чувство, что он полностью перерисовывается, с первой строки до последней, а потом только прокручивается до конца текста.
Пытался включить свойство DoubleBuffered для TRichEdit - текст вообще становится невидимым.

Можно ли как-нибудь устранить это явление?


 
[lamer]Barmaglot ©   (2004-09-24 15:52) [1]

Сколько строк вставляем? Или опять больше 10000?

Рекомендации микрософт говорят о том, что вставлять надо максимум удвоенное количество ВИДИМЫХ строк...Остальные надо сохранять в памяти и подгружать по необходимости...


 
Tack   (2004-09-24 15:59) [2]

Ограничение стоит на 200 строк. Потом каждый раз убирается нулевая строка, типа устаревшая.

Причем эффект мерцания виден только если широко распахнуть окно. При маленьком окне ничего не мерцает почти.


 
Defunct ©   (2004-09-24 19:06) [3]

> При вставке строк происходит мерцание контрола.

Без доработок компанента RichEdit избежать мерцания невозможно.
Могу вам лишь дать инструмент, который лочит контрол, а уж как вы его примените ваше дело.

procedure LockControl(C: TWinControl; bLock: Boolean);
begin
 If (C <> nil) And (C.Handle <> 0) Then
 If bLock then SendMessage(c.Handle, WM_SETREDRAW, 0, 0) Else
 Begin
   SendMessage(c.Handle, WM_SETREDRAW, 1, 0);
   RedrawWindow(c.Handle, nil, 0,
     RDW_ERASE or RDW_FRAME or RDW_INVALIDATE or RDW_ALLCHILDREN);
 End;
End;



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

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

Наверх





Память: 0.45 MB
Время: 0.047 c
1-1096026274
Tack
2004-09-24 15:44
2004.10.10
Мерцание TRichEdit при скроллинге


14-1095404297
Knight
2004-09-17 10:58
2004.10.10
Добрый день, весёлый час! Рады видеть нас у вас!!!


14-1095837337
Romkin
2004-09-22 11:15
2004.10.10
Первый Прототип Персонального Компьютера


1-1095767994
avsam
2004-09-21 15:59
2004.10.10
Edit (Combobox) с выпадающим калькулятором


1-1096286363
TActionManager
2004-09-27 15:59
2004.10.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
Английский Французский Немецкий Итальянский Португальский Русский Испанский