Página 1 de 1

Será que essa barra progressiva funciona???

Enviado: 15 Fev 2008 18:35
por ERASMO ANDRIOLI
Olá Amigos...

Gostaria de saber dos Clippeiros se essa barra está correta no modo programável que está:


INDEX ON CONTROLE TAG 1 TO BNKANALI EVAL BARRA()

****************
function BARRA
****************
@15,15+(RECNO() / LASTREC()*49) SAY CHR(178) COLOR("B+/W")
return .T.


...Quem tiver outro exemplo mais prático que isso ou se o exemplo acima astiver com falhas, por favor nos mostre o caminho correto.

Abraços

Erasmo Andrioli
Sorriso-MT :xau

Enviado: 15 Fev 2008 22:15
por Pablo César
Eu acho que a sentença correta na função BARRA, deveria ser assim:

@15,15 SAY REPLICATE( CHR(178) , (((RECNO() / LASTREC()) * 100) /2 ) ) COLOR("B+/W")

Na seção de downloads daqui do fórum tem um exemplo que está um pouco mais elaborado com melhor layout. Compile na mão pois o arquivo BATCH está errado. Confira: https://pctoledo.org/download/cop ... t&deonde=2

Enviado: 15 Fev 2008 22:20
por Maligno
Do jeito que está essa linha de indexação vai comer o processamento da máquina, pois a função Barra() será executada para cada registro encontrado. O melhor é incluir uma cláusula EVERY com um limitador. Detalhes no NG. :)

Barra progressiva para indexação

Enviado: 15 Fev 2008 22:29
por Pablo César
Tem razão Maligno. Então façamos alguma incrementações necessárias, inclusive eu não gosto de ficar executando a cada registro as funções LASTREC() e RECNO(), na minha opinião também são desnecessário.

Código: Selecionar todos

#define MTR_INCREMENT   20

TELA := SAVESCREEN(00,00,MAXROW(),MAXCOL())
@ 08,11 SAY "ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»" COLOR "BG+/N"
@ 09,11 SAY "º                                                           º" COLOR "BG+/N"
@ 10,11 SAY "ºÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄĺ" COLOR "BG+/N"
@ 11,11 SAY "º    0   10   20   30   40   50   60   70   80   90   100   º" COLOR "BG+/N"
@ 12,11 SAY "º  ÚÄÙ....³....³....³....³....³....³....³....³....³....ÀÄ¿  º" COLOR "BG+/N"
@ 13,11 SAY "º  ³ °°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°° ³  º" COLOR "BG+/N"
@ 14,11 SAY "º  ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ  º" COLOR "BG+/N"
@ 15,11 SAY "ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ" COLOR "BG+/N"
@ 09,24 SAY "Porcentagem dos arquivos organizados" COLOR "GR+/N"


USE CLIENTES
v_t:=LASTREC()
nRecsDone := 0

INDEX ON NOME TAG 1 TO ARQINDICE EVAL {|| BARRA() } EVERY MTR_INCREMENT

@ 13,16 SAY REPLICATE(CHR(219),51) // complementa o que faltou
?? CHR(7) // Fará uma sinal sonoro


FUNCTION BARRA()
nRecsDone := nRecsDone + MTR_INCREMENT
@ 13,16 SAY REPLICATE(CHR(219),(( ( nRecsDone/V_T ) * 100 ) / 2)) COLOR "GR+/N"
return .T. 
Veja agora se ficou bom ?.

Enviado: 16 Fev 2008 11:58
por EANDRIOLI
FICOU MUITO BOM.... ÓTIMO

OBRIGADO PESSOAL...


ABRAÇOS :{

Enviado: 18 Fev 2008 22:39
por vagucs
Use a clausula EVERY dividindo o lastrec por 100, assim so vai chamar a rotina quando a porcentagem realmente for alterada.