Em muitas ocasiões torna-se extremamente útil mostrar ao usuário o andamento de um determinado processamento dentro dos sistemas. Aprenda como criar uma DialogBox e uma ProgressBar em tempo de execução e mostre a todos o seu progresso:
Primeiro, vamos definir o tipo de chamada das API´s:
special-names.
call-convention 66 is WAPI.
Em seguida, as classes que serão utilizadas:
class-control.
Window is class "window"
DialogBox is class "dilogbox"
ProgressBar is class "progress"
.
As seguintes variáveis serão utilizadas:
working-storage section.
77 wsHandle pic 9(09) comp-5 value zeros.
77 umaJanela object reference value null.
77 umaDialogBox object reference value null.
77 umaProgressBar object reference value null.
77 wsLarguraDaJanela pic s9(09) comp-5 value zeros.
77 wsAlturaDaJanela pic s9(09) comp-5 value zeros.
77 wsLargura pic s9(09) comp-5 value zeros.
77 wsAltura pic s9(09) comp-5 value zeros.
77 wsX pic s9(09) comp-5 value zeros.
77 wsY pic s9(09) comp-5 value zeros.
77 wsInicio pic 9(09) comp-5 value zeros.
77 wsFim pic 9(09) comp-5 value zeros.
77 wsPosicao pic 9(09) comp-5 value zeros.
77 wsMes pic 99 value zeros.
77 wsTexto pic x(255) value spaces.
Agora vamos imaginar que uma determinada rotina vai processar valores dos doze meses de um ano. Vamos mostrar o progresso desse processamento criando uma ProgressBar dentro de uma DialogBox em tempo de execução, como mostram as linhas a seguir:
ProcessarMeses section.
*>---------------------------------------------------------
*> A API "GetActiveWindow" retorna o handle da janela ativa
call wapi "GetActiveWindow" returning wsHandle
*>---------------------------------------------------------
*> O método "fromHandleWithClass" retorna a instância
*> da classe Window, referente ao handle informado
invoke Window "fromHandleWithClass" using wsHandle Window
returning umaJanela
*>---------------------------------------------------------
*> O método "new" retorna uma nova instância da classe DialogBox
invoke DialogBox "new" using umaJanela returning umaDialogBox
*>---------------------------------------------------------
*> Os métodos "create", "setWidth" e "setHeight", cria e
*> define largura e altura (em pixéis) da DialogBox,
*> respectivamente
invoke umaDialogBox "create"
move 1200 to wsLargura
move 74 to wsAltura
invoke umaDialogBox "setWidthHeight" using wsLargura wsAltura
*>---------------------------------------------------------
*> os métodos abaixo retornam a largura e a altura da janela
*> para que a DialogBox seja centralizada
invoke umaJanela "GetWidthHeight"
using wsLarguraDaJanela wsAlturaDaJanela
compute wsX = (lsLarguraDaJanela / 2) - (wsLargura / 2)
compute wsY = (lsAlturaDaJanela / 2) - (wsAltura / 2)
invoke umaDialogBox "setXY" using wsX wsY
invoke umaDialogBox "show"
*>---------------------------------------------------------
*> O método "new" retorna uma nova instância da classe ProgressBar
invoke ProgressBar "new" using umaDialog
returning umaProgressBar
*>---------------------------------------------------------
*> Os métodos abaixo fazem a criação e ajustam a posição,
*> largura, altura, o valor inicial e o valor final da
*> ProgressBar.
invoke umaProgressBar "Create"
move 2 to wsY
invoke umaProgressBar "setY" using wsY
move 70 to wsAltura
move 1200 to wsLargura
invoke umaProgressBar "setWidthHeight" using wsLargura wsAltura
move 1 to wsInicio
move 12 to wsFim
invoke umaProgressBar "SetRange" using wsInicio wsFim
invoke umaProgressBar "show"
*>---------------------------------------------------------
*> O procedimento a seguir apenas demonstra como seria
*> mostrada a ProgressBar, a cada mes que é processado
move 0 to wsMes wsPosicao
perform 12 times
....add 1 to wsMes wsPosicao
....move spaces to wsTexto
....string "Processando mes " wsMes "..." x"00" into wsTexto
....invoke umaDialogBox "setTitleZ" using wsTexto
....invoke umaProgressBar "setPosition" using wsPosicao
.......
....*> aqui seria feito um processamento qualquer
.......
end-perform
invoke umaProgressBar "finalize" returning umaProgressBar
invoke umaDialogBox "finalize" returning umaDialogBox
*-----------------------------------------------------------
A cada mes processado, o título da DialogBox é alterado pelo método "setTitleZ", informando cada mes que está sendo processado. A ProgressBar também é atualizada pelo método "setPosition", indicando o progresso do processamento.
Nenhum comentário:
Postar um comentário