quinta-feira, 4 de outubro de 2007

ProgressBar: Cadê o final ?

Aprenda a animar uma barra de progressos, nos casos em que não se sabe a quantidade de informação a ser processada.

Para criar a barra de progressos, utilize o exemplo mostrado no artigo "Mostre o seu progresso".

Defina as novas variáveis na working-storage section:

77 bHandle pic 9(09) comp-5 value zeros.
77 wsMilisegundos pic 9(09) comp-5 value zeros.

78 PBM-SETMARQUEE value 1034.
78 PBS-MARQUEE value h"08".

Na procedure division, depois de criada a barra de progressos,basta adicionar os seguintes comandos antes do processamentode qualquer informação:

invoke umaProgressBar "AddBasicApiFlags"
using by value PBS-MARQUEE size 4

invoke umaProgressBar "getSystemHandle"
returning bHandle
move 200 to wsMilisegundos
call WAPI "SendMessageA" using by value bHandle
by value PBM-SETMARQUEE
by value 1
by value wsMilisegundos

Para pausar a animação da barra de progressos:

invoke umaProgressBar "getSystemHandle" returning bHandle
move 0 to wsMilisegundos
call WAPI "SendMessageA" using by value bHandle
by value PBM-SETMARQUEE
by value 0
by value wsMilisegundos

Esse procedimento não requer que um valor seja passado para o componente a cada informação processada. Assim que a API é chamada, o componente passa a mostrar a animação automaticamente. A variável wsMilisegundos especifica o tempo da animação. Quanto menor o valor passado, mais rápida será a animação.

4 comentários:

Anônimo disse...

Estava tentando fazer o exemplo da Progress Bar, o primeiro exemplo e quando fui executar o programa, deu erro 173 na linha

invoke Window "fromHandleWithClass" using wsHandle Window

Define as classes logo após o Special-Names...

O que será que fiz errado??

Obrigado desde já.

Alexandre Cortez. disse...

olá, Bruno...

existe uma série de comandos dentro da GS que eu normalmente não coloco em meus "post´s", por se tratar de um padrão para utilização das classes gráficas do NetExpress... verifique se dentro da sua GS principal você possui esses comandos abaixo:

CALLOUT-PARAMETER 1 CONFIG-FLAG $NULL
CALLOUT-PARAMETER 2 CONFIG-VALUE $NULL
MOVE 15 CONFIG-FLAG
MOVE 1 CONFIG-VALUE
CALLOUT "dsrtcfg" 3 $PARMLIST


Se mesmo assim continuar o problema, por favor, entre em contato comigo novamente, ok ?.. abraços...

Alexandre Cortez. disse...

Ainda sobre os comandos acima...

coloque-os no evento SCREENSET-INITIALIZED

abraços...

Anônimo disse...

Olá Alexandre.
Deu certo sim, obrigado pela atenção!
Vou tentar fazer o outro exemplo agora.