Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

TImage в Builder v 6.0

7.3K
25 января 2005 года
nirvikalpa
20 / / 25.01.2005
Привет всем. Была написана программа на Бьюлдере 5 выводящая простую анимацию 20-30 кадров в сек. (Для синхронизации использовалась апишная функция ГетТикКаунт()) Все было впорядке. Перекомпилировал этот проект на Бьюлдере 6. началось блыманье при перерисовке, даже при 3-5-10 кадрах в сек!!! И немогу его никак убрать. Может кто-ниб. подскажет как.
259
26 января 2005 года
AlexandrVSmirno
1.4K / / 03.12.2004
Цитата:
Originally posted by nirvikalpa
Привет всем. Была написана программа на Бьюлдере 5 выводящая простую анимацию 20-30 кадров в сек. (Для синхронизации использовалась апишная функция ГетТикКаунт()) Все было впорядке. Перекомпилировал этот проект на Бьюлдере 6. началось блыманье при перерисовке, даже при 3-5-10 кадрах в сек!!! И немогу его никак убрать. Может кто-ниб. подскажет как.


Я бы посоветовал использовать TTimer. Покажи свой код, тогда проблема станет яснее.

7.3K
26 января 2005 года
nirvikalpa
20 / / 25.01.2005
Цитата:
Originally posted by AlexandrVSmirno

Я бы посоветовал использовать TTimer. Покажи свой код, тогда проблема станет яснее.



Использование ТТаймер почемуто дает зависимость происхождения события ОнТайм от движения мыши по форме!!! (я это пробывал на 5-м Бьюлдере). С апишной ГетТикКоунт можно горазда точнее... да и в этой задаче это не важно (блыманье с этим не связанно) Вчера нашел способ убирания его при помощи установления свойства формы Прозрачность в Истинну. А свойство величина_прозр. осатляю в 255 (т.е. форма не прозрачна по сути) Блымы - пропадают!!! Но этот трюк не работает если прогу запускать в Win98,95. (А это нужно!) Т.е. выходит оно появляется в какомто смысле скорее из-за формы чем картинки.
Если интересно попробый любую анимацию через Имаге в Бьюлдере 6 через Таймер или без него это скорее всего не важно. и будет быманье даже при малых fps. Например такй код.

TButton::Clic(...)
{
for(...)
{
...
if(...) // Прорисовка кадра
{
...
Image1->Canvas->Rectangle(...);
Image1->Canvas->Elipse(...);
...
}
Application->ProceseMessage();
}
}

259
26 января 2005 года
AlexandrVSmirno
1.4K / / 03.12.2004
Цитата:
Originally posted by nirvikalpa


Использование ТТаймер почемуто дает зависимость происхождения события ОнТайм от движения мыши по форме!!! (я это пробывал на 5-м Бьюлдере). С апишной ГетТикКоунт можно горазда точнее... да и в этой задаче это не важно (блыманье с этим не связанно) Вчера нашел способ убирания его при помощи установления свойства формы Прозрачность в Истинну. А свойство величина_прозр. осатляю в 255 (т.е. форма не прозрачна по сути) Блымы - пропадают!!! Но этот трюк не работает если прогу запускать в Win98,95. (А это нужно!) Т.е. выходит оно появляется в какомто смысле скорее из-за формы чем картинки.
Если интересно попробый любую анимацию через Имаге в Бьюлдере 6 через Таймер или без него это скорее всего не важно. и будет быманье даже при малых fps. Например такй код.

TButton::Clic(...)
{
for(...)
{
...
if(...) // Прорисовка кадра
{
...
Image1->Canvas->Rectangle(...);
Image1->Canvas->Elipse(...);
...
}
Application->ProceseMessage();
}
}


Вот здесь лежит Энциклопедия Builder качни ее там хороший пример по анимации. Я бы сделал как там через два TImage.

7.3K
28 января 2005 года
nirvikalpa
20 / / 25.01.2005
Цитата:
Originally posted by AlexandrVSmirno

Вот здесь лежит Энциклопедия Builder качни ее там хороший пример по анимации. Я бы сделал как там через два TImage.



Закачал. Прочитал. (оказалось что такая экциклоп. лежит (более точно валяется) на винте :)) Сделал прорисовку в ЗаднийБуфер а из него копированием через Canvas->Draw(...) и также через Canvas->CopyRect(...) делал ... в Win98 все равно блымает!!! Я всеже думаю это из-за ТФорм...

259
28 января 2005 года
AlexandrVSmirno
1.4K / / 03.12.2004
Цитата:
Originally posted by nirvikalpa


Закачал. Прочитал. (оказалось что такая экциклоп. лежит (более точно валяется) на винте :)) Сделал прорисовку в ЗаднийБуфер а из него копированием через Canvas->Draw(...) и также через Canvas->CopyRect(...) делал ... в Win98 все равно блымает!!! Я всеже думаю это из-за ТФорм...


Может быть. Нужно исходники посмотреть и сравнить 5 и 6 стройки.

ЗЫ Там вообще мутотня с AlphaBlend и AlphaBlendValue постоянная. Слои какие-то добавляют. Может в этом фишка? На перерисовку больше времени уходит вот и блымкает.

7.3K
28 января 2005 года
nirvikalpa
20 / / 25.01.2005
Цитата:
Originally posted by AlexandrVSmirno

Может быть. Нужно исходники посмотреть и сравнить 5 и 6 стройки.

ЗЫ Там вообще мутотня с AlphaBlend и AlphaBlendValue постоянная. Слои какие-то добавляют. Может в этом фишка? На перерисовку больше времени уходит вот и блымкает.



Интересный нюанс. Имаге блымает всегда цветом фона того компонента на который он положен. Какбудто этот компонетн до каждой перерисовки картинки заполняет все это место своим цветом. А потом картинка перерисовывается. Присоеденю исходник для Бьюлдера-6. Если можешь посмотри, но там все по обычному... Ты писал "посмотреть и сравнить" - исходники для 5 и 6 одни и теже, ехе-ими созданный работает по разному.

1
28 января 2005 года
kot_
7.3K / / 20.01.2000
Цитата:
Originally posted by nirvikalpa


Интересный нюанс. Имаге блымает всегда цветом фона того компонента на который он положен. Какбудто этот компонетн до каждой перерисовки картинки заполняет все это место своим цветом. А потом картинка перерисовывается. Присоеденю исходник для Бьюлдера-6. Если можешь посмотри, но там все по обычному... Ты писал "посмотреть и сравнить" - исходники для 5 и 6 одни и теже, ехе-ими созданный работает по разному.


 
Код:
void __fastcall TForm1::BitBtn1Click(TObject *Sender)
{
 [COLOR=red]this->DoubleBuffered = true;[/COLOR]
//Сделай вот так и мигать не будет
   if(BitBtn1->Caption == "Start")
   {
     BitBtn1->Caption = "Stop";
     fe = false;
   }
487
29 января 2005 года
ddnh_bc
301 / / 16.09.2003
Цитата:
Originally posted by nirvikalpa


Интересный нюанс. Имаге блымает всегда цветом фона того компонента на который он положен. Какбудто этот компонетн до каждой перерисовки картинки заполняет все это место своим цветом. А потом картинка перерисовывается. Присоеденю исходник для Бьюлдера-6. Если можешь посмотри, но там все по обычному... Ты писал "посмотреть и сравнить" - исходники для 5 и 6 одни и теже, ехе-ими созданный работает по разному.



Естественно оно будет мигать.
В виндах есть такое сообщение WM_ERASEBKGND которое по умочланию приходит к каждому контролу в результате чего тот перерисовывается. Бороться с этим можно несколькими путями - самый простой - использовать свойство DoubleBuffered. Второе - сделать свой контрол, в котором в WndProc отлавливать сообщение WM_ERASEBKGND и обламывать его. В таком случае, фон контрола отрисовываться не будет. Теоретически есть еще один вариант - правда никогда не пробовал - попробовать Brush канвы контрола установить в bsNone.

7.3K
29 января 2005 года
nirvikalpa
20 / / 25.01.2005
Всем спасибо! :)
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог