Meterex con porcentaje.

Meterex con porcentaje.

Postby karinha » Tue Feb 18, 2014 1:44 pm

Meterex con porcentaje.

¿Alguien tiene un ejemplo con METEREX con porcentaje?

Muchas gracias.
João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
User avatar
karinha
 
Posts: 7214
Joined: Tue Dec 20, 2005 7:36 pm
Location: São Paulo - Brasil

Re: Meterex con porcentaje.

Postby FranciscoA » Sun Feb 23, 2014 8:37 pm

Karinha, el ejemplo anterior modificado. Espero que te sirva.
//---------------------------------------------------------------------
Code: Select all  Expand view
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.
Francisco J. Alegría P.
Chinandega, Nicaragua.

Fwxh-MySql-TMySql
User avatar
FranciscoA
 
Posts: 2110
Joined: Fri Jul 18, 2008 1:24 am
Location: Chinandega, Nicaragua, C.A.

Re: Meterex con porcentaje.

Postby karinha » Mon Feb 24, 2014 12:36 pm

Gracias Francisco, asi que posible voy probar.

Salu2.
João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
User avatar
karinha
 
Posts: 7214
Joined: Tue Dec 20, 2005 7:36 pm
Location: São Paulo - Brasil

Re: Meterex con porcentaje.

Postby FranciscoA » Mon Feb 24, 2014 8:21 pm

http://www.4shared.com/folder/n3H7xUtF/_online.html

Image

Se me olvidó como se pone la imagen aquí...!!!
Last edited by FranciscoA on Mon Feb 24, 2014 8:40 pm, edited 2 times in total.
Francisco J. Alegría P.
Chinandega, Nicaragua.

Fwxh-MySql-TMySql
User avatar
FranciscoA
 
Posts: 2110
Joined: Fri Jul 18, 2008 1:24 am
Location: Chinandega, Nicaragua, C.A.

Re: Meterex con porcentaje.

Postby karinha » Mon Feb 24, 2014 8:33 pm

Gracias,

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

el porcentage és por fuera del meterex?

Salu2
João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
User avatar
karinha
 
Posts: 7214
Joined: Tue Dec 20, 2005 7:36 pm
Location: São Paulo - Brasil

Re: Meterex con porcentaje.

Postby FranciscoA » Mon Feb 24, 2014 8:36 pm

Asi es, Karinha. Aún no he revisado la classe para ver las posibilidades.
Saludos.
Francisco J. Alegría P.
Chinandega, Nicaragua.

Fwxh-MySql-TMySql
User avatar
FranciscoA
 
Posts: 2110
Joined: Fri Jul 18, 2008 1:24 am
Location: Chinandega, Nicaragua, C.A.

Re: Meterex con porcentaje.

Postby FranciscoA » Tue Feb 25, 2014 12:02 am

Karinha, encontré dos soluciones:

1a:
Code: Select all  Expand view
//---------------------------------------------------------------------
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 view
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.
Francisco J. Alegría P.
Chinandega, Nicaragua.

Fwxh-MySql-TMySql
User avatar
FranciscoA
 
Posts: 2110
Joined: Fri Jul 18, 2008 1:24 am
Location: Chinandega, Nicaragua, C.A.

Re: Meterex con porcentaje.

Postby FranciscoA » Tue Feb 25, 2014 4:56 am

Code: Select all  Expand view
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.
Francisco J. Alegría P.
Chinandega, Nicaragua.

Fwxh-MySql-TMySql
User avatar
FranciscoA
 
Posts: 2110
Joined: Fri Jul 18, 2008 1:24 am
Location: Chinandega, Nicaragua, C.A.

Re: Meterex con porcentaje.

Postby karinha » Mon Mar 10, 2014 1:23 pm

Gracias Francisco, asi que posible, voy probar.

Regards, saludos.
João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
User avatar
karinha
 
Posts: 7214
Joined: Tue Dec 20, 2005 7:36 pm
Location: São Paulo - Brasil

Re: Meterex con porcentaje.

Postby FranciscoA » Mon Mar 10, 2014 10:03 pm

Yo estoy usando la classe con las modificaciones descritas, y me está funcionando.
Saludos.
Francisco J. Alegría P.
Chinandega, Nicaragua.

Fwxh-MySql-TMySql
User avatar
FranciscoA
 
Posts: 2110
Joined: Fri Jul 18, 2008 1:24 am
Location: Chinandega, Nicaragua, C.A.


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: No registered users and 95 guests