Модераторы: Poseidon, Snowy, bems, MetalFan

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Мерцание, Реально ли от него избавится? 
:(
    Опции темы
Limonadni Joe
Дата 4.12.2003, 21:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 311
Регистрация: 1.11.2002
Где: Москва

Репутация: нет
Всего: 2



Может я чего-то "фундаментально" не понимаю...

В центре всей проги - TPaintBox, на котором в ходе работы рефрешится изображение. Изображение копируется (TCanvas.CopyRect) из TBitMap. Ну и естественно есть это @$& мерцание, пока правда незначительное, но все равно разражает, так как оно постоянно-переменно. Как его убрать? Если это в принципе невозможно в винде, объясните пожалуйста почему.

Я бы не задал этот вопрос, если бы не видел, что в некоторых программах мерцания в принципе нет. Может сам рефреш и подтормаживает, но холст не заливается белым цветом перед каждой прорисовкой (как я понимаю, именно это вызывает мерцание). Наверное для решения проблемы надо использовать что-то крайне низкоуровневое?
PM MAIL ICQ YIM MSN   Вверх
p0s0l
Дата 4.12.2003, 22:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Г-н Посол
****


Профиль
Группа: Экс. модератор
Сообщений: 3668
Регистрация: 13.7.2003
Где: 58°38' с.ш. 4 9°41' в.д.

Репутация: 58
Всего: 112



Ты PaintBox.Refresh используешь ? Попробуй .Update



--------------------
С уважением, г-н Посол.
PM   Вверх
Limonadni Joe
Дата 4.12.2003, 23:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 311
Регистрация: 1.11.2002
Где: Москва

Репутация: нет
Всего: 2



В процедуре обработки TPaintBox.OnPaint я использую TPaintBox.Canvas.CopyRect.
PM MAIL ICQ YIM MSN   Вверх
<Spawn>
Дата 5.12.2003, 06:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Око кары:)
****


Профиль
Группа: Экс. модератор
Сообщений: 2776
Регистрация: 29.1.2003
Где: Екатеринбург

Репутация: 44
Всего: 64



Может DoubleBuffered:= True поможет?


--------------------
"Для некоторых людей программирование является такой же внутренней потребностью, подобно тому, как коровы дают молоко, или писатели стремятся писать" - Николай Безруков.
PM MAIL ICQ   Вверх
Unregistered
Дата 5.12.2003, 10:33 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Может я конечно чего-то не понимаю .... а вы рисовать на битмапе в памяти а потом его копировать на экран не пробовали? wink.gif
  Вверх
Limonadni Joe
Дата 5.12.2003, 11:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 311
Регистрация: 1.11.2002
Где: Москва

Репутация: нет
Всего: 2



<Spawn> У TPaintBox нет св-ва DoubleBuffered, оно только у TWinControl'ов.
Цитата
а вы рисовать на битмапе в памяти а потом его копировать на экран не пробовали
Именно так всё и происходит.
PM MAIL ICQ YIM MSN   Вверх
<Spawn>
Дата 5.12.2003, 12:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Око кары:)
****


Профиль
Группа: Экс. модератор
Сообщений: 2776
Регистрация: 29.1.2003
Где: Екатеринбург

Репутация: 44
Всего: 64



Limonadni Joe дак и поставь у формы(или у другого родительского компонента наследника TWinControl, если это у тебя так) DoubleBuffered в True(у меня для TImage это помогало)

Это сообщение отредактировал(а) <Spawn> - 5.12.2003, 13:00


--------------------
"Для некоторых людей программирование является такой же внутренней потребностью, подобно тому, как коровы дают молоко, или писатели стремятся писать" - Николай Безруков.
PM MAIL ICQ   Вверх
Полудненко Олег
Дата 5.12.2003, 18:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Українець
**


Профиль
Группа: Участник...
Сообщений: 556
Регистрация: 13.8.2003

Репутация: 1
Всего: -11



Не знаю как у ПеинтБокса, а у Имейджа есть такое свойство как Stretch. Так вот, если его сделать ТРУ, то сигание сразу исчезает.
PM MAIL   Вверх
p0s0l
Дата 5.12.2003, 18:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Г-н Посол
****


Профиль
Группа: Экс. модератор
Сообщений: 3668
Регистрация: 13.7.2003
Где: 58°38' с.ш. 4 9°41' в.д.

Репутация: 58
Всего: 112



Как сказал <Spawn>, поставь DoubleBuffered, или же рисуй не в OnPaint, а например, в OnTimer у таймера, но не делай Refresh или Repaint.


--------------------
С уважением, г-н Посол.
PM   Вверх
oleg1973
Дата 6.12.2003, 03:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


asm fanat
****


Профиль
Группа: Экс. модератор
Сообщений: 3283
Регистрация: 16.7.2003
Где: Italy

Репутация: 1
Всего: 34



вывод
надарисовать через директ драв
делать бекбуфер и флипать


--------------------
SST 465555
icq 200-512-712
PM MAIL WWW ICQ   Вверх
Limonadni Joe
Дата 6.12.2003, 22:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 311
Регистрация: 1.11.2002
Где: Москва

Репутация: нет
Всего: 2



<Spawn> Большое спасибо!
oleg1973 А можешь дать ссылки на руководства по DirectDraw для самых новичков в этой области?
PM MAIL ICQ YIM MSN   Вверх
Chess64
Дата 7.12.2003, 13:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 122
Регистрация: 25.9.2003
Где: Набережные Челны

Репутация: нет
Всего: нет



2 Limonadni Joe
Попробуй свойство PainBox'a -> ControlStyle:=[csOpaQue]; - Авось помогет.
--------------------
Aleksey Semyonov aKa LfP
PM MAIL WWW ICQ   Вверх
Limonadni Joe
Дата 7.12.2003, 17:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 311
Регистрация: 1.11.2002
Где: Москва

Репутация: нет
Всего: 2



Chess64 Да уже всё получилось (с DoubleBuffered).
PM MAIL ICQ YIM MSN   Вверх
Cheburek
Дата 4.5.2006, 21:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 74
Регистрация: 26.3.2006

Репутация: нет
Всего: 1



У меня два вопроса по теме:
1. Пригоден ли этот метод для моего случая?( я двигаю по форме TImage с помощью TScrollBar, меняя парамет Left в TImage).
2.Из-за чего оно вообще возникает?Может кто-нибуть знает еще способы избавления это этого (censored) мерцания?(только не DirectDraw)   

Это сообщение отредактировал(а) Cheburek - 4.5.2006, 23:40
PM MAIL   Вверх
zalex
Дата 4.5.2006, 23:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 129
Регистрация: 13.5.2005

Репутация: 2
Всего: 2



Как то боролся с такой проблемой....а потом перешел в Дельфи 7 и проблема исчезла сама, хотя тот же самый код в 6 приводил к мерцанию.  
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1074 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.