| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C++ Builder > Блокирование отрисовки |
| Автор: EvgeniyK77 31.1.2009, 12:58 |
| Проблема такая. При удалении в цикле большого количества компонент видно, как они промаргивают цветом фона. Смотрится, конечно, не красиво. Можно ли как то этого избежать? Может, есть метод, который запрещает отрисовку и парный ему, разрешающий? |
| Автор: Mysterio 31.1.2009, 19:56 |
| Какие именно компоненты и откуда ты их удаляешь? |
| Автор: 586 31.1.2009, 21:02 |
| Form1->DoubleBuffered = true; |
| Автор: EvgeniyK77 31.1.2009, 21:18 | ||||
Удаляются с TabSheet-а PageControl-а. А какие - не помню, так как данную программу делает коллега.
Спасибо! Попробуем. |
| Автор: xvr 2.2.2009, 19:00 | ||||
А может будет достаточно сбросить ненужным TabSheet'ам проперть TabVisible в false? |
| Автор: EvgeniyK77 2.2.2009, 21:29 | ||
А это уже есть. Промаргивает именно фон. Правда, тут ещё надо разбираться, чей это фон, и сколько раз мы попадаем в отрисовку данного компонента. |
| Автор: xvr 2.2.2009, 23:22 | ||||||
Не понял - у вас удаляется целиком TabSheet или только компоненты с него? Если второе, то делать TabVisible=false нельзя - будет моргать собственно PageControl.
|
| Автор: EvgeniyK77 3.2.2009, 09:46 |
| Удаляется не страница целиком, а несколько (много) компонент с неё. И в процессе удаления заметно неприятное промаргивание фона. А свойство Visible (TabVisible то тут не при чём) сбрасывается для всех страниц, кроме текущей не при удалении элементов, а при смене текущей страницы. |
| Автор: xvr 3.2.2009, 11:36 | ||||
Понятно, тогда только двойная буферизация (DoubleBuffered = true)
|
| Автор: EvgeniyK77 3.2.2009, 22:00 |
| Да вроде отключение нетекущих страниц ускорило загрузку. А вот с двойной буферизацией облом-с получился. Не помогло ни фига. Как промаргивал фон, так и промаргивает. |
| Автор: 586 3.2.2009, 23:46 | ||||||
А если попробовать перехватить WM_ERASEBKGND...
// твой код
|
| Автор: EvgeniyK77 4.2.2009, 22:18 | ||
Вот... вот... вот... Я интуитивно подозревал что-то такое. Мы сначала ставили счётчики на WM_PAINT, но они давали меньшее число отрисовок, чем наблюдалось визуально. А когда я читал про InvalidateRect() из WinAPI, то обратил внимание на параметр bErase и заподозрил зацепку. Получается, что у Windows-а две фазы рисования: 1 - фон, 2 - что-то ещё? Кстати, получилось с DoubleBuffered. Нужно было его менять на true не для формы, а для страницы. Спасибо, кстати, отозвавшимся; вы реально помогли. |