USUÁRIO:      SENHA:        SALVAR LOGIN ?    Adicione o VBWEB na sua lista de favoritos   Fale conosco 

 

  Dicas

  Visual Basic    (Problemas Comuns)

Título da Dica:  Travou tudo? - o que mostrar para os usuários em processos demorados
Postada em 14/8/2003 por d@®l@n            
Em alguns processos demorados, como consultas a bancos de dados, o usuário tem a impressão de que o sistema "travou". Para minimizar o problema, estes loops (laços de repetição de código) demorados devem conter uma instrução DoEvents. Para não assustar o usuário, é alterada a propriedade MousePointer do Form para ampulheta (hourglass) ou aparece uma mensagem (ou percentuais) na barra de status.

Para mudar o ponteiro do mouse:

'antes
Me.MousePointer = 11 'hourglass (ampulheta)
ExecutarProcessoDemorado
'depois
Me.MousePointer = 0 'padrão

Neste caso, se o sistema operacional for o Windows 95 (ou outro Win32), o usuário poderá definir um ícone animado nas suas configurações. Outra forma é utilizar um 3D Panel como barra de progresso percentual, usando as propriedades FloodPercent, FloodShowPct e FloodType (detalhes no help do VB). Estes são os recursos mais comuns. Mas, se a barra de status já estiver sendo utilizada como contador percentual, onde exibirei uma mensagem de "aguarde processando..."? E se eu desejar algo com maior destaque que um simples ponteiro de mouse?
Não é possível utilizar um form para isto ou uma caixa de mensagem, pois, eles esperariam uma ação do usuário - o que interromperia o processamento.

A solução é incluir, no MDI Form (form principal), uma "faixa de aguarde". Assim:

No MDI Form de sua aplicação (aqui chamado de F00), insira uma picture box, que será chamada PI_Aguarde. Esta picture box será como uma barra de ferramentas. A propriedade Align deverá ser 1 (Align Top). Esta é a "faixa de aguarde". Atribua false para a propriedade Visible.

Na PI_Aguarde, insira um rótulo (label), chamado LB_MsgAguarde. Use um tamanho e formato de fonte que dê bastante destaque ao texto.

Você poderá inserir ainda, ao lado do label, uma outra picture (pequena e para enfeite), contendo um desenho que remeta à idéia de espera. Este desenho, poderá ser um ícone de um semáforo.

Em um módulo (.BAS), insira a rotina SU_Aguarde, para manipular a faixa.
Eis o código da rotina:
Sub SU_Aguarde (VA_Liga As Integer, VA_Msg As String)
    'recebe VA_Liga (true/false)
    'mostra a picture de aguarde com VA_Msg ou padrão
      If VA_Liga Then
        F00.PI_Aguarde.Visible = True
        screen.MousePointer = 11 'hourglass
        VA_Msg = Trim$(VA_Msg)
        If Len(VA_Msg) = 0 Then
                     'mensagem padrão
            VA_Msg = "Por favor, aguarde: processando..."
        End If
        F00.LB_MsgAguarde.Caption = VA_Msg
    Else 'desliga
               F00.LB_MsgAguarde.Caption = ""
               F00.PI_Aguarde.Visible = False
        screen.MousePointer = 0 'default
    End If
End Sub

Esta rotina pública passa mensagens para a faixa, que ficará ativa durante o processo demorado. O primeiro parâmetro (true/false) liga ou desliga a barra. O segundo passa uma frase. No caso de frase vazia (""), é usada uma frase padrão.
Para chamar a rotina:

'antes
SU_Aguarde True, "Por favor, aguarde: consultando tabela de Clientes..."
ExecutarConsultaGrid_Cliente
'depois
SU_Aguarde False, ""
 


CyberWEB Network Ltda.    © Copyright 2000-2024   -   Todos os direitos reservados.
Powered by HostingZone - A melhor hospedagem para seu site
Topo da página