Vous êtes sur la page 1sur 25

Microsoft Visual Basic 6

25

O VB tambm possui uma funo para converso de expresses numrica ou data em dados tipo String: a funo Str, cuja sintaxe :
Str(<valor>)

Por exemplo: o resultado da linha de comando Str(3.1416) ser o texto 3.1416.

Operadores
Depois que o programa recebe dados do usurio, o prximo passo fazer algo com esses dados, normalmente clculos. Qualquer tipo de clculo envolve uma operao; portanto, os comandos especiais para trabalhar com dados so chamados operadores. O VB fornece cinco tipos de operadores:

Operadores Aritmticos
So os operadores matemticos clssicos, que permitem somar, subtrair, multiplicar e dividir nmeros ou variveis que contenham nmeros: Operador Funo = Nesse caso, atribuio de valor + Soma de dois nmeros Subtrao de dois nmeros Inverso de positivo/negativo * Multiplicao de dois nmeros / Diviso de dois nmeros, sendo que o resultado ser um nmero com ponto flutuante (decimal), como 5.8547 \ Diviso de dois nmeros, sendo que o resultado ser um nmero inteiro Mod Resto da diviso inteira de um nmero por outro ^ Exponenciao Exemplo Varivel = 0 vSoma = X + Y vSalLiq = vSalBruto vImposto vNegativo = vPositivo vTotal = vPreo * vQuantidade vTeste = 1910 / 25 (vTeste ser igual a 76.4) vTeste = 1910 \ 25 (vTeste ser igual a 76) vTeste = 1910 Mod 25 (vTeste ser igual a 10) vQuadrado = vNmero ^ 2

Operador de String
O mais simples de todos. o operador &, que realiza a concatenao (unio) de dois ou mais dados tipo String. Veja um exemplo:
vLinguagem = Visual & Basic

O comando acima resulta em Visual Basic, pois o dado aps o operador agrupado por este ao final do primeiro, resultando na unio de ambos: foram concatenados. Tambm pode ser usado para isso o operador +, mas recomenda-se usar & porque este converte dados de outros tipos antes da concatenao, evitando erros de execuo.

Operadores de Datas
So aqueles que permitem efetuar clculos com dados tipo Date. Como as datas so representadas internamente pelo VB como nmeros, podemos obter outras datas somando valores a elas, ou ento determinar o nmero de dias entre uma data e outra atravs de subtrao. Veja a tabela: Operador Funo Exemplo + Obter a partir da soma de uma data inicial e um nmero vVencimento = Date + 30 uma outra data. O nmero ser entendido como (Date retorna a data de hoje, qual quantidade de dias. sero somados trinta dias) Obter a diferena em dias entre duas datas vAtraso = vPagto vVenc (vAtraso receber o nmero de dias entre o vencimento e o pagamento) Um lembrete: como o tipo Date tambm serve para indicar horas, para clculos de horas usamos os mesmos operadores, mas trabalhamos com a parte decimal das variveis ou expresses.

Microsoft Visual Basic 6

26

Operadores Lgicos
So aqueles que manipulam os valores lgicos True (verdadeiro) e False (falso). O VB tambm representa esses valores como 1 e 0, respectivamente. No entraremos em muitos detalhes com esses operadores agora, pois eles sero mais bem estudados quando abordarmos as estruturas de controle. Operador Funo And E lgico: retorna verdadeiro se todos os valores da expresso forem verdadeiros e falso em qualquer outro caso Or Ou lgico: retorna falso somente se todos os valores da expresso forem falsos e verdadeiros em qualquer outro caso Xor Ou lgico exclusivo: a diferena desse operador para Or que, se todos os valores da expresso forem verdadeiros, ele retorna falso (no h erro, isso mesmo!) Not No lgico: nega , ou melhor, inverte o valor lgico da expresso Exemplo Expresso1 And Expresso2 Expresso1 Or Expresso2 Expresso1 Xor Expresso2 Expresso1 = Not Expresso2

Operadores de Comparao
Servem para a comparao de dados. Assim como os operadores lgicos, estudaremos melhor esse assunto juntamente com as estruturas de controle. Operador < <= > >= = <> Funo Exemplo Expresso1 < Expresso2 Expresso1 <= Expresso2 Expresso1 > Expresso2 Expresso1 >= Expresso2 Expresso1 = Expresso2 Expresso1 <> Expresso2

Menor que Menor ou igual a Maior que Maior ou igual a Nesse caso, igual a Diferente de

Muito cuidado ao comparar strings com os operadores = e <> , pois duas strings so iguais apenas se forem absolutamente idnticas. Isso quer dizer que, se voc fizer a comparao a = A , o resultado ser falso, pois a (minsculo) possui um cdigo ASCII diferente de A (maisculo), e portanto no so iguais.

O Foco
No Windows, apenas uma janela (formulrio) ou controle pode, num dado instante, receber aes (cliques) do mouse ou entradas via teclado. Dizemos que esse objeto possui o foco (focus, em ingls). O foco geralmente indicado por uma legenda ou moldura destacada, ou ento pelo cursor estar posicionado no controle, e pode ser alterado pela ao do usurio ou atravs de cdigo. Quando um objeto recebe o foco, ocorre o evento Got-Focus, e quando ele o perde ocorre o evento LostFocus. Outra caracterstica importante a ser observada que, quando um programa VB executado, o cursor se posiciona no primeiro controle que voc inseriu no formulrio. Por exemplo: se o primeiro controle a ser inserido foi o txtNum1, quando voc iniciar o aplicativo nele que o cursor estar posicionado. Usando a tecla Tab, o cursor vai se alternando entre os campos, sempre seguindo a ordem em que os controles foram colocados no formulrio. Isso chama-se ordem de tabulao e determinada pela propriedade TabIndex dos controles.

Propriedade TabIndex
Como j foi dito, conforme voc insere controles em um formulrio eles recebem uma ordem para recebimento do foco, que o valor da propriedade TabIndex. O primeiro controle receber o valor 0 para TabIndex, o segundo 1, e assim por diante. Essa ordem pode ser mudada pelo programador, bastando alterar o valor de TabIndex de modo a ajust-la. No caso de ser digitado para TabIndex um valor j pertencente a outro controle, o VB vai reorganiz-los automaticamente. TabIndex no pode ser alterada em tempo de execuo.

Microsoft Visual Basic 6

27

Propriedade TabStop
Essa propriedade impede o acesso ao controle pela tecla Tab se estiver desligada. Isso acontece porque TabStop determina se o controle deve ou no atender ordem de tabulao. Mas importante ressaltar que TabStop no evita que o usurio acesse o controle usando o mouse. Os valores possveis para TabStop so True (TabStop ligada) ou False (TabStop desligada).

Propriedade Default
Existem, nas aplicaes para Windows, botes de comando que podem ser acionados pela tecla Enter, independente da ordem de tabulao, como os botes Ok das caixas de dilogo do Windows. Quem determina o acionamento do boto por Enter a propriedade Default, que pode receber os valores True ou False. O objeto cuja propriedade Default for igual a True aparecer com um contorno mais espesso, dando a indicao que, se Enter for pressionada, ele ser acionado.

Mtodo SetFocus
Para posicionar o foco em um determinado objeto em tempo de execuo usamos o mtodo SetFocus, sendo que somente formulrios ou controles visveis podem receb-lo. A sintaxe a seguinte:
objeto.SetFocus

Modificando a Calculadora
Vamos agora aplicar o que aprendemos: 1. Se ainda no o fez, abra a VB e o projeto da calculadora que iniciamos na lio anterior; 2. Execute o aplicativo e verifique se a ordem de tabulao corresponde seguinte: txtNum1 = 0, txtNum2 = 1, cmdIgual = 2 e cmdLimpar = 3. Se necessrio, altere as propriedades TabIndex dos controles para que fiquem de acordo com a ordem indicada; 3. No formulrio da calculadora, selecione o boto cmdIgual e pressione a tecla Delete. Lembra-se que havia programao associada a ele? E agora que esse objeto apagado, para onde ela foi? 4. Abra a janela Cdigo e procure a seo General do formulrio. Note que a lista Proc agora contm, alm da seo Declarations, a procedure cmdIgual_Click, que est l como uma procedure geral. Uma procedure geral aquela que pode ser chamada por qualquer outra procedure do formulrio, ou seja, funciona como uma subrotina ou funo. Ela no executada por estar associada a um objeto e a partir de um evento, e sim quando chamada. Estudaremos isso melhor na prxima lio; 5. Agora altere o formulrio da calculadora como no exemplo:

6. Altere as propriedades dos novos objetos seguindo a tabela:

Microsoft Visual Basic 6

28

Objeto Nome Label Label1 Label Label2 Boto de Comando cmdMultiplicar Boto de Comando cmdDividir Boto de Comando cmdSomar Boto de Comando cmdSubtrair

Outras Propriedades = Valor Caption = Primeiro Nmero: Caption = Segundo Nmero: Style = 1 Graphical Picture = Misc\MISC20.ICO Style = 1 Graphical Picture = Misc\MISC21.ICO Style = 1 Graphical Picture = Misc\MISC18.ICO Style = 1 Graphical Picture = Misc\MISC19.ICO

7. Chame a janela Cdigo e procure a procedure cmdIgual_Click (est na seo Declarations, lembra-se?) e altere seu nome para cmdMultiplicar_Click. Ao trmino da alterao, o cdigo do antigo boto cmdIgual ser associado ao boto cmdMultiplicar (veja nas caixas de combinao da janela Cdigo); 8. Altere a procedure cmdMultiplicar para que fique de acordo com a codificao a seguir. Note que foi includa na programao a declarao das variveis como do tipo Single, e a funo de converso usada foi substituda pela CSng, que apropriada a esse tipo:
Private Sub cmdMultiplicar_Click() Dim vValor1 As Single Dim vValor2 As Single vValor1 = CSng(txtNum1.Text) vValor2 = CSng(txtNum2.Text) lblResultado.Caption = Format(vValor1 * vValor2, "###,##0.00") End Sub

9. Selecione todo o texto da procedure, menos o cabealho e End Sub, e copie para a rea de transferncia usando a opo Copy do menu Edit ou teclando Ctrl+C; 10. Abra a janela cdigo no evento Click de outro boto e cole o trecho de programao usando a opo Paste do menu Edit ou ento Ctrl+V; 11. Faa as alteraes necessrias para que o boto funcione corretamente; 12. Repita esse procedimento para os outros operadores; 13. Grave seu trabalho e teste o aplicativo.

Microsoft Visual Basic 6

29

Lio 4: Estruturas de Controle


Assim como em outras linguagens, como C ou Pascal, o VB tambm possui estruturas de tomada de deciso e para controle de repetio (loops). Nessa lio aprenderemos a lidar com essas estruturas e tambm mais alguns recursos da linguagem.

Estruturas de Deciso
Estruturas de deciso so aquelas que permitem o desvio do fluxo do programa de acordo com uma condio. As estruturas de deciso do VB so similares s encontradas em outras linguagens:

Estrutura If...Then
Executa um comando ou uma srie de comandos de acordo com uma condio. Se a condio no for verdadeira, os comandos sero ignorados e a execuo do programa passa para o prximo comando aps a estrutura. Essa estrutura pode ser escrita de duas maneiras:
If <condio> Then <comando>

ou:
If <condio> Then <comando1> <comando2> ... <comandoN> End If

O que diferencia as duas estruturas o nmero de comandos executados se <condio> for verdadeira. Na primeira somente um comando executado, por isso esse comando pode vir logo aps a palavra reservada Then, e o comando End If no necessrio. Exemplo:
If txtNome.Text = Empty Then MsgBox Um nome deve ser digitado!

Na segunda vrios comandos devem ser executados se a condio for verdadeira, ento cada comando dever ser escrito em uma linha e o comando End If deve ser usado para fechar a estrutura. Veja dois exemplo:
If txtNome.Text = Empty Then MsgBox Um nome deve ser digitado! End If If vSaldoMdio > 1000 Then lblStatus.Caption = Cliente Especial vTaxaJuros = 0.015 End If

Estrutura If...Then...Else
Semelhante ao If...Then, porm contm um ou mais comandos para serem executados no caso da condio ser falsa, indicados pelo Else da sintaxe:
If <condio> Then <comandos para condio verdadeira> Else <comandos para condio falsa> End If

A condio testada, e, se for verdadeira, o primeiro conjunto de comandos ser executado. Se for falsa, o segundo conjunto ser executado. Exemplo:
If vSaldoMdio > 1000 Then lblStatus.Caption = Cliente Especial vTaxaJuros = 0.015 Else lblStatus.Caption = Cliente Comum vTaxaJuros = 0.018 End If

Microsoft Visual Basic 6

30

Estrutura Select Case


Quando houver a necessidade de se testar um nmero maior de situaes o VB nos oferece a estrutura Select Case, que possibilita a construo de cdigo mais eficiente e legvel do que um encadeamento de Ifs. Sua sintaxe a seguinte:
Select Case <expresso> Case <valor1> <comandos para valor1> Case <valor2> <comandos para valor2> ... Case <valorN> <comandos para valorN> [Case Else] [<comandos>] End Select

Valor1, valor2, valorN so os valores que a expresso pode assumir: se a expresso assumir o valor1 os comandos para o valor1 sero executados, se assumir valor2 os comandos para valor2 sero executados, e assim por diante. Se o valor assumido no for nenhum dos valores indicados, os comandos aps o Case Else sero executados. interessante destacar que Case Else opcional. Exemplo:
Select Case vCodigoCliente Case 1 lblStatus.Caption = vTaxaJuros = 0.012 Case 2 lblStatus.Caption = vTaxaJuros = 0.015 Case 3 lblStatus.Caption = vTaxaJuros = 0.018 Case Else lblStatus.Caption = End Select Cliente Preferencial Cliente Especial Cliente Comum Cdigo Invlido

Estrutura If...ElseIf
Essa uma variao do comando If que possui uma sintaxe muito parecida com o Select Case:
If <expresso1> Then <comandos para expresso1> ElseIf <expresso2> Then <comandos para expresso2> ElseIf <expresso3> Then <comandos para expresso3> ... ElseIf <expressoN> Then <comandos para expressoN> [Else] [<comandos>] End If

Por exemplo: o comando que codificamos com Select Case, se escrito com If...ElseIf, ficaria assim:
If vCodigoCliente = 1 Then lblStatus.Caption = Cliente Preferencial vTaxaJuros = 0.012 ElseIf vCodigoCliente = 2 Then lblStatus.Caption = Cliente Especial vTaxaJuros = 0.015 ElseIf vCodigoCliente = 3 Then lblStatus.Caption = Cliente Comum vTaxaJuros = 0.018 Else lblStatus.Caption = Cdigo Invlido End Select

Microsoft Visual Basic 6

31

Comando With
Esse um comando muito til quando temos vrias instrues que sero aplicadas a um mesmo objeto. Ele informa ao VB qual objeto deve ser considerado sempre que em um comando qualquer no houver nenhuma indicao da aplicao de uma propriedade, mtodo ou campo. Sua sintaxe :
With <objeto> <comandos a serem aplicado em objeto> End With

mais fcil entender vendo um exemplo prtico: suponhamos que voc precisa aplicar uma srie de comandos a uma caixa de texto:
txtTeste.Visible = True txtOutra.Visible = False txtTeste.FontName = Arial txtTeste.FontSize = 20 txtTeste.FontBold = True txtTeste.Text = Isso um teste.

Com o comando With, voc poderia escrever o mesmo trecho de programao da seguinte maneira:
With txtTeste .Visible = True txtOutra.Visible = False .FontName = Arial .FontSize = 20 .FontBold = True .Text = Isso um teste. End With

Todas as propriedades onde no foi indicada a caixa de texto txtTeste esto sendo aplicadas ela da mesma maneira, devido ao comando With. Note que a instruo aplicada txtOutra no mudou, mesmo estando dentro do conjunto de comandos contidos entre o With e o End With. importante destacar que podem existir um bloco With dentro de outro, sendo que o mais interno ter efeito sobre todos os objetos a ele subordinados enquanto no for encontrado um End With fechando-o. Antes e depois do bloco mais interno, quem tem efeito o With mais externo.

Evento Load
Load o evento que ocorre quando um formulrio lido. Usamos Load normalmente para a inicializao de variveis privadas ou ento para escrever comandos e rotinas que devem ser executadas logo que o formulrio aberto. Ou melhor: no evento Load de um formulrio usamos comandos e rotinas cuja execuo necessria ao seu funcionamento e de seus controles de uma maneira geral.

O Aplicativo TesteCor
Vamos testar o que aprendemos em um novo aplicativo. Ele funcionar assim: quando um boto de comando for clicado, a cor do texto de um label mudar para a prxima cor numa escala pr-definida, e o rtulo desse label dever informar qual a cor atual. Por exemplo: se a cor atual for 2 Verde , passar a ser 3 Ciano . Um outro boto far o processo inverso, ou melhor: a cor passar a ser a anterior na escala. Mas qual a melhor maneira de codificar esse processo todo? Vejamos: Algumas cores sero modificadas a cada vez que um dos botes for clicado. Ento, precisamos guardar o cdigo da cor atual em uma varivel que possa ser acessada por vrias procedures, j que cada evento ligado a uma procedure. Resumindo: precisamos de variveis privadas. Existe tambm uma seqncia de comandos repetida para alguns botes: a mudana de uma das cores do label e a exibio do nome dessa cor. Ento, podemos criar uma subrotina que contenha essa seqncia de comandos e possa ser chamada pela procedure Click de um dos botes, de modo a no haver necessidade de repetio de cdigo.

Microsoft Visual Basic 6

32

Funes QBColor e RGB


Essas funes geram cores de acordo com valores que representam cdigos associados a elas. A diferena entre ambas que QBColor s aceita os valores de 0 a 15, cada um representando uma cor diferente, enquanto RGB permite a composio de uma cor pela mistura das cores bsicas Vermelho (Red), Verde (Green) e Azul (Blue), da seu nome. A quantidade de vermelho, verde e azul que deve ser usada na composio da cor representada por valores inteiros que variam de 0 a 255. Veja as sintaxes:
QBColor(<cdigo>) RGB(<vermelho>,<verde>,<azul>)

Os cdigos aceitos por QBColor so os seguintes: Cdigo 0 1 2 3 Cor Preto Azul Verde Ciano Cdigo 4 5 6 7 Cor Vermelho Magenta Amarelo Branco Cdigo 8 9 10 11 Cor Cinza Azul Claro Verde Claro Ciano Claro Cdigo 12 13 14 15 Cor Vermelho Claro Magenta Claro Amarelo Claro Branco Brilhante

Na tabela abaixo esto os valores de vermelho, verde e azul necessrios para se conseguir algumas cores com a funo RGB: Cor Desejada Preto Azul Verde Azul Claro Vermelho Magenta Amarelo Branco Vermelho 0 0 0 0 255 255 255 255 Verde 0 0 255 255 0 0 255 255 Azul 0 255 0 255 0 255 0 255

Como voc com certeza j percebeu, em nosso caso a funo QBColor a que melhor se encaixa. Mas vamos comear a trabalhar: crie o formulrio de acordo com o exemplo:

Altere as propriedades dos objetos: Objeto Formulrio Label Label Nome FrmTeste Label1 Label2 Outras Propriedades = Valor Caption = Teste das Cores StartUpPosition = 2 Center Screen Caption = Cor do Texto: Caption = Cor do Fundo:

Microsoft Visual Basic 6

33

Label

Objeto

Nome LblTeste

Label Label Boto de Comando Boto de Comando Boto de Comando Boto de Comando

LblTexto LblFundo cmdTextoAnt cmdTextoProx cmdFundoAnt cmdFundoProx

Outras Propriedades = Valor Caption = Teste das Cores Alignment = 2 Center BackColor = Branco BorderStyle = 1 Fixed Single Font = Arial, Negrito, tamanho 20 Caption = 0 Preto BorderStyle = 1 Fixed Single Font = Negrito Caption = 15 Branco Brilhante BorderStyle = 1 Fixed Single Font = Negrito Caption = Anterior Caption = Prxima Caption = Anterior Caption = Prxima

Sendo assim, vamos criar nossa codificao: 1. Abra a janela Cdigo na seo Declarations. Vamos declarar as variveis privadas:
Dim vCorTexto As Integer Dim vCorFundo As Integer

2. D agora um duplo click sobre uma rea do formulrio que no contenha nenhum controle. A janela Cdigo aberta no evento Load do objeto Form, aonde vamos inicializar as variveis que declaramos no item anterior:
Private Sub Form_Load() vCorTexto = 0 vCorFundo = 15 End Sub

3. Acesse a procedure Click do boto cmdTextoAnt e escreva os comandos abaixo:


Private Sub cmdTextoAnt_Click() vCorTexto = vCorTexto - 1 If vCorTexto < 0 Then vCorTexto = 15 MudaCorTexto End Sub

Note como o comando If...Then foi usado: j que s existe um comando aps Then, End If no foi necessrio. No entanto, poderamos escrever essa estrutura da seguinte maneira, com o mesmo resultado:
If vCorTexto < 0 Then vCorTexto = 15 End If

Voc deve ter percebido tambm que temos algo novo nessa procedure: o comando MudaCorTexto. Na verdade, isso a chamada a uma subrotina, aquela que citamos quando estvamos planejando nosso aplicativo. Podemos criar uma subrotina atravs da opo Add Procedure do menu Tools: o VB abre uma caixa de dilogo onde devemos informar, entre outras coisas, o nome da subrotina que ser criada (veja a figura na prxima pgina), mas existe uma maneira mais simples:

Criando uma Subrotina


A criao de subrotinas pode ser feita diretamente na janela Cdigo, bastando para isso fazer a declarao da procedure (ou funco veremos mais adiante). Subrotinas podem ser declaradas como privadas ou pblicas. Usamos a palavra reservada Sub para inicar uma procedure, e o comando End Sub para fech-la. 1. Com a janela Cdigo aberta, escolha a opo General na caixa de combinao Object. Proc deve estar na seo Declarations; 2. Declare a procedure MudaCorTexto escrevendo o cabealho a seguir:
Public Sub MudaCorTexto()

Microsoft Visual Basic 6

34

A janela Add Procedure

3. Note que, quando terminar a declarao, o prprio VB insere o comando End Sub fechando a procedure, que deve estar parecida com a da figura abaixo:

4. Vamos ento escrever os comandos da subrotina:


Private Sub MudaCorTexto() lblTeste.ForeColor = QBColor(vCorTexto) With lblTexto Select Case vCorTexto Case 0 .Caption = "0 - Preto" Case 1 .Caption = "1 - Azul" Case 2 .Caption = "2 - Verde" Case 3 .Caption = "3 - Ciano" Case 4 .Caption = "4 - Vermelho" Case 5 .Caption = "5 - Magenta" Case 6 .Caption = "6 - Amarelo" Case 7 .Caption = "7 - Branco" Case 8 .Caption = "8 - Cinza" Case 9 .Caption = "9 - Azul Claro" Case 10 .Caption = "10 - Verde Claro" Case 11 .Caption = "11 - Ciano Claro" Case 12 .Caption = "12 - Vermelho Claro" Case 13 .Caption = "13 - Magenta Claro" Case 14 .Caption = "14 - Amarelo Claro" Case Else .Caption = "15 - Branco Brilhante"

Microsoft Visual Basic 6

35

End Select End With End Sub

5. Execute o aplicativo, teste o funcionamento do boto e verifique se est de acordo com o planejado. 6. Escreva a procedure cmdTextoProx_Click: note que ela quase igual do boto cmdTextoAnt, s que muda para a prxima cor na escala:
Private Sub cmdTextoProx_Click() vCorTexto = vCorTexto + 1 If vCorTexto > 15 Then vCorTexto = 0 'Chamada da subrotina: MudaCorTexto End Sub

7. Escreva agora as procedures para os eventos click dos botes cmdFundoAnt e cmdFundoProx, e a subrotina a ser chamada por elas, que deve ter o nome de MudaCorFundo. A propriedade a ser alterada para exibir a nova cor a BackColor; 8. Teste o funcionamento de todos os botes e verifique se est de acordo com nosso planejamento. 9. Salve o formulrio com o nome de frmTeste e o projeto com o nome de TesteCor.

Estruturas de Repetio
As Estruturas de Repetio permitem que uma ou mais linhas de cdigo sejam executadas um determinado nmero de vezes ou at que uma condio seja verdadeira. Resumindo: criam loops.

Estruturas Do While
A estrutura Do While (faa enquanto) permite que um determinado bloco de comandos seja executado enquanto uma condio for verdadeira. Existem dois tipos de estruturas Do While: Loop com teste a priori: como voc sabe, esse tipo de loop testa sua condio de trmino antes da execuo dos comandos que esto nele contidos, o que implica na possibilidade desses comandos no serem executados, caso a condio de trmino seja satisfeita logo de incio. A sintaxe para a criao de loops com teste a priori em VB usando Do While a seguinte:
Do While <condio> <comandos> Loop

Loop com teste a posteriori: j esse tipo de loop testa sua condio de trmino aps a execuo dos comandos nele contidos, ou seja, os comandos sero executados ao menos uma vez, mesmo que a condio de trmino seja satisfeita logo de incio. A sintaxe de Do While com teste a posteriori a seguinte:
Do <comandos> Loop While <condio>

Veja exemplos da estrutura Do While usando os dois tipos de loop para a mesma operao:
Do While vTotal < 500 vTotal = vTotal + Quantidade Loop Do vTotal = vTotal + Quantidade Loop While vTotal < 500

Estruturas Do Until
Do Until quer dizer faa at que . Essa estrutura difere da anterior por executar os comandos do loop enquanto a condio for falsa. Tambm existem duas sintaxes para Do Until: Loop com teste a priori: Loops com teste a posteriori:
Do Until <condio> <comandos> Loop Do <comandos> Loop Until <condio>

Microsoft Visual Basic 6

36

Para que a diferena entre as duas estruturas fique mais clara, vamos alterar os exemplos usados em Do While para estruturas Do Until. Note que foi necessria uma mudana na formulao da condio de trmino do loop para obtermos o mesmo efeito:
Do Until vTotal >= 500 vTotal = vTotal + Quantidade Loop Do vTotal = vTotal + Quantidade Loop Until vTotal >= 500

Estrutura For Next


Essa estrutura deve ser usada quando se conhece de antemo o nmero de vezes que o loop ser executado. Sua sintaxe a seguinte:
For <contador> = <valor inicial> To <valor final> [Step <valor do incremento>] <comandos> Next <contador>

Onde: Contador uma varivel que ser usada para controlar o nmero de vezes que o loop ser executado; Valor Inicial o primeiro valor que a varivel de controle assumir; Valor Final o ltimo valor que o contador assumir na execuo do loop; Valor do Incremento o valor que ser somado ou subtrado (pois podemos usar valores negativos) do contador a cada vez que Next for executado. Ao entrar em um loop For Next o VB faz com que o contador seja igual ao valor de incio. A cada vez que os comandos so executados e a estrutura atinge o Next, o contador incrementado pelo valor indicado em Step (que opcional se no for declarado ser assumido o valor 1) e comparado com o valor final indicado. Se o contador ultrapassar o valor final, o loop ser terminado, caso contrrio a seqncia de comandos ser executada novamente. Exemplo: a estrutura abaixo calcula a soma dos nmeros de 1 a 100:
vSoma = 0 For i = 1 To 100 vSoma = vSoma + i Next i

Com uma pequena mudana na estrutura, somaremos apenas os nmeros mpares entre 1 e 100:
vSoma = 0 For i = 1 To 100 Step 2 vSoma = vSoma + i Next i

Comando Exit
O comando Exit permite que um loop ou uma subrotina sejam abandonados (terminem antes do final normal de sua execuo). A sintaxe do comando Exit exige que indiquemos que estrutura queremos abandonar, assim: Para abandonar um loop Do................................: Exit Para abandonar um loop For...............................: Exit Para abandonar uma subrotina Sub...................: Exit Para abandonar uma subrotina Function..........: Exit
Do For Sub Function

And, Or, Xor e Not


Os operadores lgicos And, Or, Xor e Not (E, Ou, Ou exclusivo e No) so normalmente usados em estruturas de controle para estabelecer uma relao entre duas ou mais condies em uma mesma expresso. Como j vimos na lio 2, a funo desses operadores a seguinte: And faz uma combinao das condies, retornando verdadeiro somente se todas as condies da expresso forem verdadeiras. Or funciona de maneira contrria: a expresso s ser falsa se todas as condies forem falsas.

Microsoft Visual Basic 6

37

Xor semelhante a Or, mas retorna falso se todas as condies forem verdadeiras. Not inverte a condio de verdadeiro para falso e vice-versa. Veja a tabela de resultados: Operador And Condio 1 Verdadeiro Verdadeiro Falso Falso Verdadeiro Verdadeiro Falso Falso Verdadeiro Verdadeiro Falso Falso Condio 2 Verdadeiro Falso Verdadeiro Falso Verdadeiro Falso Verdadeiro Falso Verdadeiro Falso Verdadeiro Falso Resultado Verdadeiro Falso Falso Falso Verdadeiro Verdadeiro Verdadeiro Falso Falso Verdadeiro Verdadeiro Falso Falso Verdadeiro

Or

Xor Not

Verdadeiro Falso

O Aplicativo Fatorial
Para testar o uso das estruturas de repetio, vamos escrever um pequeno aplicativo para calcular o fatorial de um nmero inteiro (n!), que o resultado da multiplicao dos nmeros inteiros de 1 at n. Exemplo: 5! = 1 2 3 4 5 = 120 Veja o modelo e a tabela de propriedades no incio da prxima pgina. A codificao do aplicativo envolve apenas um evento: quando o usurio clicar em cmdCalcular ou teclar Enter o fatorial do nmero digitado em txtNmero ser calculado e exibido em lblFatorial. 1. Inicie um novo projeto; 2. Formate o formulrio e altere as propriedades dos objetos como a seguir:

Objeto Formulrio Label Label Caixa de Texto Label

Nome frmFatorial Label1 Label2 txtNmero lblFatorial

Boto de Comando cmdCalcular

Outras Propriedades = Valor Caption = Fatorial StartUpPosition = 2 Center Screen Caption = Digite um nmero: Caption = O fatorial desse nmero : Text = Caption = Alignment = 2 Center BackColor = Branco BorderStyle = 1 Fixed Single Caption = Calcular Default = True

Microsoft Visual Basic 6

38

3. Abra a janela Cdigo no evento Click do boto Calcular e escreva os comandos para o clculo:
Private Sub cmdCalcular_Click() Dim vNmero As Double, vFatorial As Double vNmero = Val(txtNmero.Text) If vNmero < 0 Then Beep lblFatorial.Caption = Empty Else If vNmero = 0 Or vNmero = 1 Then lblFatorial.Caption = 1 Else vFatorial = 1 Do vFatorial = vFatorial * vNmero vNmero = vNmero - 1 Loop Until vNmero <= 1 lblFatorial.Caption = Str(vFatorial) End If End If txtNmero.SetFocus End Sub

Observaes: Por definio, 0! = 1; O comando Beep faz com que o computador emita um sinal sonoro (um apito ). Note o uso do operador Or no segundo If: poderamos escrever a condio vNmero <= 1 ao invs da expresso usada, j que nesse ponto temos a certeza que vNmero no negativo (veja o If anterior), mas fizemos isso para exemplificar o uso de Or; Como exerccio de fixao, reescreva o loop do clculo do fatorial usando as estruturas Do While e For Next. Tente tambm modificar as estruturas de teste a posteriori para teste a priori. 4. Grave o formulrio com o nome de frmFator e o projeto com o nome de Fatorial.

Microsoft Visual Basic 6

39

Lio 5: Tratamento de Erros de Execuo


Eis um assunto importantssimo: tratamento de erros irrecuperveis de execuo. Quando um erro irrecupervel acontece, o VB emite uma mensagem informando o erro e encerra a execuo do aplicativo. Esses erros acontecem sob vrias condies: um arquivo no encontrado, incompatibilidade entre tipos de variveis, uma chamada de funo invlida, falta de memria, etc. fcil conferirmos essa caracterstica: execute a calculadora que fizemos na lio 2 e, ao invs de um nmero, digite uma letra qualquer nas caixa de textos. Quando voc executar um clculo, uma caixa de mensagem com os dizeres Run-time Error aparecer informando o tipo do erro que ocorreu, e o aplicativo ser encerrado. Nessa lio aprenderemos a trabalhar com esses erros de modo que, mesmo que um deles acontea, o aplicativo no seja encerrado. Adicionalmente, aprenderemos a usar as caixas de mensagem e de entrada da dados do VB.

Comando On Error
Esse comando a chave para o tratamento de erros no VB: sua funo a de desviar o fluxo da execuo de uma procedure para um pargrafo em caso de erro irrecupervel. Sua sintaxe a seguinte:
On Error GoTo <nome_de_pargrafo>

O pargrafo para o qual o fluxo ser desviado deve obrigatoriamente fazer parte da mesma procedure, e deve estar posicionado no final da mesma, antes do comando End Sub. O nome do pargrafo identificado por ser terminado com dois pontos : .

Comando Resume
O comando Resume indica ao VB que o aplicativo deve continuar a ser executado mesmo em caso de erro irrecupervel. Veja a sintaxe:
Resume <destino>

Sendo que o <destino> da execuo no obrigatrio. Se no for informado, a execuo passa para a prxima instruo na seqncia normal do programa. As opes para <destino> so: Next: produz um desvio para a prxima instruo na seqncia normal da execuo do aplicativo; 0: faz com que o execuo retorne ao incio da procedure atual (parmetro recursivo); Nome_De_Pargrafo: desvia a execuo para um pargrafo da procedure atual.

Objeto Err
O objeto Err indica o cdigo do erro irrecupervel ocorrido, atravs da propriedade Number, de tipo Integer. Pelo cdigo informado por Err.Number podemos identificar o erro e escrever os comandos necessrios para que o aplicativo continue funcionando. Outra propriedade interessante do objeto Err a Description, que contm a descrio do erro ocorrido. Para obter a lista completa com os cdigos dos erros tratveis do VB, acesse o menu Help e escolha a seqncia Contents Trappable Errors Miscellaneous Messages. Vejamos ento um exemplo da utilizao desses recursos:
Public Sub Exemplo_Erro() Dim vQualquer As Integer On Error GoTo Erro_Na_Converso vQualquer = CInt(txtNmero.Text) Erro_Na_Converso: If Err.Number = 13 Then '13 o cdigo de erro para Tipo Incompatvel de Dados: vQualquer = 0 Resume Next End If End Sub

Microsoft Visual Basic 6

40

Como j citamos anteriormente, a funo CInt gera um erro irrecupervel em caso de tipo incompatvel de dados (Type Mismatch) na tentativa de converso de uma string que no represente um valor. Na procedure Exemplo_Erro estamos dizendo para o VB que, se isso acontecer, a execuo deve ser desviada para o pargrafo Erro_Na_Converso, onde testamos o valor de Err.Number e escrevemos a codificao necessria para que o programa continue normalmente. O comando Resume Next indica ento ao VB que a execuo deve ser desviada para a prxima instruo na seqncia normal da programao.

Caixas de Mensagem
At agora falamos sobre o tratamento de erros mas no informamos ao usurio o que exatamente aconteceu, o que muito importante em qualquer aplicativo que se preze. Uma das formas que o VB nos oferece para fornecer mensagens ao usurio so as caixas de mensagens padronizadas. Por exemplo: supondo que o campo Nome de um aplicativo qualquer no possa ser deixado em branco pelo operador, se isso acontecer, poderamos exibir na tela uma caixa de mensagem como a da figura:

Caixas de mensagem padronizadas como essa podem ser obtidas com o comando MsgBox e a funo MsgBox. Veja a sintaxe de ambos:
MsgBox <mensagem>,<tipo>,<ttulo> <varivel> = MsgBox(<mensagem>,<tipo>,<ttulo>)

Onde: Mensagem: uma string com a mensagem a ser exibida pela caixa. Esse o nico parmetro obrigatrio da sintaxe. No nosso exemplo: O campo Nome deve ser preenchido! ; Tipo: um valor obtido a partir da soma dos cdigos que especificam o nmero e o tipo dos botes exibidos pela caixa, o cone a ser utilizado, o boto default e a modalidade de exibio da caixa. No nosso exemplo esse valor 4144. Esse valor tambm pode ser obtido a partir de algumas constantes de sistema. Veja a seguir uma lista com os valores admitidos e seu significado; Ttulo: uma string a ser exibida como ttulo da caixa. No nosso exemplo: Aviso ; Varivel (somente para a funo): nome da varivel que receber o nmero do boto selecionado pelo usurio. Veja a seguir as constantes de sistema usadas para se obter o tipo da caixa com seus respectivos valores: Constante vbOKOnly vbOKCancel vbAbortRetryIgnore vbYesNoCancel vbYesNo vbRetryCancel vbCritical vbQuestion vbExclamation vbInformation vbDefaultButton1 vbDefaultButton2 vbDefaultButton3 Valor 0 1 2 3 4 5 16 32 48 64 0 256 512 Descrio Exibe somente o boto OK. Exibe os botes OK e Cancelar. Exibe os botes Abortar, Repetir e Ignorar. Exibe os botes Sim, No e Cancelar. Exibe os botes Sim e No. Exibe os botes Repetir e Cancelar. Exibe o cone Mensagem Crtica : Exibe o cone Consulta de Aviso: Exibe o cone Mensagem de Aviso: Exibe o cone Mensagem de Informao: O primeiro boto o default. O segundo boto o default. O terceiro boto o default.

Microsoft Visual Basic 6

41

Constante vbDefaultButton4 vbApplicationModal vbSystemModal

Valor Descrio 768 O quarto boto o default. 0 Janela restrita do aplicativo: o usurio deve responder caixa de mensagem antes de continuar o trabalho no aplicativo atual. 4096 Janela restrita do sistema: todos os aplicativos so suspensos at que o usurio responda caixa de mensagem.

No nosso exemplo, o valor 4144 pois usamos apenas o boto Ok (0), o cone Exclamao (48), o boto Ok o default por ser o nico (0), e a modalidade sistema (4096). Ento, 0 + 48 + 0 + 4096 = 4144. O comando completo para se obter a caixa de mensagem do exemplo a seguinte:
MsgBox O campo Nome deve ser preenchido!, 4144, Aviso

Podemos tambm usar as constantes correspondentes configurao desejada:


MsgBox O campo Nome deve ser preenchido!, _ vbOk + vbExclamation + vbDefaultButton1 + vbSystemModal, Aviso

Ou ento apenas aquelas que tero algum efeito na configurao (so diferentes de zero):
MsgBox O campo Nome deve ser preenchido!, _ vbExclamation + vbSystemModal, Aviso

Ou ainda uma varivel:


vConf = vbExclamation + vbSystemModal MsgBox Nome deve ser preenchido!, vConf, Aviso

Obs.: o smbolo _ (subscrito) indica continuao da codificao na prxima linha.

Identificando o boto selecionado


A diferena entre o comando MsgBox e a funo MsgBox que a funo retorna um nmero inteiro representando o boto selecionado pelo usurio na caixa de mensagem. Assim, podemos identificar esse boto e executar a ao correspondente a ele. Veja os valores retornados por MsgBox: Constante vbOK vbCancel vbAbort vbRetry vbIgnore vbYes vbNo Valor 1 2 3 4 5 6 7 Descrio Selecionado o boto Ok. Selecionado o boto Cancelar. Selecionado o boto Abortar. Selecionado o boto Repetir. Selecionado o boto Ignorar. Selecionado o boto Sim. Selecionado o boto No.

Por exemplo: suponha um aplicativo qualquer que possua um boto de comando para encerrar sua execuo, mas que antes disso solicite ao usurio uma confirmao. A programao para isso poderia ser a seguinte:
Private Sub cmdFechar_Click() Dim vOk As Integer vOk = MsgBox("Tem certeza que deseja encerrar o programa?", 36, "Sada") If vOk = 6 Then End End If End Sub

Ou ento, se usarmos as constantes de sistema:


Private Sub cmdFechar_Click() Dim vOk As Integer vOk = MsgBox("Tem certeza que deseja encerrar o programa?", _ vbYesNo + vbQuestion, "Sada") If vOk = vbYes Then End End If End Sub

Em qualquer dos casos, a caixa de mensagem resultante da funo MsgBox acima a seguinte:

Microsoft Visual Basic 6

42

Mas qual a vantagem de se usar constantes de sistema se a codificao fica maior? A resposta : documentao! Leia novamente os dois trechos de programao e seja honesto: qual deles ficou mais fcil de entender?

Caixas de Entrada de Dados


Alm das caixas de mensagem o VB dispe de outro tipo de caixa de dilogo padronizada: as caixas de entrada de dados, que so obtidas com a funo InputBox. A sintaxe dessa funo a seguinte:
<varivel> = InputBox(<mensagem>,<ttulo>,<valor padro>)

Onde: Mensagem: nico parmetro obrigatrio, um texto a ser exibida dentro da caixa como legenda; Ttulo: uma string a ser exibida como ttulo da caixa; Valor padro: o valor que a varivel deve receber de InputBox caso o usurio no digite nada. Importante: a funo InputBox sempre retorna um dado tipo string, portanto se voc precisar de um dado de qualquer outro tipo dever convert-lo. Por exemplo: suponha um boto de comando que permita a digitao de um desconto para a emisso de uma nota fiscal de compra. A programao desse boto poderia ser a seguinte:
Private Sub cmdDesconto_Click() Dim vDesconto As String vDesconto = InputBox("Digite o valor do desconto:", _ "Digitao de desconto") End Sub

A InputBox resultante dessa programao a da figura abaixo:

O Aplicativo Carro
Para usar os conceitos vistos nessa lio, vamos criar um aplicativo que calcule o valor da prestao mensal para financiamento de automvel. Antes de comear, vamos estudar um novo controle que ser usado em nosso projeto:

Caixa de Imagem (ImageBox)


Esse controle muito semelhante a uma PictureBox, pois tambm exibe figuras ou cones nos formulrios. A principal diferena que responde ao evento Click, funcionando como um boto de comando quando clicado. Outra diferena importante a propriedade Stretch, que pode aceitar os valores True e False: quando Stretch = True, o tamanho da imagem ser ajustado ao tamanho da caixa de imagem, permitindo a exibio de figuras que devido ao seu tamanho no caberiam em um formulrio. Se Stretch = False, ento o tamanho da ImageBox que ser ajustado ao da figura. Bem, vamos comear: inicie um novo projeto e formate o formulrio de acordo com o modelo:

Microsoft Visual Basic 6

43

As propriedades dos objetos so as seguintes: Objeto Formulrio Caixa de Imagem Nome frmCarro imgCarro Outras Propriedades = Valor Caption = Financiamento de Automvel StartUpPosition = 2 Center Screen Stretch = True BorderStyle = 1 Fixed Single Picture = CARRO.WMF (Procure na pasta ClipArt\Popular do diretrio do MS-Office) Caption = Valor do Financiamento (R$): Caption = Entrada (R$): Caption = Juros / ms (%): Caption = N de meses: Caption = Valor Financiado (R$): Caption = Prestao Mensal (R$): Caption = Alignment = 2 Center BackColor = Branco BorderStyle = 1 Fixed Single Caption = Alignment = 2 Center BackColor = Branco BorderStyle = 1 Fixed Single Text = Text = Text = Text = Caption = &Calcular Enabled = False Caption = &Fechar Enabled = False TabStop = False

Label Label Label Label Label Label Label

Label1 Label2 Label3 Label4 Label5 Label6 lblValFinanciado

Label

lblPrestMensal

Caixa de Texto Caixa de Texto Caixa de Texto Caixa de Texto Boto de Comando

txtValor txtEntrada txtJuros txtMeses cmdCalcular

Boto de Comando cmdFechar

Inicialmente o boto Calcular estar desabilitado pois s aps a digitao de todos os dados necessrios o clculo da prestao mensal poder ser feito. A frmula para esse clculo a seguinte:

Prestao Mensal = Valor Financiado * Juros * (1 + Juros)Meses (1 + Juros)Meses - 1

Microsoft Visual Basic 6

44

Antes de comear a programar, vamos conhecer um evento que ser necessrio para nossa codificao:

Evento KeyPress
Sempre que pressionada uma tecla, estando o foco sobre um controle, ocorre o evento KeyPress. Associada a ele est a varivel KeyAscii, que carregada com o cdigo ASCII da tecla pressionada. Dessa maneira podemos identificar quando o usurio usa uma tecla qualquer, e, se for o caso, escrever um cdigo a ser executado quando essa tecla for utilizada. Por exemplo: podemos fazer com que o foco passe para outro controle quando a tecla Enter for pressionada numa caixa de texto. Sabendo-se que o cdigo ASCII da tecla Enter 13, correspondente constante vbKeyReturn, o cdigo para isso poderia ser o seguinte:
Private Sub Text1_KeyPress(KeyAscii As Integer) If KeyAscii = vbKeyReturn Then Text2.SetFocus End Sub

Propriedade KeyPreview
Essa propriedade dos formulrios indica se, quando pressionada uma tecla qualquer, ela deve ser ou no identificada pelo formulrio. Os valores possveis so True (habilita a verificao das teclas pelo formulrio) e False (desabilita). Usando esse recurso e a funo SendKeys, podemos fazer o Enter funcionar em qualquer campo, atravs do evento KeyPress do formulrio (as linhas precedidas pelo apstrofo so comentrios):
Private Sub Form_KeyPress(KeyAscii As Integer) If KeyAscii = vbKeyReturn Then 'Identifica o Enter SendKeys "{Tab}" 'Grava no buffer do teclado um Tab KeyAscii = 0 'Zera KeyAscii para eliminar o Enter End If End Sub

Na procedure acima, a cada vez que o usurio teclar Enter em um controle para o qual no surta efeito, ele ser substitudo por uma tabulao, e o foco passar para o prximo controle na seqncia de TabIndex. Mas vamos codificar o aplicativo: 1. Abra a janela Cdigo e acesse a seo Declarations. Vamos declarar as variveis que recebero os dados digitados como privadas, pois elas sero acessadas por vrias procedures:
Dim Dim Dim Dim vValor As Currency vEntrada As Currency vJuros As Single vMeses As Integer

2. V agora ao evento Form_Load. Vamos inicializar as variveis:


Private Sub Form_Load() vValor = 0 vEntrada = 0 vJuros = 0 vMeses = 0 End Sub

3. Em tempo de execuo, faremos com que o foco passe de uma caixa de texto para outra quando teclarmos Enter. Para isso vamos alterar o evento KeyPress do formulrio. D um duplo clique sobre uma parte vazia do formulrio e procure o evento KeyPress na lista de procedures; 4. Escreva a procedure como segue:
Private Sub Form_KeyPress(KeyAscii As Integer) If KeyAscii = vbKeyReturn Then SendKeys "{Tab}" KeyAscii = 0 End If End Sub

5. Vamos testar o evento KeyPress: execute o aplicativo e d um Enter na caixa de texto txtValor. Nada aconteceu? porque a propriedade KeyPreview do formulrio no est habilitada. Saia do aplicativo para fazer a correo; 6. Altere o valor da propriedade KeyPreview do formulrio para True;

Microsoft Visual Basic 6

45

7. Teste o aplicativo novamente: se tudo correu bem, o foco passou para a caixa txtEntrada. Desta, o foco vai para txtJuros, e assim por diante. Aps testar em todos os controles, saia do aplicativo para podermos continuar; 8. Agora vamos fazer a codificao necessria para carregar a varivel vValor. Como voc pode observar, como o tipo de vValor Currency, usaremos a funo CCur para converter o texto contido em txtValor para a varivel, o que pode gerar um erro irrecupervel de execuo se txtValor contiver qualquer texto que no represente um valor. Devemos ento usar uma rotina de tratamento de erro para evitar problemas. Mas, onde escrever essa rotina? Podemos fazer isso no evento LostFocus do controle, pois assim uma mensagem de erro ser exibida assim que txtValor perder o foco, se esta contiver um dado invlido. Abra a janela cdigo no evento LostFocus do controle txtValor e escreva a codificao a seguir:
Private Sub txtValor_LostFocus() On Error GoTo Valor_Errado vValor = CCur(txtValor.Text) Valor_Errado: If Err = 13 Then MsgBox "Dado invlido na digitao do valor do financiamento", _ vbExclamation + vbSystemModal, "Aviso" txtValor.Text = InputBox("Informe o valor correto do financiamento:", _ "Valor do Financiamento") Resume 0 End If End Sub

Note que usamos a funo InputBox() para solicitar ao usurio que digite um dado vlido em caso de erro de execuo; Note tambm que o comando Resume seguido do valor 0, o que vai fazer com que o VB retorne ao incio da procedure em caso de erro e refaa a converso do contedo de txtValor. Isso importante pois, caso o usurio insista em escrever um dado invlido na caixa de entrada, o processo todo ser repetido. 9. Vamos testar nossa procedure. Execute o aplicativo e escreva um texto qualquer na caixa txtValor. Digamos, aaa . O resultado deve ser o da figura a seguir:

10. Clicando no boto Ok, dever aparecer a caixa de entrada:

Microsoft Visual Basic 6

46

11. Agora digite um valor correto, como 12000. O texto aparecer na caixa txtValor e o foco passar para txtEntrada. Saia do aplicativo para continuarmos a programao; 12. Usando a procedure txtValor_LostFocus como base, escreva as rotinas para o evento LostFocus das outras caixas de texto. Lembre-se que a varivel vJuros do tipo Single, e portanto voc deve usar a funo CSng para a converso. Alm disso, o valor obtido deve ser dividido por 100, pois um percentual. J para a varivel vMeses, que Integer, voc dever usar a funo CInt; 13. Aps isso, ainda falta escrevermos a rotina de clculo que ser chamada pelo boto cmdCalcular. V at a seo Declarations e adicione uma subrotina de nome Prestao; 14. Na subrotina Prestao escreva a seguinte codificao (note o uso do operador And):
Public Sub Prestao() Dim vValFinanciado As Currency Dim vPrestMensal As Currency If vValor <> 0 And vJuros <> 0 And vMeses <> 0 Then If vEntrada >= vValor Then MsgBox "O valor da Entrada deve ser menor que o do Financiamento", _ vbExclamation + vbSystemModal, "Aviso" lblValFinanciado.Caption = Empty lblPrestMensal.Caption = Empty txtEntrada.SetFocus Exit Sub End If vValFinanciado = vValor - vEntrada vPrestMensal = vValFinanciado * vJuros * (1 + vJuros) ^ vMeses / _ ((1 + vJuros) ^ vMeses - 1) lblValFinanciado.Caption = Format(vValFinanciado, "###,##0.00") lblPrestMensal.Caption = Format(vPrestMensal, "###,##0.00") cmdCalcular.Enabled = True cmdFechar.Enabled = True Else lblValFinanciado.Caption = Empty lblPrestMensal.Caption = Empty End If End Sub

Observaes: O primeiro If verifica se todos os dados necessrios para o clculo esto disponveis; O segundo If verifica se o valor da entrada no maior ou igual ao do financiamento, pois seno o resultado do clculo seria uma prestao negativa (se que isso existe...);

Microsoft Visual Basic 6

47

A propriedade Enabled dos botes de comando s foi habilitada dentro dessa rotina pois assumimos que o usurio far ao menos um clculo quando acionar o programa. 15. Agora s falta fazer com que o boto cmdCalcular execute a subrotina:
Private Sub cmdCalcular_Click() Prestao End Sub

16. Voc tambm pode fazer que, aps o primeiro clculo, toda vez que um valor for alterado os resultados sejam imediatamente atualizados. Para isso, altere a procedure txtValor_LostFocus como a seguir:
Private Sub txtValor_LostFocus() On Error GoTo Valor_Errado vValor = CCur(txtValor.Text) ' s incluir a linha abaixo: Prestao Valor_Errado: If Err = vbKeyReturn Then MsgBox "Dado invlido na digitao do valor do financiamento", _ vbExclamation + vbSystemModal, "Aviso" txtValor.Text = InputBox("Informe o valor correto do financiamento:", _ "Valor do Financiamento") Resume 0 End If End Sub

17. Faa o mesmo para as outras caixas de texto; 18. Nosso aplicativo est praticamente terminado. S falta a programao do boto cmdFechar. Nesse boto, vamos solicitar ao usurio uma confirmao de que ele realmente deseja sair do programa, usando a funo MsgBox:
Private Sub cmdFechar_Click() Dim vOk As Integer vOk = MsgBox("Tem certeza que deseja encerrar o programa?", _ vbYesNo + vbQuestion, "Sada") If vOk = vbYes Then End End Sub

19. Grave o formulrio com o nome de frmCarro e o projeto com o nome de Carro; 20. Por fim, execute o aplicativo e teste-o bem. Procure usar vrios valores diferentes nas caixas de texto para observar os resultados. Tente tambm entrar com dados invlidos e verifique se o comportamento do projeto o esperado. Se necessrio, faa os ajustes na programao para que seu funcionamento seja perfeito.

Microsoft Visual Basic 6

48

Lio 6: Iniciando a Construo de um Sistema


Um projeto em VB um conjunto de objetos. At agora trabalhamos com apenas um objeto em cada projeto: o formulrio. Sim, o formulrio tambm um objeto: voc no reparou que ele tambm possui propriedades e responde a mtodos? Obviamente, em um aplicativo mais complexo, como ser o caso do sistema de Controle de Bibliotecas que comearemos a desenvolver nessa lio, alm do formulrio principal existem outros destinados a entrada de dados, exibio de mensagens ou de resultados de consultas, etc. Existem outros tipos de objetos que podem ser adicionados ao projeto, como mdulos de programao, relatrios, controles ActiveX e mdulos de classe. O que os caracteriza o fato de serem gravados em arquivos separados. Assim, o projeto pode ser considerado como um conjunto de arquivos, cada um deles correspondente a um objeto.

Trabalhando com Vrios Formulrios


Quando estamos desenvolvendo um projeto do qual vrios formulrios faro parte, obviamente vamos precisar adicionar a ele formulrios novos e, muitas vezes, prontos. Alm disso, uma aplicao Windows freqentemente trabalha com outros tipos de formulrios, diferentes daquele que usamos at agora.

Adicionando formulrios ao projeto


Para incluir um novo formulrio ou um formulrio existente em um projeto, siga os seguintes passos: Abra o menu Project do VB; Escolha a opo Add Form: a janela Add Form ser aberta, com vrias opes de tipos de formulrios:

Se desejar acrescentar um formulrio j existente, clique na aba Existing e indique sua localizao; Se o formulrio ainda no existe (formulrio novo), voc deve escolher um dos tipos da aba New. Para um formulrio padro, escolha a opo Form. Em ambos os casos, o formulrio ser includo na lista Forms da janela Projeto. A partir desse momento, ele poder ser manipulado como outro qualquer. Vejamos alguns recursos necessrios a esse trabalho:

Mtodo Show
Esse mtodo usado para carregar e exibir um formulrio. Sua sintaxe :
<formulrio>.Show <modalidade>

Microsoft Visual Basic 6

49

Onde <formulrio> o nome do formulrio, e <modalidade> indica se o formulrio ser exibido como modal ou no. Um formulrio modal aquele que deve ser obrigatoriamente encerrado para que o aplicativo continue: enquanto ele estiver ativo, nenhuma outra janela ou aplicativo pode ser acessado. Para indicar se o formulrio deve ser exibido como modal usamos a constante de sistema vbModal:
frmMeuForm.Show vbModal

Se a modalidade for omitida, ser assumida como no-modal.

Mtodo Refresh
Durante a execuo do sistema, s vezes acontece uma situao que impede a exibio correta do formulrio. Normalmente, isso ocorre quando alteramos um objeto de um formulrio que j est sendo exibido em uma procedure externa a ele, ou ento quando estamos executando aes que demandam uma certa quantidade de recursos do sistema, como na abertura de arquivos. O mtodo Refresh corrige esse problema simplesmente provocando a reconstruo imediata do formulrio. Outros objetos, como os controles Data, tambm aceitam o mtodo Refresh.

Comando Unload
O comando Unload fecha um formulrio e devolve o controle do sistema ao formulrio que o chamou. Sua sintaxe muito simples: basta indicar o nome do formulrio. Exemplo:
Unload frmMeuForm

Eliminando formulrios do projeto


Para excluir um formulrio do projeto, basta clicar com o boto direito do mouse sobre o nome do formulrio na janela Projeto e escolher a opo Remove <nome do formulrio> no menu de contexto.

Formulrios MDI
Um formulrio MDI (Multiple-Document Interface) funciona como uma janela que contm outros formulrios a ela subordinadas (chamados de MDIChild), atuando em background para uma aplicao. Para criar um formulrio MDI voc deve escolher a opo Add MDI Form no menu Project do VB. Por suas caractersticas, o formulrio principal de uma aplicao freqentemente criado como MDI. Veja as principais: Uma aplicao pode conter apenas um formulrio MDI, mas pode conter vrios MDI Child Forms; Se o formulrio MDIChild contm uma estrutura de menus, a barra de menu do formulrio MDI automaticamente atualizada e o menu exibido passa a ser o do MDIChild ativo. Falaremos mais sobre menus logo adiante; Se o formulrio MDI minimizado, todos os formulrios MDIChild abertos tambm so; Se um formulrio MDIChild minimizado, aparece como um cone no rodap do MDI; A maioria das propriedades, mtodos e eventos dos formulrios MDI so os mesmos de um formulrio comum, mas um MDI no pode ser aberto como modal; Um formulrio MDI s pode conter menus e o controle PictureBox, ou ento controles customizados preparados para isso. Voc pode usar outros controles no formulrio MDI apenas se criar uma PictureBox e ento inserir esses controles dentro dela, como se fosse uma moldura ; Um formulrio MDIChild no aceita a propriedade StartUpPosition.

Propriedade MDIChild
Essa propriedade indica se um formulrio ser exibido como MDIChild ou no. A propriedade MDIChild s tem efeito quando existe no projeto um formulrio MDI. Nesse caso, qualquer outro formulrio que no o MDI (obviamente) poder ser configurado como MDIChild. Quando o valor de MDIChild True, o formulrio poder ser maximizado, minimizado ou movido dentro do formulrio principal (MDI). Assim como o MDI, um formulrio MDIChild no pode ser aberto como modal. MDIChild no pode ser alterada em modo de execuo, e o valor padro False.

Vous aimerez peut-être aussi