Ir al contenido


Foto

Como poner un Gif Animado


  • Por favor identifícate para responder
7 respuestas en este tema

#1 monchito_elroro

monchito_elroro

    Advanced Member

  • Miembros
  • PipPipPip
  • 257 mensajes

Escrito 28 abril 2011 - 07:42

Hola amigos, quisiera saber como puedo poner un gif animado en un form, pues al hacerlo con Timage este gif se queda estatico....


Gracias por su atención...
  • 0

#2 seoane

seoane

    Advanced Member

  • Moderador
  • PipPipPip
  • 1.257 mensajes
  • LocationEspaña

Escrito 28 abril 2011 - 07:55

Aquí puede que encuentres lo que buscas
http://delphiaccess....nimaciones-gif/


  • 0

#3 monchito_elroro

monchito_elroro

    Advanced Member

  • Miembros
  • PipPipPip
  • 257 mensajes

Escrito 28 abril 2011 - 06:34

gracias por la respuesta, pero en esa página no entendi nada.... hablaba de componentes y más cosas para delphi.

quisiera saber si hay una manera de hacerlo en lazarus

se que la hay pero no se como.....

he probado con una componente que se llama "TGifAnim" pero no se inserta en el IDE  da error..


porfis si me pueden dar la mano...
  • 0

#4 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.409 mensajes
  • LocationRepública Dominicana

Escrito 29 abril 2011 - 08:34

AnimatedGif for Lazarus

Prueba con eso.

Saludos.
  • 0

#5 monchito_elroro

monchito_elroro

    Advanced Member

  • Miembros
  • PipPipPip
  • 257 mensajes

Escrito 29 abril 2011 - 12:47

gracias por responder amigo, pero que es lo que tengo que hacer con esos archivos:

animatedgif.pas
membitmap.pas

un ejemplito no cairía mal.
  • 0

#6 monchito_elroro

monchito_elroro

    Advanced Member

  • Miembros
  • PipPipPip
  • 257 mensajes

Escrito 13 mayo 2011 - 07:50

Gracias a todos, porfin pude poner un gif en lazarus, después de estar
intento tras intento y de bajarme tantos complementos como Units que al final
no puede integrarlos en Lazarus y si se integraban daban error...

Y como no pude realizar mi objetivo en sí (poner gif en form) con todo lo demás
opte por hacer lo siguiente (gracias a mightydragon_lord por la idea):

agarré el dichoso GIF y le extraje sus FRAMES (es decir las imágenes que
lo componen) con el programa "GIFFrame"....y traté de usar el Ttimer + el timage para
darle solución a mi problema....

Acontinuación les comparto mis dos pruebas que tuvieron éxito:


PRIMER INTENTO: (Ttimer + timage + 3 imagenes en PNG)



delphi
  1. unit Unit1;
  2.  
  3. {$mode objfpc}{$H+}
  4.  
  5. interface
  6.  
  7. uses
  8.   Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs,
  9.   ExtCtrls;
  10.  
  11. type
  12.  
  13.   { TForm1 }
  14.  
  15.   TForm1 = class(TForm)
  16.     Image1: TImage;
  17.     Timer1: TTimer;
  18.     procedure Timer1Timer(Sender: TObject);
  19.   private
  20.     { private declarations }
  21.   public
  22.     { public declarations }
  23.   end;
  24.  
  25. var
  26.   Form1: TForm1;
  27.   indice: integer;
  28.   archivo: string;
  29.  
  30. implementation
  31.  
  32. {$R *.lfm}
  33.  
  34. { TForm1 }
  35.  
  36. procedure TForm1.Timer1Timer(Sender: TObject);
  37. begin
  38.   if (indice < 1) or
  39.     (indice > 3) then
  40.     indice:= 1;
  41.   archivo:= 'imagen'+inttostr(indice)+'.PNG';
  42.   image1.Picture.LoadFromFile(archivo);
  43.   indice:= indice + 1;
  44. end;
  45.  
  46. end.



En esta primera prueba tuve que tener las tres imágenes PNG en el mismo directorio
pues si separaba el programa de las imágenes salía ERROR....



SEGUNDO INTENTO: (ttimer + timage + 'archivo de recursos')



delphi
  1. unit Unit1;
  2.  
  3. {$mode objfpc}{$H+}
  4.  
  5. interface
  6.  
  7. uses
  8.   Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, ExtCtrls,
  9.   lresources, StdCtrls;
  10.  
  11. type
  12.  
  13.   { TForm1 }
  14.  
  15.   TForm1 = class(TForm)
  16.     Image1: TImage;
  17.     Label1: TLabel;
  18.     Timer1: TTimer;
  19.     procedure Image1Click(Sender: TObject);
  20.     procedure Label1Click(Sender: TObject);
  21.     procedure Timer1Timer(Sender: TObject);
  22.   private
  23.     { private declarations }
  24.   public
  25.     { public declarations }
  26.   end;
  27.  
  28. var
  29.   Form1: TForm1;
  30.   indice: integer;
  31.   archivo: string;
  32.  
  33. implementation
  34.  
  35. {$R *.lfm}
  36.  
  37. { TForm1 }
  38.  
  39. procedure TForm1.Image1Click(Sender: TObject);
  40. begin
  41.  
  42. end;
  43.  
  44. procedure TForm1.Label1Click(Sender: TObject);
  45. begin
  46.  
  47. end;
  48.  
  49. procedure TForm1.Timer1Timer(Sender: TObject);
  50. begin
  51.   if (indice < 1) or
  52.     (indice > 3) then
  53.     indice:= 1;
  54.   archivo:= 'imagen'+inttostr(indice);
  55.   image1.Picture.LoadFromLazarusResource(archivo);
  56.   indice:= indice + 1;
  57.  
  58.  
  59.  
  60.  
  61.   //image1.Picture.LoadFromLazarusResource('imagen1');
  62. end;
  63.  
  64. initialization
  65. {$I monchito.lrs}
  66. end.



Ahora si se dan cuenta es este segundo programa no use las Imágenes PNG
sino más bien un archivo de RECURSO de lazarus en el cual metí las imagenes
y al final todo se compilaba como un solo programa (las imágenes estarían ya dentro
de mi programa y no habría dependencias)

como lo hice..?

Si gustan pueden pasar por aca:
http://wiki.lazarus....us_Resources/es

ahí lo explican....

pero por siaca les cuento como lo hice:


1. me fui a C:\lazarus\tools
2. dentro de esta carpetita hay un archivo llamado lazres.lpi
3. abren "lazres.lpi" y lo contruyen desde lazarus
4. ahora en C:\lazarus\tools aparecerá un programa llamado lazres.exe
5. lazres.exe será el compilador para Crear RECURSOS para lazarus
6. yo tenía tres imagenes PNG y el recurso lo cree así (desde cmd deben estar en C:\lazarus\tools)

----------------------------------------------------------------------------
C:\lazarus\tools>lazres monchito.lrs imagen1.png imagen2.png imagen3.png
----------------------------------------------------------------------------


al final crea mi recurso que se llama "monchito.lrs" este archivo es el único que nos interesa....

ahora lo único que tengo que hacer es unirlo a mi programa agregandolo en las
siguientes ubicaciones del código fuente:

en:
uses
  Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, ExtCtrls,
  lresources; <--- agregamos este código osea "lresources"

ahora al final del código fuente agregamos esto:

end;

initialization      <----- lo agregamos
{$I monchito.lrs}  <----- agregamos nuestro recurso
end.                <-- final de todo


bueno y para utilizarlo todo dentro de nuestro programa pueden ver mi código
de arriba.....



agradezco a todos por su apoyo
en especial a egostar y mightydragon_lord......

y les mando mi programa con las tres imágenes para que me crean....
 
  • 0

#7 escafandra

escafandra

    Advanced Member

  • Moderadores
  • PipPipPip
  • 4.000 mensajes
  • LocationMadrid - España

Escrito 14 mayo 2011 - 02:36

Gracias a todos, porfin pude poner un gif en lazarus...

...agarré el dichoso GIF y le extraje sus FRAMES (es decir las imágenes que
lo componen) con el programa "GIFFrame"....y traté de usar el Ttimer + el timage para
darle solución a mi problema....


Me alegro de que hayas conseguido implementar tu código :).
 

Aquí puede que encuentres lo que buscas
http://delphiaccess....nimaciones-gif/


Quizás si hubieses indagado mas en lo que te propuso seoane, hubieses dado menos vueltas... No intervine pensando que buscabas un componente hecho y terminado para lazarus, pero ahora que veo que no te importaba realizar tu propia implementación quizás te interese retomar este punto.

TGifViewer es un componente para delphi y Builder, pero lo puedes adaptar a lazarus. Se basa en la clase TGIF, una clase general que puedes adaptar a lazarus  con la que puedes extraer los frames independientes y otros muchos datos del archivo gif. TGIF. TGifViewer muestra los frames ayudándose de un Timer, tal y como terminaste haciendo tu, pero no le hacen falta recursos ni tratamientos externos del GIF, de eso se encarga la clase TGIF

TGIF es casi independiente de la API de Windows. En su versión para delphi creo recordar que sólo la use para reservar memoria (VirtualAlloc y VirtualFree) que fácilmente puedes sustituir para independizarlo de windows.

Si te animas puedes realizar tu componente para lazarus  :)  ;)



Saludos.


  • 0

#8 escafandra

escafandra

    Advanced Member

  • Moderadores
  • PipPipPip
  • 4.000 mensajes
  • LocationMadrid - España

Escrito 19 junio 2011 - 10:44

Me he animado y he adaptado la clase TGif para Lazarus. También he realizado una pequeña aplicación de ejemplo.

Puedes consultarlo aquí.

Saludos.


  • 0