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 1220 korisnika na forumu :: 78 registrovanih, 9 sakrivenih i 1133 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: 357magnum, A.R.Chafee.Jr., ajo baba, AleksSE, Alexandar-1973, anta, antonije64, Arsenije, Asteker, Azzo, Belac91, blatruc82, Bojan198527, Boris BM, bpvl, CikaKURE, colji, d.arsenal321, del boy, DM1994, Dragon Order, Dzigy, Electron, FileFinder, Frunze, galerija, glisok, gomago, Hardenberg, ivan_8282, Jakonjveliki, jodzula, kaisarevic1, Kalem, Kanader, karevski, koom0001, Kubovac, lacko, LastTsar, leptirleptir, ljuba.b, Macalone, marko308, mayorlany, menk, mercedesamg, Mi lao shu, Milos ZA, MilosKop, milutin134, Mineral, mix1, moldway, nenad81, nobutado, Papadubi, predragc, PrincipL, R_038, Relixiran, samipag822, sixpac, sluga, stegonosa, Str2022, synergia, Szigetwar, Trivo, vathra, vjetar, vranjanac29, x9, yrraf, ZetaMan, Zimbabwe, zlaya011, Đurđevdan