![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как избежать мигания при прорисовке? [D6, XP]
Mr tray © (2006-11-09 21:38:00)На onmousemove я поставил repaint, и код, рисующий некоторую картинку. Но всё окно при каждом выполнении этого кода "мигает". То есть сначала показывается чистое окно, а потом только прорисовывается картинка. Как избежать мигания?
guav (2006-11-09 23:14:00) [21]> На onmousemove я поставил repaint
Не луяше ли Invalidate ?
И рисовать, как уже сказано, в обработчике OnPaint.
Можно конечно рисовать и в onmousemove (если осторожно), но тогда repаint там точно не нужно.
Percent (2006-11-09 23:10:00) [22]Что ты рисуешь, потребитель?
Mr tray (2006-11-09 23:08:00) [23]я рисую програмно на касвасе главной формы. и при изменении координат курсора требуется обновить картинку, так как она зависит он этих координат. как в paint засунуть это?
Percent (2006-11-09 22:10:00) [24]На onmousemove я поставил repaint, и код, рисующий некоторую картинку
Код отрисовки контрола, должен располагаться в методе Paint (или обработчике OnPaint). Нигде в другом месте этот код располагаться не должен. Табу.
То есть сначала показывается чистое окно
Такое заявление - лишь признание того, что ты не контролируешь поведение своей программы.
Как избежать мигания?
1. Не давать перерисовываться чистому окну.
2. Рисовать в соответствующем методе.
3. Отрисовывать только то, что реально требует отрисовки (или затерлось, или изменилось).
4. DoubleBuffered := true; (только в крайнем случае)
5. ControlStyle := ControlStyle + [csOpaque];
И что за картинка вообще? Растр?
Установи ее в качестве кисти формы и забудь про ручную отрисовку.
Или используй TImage.
А вообще - методов очень много. А ты даже строчки кода не привел...
Ketmar (2006-11-09 22:10:00) [25]обрабатывать, например, WM_ERASEBKGND