Page 1 of 1

Meterex con porcentaje.

Posted: Tue Feb 18, 2014 1:44 pm
by karinha
Meterex con porcentaje.

¿Alguien tiene un ejemplo con METEREX con porcentaje?

Muchas gracias.

Re: Meterex con porcentaje.

Posted: Sun Feb 23, 2014 8:37 pm
by FranciscoA
Karinha, el ejemplo anterior modificado. Espero que te sirva.
//---------------------------------------------------------------------

Code: Select all | Expand

Function ReIndexar(aAlias, lTodo)
//local oDlg, oAnimate, oMeter1, oMeter2, oSay1, oSay2, oSay3, oBtnCancel
local oDlg, oAnimate, oMeter1, oMeter2, oSay1, oSay2, oSay3, oSay4, oBtnCancel
local lEnd:=.f.
local n:=0, nMonto1:=0, nMonto2:=0
local oAnimate2
local nProg,nProg2


DEFAULT lTodo:=.f.

   DEFINE DIALOG oDlg RESOURCE "CopyFiles" TRANSPARENT ;
          TITLE "Creando ficheros indices (Reindexando)"

   REDEFINE SAY oSay1 ID 110 OF oDlg //COLOR nClrTxt
   REDEFINE SAY oSay2 ID 120 OF oDlg //COLOR nClrTxt

   REDEFINE SAY oSay3 ID 140 OF oDlg //COLOR nClrTxt

   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 ROUND ; // ROUNDSIZE 6 //;
            GRADIENT CHUNK { { 1/2, nRGB( 255, 251, 229 ), nRGB( 250, 223, 143 ) } , ;  //barra
                              { 1/2, nRGB( 244, 194,  51 ), nRGB( 252, 235, 173 ) } } ;
            LINECOLORS nRGB( 110, 151,204 ), CLR_WHITE  //borde

 REDEFINE SAY oSay4 ID 4001 OF oDlg

   REDEFINE BUTTON oBtnCancel ID 2 OF oDlg //;
      ***ACTION ( lEnd := .t., SysRefresh(), MisAreas(), oAnimate:Stop(), MsgStop("Reindexacion ha sido abortada por el usuario.","Advertencia"), oDlg:End() )

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

  oDlg:bStart := { || oBtnCancel:Hide(),;
                      oAnimate:=TGif():New( oDlg, ".\Clip1.gif", 1,oDlg:nLeft()+40),;
                      oAnimate2:=TGif():New( oDlg, ".\RelojArena.gif", 1,oDlg:nWidth()-120),;
                      Reindexe( aAlias, oSay1, oSay2, oSay3, oSay4, oMeter1, oMeter2, @lEnd, oDlg, lTodo ) }
                      //Reindexe( aAlias, oSay1, oSay2, oSay3, oMeter1, oMeter2, @lEnd, oDlg, lTodo ) }


   ACTIVATE DIALOG oDlg CENTERED

       oAnimate:Stop()
       oAnimate2:Stop()
       SysRefresh()

Return NIL

//---------------------------------------------------------------------------
//Function Reindexe( aAlias, oSay1, oSay2, oSay3, oMeter1, oMeter2, lEnd, oDlg, lTodo )
Function Reindexe( aAlias, oSay1, oSay2, oSay3, [b]oSay4[/b], oMeter1, oMeter2, lEnd, oDlg, lTodo )

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"
     IntegIndex( oSay2,oMeter1,oMeter2,oSay3,oSay4,"mcontab->cuenta+mcontab->scuenta+mcontab->sscuenta+mcontab->ssscuenta+mcontab->sssscuenta","MCONTAB" )
     IntegIndex( oSay2,oMeter1,oMeter2,oSay3,oSay4,"mcontab->nombre","MCONTNOM" )

  ElseIf UPPER( aAlias[n] )="COMPROBD"
     IntegIndex( oSay2,oMeter1,oMeter2,oSay3,oSay4,"COMPROBD->NUMDOC","COMPROBD" )
     IntegIndex( oSay2,oMeter1,oMeter2,oSay3,oSay4,"COMPROBD->CTA+COMPROBD->SCTA+COMPROBD->SSCTA+COMPROBD->SSSCTA+COMPROBD->SSSSCTA","COMPDCTA" )
     IntegIndex( oSay2,oMeter1,oMeter2,oSay3,oSay4,"COMPROBD->FECHEMIS","COMPDFEC" )


  ElseIf UPPER( aAlias[n] )="NOTASDC"
     IntegIndex( oSay2,oMeter1,oMeter2,oSay3,oSay4,"NOTASDC->numdoc","NOTASDC" )
     IntegIndex( oSay2,oMeter1,oMeter2,oSay3,oSay4,"NOTASDC->cta+NOTASDC->scta+NOTASDC->sscta+NOTASDC->ssscta+NOTASDC->sssscta","NOTASCTA" )
     IntegIndex( oSay2,oMeter1,oMeter2,oSay3,oSay4,"NOTASDC->FECHEMIS","NOTASFEC" )
  Endif
 ENDIF
Next


  nFinaliza:= (Seconds()-nInicia)/60
  if lTodo
     MisAreas()
     WritePProString("config","UltReindex",Dtoc(date()),cIniFile)
     SysRefresh()
     MsgWait("Reindexación completada." + "  Tiempo (Minutos): "+alltrim(str(nFinaliza)),,2)
  endif

  SysRefresh()
  oDlg:End()
return(NIL)

//----------------------------------------------------------------
//Function IntegIndex( oSay2,oMeter1,oMeter2,oSay3,Campos,cNombIndice )
Function IntegIndex( oSay2,oMeter1,oMeter2,oSay3,oSay4,Campos,cNombIndice )

local nVar, nStep, nTotal
local nPorcAvance

   oSay2:SetText( "Integrando Indice " + cNombIndice )

   nTotal := LastRec()
   nStep := 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

  nPorcAvance:=Int(nTotAvance * nFactorAv)

   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") )
   oSay4:SetText( Transform(nPorcAvance,"999.99 %") )

Return nil
 

Saludos.

Re: Meterex con porcentaje.

Posted: Mon Feb 24, 2014 12:36 pm
by karinha
Gracias Francisco, asi que posible voy probar.

Salu2.

Re: Meterex con porcentaje.

Posted: Mon Feb 24, 2014 8:21 pm
by FranciscoA
http://www.4shared.com/folder/n3H7xUtF/_online.html

Image

Se me olvidó como se pone la imagen aquí...!!!

Re: Meterex con porcentaje.

Posted: Mon Feb 24, 2014 8:33 pm
by karinha
Gracias,

http://www.4shared.com/photo/dHNqGIgLba/index.html

el porcentage és por fuera del meterex?

Salu2

Re: Meterex con porcentaje.

Posted: Mon Feb 24, 2014 8:36 pm
by FranciscoA
Asi es, Karinha. Aún no he revisado la classe para ver las posibilidades.
Saludos.

Re: Meterex con porcentaje.

Posted: Tue Feb 25, 2014 12:02 am
by FranciscoA
Karinha, encontré dos soluciones:

1a:

Code: Select all | Expand

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


DEFAULT lTodo:=.f.

   DEFINE DIALOG oDlg RESOURCE "CopyFiles" TRANSPARENT ;
          TITLE "Creando ficheros indices (Reindexando)"

   REDEFINE SAY oSay1 ID 110 OF oDlg //COLOR nClrTxt
   REDEFINE SAY oSay2 ID 120 OF oDlg //COLOR nClrTxt
   //REDEFINE PROGRESS oMeter1 ID 130 OF oDlg

   REDEFINE SAY oSay3 ID 140 OF oDlg //COLOR nClrTxt
   //REDEFINE PROGRESS oMeter2 ID 150 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 ROUND ; // ROUNDSIZE 6 //;
            GRADIENT CHUNK { { 1/2, nRGB( 255, 251, 229 ), nRGB( 250, 223, 143 ) } , ;  //barra
                              { 1/2, nRGB( 244, 194,  51 ), nRGB( 252, 235, 173 ) } } ;
            LINECOLORS nRGB( 110, 151,204 ), CLR_WHITE  //borde


   REDEFINE BUTTON oBtnCancel ID 2 OF oDlg //;
      ***ACTION ( lEnd := .t., SysRefresh(), MisAreas(), oAnimate:Stop(), MsgStop("Reindexacion ha sido abortada por el usuario.","Advertencia"), oDlg:End() )

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

  oMeter2:bPainted := {|| oMeter2:Say( oMeter2:nHeight/3, (oMeter2:nWidth/2)-40, Str(Int(nPorc))+" %", , , , .t., .t., 0 ) }   //Quitar esto si modificas la TMETEREX

  oDlg:bStart := { || oBtnCancel:Hide(),;
                      oAnimate:=TGif():New( oDlg, ".\Clip1.gif", 1,oDlg:nLeft()+40),;
                      oAnimate2:=TGif():New( oDlg, ".\RelojArena.gif", 1,oDlg:nWidth()-120),;
                      Reindexe( aAlias, oSay1, oSay2, oSay3, oMeter1, oMeter2, @lEnd, oDlg, lTodo ) }


   ACTIVATE DIALOG oDlg CENTERED

       oAnimate:Stop()
       oAnimate2:Stop()
       SysRefresh()

Return NIL

//---------------------------------------------------------------------------
Function Reindexe( aAlias, oSay1, oSay2, oSay3, oMeter1, oMeter2, lEnd, oDlg, lTodo )
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"
     IntegIndex( oSay2,oMeter1,oMeter2,oSay3,"mcontab->cuenta+mcontab->scuenta+mcontab->sscuenta+mcontab->ssscuenta+mcontab->sssscuenta","MCONTAB" )
     IntegIndex( oSay2,oMeter1,oMeter2,oSay3,"mcontab->nombre","MCONTNOM" )

  ElseIf UPPER( aAlias[n] )="COMPROBD"
     IntegIndex( oSay2,oMeter1,oMeter2,oSay3,"COMPROBD->NUMDOC","COMPROBD" )
     IntegIndex( oSay2,oMeter1,oMeter2,oSay3,"COMPROBD->CTA+COMPROBD->SCTA+COMPROBD->SSCTA+COMPROBD->SSSCTA+COMPROBD->SSSSCTA","COMPDCTA" )
     IntegIndex( oSay2,oMeter1,oMeter2,oSay3,"COMPROBD->FECHEMIS","COMPDFEC" )

  Endif
 ENDIF
Next

  nFinaliza:= (Seconds()-nInicia)/60
  if lTodo
     MisAreas()
     WritePProString("config","UltReindex",Dtoc(date()),cIniFile)
     SysRefresh()
     MsgWait("Reindexación completada." + "  Tiempo (Minutos): "+alltrim(str(nFinaliza)),,2)
  endif

  SysRefresh()
  oDlg:End()
return(NIL)

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

   oSay2:SetText( "Integrando Indice " + cNombIndice )

   nTotal := LastRec()
   nStep := 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
   nPorc:=Int(nTotAvance * nFactorAv)    //Quitar esto si modificas la TMETEREX

   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
 


2a: Modificando la Class TMETEREX, al final, en el METHOD PAINT():

Code: Select all | Expand

IF ::bPainted != NIL .and. ValType( ::bPainted ) == "B"
      Eval( ::bPainted, ::hDC )
   ENDIF

   ::Say( ::nHeight/3, (::nWidth/2)-40, Str(Int(nPercent*100))+" %", , , , .t., .t., 0 )  //Agregar esto

   ::DispEnd( aInfo )

RETURN NIL
 

Yo prefiero la modificacion a TMETEREX porque asi, los porcentajes son automaticos.
Tambien se podría agregar una DATA por si se quiere utilizar o no, el porcentaje, o un nuevo method. Esperemos las obsevaciones de su creador.
Aun no he tratado con Meterex vertical.
Saludos.

Re: Meterex con porcentaje.

Posted: Tue Feb 25, 2014 4:56 am
by FranciscoA

Code: Select all | Expand

if ! ::lVertical
      ::Say( ::nHeight/3, (::nWidth/2)-40, Str(Int(nPercent*100))+" %", , , , .t., .t., 0 )   //FranciscoA
   else
      ::Say( (::nHeight/2)-8, (::nWidth/2)-40, Str(Int(nPercent*100))+" %", , , , .t., .t., 0 )   //FranciscoA
   endif

La barra vertical debe tener el suficiente ancho para que quepa el porcentaje.
Si alguno sabe como colocar el porcentaje de manera vertical... perfecto.
Saludos.

Re: Meterex con porcentaje.

Posted: Mon Mar 10, 2014 1:23 pm
by karinha
Gracias Francisco, asi que posible, voy probar.

Regards, saludos.

Re: Meterex con porcentaje.

Posted: Mon Mar 10, 2014 10:03 pm
by FranciscoA
Yo estoy usando la classe con las modificaciones descritas, y me está funcionando.
Saludos.