Criando uma barra de progresso em formulários
Em processamentos longos, é sempre bom colocar um indicador de
progresso para que o usuário tenha uma noção do que está acontecendo
no momento. Colocar uma mensagem com o progresso na barra de status
é uma ótima ideia e cumpre bem sua função, mas e se quisermos
sofisticar um pouco mais?
progresso para que o usuário tenha uma noção do que está acontecendo
no momento. Colocar uma mensagem com o progresso na barra de status
é uma ótima ideia e cumpre bem sua função, mas e se quisermos
sofisticar um pouco mais?
Que tal abrir um pequeno formulário com uma barra indicando o
progresso? É um efeito visual mais legal e deve deixar o usuário
impressionado.
progresso? É um efeito visual mais legal e deve deixar o usuário
impressionado.
Crie um formulário e adicione um rótulo para colocar o texto com a
mensagem indicando o progresso, colocando um nome como
lblMensagem, por exemplo.
mensagem indicando o progresso, colocando um nome como
lblMensagem, por exemplo.
Em seguida, adicione outro rótulo, nomeie como lblFundo,
apague o conteúdo da Caption, altere a cor de fundo
(BackColor) para branco e acrescente a borda (BorderStyle = 1 – fmBorderStyleSingle). Deixe a altura (Height) em 20 e a largura (Width)
em 104.
apague o conteúdo da Caption, altere a cor de fundo
(BackColor) para branco e acrescente a borda (BorderStyle = 1 – fmBorderStyleSingle). Deixe a altura (Height) em 20 e a largura (Width)
em 104.
Por fim, faça uma cópia desse rótulo e batize como
lblProgresso. Altere a cor para azul, retire a borda, defina
a altura em 16 e a largura em 100. Posicione dois pixels abaixo e
dois à direita da posição do lblFundo, colocando esse rótulo por
cima.
lblProgresso. Altere a cor para azul, retire a borda, defina
a altura em 16 e a largura em 100. Posicione dois pixels abaixo e
dois à direita da posição do lblFundo, colocando esse rótulo por
cima.
Posicione os objetos no formulário, altere o tamanho do formulário
para algo mais apropriado e coloque um título. O resultado deve ser
algo assim:
para algo mais apropriado e coloque um título. O resultado deve ser
algo assim:
Por fim, altere a largura de lblProgresso para 0, que será o
valor inicial. A parte de desenho está feita, agora só falta o
código.
valor inicial. A parte de desenho está feita, agora só falta o
código.
No seu código deverá haver uma estrutura de repetição onde
acontecerá a maior parte do processamento. É imediatamente acima
dessa estrutura que deverá ser feito o carregamento do
formulário.
acontecerá a maior parte do processamento. É imediatamente acima
dessa estrutura que deverá ser feito o carregamento do
formulário.
frmProcessamento.Show
For Iteracao = ValorInicial To ValorFinal
…
No começo dessa estrutura de repetição deve ser calculado o
percentual atual do processamento. A conta é simples:
PosicaoAtual dividido por ValorFinal multiplicado por
100, com ValorInicial valendo 1. É este valor que será associado à largura da barra de
processamento. Você pode associar diretamente, sem criar uma
variável intermediária.
percentual atual do processamento. A conta é simples:
PosicaoAtual dividido por ValorFinal multiplicado por
100, com ValorInicial valendo 1. É este valor que será associado à largura da barra de
processamento. Você pode associar diretamente, sem criar uma
variável intermediária.
frmProcessamento.Show
For PosicaoAtual = ValorInicial To ValorFinal
lblProgresso.Width = CInt(PosicaoAtual / ValorFinal * 100)
…
Não se esqueça de alterar o texto do rótulo de mensagem para
indicar o status do processamento.
indicar o status do processamento.
lblMensagem.Caption = “Andamento: ” & lblProgresso.Width
& “%”
& “%”
Se você processar agora, verá que nada acontece e o formulário
permanece igual a quando carregou. É que está faltando pedir ao
Excel atualizar o formulário:
permanece igual a quando carregou. É que está faltando pedir ao
Excel atualizar o formulário:
frmProcessamento.Repaint
Por fim, não se esqueça de remover o formulário quando terminar o
processo. Pode ser logo após o final da estrutura de repetição, mas
prefiro no final do processo.
processo. Pode ser logo após o final da estrutura de repetição, mas
prefiro no final do processo.
Unload frmProcessamento
Agora está funcionando. O formulário deve abrir, exibir o progresso
enquanto está processando e, ao terminar, o formulário
desaparece.
enquanto está processando e, ao terminar, o formulário
desaparece.
Se quiser colocar um atraso antes de fechar o formulário, para que
o usuário veja a barra exibindo os 100% completados, pode colocar
este comando:
o usuário veja a barra exibindo os 100% completados, pode colocar
este comando:
Application.Wait (Now + TimeValue(“00:00:01”))
Esse comando Wait para todo o processamento até o horário
especificado dentro dos parênteses. O horário no comando acima é um
segundo após o instante em que chegar nesse ponto do processamento
(Now).
especificado dentro dos parênteses. O horário no comando acima é um
segundo após o instante em que chegar nesse ponto do processamento
(Now).
Você ainda pode incrementar esse formulário com uma imagem e outros
elementos que ajudem a deixar o usuário impressionado. Deixe com uma
aparência bem profissional e de bom gosto.
elementos que ajudem a deixar o usuário impressionado. Deixe com uma
aparência bem profissional e de bom gosto.
Este artigo foi bem curto em comparação com os anteriores, mas
ainda assim acredito que tenha gostado bastante desta dica.
ainda assim acredito que tenha gostado bastante desta dica.
Pedro Martins
Formado em Tecnologia em Eletrônica Digital, já trabalhou como
artefinalista, eletrotécnico, programador de CLP (para máquinas
industriais) e analista de sistemas em sistema bancário,
programando em COBOL.
artefinalista, eletrotécnico, programador de CLP (para máquinas
industriais) e analista de sistemas em sistema bancário,
programando em COBOL.
Mexe com computadores e programação desde a segunda metade dos
anos 1980, quando teve um MSX e aprendeu a programar em BASIC. É
a favor da disseminação do conhecimento.
anos 1980, quando teve um MSX e aprendeu a programar em BASIC. É
a favor da disseminação do conhecimento.
Catálogo de aulas (NOVIDADE)
Criei um catálogo de aulas para ajudar você em seus estudos. Acesse clicando na imagem abaixo ou clique aqui.