TGifImage .ActiveImage problem (gif trenutni frejm)

2

TGifImage .ActiveImage problem (gif trenutni frejm)

offline
  • Igor Đorđević
  • Pridružio: 28 Sep 2007
  • Poruke: 39
  • Gde živiš: Bor, Srbija

Hvala svima na trudu i pomoci Smile

Jesam, ako na ovo mislis...

((BugA)) ::Pokusavao sam sa OnPaint dogadjajem forme (TImage nema ovu mogucnost), ali nista nisam postigao. Cak sam postavio globalnu promenjivu koja sluzi kao brojac prolaza kroz proceduru, i ona raste, a ono ActiveImage stoji zakovano na -1.

E sad, primetio sam nesto interesantno... Ovaj globalni brojac (okida se na OnPaint forme) stigne do 30 kad animacija obrne ceo krug, a toliko i ima frejmova unutar gifa! Znaci, mogao bi na neki takav nacin da sredim brojac frejmova, ali... Kad ukljucim [goDirectDraw] kako animacija ne bi treperila, onda se vise procedura OnPaint ne okida, oba brojaca stoje na pocetnim vrednostima (0 i -1).

Forma nema okidac OnAnimate, pa mi nije jasno kako su oni to sredili u svom primeru. Pretrazio sam sve .pas fajlove unutar tog primera, i nigde nisam nasao proceduru koja bi evenutalno okidala ovaj dogadjaj/proceduru.


Inace evo sta sam dobio kao odgovor na drugom forumu...

Citat:>> one OnAnimate procedure, ali tu nastaje problem. Nikako ne mogu da skontam sta nju okida.

Worker thread.

Evo primera, a pivo pamtim Smile

unit Unit1; interface uses   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,   Dialogs, GIFImage, ExtCtrls, StdCtrls; type   TForm1 = class(TForm)     Image: TImage;     Button1: TButton;     procedure Button1Click(Sender: TObject);   private     GIF            : TGIFImage;     procedure OnAnimate(Sender: TObject);      public   end; var   Form1: TForm1; implementation {$R *.dfm} procedure TForm1.OnAnimate(Sender: TObject); begin   if (TGIFPainter(Sender).ActiveImage < 0) then     Caption := ''   else     Caption := ' Frame '+IntToStr(TGIFPainter(Sender).ActiveImage+1) + ' of '+IntToStr(TGIFPainter(Sender).Image.Images.Count); end; procedure TForm1.Button1Click(Sender: TObject); begin   GIF := TGIFImage.Create;   try     Gif.LoadFromFile('slika.gif'); //    Image.Picture.Assign(Gif);     GIF.OnPaint := OnAnimate;     Image.Picture.Assign(GIF);   finally     GIF.Free;   end;   TGifImage(Image.Picture.Graphic).DrawOptions := TGifImage(Image.Picture.Graphic).DrawOptions + [goDirectDraw]; end; end.


Ovo radi!!! Smile))

Jos kad bi mogao da shvatim sta se desava u tih par linija koda, tj. u cemu je glavna caka pa onako nece da radi? Nije mi jasno to sa worker thread-om. Sta je Sender za proceduru OnAnimate? Zbog cega potreba da se uvodi GIF tipa TGIFImage, i zasto se ucitava iz fajla? Ne moze li da se direktno u TImage unese gif (u design modu), pa da se on dodeli umesto Sender?

p.s. Stavio sam ono jedno Image.Picture.Assign(Gif); pod komentar, nije potrebno Wink



Registruj se da bi učestvovao u diskusiji. Registrovanim korisnicima se NE prikazuju reklame unutar poruka.
Ko je trenutno na forumu
 

Ukupno su 1412 korisnika na forumu :: 27 registrovanih, 3 sakrivenih i 1382 gosta   ::   [ Administrator ] [ Supermoderator ] [ Moderator ] :: Detaljnije

Najviše korisnika na forumu ikad bilo je 3466 - dana 01 Jun 2021 17:07

Korisnici koji su trenutno na forumu:
Korisnici trenutno na forumu: Alibaba1981, bojcistv, Bubimir, CikaKURE, comi_pfc, cvrle312, Dimitrise93, Dorcolac, GandorCC, hyla, janbo, loon123, Luka Blažević, M1los, Mi lao shu, milimoj, mrav pesadinac, novator, Outis, shaja1, Trpe Grozni, Tvrtko I, VJ, Vlada1389, vukdra, Wrangler, zziko