Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.03.05;
Скачать: CL | DM;

Вниз

Как избавиться в ListView от мерцания при прокрутке?   Найти похожие ветки 

 
rolex   (2006-01-30 11:41) [0]

Как избавиться в ListView от мерцания при прокрутке?


 
Digitman ©   (2006-01-30 13:00) [1]

режим - виртуальный ?


 
rolex   (2006-01-30 13:08) [2]

Нет, обычный.


 
Digitman ©   (2006-01-30 13:11) [3]

события On[Custom|Advanced]Draw[Item] обрабатываешь ?


 
rolex   (2006-01-30 13:27) [4]

нет. Можно ссылочку на пример?


 
Digitman ©   (2006-01-30 13:33) [5]


> Можно ссылочку на пример?
> <Цитата>


Ни к чему он, пример, в дан.случае.

Я просто предположил, что ты каким-то образом используешь [1] и/или [3], ибо в этом случае мерцание действительно может иметь место..

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

Приводи код, относящийся к работе с ListView ..


 
rolex   (2006-01-30 13:46) [6]

Обычный ListView на форме, стиль - Report, 2 колонки. Когда item"ов много, что появился ScrollBar и если прокрутить ScrollBar, то все содержимое ListView при прокрутке мерцает.
НО! Если прокручивать список не ScrollBar"ом, а колесом мыши то не мерцает!


 
Digitman ©   (2006-01-30 15:07) [7]

посмотри исх-ки компонента


 
Zoidberg ©   (2006-01-30 17:14) [8]


> В режиме же по умолчанию (не виртуальном) и без пользовательской
> прорисовки (да и вообще - при отсутствии обработки каких-
> либо событий, связанных с навигацией по списку) по идее
> никакого "мерцания" не должно быть ..
>

Мерцание на самом деле имеет место быть. Я тоже в свое время с таким сталкивался, спасался загрузкой строк не через Items.Add а через событие OnData, а сами строки хранил в TList.


 
rolex   (2006-01-30 18:38) [9]

О! Я ещё заметил, что мерцает если в приложении подключен модуль xpman!
А если его  нет то вроде нормально.
Так что же делать?

Посоветуйте какой-нить компонент бесплатный, наподобе StringGrid, только с чекбоксами и т.д.?


 
Gero ©   (2006-01-30 18:45) [10]

DoubleBuffered := True ?


 
rolex   (2006-01-31 13:10) [11]


> Gero ©   (30.01.06 18:45) [10]
> DoubleBuffered := True ?

Во! Помогло!!!!!!! Правда в ОбжектИнспекторе я не нашел такого, но я поставил в событие главной формы OnShow. (Правильно ли сделал?)
Обьясните пожалуйста, что это за параметр такой и для чего он нужен (просто интересно стало).

P.S. Блин, я даже расстроился немного, т.к. вчера весь день и ночь искал компонент в замену и нашёл - GridView! Супер компонент + бесплатный!
Вот ссылка кому интересно:
http://www.bergsoftware.net/index.php?section=components&page=gridview


 
Gero ©   (2006-01-31 13:14) [12]

> Правильно ли сделал?)

Да. Но лучше в OnCreate, хотя и не принципиально.

> Обьясните пожалуйста, что это за параметр такой и для чего
> он нужен (просто интересно стало).

Нажми на нем F1.


 
MegaVolt ©   (2006-02-01 16:27) [13]

Есть такое дело. Я отлавливал WM_ERASEBKGND и сам заполнял только ту часть фона которая не содержит надписей. А та что с надписями сама заполняется при отрисовке. Правда от мерцания сетки так избавится не смог. Она при прокрутке на одном месте стоит но каждый раз всё равно перерисовывается


 
MegaVolt ©   (2006-02-01 16:33) [14]

При
DoubleBuffered := True;
наблюдается явное замедление прокрутки :( Некрасиво как то.


 
Gero ©   (2006-02-01 16:51) [15]

> MegaVolt ©   (01.02.06 16:33)

Так вам шашечки или ехать?


 
MegaVolt ©   (2006-02-01 17:24) [16]

>Так вам шашечки или ехать?

Это к чему? К тому что нету нормальных средств выводить быстро простой текст в разлинееном окошке без идиотского стирания фона при каждом чихе или про что? Я же написал что просто перехват перерисовки фона решает проблему кроме сетки. И я практически уверен что и для сетки есть соответствующее сообщение только оно мне не извесно. А учитывая что в WinXP есть баг с отрисовкой сетки в ListView то актуальность моего предложения сильно выростает :) Баг задокументирован мелкософтом так что не нужно писать что у меня руки кривые :)


 
Gero ©   (2006-02-01 19:29) [17]

> Это к чему?

Это насчет замедления прокрутки. Естественно, оно будет, потому что кроме отрисовки происходит еще и копирование канвы.

Можешь сделать через перехват CNNotify. У меня таким способом рисуется ListView с текстом и картинками (DoubleBuddered = True), и ничего не тормозит. Проблема с сеткой при рисовании какая-то была, но как избавился уже не помню.


 
MegaVolt ©   (2006-02-02 10:20) [18]

>Это насчет замедления прокрутки. Естественно, оно будет, потому что кроме отрисовки происходит еще и копирование канвы.

Да не естественно это. Если в игрушках сотни раз в секунду отрисовывается экран при этом ещё прощитывается сцена и пр... А тут текстик без тормозов сдвинуть по экрану не получается. Изврат ИМХО.

>Проблема с сеткой при рисовании какая-то была, но как избавился уже не помню.

А можешь глянуть в исходничках что правил?


 
Fay ©   (2006-02-02 11:54) [19]

2 MegaVolt ©   (01.02.06 16:27) [13]
> Я отлавливал WM_ERASEBKGND
Попробуй сделать пустой обработчик этого сообщения.
begin
end;


2 Gero ©   (31.01.06 13:14) [12]
> Но лучше в OnCreate, хотя и не принципиально.
Именно принципиально.


 
Gero ©   (2006-02-02 12:01) [20]

> MegaVolt ©   (02.02.06 10:20)


> Если в игрушках сотни раз в секунду отрисовывается экран
> при этом ещё прощитывается сцена и пр...

Работай с DirectX, юудет как в игрушках.

> А можешь глянуть в исходничках что правил?

Глянул, юросилось в глаза вот это:

if GridLines then
  Dec(ARect.Bottom);

Перед FillRect.

> Fay ©   (02.02.06 11:54)

> Именно принципиально.

Почему? Какая существенная разница?


 
Fay ©   (2006-02-02 12:10) [21]

2 Gero ©   (02.02.06 12:01) [20]
> Какая существенная разница?
Я не говорил, что существенная (в данном случае). Именно принципиальная.


 
Gero ©   (2006-02-02 12:11) [22]

> Fay ©   (02.02.06 12:10)

Нет, почему же, неоторая разница есть, в случае с OnShow возможна более медленная работа программы ввиду одной дополнительной проверки

:)


 
MegaVolt ©   (2006-02-02 15:18) [23]

>Попробуй сделать пустой обработчик этого сообщения.

И что? Ну не рисуются те места где нету строчек. Ну закрашиваю их самостоятельно в чём проблема?

>Глянул, юросилось в глаза вот это:

Это я так понимаю при отрисовке строчки?

>Работай с DirectX, юудет как в игрушках.

:) Спасибо. Но ведь можно и без ДХ добится того же. Просто изначально это не продумано.


 
Gero ©   (2006-02-02 15:57) [24]

> Это я так понимаю при отрисовке строчки?

Да, а ARect := Item.DisplayRect(drBounds);

То есть закрашиваю не весь, а на пиксел меньше.



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

Текущий архив: 2006.03.05;
Скачать: CL | DM;

Наверх




Память: 0.53 MB
Время: 0.087 c
1-1138383603
Дмитрий_177
2006-01-27 20:40
2006.03.05
Рамка в Image и цвет пикселя в точке


2-1140243055
VitalikS
2006-02-18 09:10
2006.03.05
POP3


2-1139851736
Интересующийся
2006-02-13 20:28
2006.03.05
Поиск и запись текста в TStringList


2-1140286213
Дубинка
2006-02-18 21:10
2006.03.05
Подключение по локальной сети


15-1139494192
ZeroDivide
2006-02-09 17:09
2006.03.05
Лена Воронова отдыхает...