Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2009.03.15;
Скачать: CL | DM;

Вниз

Плавный переход   Найти похожие ветки 

 
antonn ©   (2009-01-25 16:29) [40]

Тут неправильный подход.
Нужно не в цикле рисовать 255 картинок, ожидая пока все "продавит", а таймером с малой задержкой рисовать лишь часть кадров (ну как выше сказано штук 30). Тогда анимация будет одинаково длиться по времени на любых компьютерах (исключая древноту типа P166, разумеется)


 
CodeMaster ©   (2009-01-25 16:49) [41]

Вот ещё один вопрос у меня эффект морфинга используется при наведении на кнопку. Но когда идёт морфинг и я навожу курсор на другую кнопку с ней морфинга не происходит. Ожидается когда закончится морфинг с предыдущей кнопкой, а потом уже начинается морфинг с кнопкой на которую я навёл курсор.
Можно ли это исправить?


 
CodeMaster ©   (2009-01-25 16:50) [42]

Вот код на вхождение в кнопку:
var

Bm1,Bm2: TBitmap;

i: Integer;
x,y: Integer;
begin

  Bm1:= TBitmap.Create;
  Bm2:= TBitmap.Create;
  Bm1.Width:= FrameWidth;
  BM2.Width:= FrameWidth;
  Bm1.Height:= FrameHeight;
  Bm2.Height:= FrameHeight;

if Clicked then begin

BitBlt(Bm1.Canvas.Handle,0,0,FrameWidth,FrameHeight,BackBitmap.Canvas.Handle,Fra meWidth * (FrameCount div 2),0,SRCCOPY);
 BitBlt(Bm2.Canvas.Handle,0,0,FrameWidth,FrameHeight,BackBitmap.Canvas.handle,Fra meWidth * ((FrameCount div 2) + 1),0,SRCCOPY);
end
else begin
BitBlt(Bm1.Canvas.Handle,0,0,FrameWidth,FrameHeight,BackBitmap.Canvas.Handle,0,0 ,SRCCOPY);
 BitBlt(Bm2.Canvas.Handle,0,0,FrameWidth,FrameHeight,BackBitmap.Canvas.handle,Fra meWidth,0,SRCCOPY);
end;

  Morphing(bm1,Bm2);

 Bm1.Destroy;
 Bm2.Destroy;

   inherited;

end;


 
antonn ©   (2009-01-25 18:54) [43]

вот глянь пример - http://desksoft.ru/index.php?downloads=attachments&id=136
сильно тормозит? у меня - никак, код твой :)
параметры "быстродействия" подкручиваются в функции OnDraw_out (в ней в примере рисуется всего 10 кадров из 255) и интервалом срабатывания таймера (свой юзется потому, что он точнее TTimer).

Конечно для каждого объекта должен быть свой таймер, move_pos и bt_progress, чтобы они независимо работали.

По самой реализации - можно еще рисовать картинку с альфаканалом с переменной прозрачностью, а не просто перерисовывать полностью бекграунд кнопки. Такой подход дает возможным сделать группированые кнопки сложной формы, тогда перерисовка соседней кнопки не будет портить окружающие с пересекающимся бэкграундом. Это более ресурсоемко (хотя где уж тут емкость, все быстро отрабатывает), но позволяет строить интерфейс в более широких рамках.


 
antonn ©   (2009-01-25 19:01) [44]

а сам пример вывода полупрозрачной картинки с определенной прозрачностью ( :) ) есть тут - http://desksoft.ru/index.php?forum=13&th=187&page=1
там на битмап рисуются иконки с альфаканалом, он позволяет рисовать почти в любом месте картинки "в тему", привязки к заднику нет. Таким образом нужен общий бэкграунд и несколько таких кнопок, они могут быть совсем рядом и пересекаться, при этом "активироваться" сразу несколько и не перетирают друг друга при перерисовке (в отличии от скинов плеера, где элементы расположены так, что не пересекаются).


 
codemaster ©   (2009-01-26 11:00) [45]

Всем большое спасибо за помощь



Страницы: 1 2 вся ветка

Текущий архив: 2009.03.15;
Скачать: CL | DM;

Наверх




Память: 0.54 MB
Время: 0.023 c
2-1232957936
smartleds
2009-01-26 11:18
2009.03.15
Добрый день, подскажите плз как интегрировать в программу


15-1231919578
Анна
2009-01-14 10:52
2009.03.15
Отсутствие палитры компонентов в Delphi7


15-1231216463
_VirEx_
2009-01-06 07:34
2009.03.15
mspaint стучится в инет


2-1232749601
donduras
2009-01-24 01:26
2009.03.15
Перетаскивание динамически созданных image


4-1206173020
nikfel
2008-03-22 11:03
2009.03.15
Как удалить файл без восстановления