90 Dicas de Visual Basic



Baixar 426,91 Kb.
Página8/14
Encontro03.05.2017
Tamanho426,91 Kb.
1   ...   4   5   6   7   8   9   10   11   ...   14

42 - VB3/VB4 - Removendo o move


Em alguns casos, é interessante impedir o usuário de mover um form. No VB isto pode ser implementado com APIs:

Declare Function GetMenu% Lib "User" (ByVal hWnd%)

Declare Function RemoveMenu% Lib "User" (ByVal hWnd%, ByVal nPosition%, ByVal wFlags%)

'...


Dim Res%

Res = RemoveMenu(GetMenu(Form.hWnd), SC_MOVE, MF_BYPOSITION)



Por Phil Parsons*

43 VB4 - Otimizando consultas no Jet 3


Se você precisa analisar a performance de uma query (consulta) no Jet Engine 3.0 (banco .MDB), através de um plano de execução de consultas, você deve adicionar esta chave de Registry e executá-la no RegEdit.

\\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Jet\3.0\Engines\Debug

Para a nova chave Debug, adicione o nome JETSHOWPLAN (tudo maiúsculo) e valor ON. O Jet irá gerar um arquivo chamado SHOWPLAN.OUT, que irá mostrar planos de execução de queries associados com sua aplicação. Como estes arquivos podem se tornar muito grandes rapidamente, não se esqueça de alterar o valor para OFF ao terminar.

Queries e bases de dados bem definidas irão gerar planos que, indicarão o uso de índices e/ou a tecnologia Rushmore. Bases e consultas mal definidas exibem apenas uma leitura de tabela.



Por Rob Karatzas*

44 - VB3/VB4 - Piscar ou não piscar


Geralmente, ao criar uma ajuda de barra de situação (status bar help), você irá adicionar código no evento MouseMove de controles e forms. A barra de status poderá ser uma picture box com um label, um controle statusbar (VB4-32 bits) ou - como mais usado - um painel 3D. O problema é que o mouse se movimenta várias vezes no mesmo controle, fazendo a barra de status "piscar". Para resolver este problema, basta verificar se a frase atual é diferente da frase nova. Criamos ainda uma função que controla a barra de status.

Global Const CG_EXPLICAPADRAO = "Pressione F1 para obter ajuda."

'...

Sub SU_Explica (oque As String)



'rotina em VB3, usa um painel 3D

oque = Trim(oque)

If oque = "" Then oque = CG_EXPLICAPADRAO

If Len(oque) > 1 And Right$(oque, 1) <> "." Then

oque = oque & "." 'acrescenta ponto final

End If


'muda a inicial para maiúscula

If Len(oque) > 1 Then

oque = UCase(Left(oque, 1)) & Right(oque, Len(oque) - 1)

Else


oque = UCase(oque)

End If


'altera a barra se o novo conteúdo for diferente

If MainForm.PA_Status.Caption <> oque Then

MainForm.PA_Status.FloodShowPct = False

MainForm.PA_Status.FloodType = 0

MainForm.PA_Status.Caption = oque

End If


End Sub

A função usa uma constante (CG_EXPLICAPADRAO) que, contém uma frase genérica, para quando não houver o que explicar sobre um form ou objeto.

Para chamar a função:

Sub CmdOK_MouseMove(Button As Integer, Shift As Integer, X As Single, _

Y As Single)

SU_Explica "Grava as alterações no banco de dados."

End Sub

Pode ser utilizado também o evento GotFocus (para resposta ao teclado). Neste caso, o LostFocus deverá limpar a barra de status (como a frase genérica).



Sub txtNome_LostFocus ( )

SU_Emplica ""

End Sub

Por Dave Robins*, aperf. por Charles A. Müller
As três próximas dicas se referem ao que mostrar para os usuários em processos demorados:

45 - VB3/VB4 - Travou tudo?


Em alguns processos demorados, como consultas a bancos de dados, o usuário tem a impressão de que o sistema "travou". No Windows 3.1x, esta sensação é maior (pois o controle de tarefas é mais rudimentar). 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:



  1. 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.

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

  3. 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.

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



Por Charles A. Müller



1   ...   4   5   6   7   8   9   10   11   ...   14


©livred.info 2017
enviar mensagem

    Página principal