90 Dicas de Visual Basic



Baixar 426,91 Kb.
Página9/14
Encontro03.05.2017
Tamanho426,91 Kb.
1   ...   6   7   8   9   10   11   12   13   14

46 - VB3/VB4 - Painel de Percentual


Na dica anterior, citei a barra de progresso percentual como uma forma de mostrar ao usuário como está um processo demorado (assim ele não pensará que o programa "travou"). Para mostrar um percentual, é preciso conhecer o tempo (ou tamanho) total da operação e a que ponto se está em dado momento de um loop (laço de repetição). Num programa de instalação, por exemplo, se conhece o tamanho total dos arquivos (ou quantidade de arquivos) a serem instalados e qual o arquivo atual (no loop). Com isto, o usuário vê X% da instalação completa.

Para usar um 3D Panel como barra de percentual, siga estes passos:



  1. Insira um 3D Panel, com nome PA_Status, no MDIForm (aqui chamado de F00). Atribua Align = Alig Botton.

  2. Insira em um módulo (.BAS) a rotina SU_BarraPerc.

Sub SU_BarraPerc (Perc As Integer, Acum As Integer)

'recebe perc, um número de 0 a 100

'100 = "desliga" a barra

'Acum = boolean, acumula o anterior ou não (true/false)


Static VA_Vez

Static VA_SaveCor As Long


If Acum Then

Perc = Perc + F00.PA_Status.FloodPercent

End If

If Perc > 100 Or Perc < -1 Then



MsgBox "Perc deve estar entre -1 e 100", 16, "Erro de parâmetro _

em SU_BarraPerc"

Exit Sub

End If


If IsEmpty(VA_Vez) Or VA_Vez = 1 Then

'liga barra - altera o painel

F00.PA_Status.Caption = ""

F00.PA_Status.FloodShowPct = True

VA_SaveCor = F00.PA_Status.ForeColor

F00.PA_Status.ForeColor = RGB(0, 0, 0)'preto

F00.PA_Status.BevelOuter = 2 'raised

F00.PA_Status.BevelWidth = 3

F00.PA_Status.BorderWidth = 1

F00.PA_Status.FloodType = 1 'left to right

F00.PA_Status.FontSize = 9.75

End If


If Perc < 100 Then

If Perc > 48 Then

F00.PA_Status.ForeColor = RGB(255, 255, 255)'branco

End If


'mostra perc

F00.PA_Status.FloodPercent = Perc

VA_Vez = 2 'ou mais

Else


'desliga barra - reestrutura painel

F00.PA_Status.BevelOuter = 1 'inset

F00.PA_Status.BevelWidth = 1

F00.PA_Status.BorderWidth = 3

F00.PA_Status.FloodType = 0 'none

F00.PA_Status.FontSize = 8.25

F00.PA_Status.ForeColor = VA_SaveCor

F00.PA_Status.FloodShowPct = False

VA_Vez = 1

End If


End Sub

Para chamar a rotina, basta passar o valor atual do percentual. O segundo parâmetro, indicará se o percentual anterior será acumulado com este. No exemplo abaixo, a barra é preenchida de 10% em 10%.

'teste da barra de percentual

Dim i As Integer

For i = 1 To 10

SU_BarraPerc (i * 10), False

MsgBox "Clique em OK para continuar"

Next i


SU_BarraPerc (100), False 'desliga a barra

Por Charles A. Müller

47 - VB3/VB4 - Painel de Percentual com SQL Count


Complementando a dica anterior: Em uma operação de consulta a um banco de dados (típica de desenvolvimento comercial), deveremos conhecer o tamanho do retorno da consulta. O número de linhas que irá retornar é calculado por um Select Count (instrução SQL para contador) igual ao Select que, posteriormente, será usado para a consulta. O Count é uma operação rápida, principalmente em bancos Client Server (onde o cálculo é executado no servidor). O retorno do Select Count é um número, contendo o total de linhas que seria trazido pela consulta. Com o Count, poderão ser impedidas consultas longas demais, por exemplo.

Para o percentual, já temos o total. O "registro corrente" é obtido dentro do loop. No exemplo abaixo, carregamos um Grid simples com dados de uma tabela. Utilizamos as rotinas SU_Aguarde e SU_BarraPerc (explicadas nas dicas anteriores).



Sub SU_CarregarGrid ()

Dim VA_Cmd As String

Dim dynatemp As dynaset

Dim dynacont As dynaset

Dim VA_Cont, VA_Curr

Dim VA_SevErro

On Error GoTo Erro_Carregar_Grid

SU_Aguarde True, "Carregando tabela de cidades..."

'rotina acima explicada na DICA ANTERIOR

'... limpar o Grid

'... formatar TB_Cidade.text
'query

VA_Cmd = "Select * From CIDADE"

If Len(TB_Cidade.Text) > 0 Then

VA_Cmd = VA_Cmd + " Where CIDADE.Nome >= '" & (TB_Cidade.Text) & "' "

VA_Cmd = VA_Cmd + "And CIDADE.Nome <= '" & (TB_Cidade.Text) & Chr(255) & "' "

End If


Set dynatemp = db.CreateDynaset(VA_Cmd, VGl_SQLop)
'query do contador

VA_Cmd = "Select Count(*) From CIDADE"

If Len(TB_Cidade.Text) > 0 Then

VA_Cmd = VA_Cmd + " Where CIDADE.Nome >= '" & (TB_Cidade.Text) & "' "

VA_Cmd = VA_Cmd + "And CIDADE.Nome <= '" & (TB_Cidade.Text) & Chr(255) & "' "

End If


Set dynacont = db.CreateDynaset(VA_Cmd, VGl_SQLop)

If Not dynacont.EOF Then

VA_Cont = dynacont(0)

Else


VA_Cont = 0

End If


If VA_Cont = 0 Then

MsgBox "Nenhum registro de cidade encontrado."

SU_Aguarde False, ""

Gr_Grid.Row = 1

'... marcar outra linha do grid

Exit Sub


End If

'carga do grid

Gr_Grid.Rows = VA_Cont + 1

VA_Curr = 1

Do While Not dynatemp.EOF

SU_BarraPerc CInt(VA_Curr * 100 / VA_Cont), False

'rotina explicada na DICA ANTERIOR

Gr_Grid.Row = VA_Curr

Gr_Grid.Col = 0

Gr_Grid.Text = dynatemp("CodCidade")

Gr_Grid.Col = 1

Gr_Grid.Text = dynatemp("NomeCidade")

Gr_Grid.Col = 2

Gr_Grid.Text = dynatemp("UF")

VA_Curr = VA_Curr + 1

dynatemp.MoveNext

Loop


'desliga a barra de percentual

SU_BarraPerc 100, false

'... demais lógicas

'... (tratamento de erro e formatações)

End Sub

Como esta rotina de carga de grid é enorme (e no VB4, o DBGrid faz isto sozinho), o código acima apenas mostra a formação do Select Count e a chamada a SU_BarraPerc.



Por Charles A. Müller


1   ...   6   7   8   9   10   11   12   13   14


©livred.info 2017
enviar mensagem

    Página principal