Ir al contenido


Foto

Gif animado en TImage


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

#1 mav

mav

    Member

  • Miembros
  • PipPip
  • 16 mensajes

Escrito 13 marzo 2012 - 04:14

Hola.
Hasta Delphi2006, para poner un gif animado en un Timage usaba la VCL de Melander TGifimage, a partir de Delphi2007
esta Vcl está incluida, y la opción de animar gifs está desactivada, una manera de seguir haciendo lo mismo seria
recompilar  TGifImage activando la animacion y sustituir la dcu incluida en Delphi por el resultado de la compilación.
              Otras formas de hacerlo sin modificar la dcu serian:
            1-Establecer la variable global 'GifImageDefaultAnimate:==True', antes de "instanciar" el objeto TGifImage.
          2-...'(Image2.Picture.Graphic as TGifImage).Animate:= True;'
      Mis preguntas, dudas y demás... son: Dado el siguiente código en el que tengo un gif animado en el Image2
              ¿Donde, como y porqué?..coloco el "source" donde animar el gif, de las dos maneras.  


delphi
  1. unit Unit1;
  2. interface
  3. uses
  4.   Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  5.   Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.Imaging.GIFImg, Vcl.Imaging.jpeg,
  6.   Vcl.ExtCtrls, Vcl.StdCtrls;
  7.  
  8. type
  9.   TForm1 = class(TForm)
  10.     Button1: TButton;
  11.     Image1: TImage;
  12.     Image2: TImage;
  13.     Button2: TButton;
  14.     procedure Button1Click(Sender: TObject);
  15.  
  16.   private
  17.     { Private declarations }
  18.   public
  19.     { Public declarations }
  20.   end;
  21.  
  22. var
  23.   Form1: TForm1;
  24. implementation
  25.  
  26. {$R *.dfm}
  27. procedure TForm1.Button1Click(Sender: TObject);
  28. function IsWindowsGenuine() : Boolean;
  29. const
  30.   app_guid : TGUID = '{55C92734-D682-4D71-983E-D6EC3F16059F}';
  31.   module  : string = 'Slwga.dll';
  32.   api      : string = 'SLIsGenuineLocal';
  33. var
  34.   app_id : TGUID;
  35.   state  : Byte;
  36.   ret    : HRESULT;
  37.   CheckGenuine : function (var appID : TGUID ; var result : Byte ; uReserved : Pointer): HRESULT;stdcall;
  38. begin
  39.   CheckGenuine := GetProcAddress(LoadLibrary(PChar(module)),PChar(api));
  40.   if @CheckGenuine <> nil then
  41.   begin
  42.     app_id := app_guid;
  43.     ret := CheckGenuine(app_id,state,nil);
  44.     if Succeeded(ret) then
  45.     begin
  46.       Result := (state = 0);
  47.       SetLastError(ERROR_SUCCESS);
  48.     end
  49.     else
  50.     begin
  51.       Result := False;
  52.       SetLastError(ERROR_ACCESS_DENIED);
  53.     end;
  54.   end
  55.   else
  56.   begin
  57.     Result := False;
  58.     SetLastError(ERROR_INVALID_FUNCTION);
  59.   end;
  60. end;
  61.  
  62. begin
  63.   if (IsWindowsGenuine()) and (GetLastError() = ERROR_SUCCESS) then
  64.     ShowMessage('Estas usando una copia original de Windows.')
  65.   else
  66.   ShowMessage('Tu windows es mas pirata que John Silver.');
  67.   Readln;
  68.   end;
  69. end.


..por supuesto, gracias por todas las respuestas
      saludos a todos.
        Miguel
  • 0

#2 cadetill

cadetill

    Advanced Member

  • Moderadores
  • PipPipPip
  • 994 mensajes
  • LocationEspaña

Escrito 15 marzo 2012 - 02:26

Buenas,

No sé a qué componente te refieres porque el TImage (ni sus ancestros) tienen dicha propiedad. No obstante, sea el componente que sea, le veo dos opciones

1.- te dedifenes en la misma unit una nueva clase que haga visible esa propiedad y luego "casteas" tu TImage a la nueva clase y estableciendo el atributo al valor deseado



delphi
  1. TMyImage = class(TImage)
  2. public
  3.   property GifImageDefaultAnimate;
  4. end;
  5.  
  6. ....
  7.  
  8. procedure TForm1.LoQueSea(....);
  9. begin
  10.   TMyImage(Image1).GifImageDefaultAnimate := true;
  11. end;



2.- o bien usas clases interpuestas (léete este gran artículo del Ian Marteens donde lo explica de lujo)

Espero te sirva

Nos leemos

  • 0

#3 mav

mav

    Member

  • Miembros
  • PipPip
  • 16 mensajes

Escrito 19 marzo 2012 - 05:12

Practicamente resuelto :


delphi
  1. ..........
  2. .............
  3. type
  4.   TForm1 = class(TForm)
  5.     Button1: TButton;
  6.     Image1: TImage;
  7.     Image2: TImage;
  8.     Button2: TButton;
  9.                   procedure FormCreate(Sender: TObject);//!!!!!!!
  10.     procedure Button1Click(Sender: TObject);
  11.  
  12.  
  13.   private
  14.     { Private declarations }
  15.   public
  16.     { Public declarations }
  17.   end;
  18.  
  19. var
  20.  
  21.   Form1: TForm1;
  22.  
  23. implementation
  24.  
  25. {$R *.dfm}
  26. procedure TForm1.FormCreate(Sender: TObject);
  27. begin
  28.                                                   //GIFImageDefaultAnimate := True;¡ Esto no funciona!
  29.                                     (Image2.Picture.Graphic as TgifImage).Animate:= True;//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
  30.   end;
  31. procedure TForm1.Button1Click(Sender: TObject);
  32. function IsWindowsGenuine() : Boolean;
  33. .....................
  34. .......................

    ...en el evento create cambiamos a true el animate y ya tenemos el gif animado, desde aquí también
podriamos controlar la transparencia del gif y controlar la animación con-AnimateLoop ,AnimateSpeed..
  Saludos a todos.
                          Fuentes y ejecutable :
                              http://www.mediafire...5ua86kb2awb814z
                Por cierto ¿Como se adjunta un archivo, no veo la opción?
                                                        Miguel
  • 0

#4 escafandra

escafandra

    Advanced Member

  • Administrador
  • 4.107 mensajes
  • LocationMadrid - España

Escrito 19 marzo 2012 - 09:33

Prueba a usar TGifViewer.

Saludos.


  • 0




IP.Board spam blocked by CleanTalk.