Questo tutorial ha lo scopo di far vedere come poter inserire una foto GIF in una form di delphi (io l'ho sperimentato su lazarus, quindi dovrebbe funzionare anche su Borland Delphi, altrimenti fatemelo notare).

Innanzitutto dico che si tratta di un "trucchetto" nel senso che noi non andremo a inserire nel form veramente un'immagine gif, ma piuttosto una serie di immagini png o jpg.

La teoria del procedimento è la seguente:

- Data un'immagine GIF la si divide in tutti i suoi fotogrammi componenti.

- Si inserisce il primo fotogramma in una normale TImage

- Attraverso un TTimer facciamo cambiare ogni intervallo t di tempo l'immagine.

Vediamo nella pratica:

Intanto procuriamoci il programma gratuito GIFFrame dal seguente link. E' molto intuitivo il suo funzionamento: apriamo l'immagine che ci interessa con Open... e clicchiamo successivamente su save all... nella schermata che ci viene fuori scegliamo come Output Names un nome facile da poter riscrivere. Poi ovviamente ognuno adatta al proprio bisogno. ATTENZIONE: ricordatevi comunque di LASCIARE IL SIMBOLO % in modo che ogni fotogramma avrà nome numerato. Nell'esempio che descrivo io da un'immagine vittoria.gif salvo i suoi venti fotogrammi come Output Names: i%  e Format: png cosicchè avrò nella cartella di destinazione 20 fotogrammi di nome i0.png, i1.png, i2.png .... i19.png

Per comodità inserisco questi fotogrammi in una cartella img all'interno della cartella del programma in cui desidero immettere queste immagini.

A questo punto avrò la cartella img con venti fotogrammi come descritto sopra.

inserisco nella form una TImage di name Image1 e ci inserisco il primo fotogramma come Picture dunque inserisco il componente TTimer di name Timer1.

Il codice sarà il sequente:

 

procedure TVictoryForm.FormCreate(Sender: TObject);
begin
s:=0;
Timer1.Enabled:= true;
end; 

attivo il Timer1 e pongo il valore della variabile globale che ho opportunamente dichiarato prima (integer) come 0

dunque il codice del Timer1:

 

procedure TVictoryForm.Timer1Timer(Sender: TObject);
begin
s:=s+1;
Image1.Picture.LoadFromFile(ExtractFilePath(ParamStr(0))+'img\i'+IntToStr(s)+'.png');
if s=19 then s:=0;
end;

in questo modo il Timer ogni intervallo di tempo t cambierà immagine e prenderà sempre il fotogramma successivo. Io ho impostato l'intervallo a 100 ovviamente si può adattare secondo le esigenze.

NOTE:

  • ExtractFilePath(ParamStr(0)) restituisce la cartella in cui è situato il programma che si sta sviluppando.
  • Avendo noi 20 fotogrammi con l'ultimo di nome i19.png, quando i diventa 20 il programma andrebbe in crash cosicchè mettiamo la condizione che una volta arrivato a 19 riinizi da 0. In questo modo l'immagine sarà movimentata ciclicamente. Se volete che dopo un giro si fermi, basta porre la condizione

 

(*...*)
if i=19 then Timer1.Enabled:= false;
(*...*)
  • la riga Image1.Picture.LoadFromFile(ExtractFilePath(ParamStr(0))+'img\I'+IntToStr(s)+'.png'); serve semplicemente a cambiare immagine alla Image1 dandogli tra parentesi il percorso con nome e estensione dell'immagine da inserire.

Questo è un semplicissimo metodo per avere "immagini movimentate in una form" senza bisogno di installare componenti aggiuntivi

Spero di essere stato chiaro altrimenti chiedete pure.