| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Общие вопросы > Подробней о DoubleBuffered |
| Автор: Ak47black 29.9.2007, 14:09 |
| Здравствуйте. Я хотелбы узнать подробней про DoubleBuffered. Какие есть минусы ? И еше очень хочу узнать как сделать чтобы у всех например 100 объектов на форме свойство (которые имею это свойство) DoubleBuffered был на True. Как массов присвоить и не писать каждому? |
| Автор: Rrader 29.9.2007, 14:34 |
| Минусы состоят в том, что требуется больше ресурсов системы, а также иногда замечал глюки при отрисовке. |
| Автор: lukas 29.9.2007, 16:37 |
| да и при XP Man-e все чекбоксы почему то черные... =( |
| Автор: ivan219 29.9.2007, 18:46 |
| С Button в XP стиле тоже накладки так что делать DoubleBuffered надо там где он нужен а не вовсей форме. |
| Автор: Alexeis 29.9.2007, 20:10 |
| Для DoubleBuffered при каждой перерисовке создается битмапник и рисуется все на нем. Эта фича доступна только при наличии стилей. |
| Автор: Coder 30.9.2007, 15:00 | ||
Куда же еще подробнее:
устанавливаешь в среде Делфи курсор на DoubleBuffered и нажимаешь Ctrl+F1 |
| Автор: Ak47black 30.9.2007, 16:11 |
| Ну ситуация прояснилась. Спасибо всем кто участвовал. Следущий раз сначала Ctrl+F1 нажму Coder + |
| Автор: Alexeis 14.11.2007, 15:09 |
| artemiy, всему ставить не стоит, так как это снижает скорость прорисовки и приводит к торможениям. |
| Автор: artemiy 14.11.2007, 15:22 |
| А чему тогда стоит? Хотелось бы свести мерцание формы к минимуму... |
| Автор: Alexeis 14.11.2007, 15:30 | ||
Думаю следует для больших контролов, панелей и т.д. А вообще, с продвижением висты эта проблема теряет актуальность. |
| Автор: artemiy 14.11.2007, 17:06 |
| Кстати, а как бороться с тем, когда поле установки DoubleBuffered объекты не полностью прорисовываются? ожет быть кто-то сталкивался с подобным? |
| Автор: Alexeis 14.11.2007, 17:16 |
| artemiy, не все контролы умеют работать с двойной буферизацией. В том числе для этого и не устанавливают ее по умолчанию. |
| Автор: artemiy 14.11.2007, 17:27 |
| Это понятно... но в данном примере у меня 2 GroupBox (один из них является родительским компонентом для другого), у обоих стоит DoubleBuffered=true. Т.е. можно предоложить что GroupBox не работает с двойной буферизацией. Но если у родительского сделать DoubleBuffered=false (второй не трогать), то никаких непрорисованных областей не образуется... Тогда вышесделанный вывод у меня вызывает сомнения... Как можно точно определить (не методом научного тыка |
| Автор: Alexeis 14.11.2007, 18:49 | ||
У меня создалось ощущение, что эту двойную буферизацию лепили наспех и не довели до ума. Так, что боюсь что прийдеться именно методом тыка. |
| Автор: ivan219 15.11.2007, 20:22 |
Сомневаюсь |
| Автор: artemiy 15.11.2007, 21:43 |
| Да вряд ли программа поможет... Просто я стараюсь при ресайзе формы сохранять пропорнции размеров элементов. Делаю это при помощи anchors. Так вот при ресайзе самой формы у меня ресайзятся все компоненты на ней, и, соответсвенно, мерцают. А это не есть гуд... И бороться с этим мерцанием с помощью DoubleBuffered не особо получается - одни компоненты перестают мерцать, другие нет :( |
| Автор: Alexeis 24.5.2011, 10:08 |
| Сегодня еще раз столкнулся с указанной проблемой. К сожалению вопрос мигания групбокосов сохранился даже на семерке при включенной двойной буферизации. Красивого решения нет, но в принципе задача решается нормально при помощи сабклассинга групбокосов. Используя функцию SetWindowLongPtr подменяем функцию окна и запрещаем обработку сообщения WM_ERASEBKGND . Перед уничтожением компонента не забываем вернуть исходную оконную функцию опять же функцией SetWindowLongPtr . Пока что не наблюдается артефактов из-за отключения WM_ERASEBKGND , но в принципе такой глюк может появиться. Еще раз отмечаю, что нормально работает при включенном флаге DoubleBuffered |