![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Перемещение TImage по форме [D7, D2005, XP]
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]спасибо большое, это все надо обкурить и переварить