Page 1 of 2

Gif y MsgRun

Posted: Fri Sep 25, 2015 1:57 pm
by D.Fernandez
Amigos: Hay alguna posibilidad de mostrar un gif ( o similar), mientras se haga un proceso con MsgRun().
Algo así como una barrita que en su interior se mueva algo de der. a izq. a der. o un circulo que pase de vacio a lleno .
No es un proceso largo lo que debo hacer pero, me gustaría.

Gracias, saludos

Ruben D. Fernandez

Re: Gif y MsgRun

Posted: Fri Sep 25, 2015 2:20 pm
by karinha
No és mejor un MSGMETER()?

Saludos.

Re: Gif y MsgRun

Posted: Fri Sep 25, 2015 3:06 pm
by FranciscoA
Ruben, prueba este codigo.

Code: Select all

Function MsgMeter( bAction, cMsg, cTitle, lBoton )
   local oDlg, oMeter, oText, oBtn, oFont, oIco
   local lEnd := .f., lCancel := .f.
   local nVal := 0
   local oAnimate

   DEFAULT bAction := { || nil },;
           cMsg := "Procesando...", cTitle := "Aguarde por favor",;
           lBoton := .f.

   DEFINE DIALOG oDlg RESOURCE "MSGMETER" TRANSPARENT  
   REDEFINE SAY ID 111 OF oDlg 
   REDEFINE SAY oText VAR cMsg ID 110 OF oDlg 
   REDEFINE METER oMeter VAR nVal TOTAL 10 ID 130 OF oDlg

 if lBoton
   @  2.8,  18  BUTTON oBtn PROMPT "&Cancel" OF oDlg ;
      ACTION ( lEnd:= .t., lCancel:= .t. ) SIZE 32, 11
 endif

   // This block gets evaluated only the first time the DialogBox is painted !!!
   oDlg:bStart = { || oAnimate:=TGif():New( oDlg, ".\Clip1.gif", 1,oDlg:nLeft() ),;     //Ponle el gif que prefieras
                      Eval( bAction, oMeter, oText, oDlg, @lEnd, oBtn ),;
                      lEnd := .t., oDlg:End() }

   ACTIVATE DIALOG oDlg CENTERED ;
      VALID lEnd
      oAnimate:Stop()
return lCancel
 
Saludos.

Re: Gif y MsgRun

Posted: Fri Sep 25, 2015 3:21 pm
by rubenfernandez01
Francisco muchas gracias. Lo pruebo y comento. Saludos y gracias. No estoy en la oficina ahora.
Ruben D. Fernández

Enviado desde mi SM-G900M mediante Tapatalk

Re: Gif y MsgRun

Posted: Sat Apr 07, 2018 4:20 pm
by jbrita
Ruben y esto te funciono

Saludos

Re: Gif y MsgRun

Posted: Mon Apr 09, 2018 2:24 pm
by karinha
Francisco, falta el archivo .RC con el dialogo: "MSGMETER" gracias

Saludos.

Re: Gif y MsgRun

Posted: Tue Apr 24, 2018 2:18 pm
by juan_arroyo_t
Ruben

Quisiera saber si esto te funcionó y si lo pudeiras compartir
Gracias

Re: Gif y MsgRun

Posted: Sat Nov 07, 2020 2:13 pm
by jbrita
Hola Francisco... tienes un email.. pra contactarte

saludos

Re: Gif y MsgRun

Posted: Sat Nov 07, 2020 2:28 pm
by FranciscoA
jbrita wrote:Hola Francisco... tienes un email.. pra contactarte

saludos
falegria230349 arroba yahoo.es

Re: Gif y MsgRun

Posted: Sun Nov 08, 2020 10:26 pm
by FranciscoA
jbrita.
Codigo enviado. Revisa tu email.
Saludos

Re: Gif y MsgRun

Posted: Mon Nov 09, 2020 12:51 am
by jbrita
Muy amable .. Gracias

Re: Gif y MsgRun

Posted: Mon Nov 09, 2020 12:44 pm
by karinha
Francisco, porfa:

kapiabafwh arroba gmail.com

Regards, saludos.

Re: Gif y MsgRun

Posted: Mon Nov 09, 2020 2:54 pm
by leandro
Me uno a la solicitud :oops:

Re: Gif y MsgRun

Posted: Mon Nov 09, 2020 8:54 pm
by albeiroval
+1

albeiroval arroba gmail punto com

Re: Gif y MsgRun

Posted: Mon Nov 09, 2020 10:22 pm
by FranciscoA
Hola amigos.
Aqui les dejo el codigo de ejemplo.
Es el mismo que hace algún tiempo posteé aquí, https://forums.fivetechsupport.com/view ... if#p156161
con _ leves, sobre todo referente a la function TGif().

Code: Select all

#include "fivewin.ch"
#include "Gif.ch"

Function GifDlgFromRes()
  local aAlias := {"MCONTAB","MCONMOV"} 
  local aIndices := {"INDICE1","INDICE2","INDICE3","INDICE4","INDICE5","INDICE6","INDICE7"}
  local n

  For n:=1 to len(aAlias)
     DBUSEAREA(.T.,, aAlias[n], aAlias[n], .F. )
  Next

  ReIndx(aAlias, aIndices)
Return nil

//---------------------------------------------------------------------
Function ReIndx(aAlias, aIndices)
local oDlg, oAnimate, oMeter1, oMeter2, oSay1, oSay2, oSay3
local lEnd:=.f.
local n:=0, nMonto1:=0, nMonto2:=0
local nProg,nProg2

   DEFINE DIALOG oDlg RESOURCE "CopyFiles" TRANSPARENT COLOR CLR_BLACK, CLR_WHITE ;
          TITLE "Creando ficheros indices (Reindexando)"

   REDEFINE SAY oSay1 ID 110 OF oDlg
   REDEFINE SAY oSay2 ID 120 OF oDlg
   REDEFINE SAY oSay3 ID 140 OF oDlg 

   REDEFINE METEREX oMeter1 VAR nProg ID 130 TOTAL 50 ROUND  ; // ROUNDSIZE 6 //;
            GRADIENT TRACK { { 1/2, nRGB( 198, 203, 213 ), nRGB( 219, 224, 233 ) },;   //fondo
                              { 1/2, nRGB( 224, 238, 237 ), nRGB( 224, 238, 237 ) } } ;
            LINECOLORS nRGB( 110, 151,204 ), CLR_WHITE  //Borde

    REDEFINE METEREX oMeter2 VAR nProg2 ID 150 TOTAL 50 ;
             GRADIENT CHUNK { { 1/2, nRGB( 255, 251, 229 ), nRGB( 250, 223, 143 ) } , ;
                              { 1/2, nRGB( 244, 194,  51 ), nRGB( 252, 235, 173 ) } } ;
             GRADIENT TRACK { { 1/2, nRGB( 198, 203, 213 ), nRGB( 219, 224, 233 ) },;   //fondo
                              { 1/2, nRGB( 224, 238, 237 ), nRGB( 224, 238, 237 ) } } ;
             LINECOLORS nRGB( 110, 151,204 ), CLR_WHITE  //borde

   oMeter2:nTotal = LEN(aIndices) 
   nTotAvance:=0
   nFactorAv:= 100/len(aIndices)

  oDlg:bStart := { || oAnimate:=TGif():New( oDlg, ".\avion7.gif", 14,20,64,64,,.t.),;
                      Reindexa( aAlias, oSay1, oSay2, oSay3, oMeter1, oMeter2, @lEnd, oDlg, oAnimate ) } 

   ACTIVATE DIALOG oDlg CENTERED

   for n:=1 to len(aAlias)
      (aAlias[n])->(DBCloseArea()) 
   next
   for n:=1 to len(aIndices)     // Borramos porque solo es un ejemplo
      Ferase( ".\" + aIndices[n] + ".ntx" )
   next

   SysRefresh()
Return NIL

//---------------------------------------------------------------------------
Function Reindexa( aAlias, oSay1, oSay2, oSay3, oMeter1, oMeter2, lEnd, oDlg, oAnimate )
local n:=0
local nInicia:=Seconds(),nFinaliza:=0

   oMeter2:Set( 0 )

For n := 1 to Len( aAlias )
  IF ! File( aAlias[ n ]+".dbf" )
       MsgInfo( "Fichero no encontrado: " + aAlias[ n ], "Advertencia" )
       loop
  ELSE

     DBSELECTAREA( aAlias[n] )

    oSay1:SetText( "Base de Datos Actual: " + upper(aAlias[n]) )

    If UPPER( aAlias[n] )="MCONTAB" 
       IntegIndx( oSay2,oMeter1,oMeter2,oSay3,"mcontab->codicont","INDICE1" ) 
       IntegIndx( oSay2,oMeter1,oMeter2,oSay3,"mcontab->nombre","INDICE2" )

    ElseIf UPPER( aAlias[n] )="MCONMOV"
       IntegIndx( oSay2,oMeter1,oMeter2,oSay3,"MCONMOV->NUMDOC","INDICE3" )
       IntegIndx( oSay2,oMeter1,oMeter2,oSay3,"MCONMOV->CODICONT","INDICE4" )
       IntegIndx( oSay2,oMeter1,oMeter2,oSay3,"MCONMOV->FECHEMIS","INDICE5" )
       IntegIndx( oSay2,oMeter1,oMeter2,oSay3,"MCONMOV->TD+STR(NUMDOC)","INDICE6" )
       IntegIndx( oSay2,oMeter1,oMeter2,oSay3,"MCONMOV->NOMBRE","INDICE7" )
    Endif
 ENDIF
Next

  nFinaliza:= (Seconds()-nInicia)/60 
  SysRefresh()

  oAnimate:Stop()

  MsgInfo("Reindexación completada." + "  Tiempo (Minutos): "+alltrim(str(nFinaliza)),,2)

  oDlg:End()
RETURN NIL

//----------------------------------------------------------------
Function IntegIndx( oSay2,oMeter1,oMeter2,oSay3,Campos,cNombIndice )
local nVar, nStep, nTotal

   oSay2:SetText( "Integrando Indice " + cNombIndice )

   nTotal := LastRec()
   nStep := 1   // Max( Int( nTotal * .02 ), 1 ) // actualizar el meter cada 2% del progreso es mas rapido que por cada registro
   nVar := 0
   oMeter1:nTotal = nTotal
   oMeter1:Set( 0 )

   nTotAvance+=1

   INDEX ON &(Campos) TO &(cNombIndice);
   EVAL {|| oMeter1:Set( nVar += nStep ) , SysRefresh(), .t. } EVERY nStep

   oMeter1:Set( nTotal )
   oMeter2:Set( nTotAvance )
   oSay3:SetText( "Indices creados: "+Transform(nTotAvance,"99,999,999") )
Return nil