Hvala svima na trudu i pomoci
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
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!!! ))
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
|