Página 1 de 1

Contador de percentual de progressão de rotinas.

Enviado: 20 Dez 2005 15:07
por rochinha
Amiguinhos

As vezes necessitamos saber se uma rotina esta sendo executada ou se a maquina simplesmente travou, principalmente em indexações, portanto saco desta função simples para tal:

Código: Selecionar todos

FUNCTION dbProgress( cIndice, cMensagem )
  LOCAL cComplete := LTRIM(STR(INT((RECNO()/LASTREC()) * 100)))
  cMensagem := iif(cMensagem=nil,"Indexacao de ",cMensagem)
  MENSAGEM(cMensagem + cIndice + " " + cComplete + "% Completada.")
  RETURN(.T.)

FUNCTION MENSAGEM( TEXTO, PAUSA )
//
// -> Funcao que imprime mensagens na tela
//
// TEXTO => Recebe o texto a ser impresso na linha de mensagem.
// TEMPO => Recebe o tempo de espera para a mensagem.
//
STATIC ULT_MENSAGEM := ""
LOCAL ULT_CURSOR := SETCURSOR(), DE_VI_CE
IF TEXTO = NIL; TEXTO := ""; ENDIF
CURSOR( DESLIGA )
IF SET( 20 ) = "PRINTER"
   DE_VI_CE = "PRINTER"
   SET( 20 , "SCREEN" )
ENDIF
@ 0, 75 SAY STR(MEMORY(0),5) COLOR CONTECOR[ 13 ]
IF m->defPDV = 'X'
   IF m->defTEFON = .T.
      @ MAXROW()-1, 00 SAY 'TEF-ON ' COLOR CONTECOR[ 2 ]
   ELSE
      @ MAXROW()-1, 00 SAY 'TEF-OFF' COLOR CONTECOR[ 2 ]
   ENDIF
ENDIF
IF m->defCUPOM = 'X'
   @ MAXROW(), 11 SAY STR(M->NO_CUPOM+1,1)+'³'+PADC( TEXTO, 56 ) COLOR CONTECOR[ 2 ]
ELSE
   @ MAXROW(), 11 SAY PADC( TEXTO, 58 ) COLOR CONTECOR[ 2 ]
ENDIF
IF PAUSA = NIL
   ULT_MENSAGEM := TEXTO
ELSE
   TEC_MOU( PAUSA )
   @ MAXROW(), 11 SAY PADC( ULT_MENSAGEM, 58 ) COLOR CONTECOR[ 2 ]
ENDIF
IF DE_VI_CE = "PRINTER"
   Set( 20, "PRINTER" )
ENDIF
SETCURSOR( ULT_CURSOR )
RETURN NIL
Esta função poderá ser colocada em qualquer lugar, até em uma rotina de impressão já que sabemos que quando mandamos imprimir, não é possivel apresentar nada na tela sem o devido direcionamento.

Para usa-la nas nossas indexações basta fazer assim:

INDEX ON ... EVAL dbProgress( "NomeDoIndice" )

@braços :?)

Enviado: 20 Dez 2005 15:56
por janio
Rochinha,

tá faltando as funções CURSOR ( DESLIGA ) e TEC_MOU( PAUSA ) pra podermos compilar...

Um abraço,

Janio

Enviado: 20 Dez 2005 16:20
por rochinha
Amiguinho

Pode desabilitar pois elas eram usadas para tratamento do mouse.

@braços :?)