|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
19.10.2012, 14:45 | #1 |
Пользователь
Регистрация: 17.01.2007
Сообщений: 26
|
Мерцание кнопок внутри StringGrid
Добрый день!
Столкнулся с такой проблемой. Есть StringGrid, внутри него несколько столбцов с кнопками, на каждой кнопке картинка. Количество строк динамически изменяется в процессе работы с программой (их можно добавлять, удалять и т.д.), соответственно, количество кнопок тоже меняется. Так вот, при прокрутке таблицы и перемещнии строк кнопки начинают жутко мерцать, а сама форма - тормозить и подвисать. Причем чем больше строк, тем более выражена проблема (что, впрочем, вполне логично). Кто-нибудь знает, можно ли как-нибудь уменьшить мерцание и торможение? Возможно, у меня не очень хорошо написан обработчик OnTopLeftChanged. |
19.10.2012, 14:48 | #2 | |
Форумчанин
Регистрация: 18.01.2012
Сообщений: 975
|
Цитата:
Еще попробуйте свойство DoubleBuffered установить в True
Благодарить в репутацию. Проклинать — туда же
|
|
19.10.2012, 15:01 | #3 |
Участник клуба
Регистрация: 06.04.2009
Сообщений: 1,524
|
Есть еще грязный хак. Поставить alfa blend в true для формы
Но он не всегдя помогает |
19.10.2012, 15:03 | #4 |
Пользователь
Регистрация: 17.01.2007
Сообщений: 26
|
DoubleBuffered в True установлен (при создании формы).
Вот мой обработчик OnTopLeftChanged: Код:
|
19.10.2012, 15:06 | #5 |
Пользователь
Регистрация: 17.01.2007
Сообщений: 26
|
|
19.10.2012, 15:08 | #6 | |
Участник клуба
Регистрация: 06.04.2009
Сообщений: 1,524
|
Цитата:
|
|
19.10.2012, 15:23 | #7 | |
Пользователь
Регистрация: 17.01.2007
Сообщений: 26
|
Цитата:
Вообще, насколько я понял, проблема в том, что при прокрутке TopLeftChanged вызывается несколько раз, т.е. когда зажимаешь стрелку на полосе прокрутки, таблица начинает двигаться прерывисто, по нескольку строк, ну и TopLeftChanged вызывается при каждом рывке, и все мерцает. Я бы даже сказал, что это не мерцание, а размазанность какая-то. Кстати, а можно отловить нажатие мыши на полосе прокрутки? А то может стоит при нажатии просто делать невидимыми все кнопки, а потом при отпускании опять видимыми. |
|
19.10.2012, 15:40 | #8 |
Старожил
Регистрация: 09.01.2008
Сообщений: 26,229
|
так, в порядке бреда..
а что если завести глобальную переменную и сохранять туда время, когда предыдущий раз вызывался обработчик TopLeftChanged (через GetTickCount, например: var CountTicks : DWORD; CountTicks := GetTickCount(). и в начале обработчика поставить проверку, если время от предыдущего вызова прошло меньше заданной константы - выходить из процедуры: Код:
Попробуйте, вдруг поможет... |
19.10.2012, 22:02 | #9 | |
Пользователь
Регистрация: 17.01.2007
Сообщений: 26
|
Цитата:
|
|
19.10.2012, 22:54 | #10 |
Форумчанин
Регистрация: 11.03.2011
Сообщений: 426
|
Вопрос: если у Вас grdMy.RowCount будет равен миллиону, то при всяком скроллировании в цикле будет обрабатываться миллион кнопок?
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Обработка одномерных массивов, СИ. задание внутри, и написанный мною текст программы тоже внутри. кое-что нужно исправить.. | Амелия | Общие вопросы C/C++ | 6 | 02.04.2012 20:03 |
Мерцание | ZBEP | Общие вопросы Delphi | 3 | 09.04.2011 15:14 |
Нахождение слов-анаграмм, Ошибка выдается. Задание внутри. Код внутри. | TYMON | Общие вопросы .NET | 2 | 22.11.2010 21:07 |
Мерцание StringGrid (CLX) | SpaceIQ | Общие вопросы Delphi | 6 | 13.07.2009 15:21 |
Как раскрасить ячейку внутри StringGrid. | GarfieldX | Общие вопросы Delphi | 5 | 14.02.2008 21:59 |