Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.013 c
15-1139484455
Харько
2006-02-09 14:27
2006.03.05
Снятся ли вам цветные сны?


9-1126088370
RzCoDer
2005-09-07 14:19
2006.03.05
Мультитекстурирование


6-1132634383
hed
2005-11-22 07:39
2006.03.05
Передача файла на apache сервер


1-1139082744
Pavel__
2006-02-04 22:52
2006.03.05
Прочитать значение из xml-файла, не загружая файл целиком


1-1138875687
OlegNik
2006-02-02 13:21
2006.03.05
Как программно работать с реестром?





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский