![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как избавиться в ListView от мерцания при прокрутке? [D7, WinXP]
rolex © (2006-01-30 11:41:00)Как избавиться в ListView от мерцания при прокрутке?
Gero (2006-02-02 15:57:00) [1]> Это я так понимаю при отрисовке строчки?
Да, а ARect := Item.DisplayRect(drBounds);
То есть закрашиваю не весь, а на пиксел меньше.
MegaVolt (2006-02-02 15:18:00) [2]>Попробуй сделать пустой обработчик этого сообщения.
И что? Ну не рисуются те места где нету строчек. Ну закрашиваю их самостоятельно в чём проблема?
>Глянул, юросилось в глаза вот это:
Это я так понимаю при отрисовке строчки?
>Работай с DirectX, юудет как в игрушках.
:) Спасибо. Но ведь можно и без ДХ добится того же. Просто изначально это не продумано.
Gero (2006-02-02 12:11:00) [3]> Fay © (02.02.06 12:10)
Нет, почему же, неоторая разница есть, в случае с OnShow возможна более медленная работа программы ввиду одной дополнительной проверки
:)
Fay (2006-02-02 12:10:00) [4]2 Gero © (02.02.06 12:01) [20]
> Какая существенная разница?
Я не говорил, что существенная (в данном случае). Именно принципиальная.
Gero (2006-02-02 12:01:00) [5]> MegaVolt © (02.02.06 10:20)
> Если в игрушках сотни раз в секунду отрисовывается экран
> при этом ещё прощитывается сцена и пр...
Работай с DirectX, юудет как в игрушках.
> А можешь глянуть в исходничках что правил?
Глянул, юросилось в глаза вот это:
if GridLines then
Dec(ARect.Bottom);
Перед FillRect.
> Fay © (02.02.06 11:54)
> Именно принципиально.
Почему? Какая существенная разница?
Fay (2006-02-02 11:54:00) [6]2 MegaVolt © (01.02.06 16:27) [13]
> Я отлавливал WM_ERASEBKGND
Попробуй сделать пустой обработчик этого сообщения.
begin
end;
2 Gero © (31.01.06 13:14) [12]
> Но лучше в OnCreate, хотя и не принципиально.
Именно принципиально.
MegaVolt (2006-02-02 10:20:00) [7]>Это насчет замедления прокрутки. Естественно, оно будет, потому что кроме отрисовки происходит еще и копирование канвы.
Да не естественно это. Если в игрушках сотни раз в секунду отрисовывается экран при этом ещё прощитывается сцена и пр... А тут текстик без тормозов сдвинуть по экрану не получается. Изврат ИМХО.
>Проблема с сеткой при рисовании какая-то была, но как избавился уже не помню.
А можешь глянуть в исходничках что правил?
Gero (2006-02-01 19:29:00) [8]> Это к чему?
Это насчет замедления прокрутки. Естественно, оно будет, потому что кроме отрисовки происходит еще и копирование канвы.
Можешь сделать через перехват CNNotify. У меня таким способом рисуется ListView с текстом и картинками (DoubleBuddered = True), и ничего не тормозит. Проблема с сеткой при рисовании какая-то была, но как избавился уже не помню.
MegaVolt (2006-02-01 17:24:00) [9]>Так вам шашечки или ехать?
Это к чему? К тому что нету нормальных средств выводить быстро простой текст в разлинееном окошке без идиотского стирания фона при каждом чихе или про что? Я же написал что просто перехват перерисовки фона решает проблему кроме сетки. И я практически уверен что и для сетки есть соответствующее сообщение только оно мне не извесно. А учитывая что в WinXP есть баг с отрисовкой сетки в ListView то актуальность моего предложения сильно выростает :) Баг задокументирован мелкософтом так что не нужно писать что у меня руки кривые :)
Gero (2006-02-01 16:51:00) [10]> MegaVolt © (01.02.06 16:33)
Так вам шашечки или ехать?
MegaVolt (2006-02-01 16:33:00) [11]При
DoubleBuffered := True;
наблюдается явное замедление прокрутки :( Некрасиво как то.
MegaVolt (2006-02-01 16:27:00) [12]Есть такое дело. Я отлавливал WM_ERASEBKGND и сам заполнял только ту часть фона которая не содержит надписей. А та что с надписями сама заполняется при отрисовке. Правда от мерцания сетки так избавится не смог. Она при прокрутке на одном месте стоит но каждый раз всё равно перерисовывается
Gero (2006-01-31 13:14:00) [13]> Правильно ли сделал?)
Да. Но лучше в OnCreate, хотя и не принципиально.
> Обьясните пожалуйста, что это за параметр такой и для чего
> он нужен (просто интересно стало).
Нажми на нем F1.
rolex (2006-01-31 13:10:00) [14]
> 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-30 18:45:00) [15]DoubleBuffered := True ?
rolex (2006-01-30 18:38:00) [16]О! Я ещё заметил, что мерцает если в приложении подключен модуль xpman!
А если его нет то вроде нормально.
Так что же делать?
Посоветуйте какой-нить компонент бесплатный, наподобе StringGrid, только с чекбоксами и т.д.?
Zoidberg (2006-01-30 17:14:00) [17]
> В режиме же по умолчанию (не виртуальном) и без пользовательской
> прорисовки (да и вообще - при отсутствии обработки каких-
> либо событий, связанных с навигацией по списку) по идее
> никакого "мерцания" не должно быть ..
>
Мерцание на самом деле имеет место быть. Я тоже в свое время с таким сталкивался, спасался загрузкой строк не через Items.Add а через событие OnData, а сами строки хранил в TList.
Digitman (2006-01-30 15:07:00) [18]посмотри исх-ки компонента
rolex (2006-01-30 13:46:00) [19]Обычный ListView на форме, стиль - Report, 2 колонки. Когда item'ов много, что появился ScrollBar и если прокрутить ScrollBar, то все содержимое ListView при прокрутке мерцает.
НО! Если прокручивать список не ScrollBar'ом, а колесом мыши то не мерцает!
Digitman (2006-01-30 13:33:00) [20]
> Можно ссылочку на пример?
> <Цитата>
Ни к чему он, пример, в дан.случае.
Я просто предположил, что ты каким-то образом используешь [1] и/или [3], ибо в этом случае мерцание действительно может иметь место..
В режиме же по умолчанию (не виртуальном) и без пользовательской прорисовки (да и вообще - при отсутствии обработки каких-либо событий, связанных с навигацией по списку) по идее никакого "мерцания" не должно быть ..
Приводи код, относящийся к работе с ListView ..