Page 1 of 2

GIF animados para FWH sin usar DLLs externas!

PostPosted: Mon Apr 07, 2008 10:32 pm
by Antonio Linares
Funcionando sin necesidad de ninguna DLL externa :-)

Aqui teneis un primer ejemplo:
http://rapidshare.com/files/105699956/test.zip.html

Haciendo click sobre el GIF lo detienes, y otro click lo anima

PostPosted: Mon Apr 07, 2008 11:08 pm
by jcaro
Excelente Antonio:

Esa mejora viene en el nuevo build de Abril ??

Saludos,

PostPosted: Tue Apr 08, 2008 6:56 am
by Antonio Linares
Si, una nueva clase TGif para la versión 8.04 :-)

Re

PostPosted: Tue Apr 08, 2008 10:24 am
by softruz
Muy buenas, Una pregunta ¿Tiene algúna propiedad para la velocidad del gif?

Un Saludo.

PostPosted: Tue Apr 08, 2008 2:07 pm
by Antonio Linares
Si, nuestra intención es que pueda modificarse la velocidad de pintado de las distintas imágenes del GIF.

PostPosted: Fri Oct 17, 2008 6:32 pm
by JmGarcia
Como hago para que ese gif se vea en un DIALOGO. Como código fuente y como recursos.

Existe para el RC algo si:
CONTROL "", 1000, "TGit", 0 | WS_CHILD | WS_VISIBLE, 300, 10, 70, 110

Y en el código del PRG algo asi:
REDEFINE GIF NAME "sample.gif" ID 1000 OF oDlg

PostPosted: Fri Oct 17, 2008 7:35 pm
by Antonio Linares
Jose María,

El método Redefine() de la Clase TGif aún no está implementado. De momento lo que puedes hacer es crear el control GIF desde la claúsula ON INIT del diálogo:
Code: Select all  Expand view
ACTIVATE DIALOG oDlg ON INIT BuildGif( oDlg )

...
function BuildGif( oDlg )

   TGif():New( oDlg, "test.gif", 10, 10 )

return nil

PostPosted: Sat Oct 18, 2008 9:35 am
by JmGarcia
¡¡¡ Funciona !!!

Ahora solo me falta "parar" y "arrancar" el GIF a voluntad ¿ como ?

Quisiera saber, ademas:
Como reducir de tamaño un GIF.
Como poner GIFs en recursos (RC) y como llamarlos.
Como dejar un GIF con fondo trasparente.

Re: GIF animados para FWH sin usar DLLs externas!

PostPosted: Tue Apr 20, 2021 3:32 am
by AIDA
HOLA

a un no se puede redefinir un GIF :?:

REDEFINE GIF oGif ID 4011 OF oSof FILENAME cfile ADJUST


Saluditos :wink:

Re: GIF animados para FWH sin usar DLLs externas!

PostPosted: Tue Apr 20, 2021 9:58 am
by Antonio Linares
Aida,

Aqui tienes una primera versión funcionando. La incluiremos en FWH 21.03

tgif.prg
Code: Select all  Expand view
#include "fivewin.ch"
#include "gif.ch"


CLASS TGif FROM TControl

   DATA  hGif
   DATA  cFilename
   DATA  lAdjust
   DATA  nSizingType
   
   CLASSDATA lRegistered
   
   METHOD New( oWnd, cGifFile, nRow, nCol,;
            nHeight, nWidth, oCursor, lAdjust, bAction )

   METHOD Redefine( nId, oWnd, cGifFile, lAdjust )        
   
   METHOD GetData() INLINE GetGifInfo( ::hGif )
   
   METHOD Play() INLINE FWGifPlay( ::hGif )
   METHOD Stop() INLINE FWGifStop( ::hGif )
   
   METHOD Restart() INLINE FWGifRestart( ::hGif )
   
   METHOD IsRunning() INLINE FWGifIsRunning( ::hGif )
   
   METHOD Destroy() INLINE FWGifEnd()
   
   METHOD SetFile( cFile ) INLINE ::cFileName := cFile, SetWindowText( ::hGif, cFile )
   
   METHOD SetSizing( nType ) INLINE FWSetGIFSizing( ::hGif, nType )
   
   METHOD Refresh()  
   
   METHOD ReSize( nSizeType, nWidth, nHeight ) INLINE ::SetSize( nWidth, nHeight, .T. ),;
                                                      WndSetSize( ::hGif, nWidth, nHeight, .T. )
   METHOD Initiate( hDlg ) INLINE  ::Super:Initiate( hDlg ), ::Default()

   METHOD Default()

ENDCLASS

//----------------------------------------------------------------//

METHOD New( oWnd, cGifFile, nRow, nCol,;
            nHeight, nWidth, oCursor, lAdjust, bAction ) CLASS TGif

    local aData, nNewWidth, nNewHeight, nSizingType
    local hRes
    local cDir, cTempfile

    DEFAULT oWnd    := GetWndDefault(),;
            nRow    := 0,;
            nCol    := 0,;
            lAdjust := .F.
   
   ::nTop    = nRow
   ::nLeft   = nCol
   ::nStyle  = nOR( WS_CHILD, WS_VISIBLE, WS_CLIPCHILDREN )

   ::bLClicked = bAction
   
   ::nSizingType = FWGIF_SIZING_FILE
   
   if nHeight == nil .or. nWidth == nil
      ::nBottom = 100
      ::nRight  = 100
   else
      ::nBottom = nHeight + nRow
      ::nRight = nWidth + nCol
      ::nSizingType = FWGIF_SIZING_CLIP
   endif
       
   ::oWnd    = oWnd
   ::oCursor = oCursor

   ::cFileName = cGifFile
   ::oBrush    = oWnd:oBrush
   ::lAdjust   = lAdjust

   ::Register( )

   if ! Empty( oWnd:hWnd )
      ::Create()
      ::lVisible = .t.
      oWnd:AddControl( Self )
   else
      oWnd:DefControl( Self )
      ::lVisible  = .f.
   endif

   ::Default()

return self

//----------------------------------------------------------//

METHOD Redefine( nId, oWnd, cGifFile, lAdjust )        

   DEFAULT lAdjust := .T.

   ::cFileName = cGifFile
   ::lAdjust   = lAdjust

   ::Register( nOR( CS_VREDRAW, CS_HREDRAW ) )

   if oWnd != nil
      ::oWnd = oWnd
      oWnd:DefControl( Self )
   endif

return Self

//----------------------------------------------------------//

METHOD Default() CLASS TGif

   local hRes, cDir, cTempFile
   local cGifFile := ::cFileName
   local aData, nNewWidth, nNewHeight, nSizingType

   if ! Empty( cGifFile ) .and. ! File( cGifFile )
      hRes  = FindResource( GetResources(), cGifFile, 10 )
      If Empty( hres )
         return nil
      else
         cDir   = GetEnv( "TEMP" )
         if Empty( cDir )
            cDir = GetEnv( "TMP" )
         endif
         cTempfile = cDir + cTempFile( "\", "gif" )
         RCDataToFile( 0, cGifFile, cTempfile )
      endif
   endif  

   If ! Empty( cTempfile )
      ::hGif = FWGifWindow( cTempFile, 0, 0, ::nWidth, ::nHeight, ::hWnd )
   else
      ::hGif = FWGifWindow( cGifFile, 0, 0, ::nWidth, ::nHeight, ::hWnd )
   endif  

   aData = ::GetData()
   
   if ::lAdjust
      nNewWidth  = aData[ FWGIF_WIDTH ]
      nNewHeight = aData[ FWGIF_HEIGHT ]      
   else
      nNewWidth  = ::nWidth
      nNewHeight = ::nHeight
   endif

   ::ReSize( , nNewWidth, nNewHeight )

   if ::lAdjust
      ::nSizingType = FWGIF_SIZING_STRETCH
   endif      
   ::SetSizing( ::nSizingType )

   If ! Empty( cTempfile )
      FErase( cTempfile )
   endif

return nil

//----------------------------------------------------------//

METHOD Refresh() CLASS TGif

   local nSizingType := ::nSizingType
   local aData := ::GetData()
   local nNewWidth := aData[ FWGIF_WIDTH ],;
         nNewHeight := aData[ FWGIF_HEIGHT ]
     
   
   if ::lAdjust  
      if nSizingType != FWGIF_SIZING_STRETCH
         nSizingType = FWGIF_SIZING_STRETCH
      endif
   else
      if nSizingType = FWGIF_SIZING_CLIP
         nNewWidth   = ::nWidth
         nNewHeight  = ::nHeight
      else
         nSizingType = FWGIF_SIZING_FILE
         nNewWidth   = aData[ FWGIF_WIDTH ]
         nNewHeight  = aData[ FWGIF_HEIGHT ]
      endif
   endif      
   
   ::SetSizing( nSizingType )

   ::ReSize( , nNewWidth, nNewHeight )
   
   ::nSizingType = nSizingType
   
return ::Super:Refresh()  
   
   


Aqui un ejemplo de uso:

testgifr.prg
Code: Select all  Expand view
// Animated GIFs support for FWH

#include "FiveWin.ch"

function Main()

   local oDlg, oGif
   
   DEFINE DIALOG oDlg RESOURCE "test" TITLE "A modal dialog"
   
   REDEFINE GIF oGif ID 101 OF oDlg RESOURCE "..\gifs\halo.gif"

   ACTIVATE DIALOG oDlg CENTERED
   
return nil  


testgifr.rc
Code: Select all  Expand view
TEST DIALOG 61, 39, 294, 219
STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
CAPTION "TGif Redefine support"
FONT 8, "MS Sans Serif"
{
 CONTROL "", 101, "TGif", 0 | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 10, 10, 140, 170
 DEFPUSHBUTTON "OK", IDOK, 82, 200, 50, 14
 PUSHBUTTON "Cancel", IDCANCEL, 142, 200, 50, 14
}


Y finalmente el nuevo comando:
Code: Select all  Expand view
#xcommand REDEFINE GIF [ <oGif> ] ;
             [ ID <nId> ] ;
             [ <of: OF, WINDOW, DIALOG> <oWnd> ] ;
             [ <resource: NAME, RESNAME, RESOURCE> <cResName> ] ;
             [ <adjust: ADJUST> ] ;
       => ;
          [ <oGif> := ] TGif():ReDefine( <nId>, <oWnd>, <cResName>, <.adjust.> )

Re: GIF animados para FWH sin usar DLLs externas!

PostPosted: Tue Apr 20, 2021 1:34 pm
by Antonio Linares
Image

Re: GIF animados para FWH sin usar DLLs externas!

PostPosted: Tue Apr 20, 2021 11:20 pm
by AIDA
Antonio super genial como siempre :D :shock:

Image

Muchas gracias lo probare :mrgreen:

Saluditos :wink:




Antonio Linares wrote:Aida,

Aqui tienes una primera versión funcionando. La incluiremos en FWH 21.03

tgif.prg
Code: Select all  Expand view
#include "fivewin.ch"
#include "gif.ch"


CLASS TGif FROM TControl

   DATA  hGif
   DATA  cFilename
   DATA  lAdjust
   DATA  nSizingType
   
   CLASSDATA lRegistered
   
   METHOD New( oWnd, cGifFile, nRow, nCol,;
            nHeight, nWidth, oCursor, lAdjust, bAction )

   METHOD Redefine( nId, oWnd, cGifFile, lAdjust )        
   
   METHOD GetData() INLINE GetGifInfo( ::hGif )
   
   METHOD Play() INLINE FWGifPlay( ::hGif )
   METHOD Stop() INLINE FWGifStop( ::hGif )
   
   METHOD Restart() INLINE FWGifRestart( ::hGif )
   
   METHOD IsRunning() INLINE FWGifIsRunning( ::hGif )
   
   METHOD Destroy() INLINE FWGifEnd()
   
   METHOD SetFile( cFile ) INLINE ::cFileName := cFile, SetWindowText( ::hGif, cFile )
   
   METHOD SetSizing( nType ) INLINE FWSetGIFSizing( ::hGif, nType )
   
   METHOD Refresh()  
   
   METHOD ReSize( nSizeType, nWidth, nHeight ) INLINE ::SetSize( nWidth, nHeight, .T. ),;
                                                      WndSetSize( ::hGif, nWidth, nHeight, .T. )
   METHOD Initiate( hDlg ) INLINE  ::Super:Initiate( hDlg ), ::Default()

   METHOD Default()

ENDCLASS

//----------------------------------------------------------------//

METHOD New( oWnd, cGifFile, nRow, nCol,;
            nHeight, nWidth, oCursor, lAdjust, bAction ) CLASS TGif

    local aData, nNewWidth, nNewHeight, nSizingType
    local hRes
    local cDir, cTempfile

    DEFAULT oWnd    := GetWndDefault(),;
            nRow    := 0,;
            nCol    := 0,;
            lAdjust := .F.
   
   ::nTop    = nRow
   ::nLeft   = nCol
   ::nStyle  = nOR( WS_CHILD, WS_VISIBLE, WS_CLIPCHILDREN )

   ::bLClicked = bAction
   
   ::nSizingType = FWGIF_SIZING_FILE
   
   if nHeight == nil .or. nWidth == nil
      ::nBottom = 100
      ::nRight  = 100
   else
      ::nBottom = nHeight + nRow
      ::nRight = nWidth + nCol
      ::nSizingType = FWGIF_SIZING_CLIP
   endif
       
   ::oWnd    = oWnd
   ::oCursor = oCursor

   ::cFileName = cGifFile
   ::oBrush    = oWnd:oBrush
   ::lAdjust   = lAdjust

   ::Register( )

   if ! Empty( oWnd:hWnd )
      ::Create()
      ::lVisible = .t.
      oWnd:AddControl( Self )
   else
      oWnd:DefControl( Self )
      ::lVisible  = .f.
   endif

   ::Default()

return self

//----------------------------------------------------------//

METHOD Redefine( nId, oWnd, cGifFile, lAdjust )        

   DEFAULT lAdjust := .T.

   ::cFileName = cGifFile
   ::lAdjust   = lAdjust

   ::Register( nOR( CS_VREDRAW, CS_HREDRAW ) )

   if oWnd != nil
      ::oWnd = oWnd
      oWnd:DefControl( Self )
   endif

return Self

//----------------------------------------------------------//

METHOD Default() CLASS TGif

   local hRes, cDir, cTempFile
   local cGifFile := ::cFileName
   local aData, nNewWidth, nNewHeight, nSizingType

   if ! Empty( cGifFile ) .and. ! File( cGifFile )
      hRes  = FindResource( GetResources(), cGifFile, 10 )
      If Empty( hres )
         return nil
      else
         cDir   = GetEnv( "TEMP" )
         if Empty( cDir )
            cDir = GetEnv( "TMP" )
         endif
         cTempfile = cDir + cTempFile( "\", "gif" )
         RCDataToFile( 0, cGifFile, cTempfile )
      endif
   endif  

   If ! Empty( cTempfile )
      ::hGif = FWGifWindow( cTempFile, 0, 0, ::nWidth, ::nHeight, ::hWnd )
   else
      ::hGif = FWGifWindow( cGifFile, 0, 0, ::nWidth, ::nHeight, ::hWnd )
   endif  

   aData = ::GetData()
   
   if ::lAdjust
      nNewWidth  = aData[ FWGIF_WIDTH ]
      nNewHeight = aData[ FWGIF_HEIGHT ]      
   else
      nNewWidth  = ::nWidth
      nNewHeight = ::nHeight
   endif

   ::ReSize( , nNewWidth, nNewHeight )

   if ::lAdjust
      ::nSizingType = FWGIF_SIZING_STRETCH
   endif      
   ::SetSizing( ::nSizingType )

   If ! Empty( cTempfile )
      FErase( cTempfile )
   endif

return nil

//----------------------------------------------------------//

METHOD Refresh() CLASS TGif

   local nSizingType := ::nSizingType
   local aData := ::GetData()
   local nNewWidth := aData[ FWGIF_WIDTH ],;
         nNewHeight := aData[ FWGIF_HEIGHT ]
     
   
   if ::lAdjust  
      if nSizingType != FWGIF_SIZING_STRETCH
         nSizingType = FWGIF_SIZING_STRETCH
      endif
   else
      if nSizingType = FWGIF_SIZING_CLIP
         nNewWidth   = ::nWidth
         nNewHeight  = ::nHeight
      else
         nSizingType = FWGIF_SIZING_FILE
         nNewWidth   = aData[ FWGIF_WIDTH ]
         nNewHeight  = aData[ FWGIF_HEIGHT ]
      endif
   endif      
   
   ::SetSizing( nSizingType )

   ::ReSize( , nNewWidth, nNewHeight )
   
   ::nSizingType = nSizingType
   
return ::Super:Refresh()  
   
   


Aqui un ejemplo de uso:

testgifr.prg
Code: Select all  Expand view
// Animated GIFs support for FWH

#include "FiveWin.ch"

function Main()

   local oDlg, oGif
   
   DEFINE DIALOG oDlg RESOURCE "test" TITLE "A modal dialog"
   
   REDEFINE GIF oGif ID 101 OF oDlg RESOURCE "..\gifs\halo.gif"

   ACTIVATE DIALOG oDlg CENTERED
   
return nil  


testgifr.rc
Code: Select all  Expand view
TEST DIALOG 61, 39, 294, 219
STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
CAPTION "TGif Redefine support"
FONT 8, "MS Sans Serif"
{
 CONTROL "", 101, "TGif", 0 | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 10, 10, 140, 170
 DEFPUSHBUTTON "OK", IDOK, 82, 200, 50, 14
 PUSHBUTTON "Cancel", IDCANCEL, 142, 200, 50, 14
}


Y finalmente el nuevo comando:
Code: Select all  Expand view
#xcommand REDEFINE GIF [ <oGif> ] ;
             [ ID <nId> ] ;
             [ <of: OF, WINDOW, DIALOG> <oWnd> ] ;
             [ <resource: NAME, RESNAME, RESOURCE> <cResName> ] ;
             [ <adjust: ADJUST> ] ;
       => ;
          [ <oGif> := ] TGif():ReDefine( <nId>, <oWnd>, <cResName>, <.adjust.> )

Re: GIF animados para FWH sin usar DLLs externas!

PostPosted: Wed Apr 21, 2021 12:15 am
by AIDA
ya aplique todo correctamente
compila sin errores
pero al ejecutar :shock:

Time from start: 0 hours 0 mins 9 secs
Error occurred at: 20/04/2021, 19:12:38
Error description: Error FiveWin/1 Non defined Id: No: 175

Stack Calls
===========
Called from: .\source\classes\CONTROL.PRG => TCONTROL:INITIATE( 452 )
Called from: NGIF.prg => (b)TGIF:TGIF( 45 )
Called from: => TGIF:INITIATE( 0 )
Called from: => __OBJSENDMSG( 0 )
Called from: => HB_EXECFROMARRAY( 0 )
Called from: .\source\function\HARBOUR.PRG => OSEND( 300 )
Called from: => HB_EXECFROMARRAY( 0 )
Called from: .\source\function\HARBOUR.PRG => ASEND( 278 )
Called from: .\source\classes\DIALOG.PRG => TDIALOG:INITIATE( 805 )
Called from: .\source\classes\DIALOG.PRG => TDIALOG:HANDLEEVENT( 1124 )
Called from: => DIALOGBOX( 0 )
Called from: .\source\classes\DIALOG.PRG => TDIALOG:ACTIVATE( 304 )
Called from: model.prg => TABLAS( 6791 )
Called from: model.prg => (b)BUILDMENU( 17055 )
Called from: .\source\classes\MENU.PRG => TMENU:COMMAND( 1563 )
Called from: .\source\classes\WINDOW.PRG => TWINDOW:COMMAND( 1141 )
Called from: => TWINDOW:HANDLEEVENT( 0 )
Called from: .\source\classes\WINDOW.PRG => _FWH( 3559 )
Called from: => WINRUN( 0 )
Called from: .\source\classes\WINDOW.PRG => TWINDOW:ACTIVATE( 1097 )
Called from: model.prg => MAIN( 765 )

ESE RECURSO 175 NO LO USO PERO EN EL RECURSO COLOQUE UNO CON EL 175 PARA PROBAR Y AL EJECUTAR TRUENA EL PROGRAMA :shock:

Re: GIF animados para FWH sin usar DLLs externas!

PostPosted: Wed Apr 21, 2021 12:41 am
by AIDA
AIDA wrote:ya aplique todo correctamente
compila sin errores
pero al ejecutar :shock:

Time from start: 0 hours 0 mins 9 secs
Error occurred at: 20/04/2021, 19:12:38
Error description: Error FiveWin/1 Non defined Id: No: 175

Stack Calls
===========
Called from: .\source\classes\CONTROL.PRG => TCONTROL:INITIATE( 452 )
Called from: NGIF.prg => (b)TGIF:TGIF( 45 )
Called from: => TGIF:INITIATE( 0 )
Called from: => __OBJSENDMSG( 0 )
Called from: => HB_EXECFROMARRAY( 0 )
Called from: .\source\function\HARBOUR.PRG => OSEND( 300 )
Called from: => HB_EXECFROMARRAY( 0 )
Called from: .\source\function\HARBOUR.PRG => ASEND( 278 )
Called from: .\source\classes\DIALOG.PRG => TDIALOG:INITIATE( 805 )
Called from: .\source\classes\DIALOG.PRG => TDIALOG:HANDLEEVENT( 1124 )
Called from: => DIALOGBOX( 0 )
Called from: .\source\classes\DIALOG.PRG => TDIALOG:ACTIVATE( 304 )
Called from: model.prg => TABLAS( 6791 )
Called from: model.prg => (b)BUILDMENU( 17055 )
Called from: .\source\classes\MENU.PRG => TMENU:COMMAND( 1563 )
Called from: .\source\classes\WINDOW.PRG => TWINDOW:COMMAND( 1141 )
Called from: => TWINDOW:HANDLEEVENT( 0 )
Called from: .\source\classes\WINDOW.PRG => _FWH( 3559 )
Called from: => WINRUN( 0 )
Called from: .\source\classes\WINDOW.PRG => TWINDOW:ACTIVATE( 1097 )
Called from: model.prg => MAIN( 765 )

ESE RECURSO 175 NO LO USO PERO EN EL RECURSO COLOQUE UNO CON EL 175 PARA PROBAR Y AL EJECUTAR TRUENA EL PROGRAMA :shock:



TU EJEMPLO FUNCIONA PERFECTO ENTONCES ALGO EN MI CODIGO CAUSA EL PROBLEMA :?:

Code: Select all  Expand view
function ESTO()

   local oDlg, oGif

   DEFINE DIALOG oDlg RESOURCE "test" TITLE "A modal dialog"

   REDEFINE GIF oGif ID 101 OF oDlg RESOURCE "..\gifs\halo.gif"

   ACTIVATE DIALOG oDlg CENTERED

return nil

Re: GIF animados para FWH sin usar DLLs externas!

PostPosted: Wed Apr 21, 2021 12:51 am
by AIDA
SI PONGO UN GIF MAS GRANDE Y USO EL ADJUST

en lugar de ajustar el gif al tamaño del cuadro del recurso TGif el gif se desborda :shock:

TAMBIEN SI USO UN BRUSH YA NI SE EJECUTA :shock:

Code: Select all  Expand view
function ESTO()

   local oDlg, oGif,oBrush

  DEFINE BRUSH oBrush FILE "FOND\fondito.BMP"

 DEFINE DIALOG oDlg RESOURCE "TEST" TITLE "A modal dialog" BRUSH oBrush TRANSPARENT


   REDEFINE GIF oGif ID 101 OF oDlg RESOURCE "..\gifs\halo.gif" //ADJUST

   ACTIVATE DIALOG oDlg CENTERED

return nil




Saluditos :wink: