Форум: "Прочее";
Текущий архив: 2006.06.11;
Скачать: [xml.tar.bz2];
ВнизАнимация Найти похожие ветки
← →
boalse © (2006-05-15 12:56) [0]Надеюсь, кому-нибудь пригодится. Класс для воспроизведения анимации в Windows-приложениях, хранящейся в одном bmp-файле (потоке).
Воспроизведение идёт на любом канвасе без всяких там таймеров. Предусмотрены достаточно большие возможности по управлению анимацией.
http://boalse.narod.ru/TAnimation.rar
Естественно, буду рад, если укажете на ошибки.
← →
API © (2006-05-15 14:20) [1]1. Лучше реализовать в виде компонента.
2.PAnimation = ^TAnimation;
- и иже с ними - это что это?
3. "Душевно":case FLoopType of
:-)
lpUpDown: FUp:=true;
lpDownUp: FUp:=false;
end;
4. Много участков кода с блокированием/разблокирование канвы - но без try..finally
5. На мой взгляд - многовато логических флажков в классе (и по коду), отображающих разные состояния.
А вообще - как-то подозрительно много кода для такого простого класса.
← →
boalse © (2006-05-15 14:27) [2]> case FLoopType of
> lpUpDown: FUp:=true;
> lpDownUp: FUp:=false;
> end; :-)
Там есть ещё третий вариант (lpUpDownUp), при котором FUp не должно менятся. Можно реализовать более красиво?PAnimation = ^TAnimation; - и иже с ними - это что это?
Там ниже идёт:
TSimpleProc=Procedure(AAnimation:PAnimation);
А ещё ниже сам класс TAnimation в котором есть переменные типа TSimpleProc. Как ещё можно реализовать передачу параметра в TSimpleProc?
Просто TSimpleProc=Procedure(AAnimation:TAnimation); не прокатит
← →
API © (2006-05-15 14:30) [3]Ах да... конструктивизм же проявить надо... :-)
1. Почему не используете TImageList? Там и загрузка из файла, потока, разбитие на кадры, и прозрачность и прочее, прочее, прочее.
2. Класс лучше породить от TComponent, а поток инкапсулировать в классе.
3. На каждый экземпляр класса свой поток - так можно делать, конечно. Но лучше бы сделать некий мастер-класс, который будет обрабатывать временнЫе интервалы и отрисовку всех TAnimation. Создавать/уничтожать единственный экземпляр этого класс в initialization/finalization, плюс оптимизировать, чтобы поток не крутился, когда нету присоединенніх анимаций, ну и все такое...
Если еще что-нибудь придумаю - сообщу дополнительно... :-)
← →
boalse © (2006-05-15 14:32) [4]>Много участков кода с блокированием/разблокирование канвы - но без try..finally
А надо? Как это должно выглядить?
lock
try
Draw
finally
UnLock
end;
Так???
>А вообще - как-то подозрительно много кода для такого простого класса
Это всё комменты:)
>А вообще - как-то подозрительно много кода для такого простого класса.
Я не представляю, как это может выглядеть иначе. Сколько смотрел в код, ничего лишнего не нашел.
← →
API © (2006-05-15 14:36) [5]Там есть ещё третий вариант (lpUpDownUp), при котором FUp не должно менятся.
Понятно.
Как вариант:if (FLoopType <> lpUpDownUp) then
FUp := FLoopType = lpUpDown;
P.S. Но это так, к слову... :-)
Просто TSimpleProc=Procedure(AAnimation:TAnimation); не прокатит
Почему? Что мешает? Может, я чего не доглядел?
← →
Zeqfreed © (2006-05-15 14:36) [6]
> > case FLoopType of
> > lpUpDown: FUp:=true;
> > lpDownUp: FUp:=false;
> > end; :-)
>
>
> Там есть ещё третий вариант (lpUpDownUp), при котором FUp
> не должно менятся. Можно реализовать более красиво?
По всей видимости так:FUp := (FLoopType = lpUpDown);
← →
boalse © (2006-05-15 14:39) [7]>Лучше реализовать в виде компонента.
Не люблю я компоненты, предпочитаю отдельные классы
>TComponent
Не понял зачем это? Какие от этого возможности появятся? Что ускорится? Не вижу смысла, просветите.
>Но лучше бы сделать некий мастер-класс
Тоже вариант, но это уже будет слишком громоздко для программ, где нужно отобразить пару красивых анимаций в окне.
>Почему не используете TImageList?
Учтёмсс.
← →
Zeqfreed © (2006-05-15 14:40) [8]В [6] имел в виду
FUp := (FLoopType = lpUpDown) and not (FLoopType = lpUpDownUp);
:)
← →
Zeqfreed © (2006-05-15 14:42) [9]Ой, блин. :)
Все, я посыпаю голову пеплом. В [5] правильный вариант. А я чего-то не то подумал как обычно.
← →
boalse © (2006-05-15 14:44) [10]>Как вариант:
Да, точно, спасибо.
>По всей видимости так:
>FUp := (FLoopType = lpUpDown);
неееааа!
>Почему? Что мешает? Может, я чего не доглядел?
TSimpleProc=Procedure(AAnimation:TAnimation);
TAnimation=class(TThread)
...
P1: TSimpleProc;
...
Компилятор ругнётся, потому что на момент объявления типа TSimpleProc он не будет знать о существовании TAnimation. Но почему-то, при объявлении указателя на TAnimation не ругается.
← →
API © (2006-05-15 14:47) [11]Не люблю я компоненты, предпочитаю отдельные классы.
Какие от этого возможности появятся? Что ускорится? Не вижу смысла, просветите.
Вы, насколько я понимаю, выложили свой класс на всеобщее обозрение, и, возможно, всеобщее использование. Начальная идеология Delphi - компонентная. То есть, просто... эээ... компонент - это так принято. :-)
Плюс к тому же, "настраивать" анимации в дизайн-тайм, загружать растры (в тот же DFM) - удобнее при работе с компонентами. Тем и хороша Delphi IDE, что можно почти все увидеть на этапе разработки.
>Но лучше бы сделать некий мастер-класс
Тоже вариант, но это уже будет слишком громоздко
А это уже как Вы реализуете - так и будет. ;-)
← →
Zeqfreed © (2006-05-15 14:49) [12]I>
> Компилятор ругнётся, потому что на момент объявления типа
> TSimpleProc он не будет знать о существовании TAnimation.
> Но почему-то, при объявлении указателя на TAnimation не
> ругается.
Можно добавить строкуTAnimation = class;
перед объявлением TSimpleProc и компилятор будет знать что далее должно будет встретиться объявление TAnimation.
← →
API © (2006-05-15 14:49) [13]
TAnimation = class;
TSimpleProc=Procedure(AAnimation:TAnimation);
TAnimation=class(TThread)
...
P1: TSimpleProc;
← →
antonn © (2006-05-15 14:49) [14]тоже писал когда то подобное... имхо, лучше в классе иметь TList, для кадров создавать битмапы ипомещать на них указатели в TList. Плюс - битмапы могут быть разных габаритов. Но это - если нужно подобное...
← →
API © (2006-05-15 14:55) [15]имхо, лучше в классе иметь TList, для кадров создавать битмапы ипомещать на них указатели в TList
Я бы ограничился TImageList...
Плюс, не инкапсулировать бы его в класс аниматора, а сделать опубликованное свойство типа TImageList, и привязывать это свойство к любому ImageList"у, при необходимости "на лету" меняя анимацию. Кроме того, при необходимости воспроизвести анимации с одинаковыми наборами кадров в нескольких местах, будут беречься ресурсы - так как сами растры будут хранится только в одном месте.
Ну и все такое...
← →
boalse © (2006-05-15 15:06) [16]API © (15.05.06 14:49) [13]
Кррруто! Не знал такого! Спасибо!
← →
liven © (2006-05-15 15:10) [17]
> Надеюсь, кому-нибудь пригодится. Класс для воспроизведения
> анимации в Windows-приложениях, хранящейся в одном bmp-файле
> (потоке).
> Воспроизведение идёт на любом канвасе без всяких там таймеров.
> Предусмотрены достаточно большие возможности по управлению
> анимацией.
>
> http://boalse.narod.ru/TAnimation.rar
>
> Естественно, буду рад, если укажете на ошибки.
>
хорошая вешь! посиба!
← →
boalse © (2006-05-15 15:11) [18]Хотелось бы получить ответ на это:
>>Много участков кода с блокированием/разблокирование канвы - но без
>>ry..finally
>А надо? Как это должно выглядить?
>lock
>try
> Draw
>finally
> UnLock
>end;
>Так???
← →
boalse © (2006-05-15 15:13) [19]
> хорошая вешь! посиба!
Рад, что понравилось.
← →
API © (2006-05-15 15:22) [20]Так???
Так.
А что не нравится?
Страницы: 1 вся ветка
Форум: "Прочее";
Текущий архив: 2006.06.11;
Скачать: [xml.tar.bz2];
Память: 0.5 MB
Время: 0.021 c