Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Перемещение TImage по форме [D7, D2005, XP]


Страницы:   1 2

zloi ©   (2008-12-13 10:45:00) 

Добрый день! Передо мной встала задачи прокручивания gif изображений, например у меня есть 20 gif картинок, и мне нужно чтобы они постоянно перемещались по краю формы, например от верхней границы до нижней покругу , чтобы получилось как галерея. Вот у меня возникает вопрос как это лучше реализовать.


{RASkov}   (2008-12-15 12:31:00) [1]

> [32] zloi   (15.12.08 12:23)

Так будет гораздо сложнее.... имхо.
Тебе же картинку нужно "завернуть" в кольцо? Т.е. после последнего кадра идет первый, второй и т.д....
Может быть в твоем случае действительно проще сделать саму анимацию требуемую вида, а затем ее всего лишь поместить в ГифАниматор и всё.
Но тут тоже есть свои минусы.... так что...


zloi   (2008-12-15 12:23:00) [2]


> У меня есть вариант в голове: не перемещать TRxGifAnimator'ы,
>  а менять ихи данные, где содержется анимация...

а нельзя ли как-нибудь сделать чтобы у меня был один TRxGifAnimator а его TGIFImage я бы сделал из всех моих гифок но только один длиннючий и просто его уже перемещать внутри гифаниматора.


{RASkov}   (2008-12-15 11:45:00) [3]

> Т.е. при смене размера

при смене размера родителя, тот который FParent....


{RASkov}   (2008-12-15 11:27:00) [4]

У меня есть вариант в голове: не перемещать TRxGifAnimator'ы, а менять ихи данные, где содержется анимация...
Помоему у TRxGifAnimator'е это TGifImage от TGraphics.... Сами элементы(TGifImage) хранить так же в дин массиве... сейчас нет Rx под руками что бы посмотреть, проверить....
Т.е. при смене размера вывести необходимое кол-во TRxGifAnimator'ов, а потом менять им этот самый ГифИмаге из массива по принцыпу выше...
Но.... но тут я не уверен сохранится ли анимация(т.е. № кадра при смене TGifImage) и возможно ли вообще так с ГифАниматором.... Вообщем пробуй...


{RASkov}   (2008-12-15 11:03:00) [5]

> Pics[N].Height:=Y;

не height а top

> надо ли мне
> while Y<CnvParent.ClipRect.Bottom do begin,

я думаю, что нужно. Чтобы не выводить "лишние" картинки или наоборот повторять их до самого низа, если их мало(не хватает всех на всю высоту родителя)

> и как мне перерисовывать контейнер с моей гифкой.

Контейнером я выше назвал динамический массив с TGraphics.... Тут у тебя будет динмассив с TRxGifAnimator или чем-то кто понимает анимированный гиф.... Ничего перерисовывать не нужно, тебе достаточно манипулировать с left, top, ну и Visible еще возможно нужно.... вместо visible можно сбрасывать у невидимых и назначать видимым (Pics[N].Parent:=nil и Pics[N].Parent:={F}Parent) где Pics: array of TGifAnimator;

> и вот возникает вопрос зачем нам вот эта функция:
> procedure TMyAniPictures.SetParent(const Value: TWinControl);

А как же, нужна для указания родителя для Элементов контейнера(т.е. самим TRxGifAnimator или иже с ним)
Создание Канвы конечно-же не нужно, но сам сеттер я думаю необходим, там можно проконтролировать при необходимости родителя....
Все, я тебе и так много уже понаписал, теперь твоя очередь, напиши свой новый класс и похвались его работой :)


zloi   (2008-12-15 08:37:00) [6]


>  сменится только внутренний контейнер хранения графических
> объектов и немного измениться метод вывода анимации т.е.
>  метод AnimatePics.... т.е. не рисовать с координатами,
> а использовать вероятно Left и Top ГИФОбъектов из контенера.
>

Pics[N].Left:=10;
 Pics[N].Height:=Y;
 Y:=Y+Pics[N].Height;

так и пытаюсь делать, вот потерялся в том надо ли мне
while Y<CnvParent.ClipRect.Bottom do begin, и как мне перерисовывать контейнер с моей гифкой.
и вот возникает вопрос зачем нам вот эта функция:
procedure TMyAniPictures.SetParent(const Value: TWinControl);
begin
FParent := Value;
if not Assigned(CnvParent) then CnvParent:=TCanvas.Create;
CnvParent.Handle:=GetDC(Value.Handle);
end;


{RASkov}   (2008-12-14 21:51:00) [7]

> [26] zloi   (14.12.08 21:09)

Если бы были статичискими, я бы предложил конвертировать их в более родной формат для делфи, например bmp или хотябы jpg.
А для анимированных предлогаю еще раз внимательно взглянуть на код [12] и "немного" его исправить....
Ведь принцип-то остается один и тот же.... сменится только внутренний контейнер хранения графических объектов и немного измениться метод вывода анимации т.е. метод AnimatePics.... т.е. не рисовать с координатами, а использовать вероятно Left и Top ГИФОбъектов из контенера....


zloi   (2008-12-14 21:09:00) [8]

анимированные, и даже больше того хочется загружать их из базы но этому я научился


{RASkov}   (2008-12-14 20:36:00) [9]

> [23] zloi   (14.12.08 15:48)

А ГИФы должны быть анимированные или статичные картинки?


Leonid Troyanovsky   (2008-12-14 16:55:00) [10]


> zloi   (14.12.08 15:48) [23]

> тут насколько я понял происходит рисование на канвасе, но
> как быть с гифками которые мне необходимо двигать?

Сказали ж:

> нужно не менее недели думать об алгоритме, и только потом
> можно копировать...

--
Regards, LVT.


zloi   (2008-12-14 15:48:00) [11]


> {RASkov} ©   (13.12.08 22:49) [12]
> Ой, на скорую руку накидал....

тут насколько я понял происходит рисование на канвасе, но как быть с гифками которые мне необходимо двигать? единственное что нашол это RxLib и компонент TRxGIFAnimator, и получается мне надо его двигать и этот метод не подойдет


Германн   (2008-12-14 01:57:00) [12]


> zloi   (13.12.08 22:38) [10]
>
> хм.. а я всю жысть думал что img:TImage; создаю объект а
> потом img.create(self); инициализирую его родным конструктором
>

Хм. Учебники не в моде. Примеры в стандартной поставке тоже. Дык на что ты расчитываешь в жизни далее?


{RASkov}   (2008-12-14 01:37:00) [13]

> [20] Johnmen ©   (14.12.08 01:31)

Перед копированием нужно не менее недели думать об алгоритме, и только потом можно копировать... если не расхочется)


Johnmen   (2008-12-14 01:31:00) [14]


> {RASkov} ©   (14.12.08 01:11) [19]

Так для копирования или чтобы задуматься об алгоритме?


{RASkov}   (2008-12-14 01:11:00) [15]

> [18] Johnmen ©   (14.12.08 00:43)
> :) так для более или для менее???

Я же уже разрешил в [17])
Так что и те и другие могут с большим удовольствием скопировать тот код :)

Но будте осторожны, при копировании) могут вылезти погрешности, и у вас этот код будет работать не так как задумывалось :)
Для сокращения ошибок выделять код необходимо в брофзере Опера версии 9.xx обязательно мышкой А4Tech, а вставлять только с клавиатуры любой в принципе модели, но желательно с разъемом PS/2 на USBшных большие утечки кода возникают. Так же вставлять желательно в Ворд и уже им сохранять в текстовый файл, а потом уже в проводнике переименовать расширение в pas.... Желаю удачи! :)


Johnmen   (2008-12-14 00:43:00) [16]


> более опытныйкопировать не будет,

>  для менее опытныхя и написал что бы не копировали

:) так для более или для менее???


{RASkov}   (2008-12-13 23:34:00) [17]

> [16] Johnmen ©   (13.12.08 23:26)

> но примерно можно задуматься об алгоритме:


А чем вызвано такое внимание и любопытство к моим последним словам в [12]? :)))
Можно копировать, я разрешаю :)
Только я знаю, что более опытный копировать не будет, а для менее опытных я и написал что бы не копировали)
Там может быть не код, а мысль в [12]..... вот что...


Johnmen   (2008-12-13 23:26:00) [18]


> {RASkov} ©   (13.12.08 23:03) [15]
> :) Я же говорил в начале для чего он)

Прошу прощения, не увидел...
Так зачем же?


{RASkov}   (2008-12-13 23:03:00) [19]

> [13] Johnmen ©   (13.12.08 22:59)
> А зачем он здесь?

Чтобы:

> это все надо обкурить и переварить

:) Я же говорил в начале для чего он)


zloi   (2008-12-13 23:00:00) [20]

спасибо большое, это все надо обкурить и переварить


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо