|
|
|
|
|
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, ""
|
|
|
|
|