Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Уменьшить мерцание DBGrid'a при перемещении курсора


Страницы:   1 2

DelphiLexx ©   (2006-08-08 09:01:00) 

DBGrid у меня отображает некоторые строки разными цветами. При перемещении курсора у меня в AfterScroll'e вызывается Refresh DBGrid'a (так нужно), что приводит к мерцанию.
Как уменьшить мерцание DBGrid'a при перемещении курсора?


evvcom   (2006-08-09 16:46:00) [1]

> [34] sniknik ©   (09.08.06 16:40)
> > Нужен тщательный анализ VCL
> искать где светлее? а код автора значит "ака невиная овечка
> в этом плане", ну вот не может сей "титан мысли" лажу написать...
> ага, верю. ;)

:) Тщательный анализ VCL не для того, чтобы ТАМ ошибки найти, а чтобы у себя их не наделать неумелым перекрытием методов.


> выше вроде бы упоминалось о DoubleBuffered, и о том что
> мерцание и при нем есть?

Видимо пропустил или уже забыл. 35 постов уж воду в ступе толчем :)


sniknik   (2006-08-09 16:40:00) [2]

> Нужен тщательный анализ VCL
искать где светлее? а код автора значит "ака невиная овечка в этом плане", ну вот не может сей "титан мысли" лажу написать... ага, верю. ;)

> Только эти методы чистят целиком весь фон, из-за чего и наблюдается эффект мерцания
не изза этого. выше вроде бы упоминалось о DoubleBuffered, и о том что мерцание и при нем есть? ...  ну какая разница чистится или нет в неотображаемом битмаме фон, для мерцания?


evvcom   (2006-08-09 16:25:00) [3]

> [31] Silver... ©   (09.08.06 16:00)
> глянь в справку

На фиг мне это? Я в подобных случаях обычно Invalidate вызывал, но в некоторых случаях этого недостаточно. Нужен тщательный анализ VCL в частности TDBGrid. И хорош писать свои посты в духе, будто это я вопросы задаю, и я жду ответа на [0]. Я свои предложения уже в [8] изложил, не переубеждая автора использовать один метод вместо другого.

> в место DataSet.Refresh

Вообще-то до сих пор я считал, что речь идет о DBGrid.Refresh, который вызывает в свою очередь Repaint :)
Только эти методы чистят целиком весь фон, из-за чего и наблюдается эффект мерцания, уменьшить который автор и возжелал в [0] :-)


DelphiLexx   (2006-08-09 16:20:00) [4]


> в место DataSet.Refresh - DbGrid1.Invalidate/Repaint (не
> помню точно как там правильней глянь в справку)

А разницы собственно нет т.к. Refresh вызывает Repaint.


Silver...   (2006-08-09 16:00:00) [5]

в место DataSet.Refresh - DbGrid1.Invalidate/Repaint (не помню точно как там правильней глянь в справку)


evvcom   (2006-08-09 15:46:00) [6]

> [29] Silver... ©   (09.08.06 15:34)
> имел ввиду как рялизована "перекраска"

Аткель я знаю, как реализована у автора перекраска?

> если  a)  или  b) то Refresh не нужен

Для того, что нужно автору, нужен. Обработчики OnDraw* вызываются только для тех строк, которые грид считает нужным перерисовать. Если происходит перемещение курсора с одной строки на другую, то грид считает, что надо перерисовать строку, с которой курсор ушел, и строку, на которую пришел. Автору же требуется ПЕРЕРАСКРАСИТЬ ВСЕ строки грида, обозначая особым цветом все строки с параметром (-ами), схожим(и) с текущей выделенной строкой. Может я уже чего и не помню про стандартный грид, давно не юзал, но вроде все так.


Silver...   (2006-08-09 15:34:00) [7]

> Крашу не я, а автор. Все же

имел ввиду как рялизована "перекраска"
a)  DBGrid1.OnDrawCollumnCell
b)  DBGrid1.OnDrawDataCell
c)  иное

>Кстати данные в DataSet-е не меняются

если  a)  или  b) то Refresh не нужен (...хотя сначала раскажи о методе раскраски, потом поговорим)

... или ты Refresh для перерисовки вызываесь (попытка телепнуть) тогда Invalidate


evvcom   (2006-08-09 15:10:00) [8]

> [26] Silver... ©   (09.08.06 15:01)
> как красишь?

Крашу не я, а автор. Все же

> Чтобы раскрасить

правильнее было написать "Чтобы перекрасить"
Кстати данные в DataSet-е не меняются.


Silver...   (2006-08-09 15:07:00) [9]

в догонку ...

при этом изменяются данные в DataSet-е?


Silver...   (2006-08-09 15:01:00) [10]


> Чтобы раскрасить

при чем тут Refresh

как красишь?


zdm   (2006-08-09 14:56:00) [11]

DBGridEh форева


evvcom   (2006-08-09 14:49:00) [12]

> [23] Silver... ©   (09.08.06 14:46)
> не пойму зачем Refresh

Чтобы раскрасить ВСЕстроки грида уже ДРУГИМИцветами.


Silver...   (2006-08-09 14:46:00) [13]


> При перемещении курсора у меня в AfterScroll'e вызывается
> Refresh DBGrid'a (так нужно), что приводит к мерцанию.


при этом изменяются данные в DataSet-е?
не пойму зачем Refresh


evvcom   (2006-08-08 14:36:00) [14]

> [21] sniknik ©   (08.08.06 14:22)
> оно и так не мерцает... (чтото делаю не так?)

Сам не пробовал... А может у тебя машинка супер-пупер интел-пень > 3ГГц? :-)


sniknik   (2006-08-08 14:22:00) [15]

не надо ничего переписывать... оно и так не мерцает... (чтото делаю не так?)


evvcom   (2006-08-08 14:05:00) [16]

> [17] DelphiLexx ©   (08.08.06 11:20)
> Ну и как должен выглядеть код MyRefresh?

Смотришь как реализован Refresh, находишь очистку фона. Пишешь аналогичную MyRefresh, но без очистки фона. Долго и муторно вылавливаешь глюки. Или предлагаешь мне за тебя проделать сию работу?

> [19] Desdechado ©   (08.08.06 11:45)
> а не избавиться о него полностью :))

О, да... Я этого не учел. :)


Desdechado   (2006-08-08 11:45:00) [17]

> А где это условие разместить?
Логично предположить, что перед вызовом Refresh, не так ли?

evvcom ©   (08.08.06 11:17) [15]
Автор же просил "Уменьшить мерцание DBGrid'a", а не избавиться о него полностью :))


DelphiLexx   (2006-08-08 11:23:00) [18]


> DBGridEh.OnGetCellParams

Я тоже пользуюсь DBGridEh, а в каких случаях генерируется событие OnGetCellParams?


DelphiLexx   (2006-08-08 11:20:00) [19]


> Лучше все же, думаю, свой MyRefresh написать без популярной
> в данном случае полной очистки фона.

Ну и как должен выглядеть код MyRefresh?


DelphiLexx   (2006-08-08 11:20:00) [20]


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

А где это условие разместить?


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо