Página 1 de 1
Barra de indexação / pesquiza
Enviado: 08 Jan 2006 16:45
por Vander
Bom amigos
1 - Tem como criar uma barra de indexação que mostre op progresso baseado no total de registros a indexar, exemplo:
arquivo de clientes com 1000 registros
arquivo de estoque com 6000 registros
..
..
arquivo usuario 5 registros
total de registros a processar digamos 9000
então a barra de progresso irá mostrar o progresso basedo nos 9000 registros que é o total a processar.
Eu uso uma rotina em clipper / DOS mas não consegui passar para FW.
2 - Tem como criar barra de progresso para as pesquizas e relatórios ?
Espero que como sempre possam me ajudar e desde já agradeço.
vander
Enviado: 09 Jan 2006 14:47
por rochinha
Amiguinho
Acrescente este código ao .PRG principal
Código: Selecionar todos
FUNCTION dbProgress( cIndice, cMensagem )
LOCAL cComplete := LTRIM(STR(INT((RECNO()/LASTREC()) * 100)))
cMensagem := OemToAnsi( iif(cMensagem=nil,"Indexacao de ",cMensagem) )
MENSAGEM(OemToAnsi(cMensagem + cIndice + " " + cComplete + "% Completada."))
RETURN(.T.)
FUNCTION MENSAGEM( MENSAGEM, TEMPO )
MENSAGEM := OemToAnsi(MENSAGEM)
IF TEMPO <> NIL
MSGSTOP( MENSAGEM )
ELSE
[b]oWnd[/b]:SetMsg( MENSAGEM )
ENDIF
Lembre-se de altera o
oWnd para o nome da variavel de objeto de sua Window.
@braços :?)
Enviado: 10 Jan 2006 09:10
por gvc
Qdo vc vai indexar o arquivo, use o eval do comando index.
Vc cria uma funçaõ/code block para uma função que move o seu meter.
index on <chave> to <arquivo> eval <função/code block>
Cada registro, quando indexado, chama a função/code block
Enviado: 10 Jan 2006 13:29
por Stanis Luksys
Olá,
Se usar o eval aproveite e use a cláusula every, exemplo:
index on clientes to indice eval funcao evary 10
Assim a funcao do eval só é executada a cada 10 registros, bom para bancos grandes...
Falo...
Enviado: 10 Jan 2006 21:22
por rochinha
Amiguinhos
Pegando carona em suas dicas e de minha falta de memória acrescento:
index on <chave> to <arquivo> eval dbProgress( <arquivo>, "Aguarde:" )
Não use o METER pois o mesmo degrada o desempenho do aplicativo e pode derruba-lo.
@braços :?)
Enviado: 11 Jan 2006 16:30
por Vander
Valeu pela ajuda.
Rochinha, a sua função é muito boa, mas continuo sem solução para a minha questão, pois continua fazendo a contagem individual e não total, ou seja vai de 0 a 100% para cada índice e não é barra.
Vander
Enviado: 11 Jan 2006 16:31
por Vander
Valeu pela ajuda.
Rochinha, a sua função é muito boa, mas continuo sem solução para a minha questão, pois continua fazendo a contagem individual e não total, ou seja vai de 0 a 100% para cada índice e não é barra.
Vander
Enviado: 11 Jan 2006 17:55
por Stanis Luksys
Amigo,
Para fazer uma contagem TOTAL é necessário antes vc abrir todos os DBFs e contar quantos registros cada um tem.
Depois implemetar uma função que incremete o registro atual ao total geral e vai tirando a porcentagem.
Isso pode ser útil para criar DUAS barras de progresso, conforme esta tela q vou postar, onde utilizei a miniGUI, que trabalha de maneira muito semelhante ao FiveWin.
Para fazer estas barras foi simples, controlo elas artraves da clausula EVAL do comando INDEX, conforme exemplo:
Código: Selecionar todos
// no programa que indexa
index on xxx to xxxx eval Prog_Ind()
function Prog_Ind()
nReg_Processados := nReg_Processados + 1
oJanela.oBarraProgresso1.value := (RecNo()/LastRec())*100
oJanela.oBarraProgresso2.value := (nReg_Processados/nTotaldeRegistros)*100
return .t.
Note q a variavel "nTotaldeRegistros" foi obtida antes somando o total de todos os registros de todos os arquivos atarves com comando count ( ou da funcao lastRec(), tanto faz )
Espero ter colaborado de alguma forma, apesar de ter deixado um pouco de utilizar o FiveWin, sempre achei a sintaxe muito parecida com a da MiniGUI, e tenho certeza que este código pode ser adaptado para a FW.
Falou...
Enviado: 12 Jan 2006 04:19
por rochinha
Amiguinho
Voce ira precisar de algo assim:
Código: Selecionar todos
// Testing FiveWin own meter controls
#include "FiveWin.ch"
static oDlg
//----------------------------------------------------------------------------//
function Main()
local nActual := 0, oMeter
nActual1 := 0
nActual2 := 0
nTotal1 := 50 // registros em cada dbf devendo ser atualizado para o recco() atual
nTotal2 := 100 // registros totais
DEFINE DIALOG oDlg FROM 1, 1 TO 20, 44 ;
TITLE "Testing the Meter controls"
@ 2, 2 METER oMeter1 VAR nActual1 TOTAL nTotal1 OF oDlg SIZE 135, 10
@ 4, 2 METER oMeter2 VAR nActual2 TOTAL nTotal2 OF oDlg SIZE 135, 10
@ 5, 12 BUTTON "&Increase" OF oDlg SIZE 40, 14 ;
ACTION (oMeter1:Set( nActual1 + 1 ),oMeter2:Set( nActual2 + 1 ),;
iif(nActual1>=nTotal1,oMeter1:Set( 0 ),0))
ACTIVATE DIALOG oDlg CENTERED
return nil
//----------------------------------------------------------------------------//
procedure AppSys // XBase++ requirement
return
//----------------------------------------------------------------------------//
@braços :?)
Enviado: 03 Mar 2006 17:52
por Vagner
Olá Vander,
Se quiser um meter na barra de mensagem, verifique minha classe em
www.fivewin.com.br em dicas + dicas, procure por VBar ou VMsgBar, vai encontrar tanto para clipper como para [x]Harbour