![]() |
|
Модераторы: Poseidon, Snowy, bems, MetalFan |
![]()
|
|
| Limonadni Joe |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 311 Регистрация: 1.11.2002 Где: Москва Репутация: нет Всего: 2 |
Может я чего-то "фундаментально" не понимаю...
В центре всей проги - TPaintBox, на котором в ходе работы рефрешится изображение. Изображение копируется (TCanvas.CopyRect) из TBitMap. Ну и естественно есть это @$& мерцание, пока правда незначительное, но все равно разражает, так как оно постоянно-переменно. Как его убрать? Если это в принципе невозможно в винде, объясните пожалуйста почему. Я бы не задал этот вопрос, если бы не видел, что в некоторых программах мерцания в принципе нет. Может сам рефреш и подтормаживает, но холст не заливается белым цветом перед каждой прорисовкой (как я понимаю, именно это вызывает мерцание). Наверное для решения проблемы надо использовать что-то крайне низкоуровневое? |
|||
|
||||
| p0s0l |
|
|||
![]() Г-н Посол ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 3668 Регистрация: 13.7.2003 Где: 58°38' с.ш. 4 9°41' в.д. Репутация: 58 Всего: 112 |
Ты PaintBox.Refresh используешь ? Попробуй .Update
-------------------- С уважением, г-н Посол. |
|||
|
||||
| Limonadni Joe |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 311 Регистрация: 1.11.2002 Где: Москва Репутация: нет Всего: 2 |
В процедуре обработки TPaintBox.OnPaint я использую TPaintBox.Canvas.CopyRect.
|
|||
|
||||
| <Spawn> |
|
|||
![]() Око кары:) ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2776 Регистрация: 29.1.2003 Где: Екатеринбург Репутация: 44 Всего: 64 |
Может DoubleBuffered:= True поможет?
-------------------- "Для некоторых людей программирование является такой же внутренней потребностью, подобно тому, как коровы дают молоко, или писатели стремятся писать" - Николай Безруков. |
|||
|
||||
| Unregistered |
|
|||
|
Unregistered |
Может я конечно чего-то не понимаю .... а вы рисовать на битмапе в памяти а потом его копировать на экран не пробовали?
|
|||
|
||||
| Limonadni Joe |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 311 Регистрация: 1.11.2002 Где: Москва Репутация: нет Всего: 2 |
<Spawn> У TPaintBox нет св-ва DoubleBuffered, оно только у TWinControl'ов.
|
|||
|
||||
| <Spawn> |
|
|||
![]() Око кары:) ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2776 Регистрация: 29.1.2003 Где: Екатеринбург Репутация: 44 Всего: 64 |
Limonadni Joe дак и поставь у формы(или у другого родительского компонента наследника TWinControl, если это у тебя так) DoubleBuffered в True(у меня для TImage это помогало)
Это сообщение отредактировал(а) <Spawn> - 5.12.2003, 13:00 -------------------- "Для некоторых людей программирование является такой же внутренней потребностью, подобно тому, как коровы дают молоко, или писатели стремятся писать" - Николай Безруков. |
|||
|
||||
| Полудненко Олег |
|
|||
|
Українець ![]() ![]() Профиль Группа: Участник... Сообщений: 556 Регистрация: 13.8.2003 Репутация: 1 Всего: -11 |
Не знаю как у ПеинтБокса, а у Имейджа есть такое свойство как Stretch. Так вот, если его сделать ТРУ, то сигание сразу исчезает.
|
|||
|
||||
| p0s0l |
|
|||
![]() Г-н Посол ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 3668 Регистрация: 13.7.2003 Где: 58°38' с.ш. 4 9°41' в.д. Репутация: 58 Всего: 112 |
Как сказал <Spawn>, поставь DoubleBuffered, или же рисуй не в OnPaint, а например, в OnTimer у таймера, но не делай Refresh или Repaint.
-------------------- С уважением, г-н Посол. |
|||
|
||||
| oleg1973 |
|
|||
![]() asm fanat ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 3283 Регистрация: 16.7.2003 Где: Italy Репутация: 1 Всего: 34 |
вывод
надарисовать через директ драв делать бекбуфер и флипать -------------------- SST 465555 icq 200-512-712 |
|||
|
||||
| Limonadni Joe |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 311 Регистрация: 1.11.2002 Где: Москва Репутация: нет Всего: 2 |
<Spawn> Большое спасибо!
oleg1973 А можешь дать ссылки на руководства по DirectDraw для самых новичков в этой области? |
|||
|
||||
| Chess64 |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 122 Регистрация: 25.9.2003 Где: Набережные Челны Репутация: нет Всего: нет |
2 Limonadni Joe
Попробуй свойство PainBox'a -> ControlStyle:=[csOpaQue]; - Авось помогет. --------------------
Aleksey Semyonov aKa LfP |
|||
|
||||
| Limonadni Joe |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 311 Регистрация: 1.11.2002 Где: Москва Репутация: нет Всего: 2 |
Chess64 Да уже всё получилось (с DoubleBuffered).
|
|||
|
||||
| Cheburek |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 74 Регистрация: 26.3.2006 Репутация: нет Всего: 1 |
У меня два вопроса по теме:
1. Пригоден ли этот метод для моего случая?( я двигаю по форме TImage с помощью TScrollBar, меняя парамет Left в TImage). 2.Из-за чего оно вообще возникает?Может кто-нибуть знает еще способы избавления это этого (censored) мерцания?(только не DirectDraw) Это сообщение отредактировал(а) Cheburek - 4.5.2006, 23:40 |
|||
|
||||
| zalex |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 129 Регистрация: 13.5.2005 Репутация: 2 Всего: 2 |
Как то боролся с такой проблемой....а потом перешел в Дельфи 7 и проблема исчезла сама, хотя тот же самый код в 6 приводил к мерцанию.
|
|||
|
||||
![]()
|
| Правила форума "Delphi: Общие вопросы" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |