Форум: "Основная";
Текущий архив: 2006.03.05;
Скачать: [xml.tar.bz2];
ВнизКак избавиться в 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;
Скачать: [xml.tar.bz2];
Память: 0.5 MB
Время: 0.047 c