Sunteți pe pagina 1din 285

Visual Basic 5.

Passo a Passo
Lionardo Fonseca Paiva Lionardo@base.com.br

Lionardo@base.com.br

Visual Basic 5.0


Passo a Passo

1 Edio

Sugestes e criticas sero bem vindas. Envi-las para o autor Lionardo Fonseca Paiva pelo e-mail: lionardo@base.com.br

Lionardo@base.com.br

VISUAL BASIC 5 Passo a Passo


Copyright 1996 por Editora **** Todos os direitos reservados e protegidos pela Lei 5988 de 14/12/73. Nenhuma parte desta publicao poder ser reproduzida ou transmitida, sejam quais forem os meios empregados: Eletrnicos, mecnicos, fotogrficos, gravaes ou quaisquer outros. ISBN

Editor: Lionardo Fonseca Paiva Autor: Lionardo Fonseca Paiva


lionardo@base.com.br

Capa: Departamento de Arte Final

Telefone: (062) 621-4660

Sumrio
1 APRESENTAO DO VISUAL BASIC 5 ..........................................................9 1.1 APRESENTAO DAS JANELAS .........................................................................11 1.1.1 Padronizao em programas para Windows..........................................12 1.1.2 Barra de Menus e Botes........................................................................13 1.1.3 Os Controles (Caixa de Ferramentas)....................................................14 1.1.4 Propriedades dos Objetos.......................................................................15 1.1.5 O Formulrio ( Form ) ...........................................................................18 1.1.6 Caixa de Projetos ...................................................................................20 1.1.7 Janela de Codificao ............................................................................20 1.2 SALVANDO UM PROJETO..................................................................................23 2 OS CONTROLES BSICOS ..............................................................................27 2.1 FORMULRIO E SUAS PROPRIEDADES.................................................29 2.1.1 Propriedades Principais do Form ..........................................................29 2.1.2 As Propriedades Principais do CommandButton ...................................34 2.1.3 Propriedades Principais do Label..........................................................38 2.1.4 Propriedades Principais do TextBox ......................................................39 2.1.5 Eventos relacionados ao Objeto TextBox ...............................................42 2.1.6 Caixa de Texto para vrias linhas..........................................................48 2.1.7 Propriedades Principais do CheckBox...................................................49 2.1.8 Propriedades Principais do OptionButton .............................................51 2.1.9 Propriedades Principais do Frame ........................................................54 3 SELECIONANDO ITENS...................................................................................61 3.1 O OBJETO LISTBOX .........................................................................................63 3.1.1 Propriedades Principais do ListBox.......................................................63 3.1.2 Propriedades em tempo de execuo......................................................65 3.1.3 Eventos do ListBox .................................................................................67 3.1.4 Mtodos AddItem, RemoveItem e Clear.................................................67 3.2 O OBJETO COMBOBOX ....................................................................................71 3.2.1 Propriedades Principais do ComboBox .................................................72 3.2.2 Os Mtodos .............................................................................................73 4 O FOCO ................................................................................................................77 4.1 O FOCO ...........................................................................................................79 4.1.1 Propriedades TabIndex e TabStop .........................................................79 5

Lionardo@base.com.br

4.1.2 4.1.3 4.1.4 4.1.5 5

A Tecla Enter.......................................................................................... 80 Mtodo SetFocus .................................................................................... 82 Eventos GotFocus e LostFocus .............................................................. 83 Mnemnico (Tecla de Acesso)................................................................ 87

CONTROLES ESPECIAIS................................................................................. 89 5.1 5.2 MASKEDBOX .................................................................................................. 90 COMMONDIALOG ............................................................................................ 94

MENUS ............................................................................................................... 101 6.1 MENUS .......................................................................................................... 103 6.1.1 Criando Menus ..................................................................................... 103 6.1.2 Menus Instantneos.............................................................................. 109

VARIVEIS E MATRIZES.............................................................................. 111 7.1 AS CARACTERSTICAS DE UMA VARIVEL .................................................... 113 7.1.1 O Comando Dim................................................................................... 113 7.1.2 Os Tipos de Varivel ............................................................................ 115 7.1.3 As Variveis Nmericas ....................................................................... 116 7.1.4 Varivel String ..................................................................................... 116 7.1.5 Varivel Boolean.................................................................................. 117 7.1.6 Varivel Date ....................................................................................... 117 7.1.7 Varivel Object..................................................................................... 118 7.1.8 Varivel Variant ................................................................................... 118 7.1.9 Null ....................................................................................................... 118 7.2 ABRANGNCIA E TEMPO DE VIDA DE UMA VARIVEL .................................. 118 7.3 MATRIZES ..................................................................................................... 124 7.3.1 Matrizes Unidimensional ..................................................................... 125 7.3.2 Matrizes Multidimensional................................................................... 125 7.3.3 Matrizes Dinmicas.............................................................................. 126 7.3.4 Matrizes no ComboBox e no ListBox ................................................... 128 7.3.5 A Propriedade Index dos Objetos ........................................................ 128

OPERADORES .................................................................................................. 133 8.1 OPERADORES ................................................................................................ 134 8.1.1 Operadores Matemticos ..................................................................... 134 8.1.2 Operadores Relacionais ....................................................................... 135 8.1.3 Operadores Lgicos ............................................................................. 135 8.1.4 Operador de String............................................................................... 136

COMANDOS CONDICIONAIS E DE LAO ................................................ 140 9.1 COMANDOS CONDICIONAIS ........................................................................... 142

9.2 10

COMANDOS DE LAO.....................................................................................146 FUNES DE AUXILIO ..............................................................................152

10.1 FUNES .......................................................................................................154 10.1.1 Funes matemticas............................................................................154 10.1.2 Funes de Converso..........................................................................156 10.1.3 Funes de Data e Hora.......................................................................159 10.1.4 Funes de String .................................................................................165 10.1.5 Funes de Manipulao de Matrizes ..................................................168 10.1.6 Funes Lgicas ...................................................................................169 10.1.7 Funes de Disco..................................................................................170 10.1.8 Funes de Teste...................................................................................172 10.1.9 Funes de Escolha ..............................................................................173 10.2 A FUNO FORMAT ...................................................................................179 11 CRIAO DO BANCO DE DADOS ...........................................................194

11.1 BANCO DE DADOS ...................................................................................197 11.1.1 Caractersticas......................................................................................197 11.1.2 Visual Data Manager (VisData)...........................................................198 11.1.3 Criando indices.....................................................................................205 12 MANIPULAO DO BANCO DE DADOS................................................208

12.1 CRIANDO JANELAS .........................................................................................210 12.1.1 Abrindo um banco de dados .................................................................213 12.1.2 Abrindo um indice.................................................................................216 12.1.3 Fechando um banco de dados ..............................................................217 12.1.4 Cuidados especiais ...............................................................................217 12.1.5 Funes de apoio..................................................................................220 12.2 ADICIONANDO DADOS ...................................................................................222 12.3 PRXIMO E ANTERIOR ...................................................................................227 12.4 ALTERAO ..................................................................................................228 12.5 CONSULTA .....................................................................................................229 12.6 EXCLUSO .....................................................................................................230 12.7 CONSIDERAES FINAIS ................................................................................231 12.8 CADASTRO DE CLIENTES ................................................................................232 12.9 LANAMENTO DAS VENDAS ..........................................................................237 13 13.1 13.2 14 USANDO O CONTROLE DATA .................................................................254 CONTROLE DATA...........................................................................................256 DBGRID.......................................................................................................258 IMPRESSO ..................................................................................................266 7

Lionardo@base.com.br

14.1 14.2

PRINTER ........................................................................................................ 268 CRYSTAL REPORTS ........................................................................................ 275

1 APRESENTAO DO VISUAL BASIC 5

Apresentao das Janelas Salvando um Projeto

Lionardo@base.com.br

10

Controles Bsicos

1.1 APRESENTAO DAS JANELAS

Disposio padro das janelas do Visual Basic O Visual Basic 5 se tornou a mais poderosa ferramenta de desenvolvimento de aplicaes e o limite desta linguagem a imaginao de cada um. Para o programa ser apresentado para ns, precisamos dar um click no cone Visual Basic 5 encontrado na pasta Microsoft Visual Basic 5.0, como mostrado na figura 2.

cone que da acesso ao programa Visual Basic.

11

Lionardo@base.com.br

A Verso 5 desta linguagem destinado exclusivamente a criao de programas em 32 bits, ou seja, para Windows 95 ou superior ou Windows NT.

Nesta verso, quando abrimos o Visual Basic, ele nos d uma sria de opes sobre o que desejamos criar: um executvel, uma DLL, um ActiveX, etc. Por padro usaremos somente "standard EXE" que o usual para criao de programas executveis.

1.1.1 Padronizao em programas para Windows


Existe uma padronizao que o programador deve obedecer quando estiver desenvolvendo sua aplicao, e com certeza o usurio ir agradecer e muito por esta lembrana. Veja alguns itens importante: Em menus de Edio sempre colocar as opes Recortar, Copiar e Colar. Sempre coloque um menu HELP. No abuse das cores. Voc conhece algum programa para Windows srio cujas janelas so apresentadas nas cores verde, azul, amarela? Com certeza no. As janelas so quase sempre brancas ou cinzas. 12

Controles Bsicos Sempre use teclas de atalho para o usurio cortar caminho. Lembre-se que nem todos usurios gostam de usar o mouse intensivamente. Alguns preferem, sempre que podem, usar o teclado. Ento d esta opo. Sempre d a possibilidade ao usurio de cancelar uma alterao feita em uma determinada janela. O boto Cancelar existe nos melhores programas existente no mercado. Quando um usurio escolhe uma aplicao para Windows para sua empresa e diverso, ele sabe que no vai encontrar dificuldades na operao do programa, pois todos so semelhantes em vrios aspectos, ento mantenha essa semelhana.

1.1.2 Barra de Menus e Botes

Usamos as opes do menu do Visual Basic para configurar nosso ambiente de trabalho, janelas, cores, inserir novos formulrios, mdulos, salvar o projeto, sair do Visual, etc. No usamos os menus para construir nenhuma aplicao, suas opes so de assistncia. Vamos no decorrer deste livro comentar as opes principais e mais usadas. Como o acesso aos menus geralmente um processo mais lento do que o acesso a botes, o Visual Basic d a possibilidade de podermos cortar caminho atravs da barra de botes. As principais opes do Menu foram duplicadas em forma de botes.

13

Lionardo@base.com.br

1.1.3 Os Controles (Caixa de Ferramentas)

Os botes existente no lado esquerdo de nosso projeto, dentro de uma janela vertical, so chamados de controles, ou caixa de ferramentas, e sero esses controles que iro montar nossa aplicao. Atravs deles inserimos os objetos que precisamos para criar nossos formulrios. Quando entramos no Visual Basic pela primeira vez, nem sempre todos os controles esto disponveis. Para podermos configurar quais controles queremos que aparea em nosso projeto, precisamos acessar o menu Project, opo Components. Ser mostrado uma lista de Controles que podem ser anexados a Caixa de Ferramentas para podermos usar em nosso projeto. Com um click do mouse sobre a caixa de seleo

Sempre que selecionamos um controle, aqui aparecer o nome do arquivo correspondente.

Relao dos controles disponveis para serem selecionados e acrescidos na Caixa de Ferramentas.

14

Controles Bsicos dos controles, pode-se marcar ou desmarcar quais controles necessitamos. Para termos acesso a todos os controles padro do Visual Basic, selecionamos todos que possuem a extenso OCX. Confira no campo Active Setup Control Library o nome do arquivo que possui o controle.

Barra de Ferramentas: Dentro dela esta todos os controles (objetos) que podemos usar em nosso projeto. Para usar um deles precisamos selecionar ( clicando nele com o mouse) e inseri-lo dentro de nosso Formulrio. Cada Objeto possui uma srie de propriedades que podemos personalizar para usar de acordo com nossa necessidade. Temos aqui Objetos para colocar rtulo, caixa de edio, manipular Banco de Dados, caixa de Opo, barra de status, inserir figura, boto de comando, etc. Toda interface de nosso formulrio pode ser montado a partir desses controles. Uma vez inserido um desses Objetos dentro de nosso formulrio, podemos manipular sua aparncia e sua funo atravs das propriedades que cada Objeto desse possui. Dependendo da verso do Windows que estiver usando, alguns Controles podem no aparecer, pois existe alguns que so especifico do Windows 95.

1.1.4 Propriedades dos Objetos


Sempre que selecionamos um Objeto qualquer aparecer no canto direito da tela uma janela de propriedades daquele objeto selecionado. Podemos ento modificar as propriedades da forma que precisamos, e algumas delas veremos o resultado ainda em tempo de projeto, outros s veremos o resultado em tempo de execuo.

15

Lionardo@base.com.br

Titulo Properties e o nome dado para o formulrio selecionado no projeto. Nesta caixa aparece no canto direito o nome dado pelo usurio ao Objeto selecionado, e no canto direito o tipo de Objeto. No exemplo mostramos o objeto de nome Form1 tipo Form (formulrio). Podemos tambm selecionar outro objeto que existe em nosso formulrio nesta caixa, clicando na seta para baixo, e selecionando outro objeto que ali esteja disponvel para seleo.

Nesta coluna aparece o nome das Propriedades. Cada Objeto possui uma quantidade diversa de propriedade para vrios aspectos diferente. Como por exemplo, a Propriedade BorderStyler que especifica o tipo de borda que o Objeto ter. A Propriedade Caption que da um ttulo ao Objeto, Propriedade BackColor onde se escolhe a cor de fundo que o objeto ter. Lembrando que essas propriedades atuam somente no Objeto selecionado. Se queremos mudar uma determinada propriedade de um Boto de Comando por exemplo, precisamos selecion-lo na forma, e depois levar o mouse at a propriedade que se quer mudar.

Esta coluna onde modificamos a propriedade escolhida, seja atravs de uma lista de opes (ComboBox), ou digitada diretamente.

Vamos por ora ressalvar duas propriedades que a maioria absoluta dos objetos possuem: Caption e Name. A propriedade Caption responsvel pela legenda (ttulo) que o objeto ter quando aparecer em nosso formulrio. Por exemplo, num objeto CommandButton (Boto de Comando), o Caption quem coloca o ttulo que ir aparecer dentro do boto. A propriedade Name nomeia um objeto, e sempre que formos nos referenciar a este objeto em qualquer etapa de nosso projeto, usamos o nome dado na propriedade Name dele. Se um boto Cancelar termos o nome de

16

Controles Bsicos cmdCancelar, este o nome que vamos usar na codificao deste objeto. Este nome fica atribudo ao objeto. Para se dar nomes ao alguns objetos algumas regras tem que serem seguidas, como por exemplo, no pode conter espaos em branco, no se pode usar sinais como #$&+-^ . Como padro acostuma-se a usar as trs primeiras letras do nome para abreviar o tipo do Objeto, para durante a codificao do programa facilitar na identificao de qual objeto estamos usando. Por exemplo: Um boto de comando do tipo CommandButton, e abreviamos como cmd, um formulrio do tipo Form, e abreviamos como frm, uma mscara de edio do tipo MaskEdBox, e abreviamos como msk. Essas abreviaes ficam a critrio do programador.

Mas para compor a propriedade Name, no colocamos somente abreviaes do tipo de objeto que ele representa, mas tambm o que se trata o Objeto. Por exemplo: temos duas caixa de opes (OptionButton), onde temos a opo para o usurio escolher: Masculino e Feminino. Abreviamos este tipo de objeto como opt, e o nome destes OptionButton ficaria assim: optMasculino, e o outro optFeminino. Para se conhecer o tipo de cada Objeto existente na caixa de ferramentas s ficar com o mouse em cima de qualquer objeto, e o tipo aparecer dentro de uma caixinha amarela.

17

Lionardo@base.com.br

1.1.5 O Formulrio ( Form )

Nesta janela onde colocamos todos os Objetos necessrios para montar nosso projeto. Um projeto pode ter vrios formulrios. Chamamos de formulrio, mas na verdade se trata de uma janela que nosso programa vai usar, seja uma janela de cadastramento, janela principal, janela de aviso. No importa. Sempre que uma janela for aparecer em nosso programa, temos que criar um Formulrio (Form). Quando abrimos o Visual Basic aparece um formulrio vazio, somente com o ttulo Form1 o Menu de Controle com o cone padro do Visual Basic e os botes de Minimizar, Maximizar e Fechar. No corpo do formulrio existe somente uma srie de pontos pequenos espalhados. Esses pontos no aparece quando nossa aplicao executada. Eles tm a funo nica de auxiliar no alinhamento dos objetos que so inseridos dentro do formulrio. Se no existisse esses pontos ficaria mais difcil colocar os OptionButton (optMasculino e optFeminino) um abaixo do outro na mesma posio.

18

Controles Bsicos Boto Fechar

Boto Maximizar Boto Minimizar rea de titulo. Caption do f l Menu de Controle. rea onde sero inseridos os objetos para criao de nosso formulrio. Chamamos de Control Box a unio dos botes minimizar, maximizar, fechar e o menu de controle

Para se inserir um Objeto da caixa de ferramentas para o formulrio existem dois procedimentos: Escolha o objeto que se quer usar, e de dois clicks com o mouse em cima dele, e logo o objeto ir aparecer no centro do formulrio. Esse mtodo no muito aconselhado pois o Controle escolhido no vai para onde voc precisa dele, e sim sempre para o centro do formulrio, obrigando-o a ir com o mouse at o objeto e arrast-lo para onde realmente necessitamos dele. O modo mais aconselhado para insero de objetos no formulrio, dando um click com o mouse no objeto, e depois leve o ponteiro do mouse para o formulrio (dentro do formulrio o ponteiro do mouse ir se transformar numa cruz), e ento clicando no boto esquerdo do mouse faa um quadrado. O objeto ir aparecer dentro de seu quadrado. Isto til pois podemos inserir o objeto exatamente onde precisamos.

+ +
Criando o objeto, com boto do mouse apertado. Soltando o boto do mouse, o objeto criado na posio e dimenso escolhida.

escolha o objeto do tipo CommandButt om e coloque-o dentro do formulrio.

19

Lionardo@base.com.br

1.1.6 Caixa de Projetos


Dentro da caixa de projetos existe uma lista dos formulrios, mdulos, bibliotecas e classes criados dentro de nosso projeto. Imagine um projeto que contenha cerca de 8 janelas (consequentemente 8 formulrios), para acessarmos o formulrio pretendido para alterar ou acrescentar algum objeto, basta clicar no formulrio escolhido dentro da caixa de projetos.
Nome dado ao projeto No lado direito, entre parentese, esta o nome do arquivo fsico gravado no seu disco. No lado esquerdo esta o nome (Name) dado para o formulrio.

Ao selecionar o formulrio pretendido, aperte este boto e o formulrio ir aparecer no centro da tela. Caso o componente no seja um formulrio, este boto estar desabilitado.

Selecionando um formulrio, aperte este boto para ver sua codificao. Nesta janela de cdigo aparecer os procedimentos, funes e eventos. Se o componente escolhido no tiver opo de codificao, ento este boto estar desabilitado.

1.1.7 Janela de Codificao


Aqui onde a programao no sentido da palavra comea. A criao da interface com o usurio no usa nenhuma linha de cdigo, mas quando precisamos comear a manipular os dados digitados pelo usurio, ento necessrio algum conhecimento dos procedimentos, comandos e funes do Visual Basic. Cada objeto colocado no formulrio possui eventos, e baseados nestes eventos vamos criar nosso programa. Por exemplo: Se queremos que ao apertar o boto Fechar, o programa feche a janela, ento precisamos, dentro da janela de codificao criar um evento para o objeto Boto chamado Click. Dentro deste evento colocamos tudo que queremos que acontea ao darmos um click neste boto criado. Para acessar a janela de codificao podemos dar dois clickes em qualquer objeto ou apertar o boto View Code na Caixa de Projetos. O mais prtico sempre dar dois clickes no objetos que queremos codificar, pois assim a janela de codificao ser aberta j pronta para codificar o objeto selecionado.

20

Controles Bsicos bom lembrarmos que cada objeto possui vrios eventos diferentes, e nossa tarefa bsica codificar cada evento que nosso programa necessitar. Somente ocorre eventos durante a execuo do programa. Por exemplo, existe um evento chamado Click, que para quando damos um click com o mouse no objeto. Evento MouseMove para quando o mouse se movimentar dentro do objeto. Evento KeyPress para quando um tecla for pressionada dentro do objeto. Estudaremos mais detalhado esses eventos. Por ora importante entender a utilidade deles, e qual a finalidade deles em nossa codificao.

Objeto a ser codificado. Quando damos dois clickes em um objeto, o nome dele j vem para este campo.

Nome dos eventos disponvel para o objeto selecionado. Ao clicar nesta caixa os eventos aparecem.

Crie um Projeto novo, e no objeto Form modifique as propriedades: Caption = Janela Teste Name = frmJanelaTeste Em seguida insira um CommandButton no formulrio e mude as propriedades tambm: Caption = Fechar Name = cmdFechar D agora dois clickes no boto Fechar dentro do formulrio. A janela de cdigo ser aberta e ser mostrado a seguinte codificao: Private Sub cmdFechar_Click()
21

Lionardo@base.com.br

End Sub O Cursor ficar piscando acima do comando End Sub, esperando voc digitar algo ali. Sempre que criamos um evento aparece o nome Private Sub sinalizando o inicio do procedimento. Depois vem o nome do procedimento, que no nosso caso cmdFechar_Click. Note que o nome que damos para o Objeto selecionado quando chamados a janela de cdigo. Aps o sinal de sublinhado aparece o nome do evento, igual o que aparece na caixa de combinao acima. Note na janela de codificao que o campo Object ser o cmdFechar, pois este objeto quem estava selecionado quando chamados a janela de codificao. Ao lado esta uma lista de Eventos, e o evento Click j estar pronto para ser codificado. Podemos trocar com o mouse o evento ( Procedure ) que queremos codificar ou at o objeto ( Object ). Mas vamos manter no nosso exemplo. Digite o comando: Unload frmJanelaTeste. O comando Unload serve para retirarmos da memria a janela que esta aberta. Agora aperte o boto Executar para rodar a aplicao. Ao apertar o boto fechar a janela desaparecer o voltaremos para o Tempo de Projeto. Para se entender melhor em que momento do programa esses eventos so chamados, s imaginar o seguinte: quando executamos uma aplicao Windows qualquer, o usurio pode fazer vrias tarefas (ou eventos) como apertar uma tecla, o boto do mouse, movimentar o mouse, dimensionar o tamanho de uma janela, etc. Pois bem, quando qualquer um desses possveis eventos so executados o Windows verifica se existe alguma codificao para aquele evento, se existir ele executa todas as linhas at encontrar a expresso End Sub

22

Controles Bsicos

Quando precisarmos criar uma codificao dentro de nosso formulrio mas que tenha seu alcance estendido para todos os procedimentos e eventos do formulrio, e no para algum determinado, escolhemos o Object General, que significa Geral (na caixa de eventos aparecer o nome declaration). Se declararmos ali uma varivel ela ter validade para todo o formulrio. Veremos isto melhor no Captulo sobre variveis.

1.2 SALVANDO UM PROJETO


Para salvamos um projeto, primeiro precisamos entender que um projeto um conjunto de formulrios, mdulos, classes, etc., e que quando vamos salvar o projeto que estamos trabalhando, o Visual Basic pedir o nome do arquivo dos formulrios ligado a ele e depois o nome do arquivo do projeto.
Escolhemos aqui o diretrio (pasta) onde armazenaremos o arquivo de Formulrio. Aqui colocamos o nome do arquivo. Por Default ir aparecer o nome dado ao formulrio na propriedade Name acrescido da extenso .frm

23

Lionardo@base.com.br

Nome do arquivo do Projeto. Por Default aparece o nome Project1, mas sempre bom modificar para um nome que sinalize melhor o nome que nosso projeto (programa) ter.

Sempre coloque cada projeto dentro de uma pasta diferente para no ter problema de localizao.

24

Controles Bsicos

EXERCCIOS PROPOSTOS
1 - Descreva 5 botes da barra de botes que voc acha mais importante: Nome Descrio

2 - Qual opo do menu nos d a possibilidade de incluir mais Objetos dentro da Caixa de Ferramentas?

3 - Explique com suas palavras o que voc entendeu sobre: Caixa de Ferramentas:

Objetos:

Propriedades:

Formulrio:

Janela de Projetos:

Codificao:

25

Lionardo@base.com.br

4 - Crie um projeto da seguinte forma:


No Objeto Formulrio coloque dois Command Buttom no lado direito da janela como no exemplo. Depois muda as propriedades Caption do formulrio para Cadastro de Paciente e Name para frmCadastroPaciente. No primeiro boto criado passe o Caption para OK e Name para cmdOk. O Outro boto ter o Caption Fechar e o Name cmdFechar. Pronto! A interface esta pronta. Vamos a codificao.

D dois clickes no boto OK e na janela de codificao escreva Print Oba! Deu Certo!, como esta na janela acima. Feche a janela, e voltando ao formulrio d agora dois clickes no boto Fechar. A janela de codificao volta a aparecer e nos digitaremos Unload frmCadastroPaciente. Execute o programa e veja que fizemos com que o boto OK mostre na janela a frase Oba! Deu Certo! e o boto Fechar termina o programa. O Comando Print tem a finalidade de mostrar na janela aberta a expresso que esta na sua frente entre aspas. Na verdade numa programao profissional ele no usado, pois no definimos sua localizao na tela. Ele sempre imprime a expresso no canto superior esquerda. Estamos usando ele aqui somente para fins didticos. Vamos substitui-lo depois pelo Objeto Label. 5 - Qual a diferena dos arquivos com extenso .vbp dos com extenso .frm

26

2 OS CONTROLES BSICOS (A interface)

Form CommandButton Label TextBox CheckBox OptionButton Frame

Lionardo@base.com.br

28

Controles Bsicos

2.1 FORMULRIO E SUAS PROPRIEDADES

A principal propriedade do Form a propriedde Name, pois atravs dela que o Visual Basic ir sugerir o nome que sera dado para o arquivo do Formulrio (*.frm), mas essa propriedade Name no importante somente no objeto Form, mas em todos os objetos. O Visual Basic automaticamente nomeia todos os objetos que so inseridos no formulrio, mas nem sempre serve para ns. Por exemplo, quando inserimos um CommandButton no Form ele por Default j ir possuir o Name como Command1. SEMPRE bom mudarmos esse padro. A importncia do Name nos objetos fundamental para quando fazemos alguma referencia ao objeto. Por exemplo, se na codificao do programa, por algum motivo, precisarmos nos referenciar a um boto colocado no formulrio cuja finalidade fechar a janela, seria mais prtico que o Name dele seja "cmdFechar", em vez de "Command1". Desta forma, visualmente, saberemos que se trata de um boto de comando cuja finalidade fechar algo. Ento importante sempre termos o cuidado de nomearmos TODOS os objetos que colocamos no formulrio com nomes bem descritivos e que nos d uma pista do que se trata o objeto em questo. As outras propriedades vamos estud-las no decorrer deste livro.

2.1.1 Propriedades Principais do Form


Appearance: Define se o modo de exibio ser 3D ou normal. BackColor: Muda a cor de fundo do formulrio. Existe dois modos de

exibio de cores: "Palette" e "System". O "System" mostra as cores definidas no sistema de cores do Windows. Muito til, pois sempre existe aquela situao que o usurio entra nas configurao do Windows, altera a aparncia das cores e depois o seu programa no acompanha a mudana. Se precisar 29

Lionardo@base.com.br

que o programa desenvolvido tenha as cores sempre adaptadas de acordo com o padro de cores escolhido na aparncia do Windows ento deve-se usar sempre as cores mostradas no "System" dessa propriedade. BorderStyle: Muda o tipo de borda do formulrio. None: sem borda, sem barra de titulo, sem menu de controle, sem boto maximizar e sem boto minimizar, e no pode redimensionar a janela.

Fixed Single: Borda fixa. Aceita o Menu de Controle, Maximizar, Minimizar, barra de ttulo, mas no pode ser redimensionado. (Default) Sizable: Borda comum. Possui o Menu de Controle, Maximizar, Minimizar, barra de ttulo e pode ser redimensionada. Fixed Dialog: Muito usada para janelas que vo manter um dialogo com o usurio. Ela pode ter Menu de controle e a barra de ttulo, mas no ter os botes de maximizar e Minimizar. No pode ser redimensionada. Fixed ToolWindow: No possui o menu de controle, o boto Maximizar e o boto minimizar. Tambm no pode ser redimensionada. Aparecer somente a barra de ttulo e o boto Fechar prprio do Windows 95. Este tipo de formulrio no aparece na barra de tarefas do Windows. Sizable ToolWindow: No possui o menu de controle, o boto Maximizar e o boto minimizar. Pode ser redimensionada. Aparecer somente a barra de ttulo e o boto Fechar prprio do Windows 95. Este tipo de formulrio no aparece na barra de tarefas do Windows. Caption: Ser o texto mostrado na barra de ttulo do formulrio ( da janela ). ControlBox: Retira ou coloca o menu de controle e os botes maximizar, minimizar e fechar da janela. Enabled: Se esta opo estiver com False, ou seja, estando o Enabled desabilitado, isto indicar que nenhum objeto desta janela, e nem a prpria

30

Controles Bsicos janela, poder responder a eventos gerados pelo usurio, como clicar do mouse, pressionamento de teclas, etc. Font: Escolhe a fonte de letra padro que ser usada para todos objetos inseridos neste formulrio. Icon: Nesta propriedade escolhemos um arquivo de cone para associar a esse formulrio. Esse cone o que vai aparecer quando a janela for minimizada e no lado esquerda da barra de ttulo ( Menu de Controle ). KeyPreview : determina se os eventos do teclado no formulrio sero executados antes dos eventos correspondentes aos Objetos inseridos no formulrio. MaxButton: Habilita ou no o boto de maximizao. MDIChild: Determina se a janela ser uma janela filha. Ou seja, ter uma outra janela mestre que agrupara o Form que se esta criando. MinButton: Habilita ou no o boto de minimizar. MouseIcon: Sempre que o mouse for movido em cima do formulrio, o cone associado a esta propriedade aparecer (desde que a propriedade MousePointer esteja customizada). MousePointer: Nesta propriedade especificamos o tipo de ponteiro que o mouse ter quando se mover sobre o formulrio. Veja os tipos existentes:

0 1 2

(Default) Ponteiro padro. Ponteiro em forma de seta Ponteiro de seleo exata 31

Lionardo@base.com.br

3 4 5 6 7 8 9 10 11 12 13

Seleo de escrita cone Seleo de Mover Objetos Redimensionamento na diagonal Redimensionamento na vertical Redimensionamento na diagonal Redimensionamento na horizontal Seleo alternada Sinal de ocupado. No disponvel ( Ocupado ) Trabalhando em segundo plano ( Somente 32-bit Visual Basic.)

14

Seleo de Ajuda. (Somente 32-bit Visual Basic.)

15 99

Todos os Tamanhos. (Somente 32-bit Visual Basic.) Aparece o cone escolhido na propriedade MouseIcon

Name: Nome definido para o Objeto formulrio. Picture: Inseri uma figura em nosso formulrio como papel de parede. ShowInTaskbar: Habilita ou no a possibilidade da janela aparecer na barra de tarefas do Windows. Visible: Determina se quando executarmos o programa essa janela ir ficar visivel ou invisvel. WindowState: Determina se, quando executarmos o programa, a janela ir aparecer na tela do computador Normal, Maximizada ou Minimizada.

Crie um formulrio Novo (opo File / New Project no menu). No Formulrio criado mude as propriedades: Caption = Lanamentos dos Exames
32

Controles Bsicos Name = frmLanamentoExames Configure a janela para no aparecer o boto de Maximizar. Para isto mude a Propriedade MaxButton para False. Faa com que o ponteiro do mouse mude para o desenho de um sinaleiro com a luz vermelha acesa toda vez que o mouse mover no formulrio. Para isto a propriedade MousePointer deve ser Custom e na propriedade MouseIcon identificamos a pasta (diretrio) onde esta o arquivo de cone que contm o sinaleiro. Veja a figura:

O arquivo correspondente esta na pasta Icons/Traffic e chama Trffc10c.ico

Escolha agora o cone que ser associado ao formulrio (janela). A propriedade que usaremos para este fim ser Icon. Procure o arquivo que contem o desenho de uma placa de trnsito Stop contida na pasta Computer. Veja a figura:

33

Lionardo@base.com.br

Pronto. Rode sua aplicao de veja

o que acontece.

2.1.2 As Propriedades Principais do CommandButton


O Boto de Comando executa determinadas aes estabelecidas pelo programador. Um conselho: No coloque botes de vrios tamanhos dentro do formulrio. Se temos dois botes: Cancelar e OK, no ser porque o boto OK tem um ttulo menor que seu tamanho ser menor. Nivele-o pelo nome maior.

34

Controles Bsicos Cancel: Se esta opo for ajustada como verdadeira, o boto ser associado a tecla ESC, e sempre que pressionarmos esta tecla ser como se tivssemos apertado o boto. Caption: O ttulo que ser exibido dentro do boto. Default: Estando o boto com essa propriedade como True indica que este boto ser o Padro da janela, e sempre que apertarmos a tecla Enter ser como se tivssemos apertado o boto. Enabled: Determina se o boto ser habilitado para pressionamento por parte do usurio ou no. Font: Escolhe a fonte de letra que o Caption ter. Name: O nome que daremos para o Objeto boto de comando. Visible: Determina se o boto ser visvel para o usurio quando o programa estiver em execuo.

Style: Escolhe se o boto ter elemento

35

Lionardo@base.com.br

grfico em seu interior. Se escolher Style do tipo "Graphical" o CommandButton aceitar figuras, e elas devem ser inseridas na propriedade Picture do objeto CommandButton

Em um formulrio novo acrescente dois botes de comando. Mude as propriedades deles da seguinte forma:
Propriedade

boto1 OK cmdOk False True

Boto2 Cancelar cmdCancelar True False

Explicao ttulo para o boto nomear o boto habilitar ESC habilitar ENTER

Caption Name Cancel Default

36

Controles Bsicos D dois clickes no boto Cancelar. Ir aparecer a janela de codificao para o boto Cancelar. Digite: Print Voc apertou a tecla ESC. Estando ainda na janela de codificao, leve o ponteiro do mouse at o topo desta janela onde esta o nome: Object. Na frente estar o nome do boto que estvamos trabalhando na codificao. Aperte o boto. Ir aparecer o nome dos objetos que temos: cmdCancelar, cmdOk, Form, e General.

Nesta caixa de combinao d um click no objeto cmdOK. Com isto ser criado automaticamente um evento Click para este objeto.

Digite: Print Voc apertou a tecla Enter

Com isto, criamos um evento para o boto OK e para o Boto cancelar. Execute agora a aplicao e aperte a tecla ENTER e depois a tecla ESC.

37

Lionardo@base.com.br

O resultado ser a mesma coisa que OK e o boto cancelar.

apertarmos o boto

2.1.3

Propriedades Principais do Label

Esse objeto um texto, no editvel, que usamos geralmente para rotular outros Objetos. A Finalidade bsica dele de colocar um texto na forma.

Alignment: Determina o alinhamento que o texto ter dentro do label.

AutoSize: Com esta propriedade habilitada indicamos ao Controle para automaticamente dimensionar seu tamanho ao tamanho do texto do label. Note na figura que, quando o AutoSize foi passado para True, as marcas de seleo do label foi ajustado para o tamanho do texto label1. BackColor: Escolhe a cor de fundo que envolver o label. 38

Controles Bsicos BackStyle: Escolhe entre o fundo Transparente ou Opaco para o label. BorderStyle: Escolhe entre colocar uma moldura envolvendo o label ou no. Caption: A propriedade principal do label. Determina o texto que ser exibido dentro do Objeto. Enabled: Habilita ou desabilita o objeto. Quando esta em False fica com a cor de seu contedo acinzentada. Font: Escolhe a fonte de letra que ter o texto digitado na propriedade Caption. ForeColor: Escolhe a cor da fonte de letra Name: Nomeia o Objeto label. Como j foi dito importante que todos os objetos seja nomeado. A inicial do label lbl. Visible: Indica se o objeto ser visvel ou no para o usurio. WordWrap: Quando o AutoSize esta em true, no possvel expandir o texto digitado na propriedade Caption em outras linhas. Mas se passarmos essa propriedade WordWrap para True isto poder ser feito, bastando para isto dimensionarmos o label.

2.1.4 Propriedades Principais do TextBox


Exibe uma caixa de texto onde o usurio ir digitar dados diversos. Quando inserimos esse Objeto, ele automaticamente coloca a expresso Text1 dentro da rea de digitao. Logicamente, sempre teremos que remover essa expresso, pois no faz sentido deixar uma caixa de texto com Text1 em seu interior. O usurio de seu programa ficar sem entender a finalidade.

39

Lionardo@base.com.br

BackColor: Escolhe a cor de fundo da Caixa de Texto. Geralmente branco. BorderSytle: Tipo da borda: Fixa e simples, ou sem borda. Enabled: Estando False o objeto no estar habilitado para interagir com o usurio. Font: Escolhe a fonte de letra que ser mostrada dentro da caixa de texto. ForeColor: Escolhe a cor da fonte de letra. Locked: Estando em false trava qualquer digitao na caixa de texto MaxLength: Quantidade mxima de caracteres dentro da caixa de texto. MultiLine: Habilita a possibilidade de se digitar mais de uma linha na caixa de texto. Name: Nomeia o objeto TextBox. Geralmente com a inicial txt. Exemplo: Se formos usar essa caixa de texto para que o usurio digite o nome do paciente, poderamos abreviar assim: txtNomePaciente. PasswordChar: Se durante a digitao de qualquer dado na caixa de texto, quisermos que o Visual Basic mostre outro caractere no lugar do caractere digitado, s especificarmos aqui qual queremos que seja mostrado. Muito usado para digitao de senhas. ScrollBars: Estando a propriedade MultiLine habilitada, interessante colocarmos um ScrollBars na caixa de texto, pois ele acrescentar uma barra de rolagem que poder ser: 1 - Horizontal 2 - Vertical 3 - Both: Horizontal e Vertical juntos. Text: A propriedade Text a mais importante deste Objeto. Todo o texto digitado pelo usurio dentro da caixa de texto incorporado nesta propriedade.

40

Controles Bsicos Coloque 3 caixa de texto em nosso formulrio, de forma que a disposio das mesmas fiquem como na figura abaixo.

Usaremos a primeira caixa de texto para digitarmos o nome do paciente. A segunda para digitarmos o sexo dele (Masculino ou Feminino) e a terceira para ser digitado o nome do exame que ele vai fazer. Para tanto, vamos mudar algumas propriedades destas 3 caixas de texto. Propriedade Text1 Text2 Text3 Name Text MaxLength ForeColor TxtNome deixar vazio 30 Vermelho txtSexo deixar vazio 9 Preto TxtExame deixar vazio 15 Preto

Coloque agora 3 Objetos Label no formulrio na seguinte disposio:

Propriedade Name

Label1 lblNomePaciente

Label2 lblSexo

Label3 LblExame 41

Lionardo@base.com.br

Caption AutoSize Appearance

Nome do Paciente True 3D

Sexo True 3D

Exame a ser feito True 3D

O resultado ser uma janela como a figura acima.

Pratique nesta janela e veja se o nome realmente esta com o limite de 30 caracteres.

2.1.5 Eventos relacionados ao Objeto TextBox


Irei citar aqui alguns dos principais eventos relacionados a caixa de texto. Lembramos que todos os Eventos ocorre quando o usurio faz alguma ao. Por exemplo: se ele aperta um boto aciona o Evento Click, se ele digita algo numa caixa de texto, aciona o evento Change e KeyPress, se ele movimento o mouse sobre um objeto, aciona o evento MouseMove. Vamos explicar esses eventos aqui, mas antes importante entendermos que cada movimento ou ao do usurio dispara um evento no programa. Mas esses eventos somente tero alguma reao se programarmos isto na janela de codificao. 42

Controles Bsicos Change: Ocorre sempre que o usurio altera o valor contido na caixa de texto. Click: Ocorre quando o usurio pressiona o boto esquerdo do mouse sobre a caixa de texto. DlbClick: Se o usurio apertar duas vezes o boto esquerdo do mouse sobre a caixa de texto KeyDown: Ocorre quando o usurio aperta uma tecla no teclado. KeyUp: Ocorre quando o usurio solta a tecla apertada. KeyPress: Ocorre quando uma tecla pressionada e solta. Como argumento possui uma varivel cujo contedo a tecla pressionada (cdigo correspondente na tabela ASCII). Cod. 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 Cod. 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 Cod. 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 Cod. 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 43


Backspace

Tab Enter Esc

Espao ! " # $ % & ' ( ) * + , . / 0 1 2 3 4 5 6 7 8 9 : ; <

@ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \

` a b c d e f g h i j k l m n o p q r s t u v w x y z { |

Lionardo@base.com.br

29 30 31

61 = 93 ] 125 62 > 94 ^ 126 63 ? 95 _ 127 Estes caracteres no so aceitos pelo Microsoft Windows.

} ~

MouseMove: Ocorre quando movemos o ponteiro do mouse sobre a caixa de texto. MouseDown: Ocorre quando o usurio aperta o boto do mouse (seja da direita ou da esquerda) sobre a caixa de texto. MouseUp: Ocorre quando o usurio solta o boto do mouse (seja da direita ou da esquerda) sobre a caixa de texto.,

Conhecendo os eventos e vamos comear a us-los. No que j criamos posicione o txtNome e d dois clickes janela assim:

sabendo para que eles servem formulrio frmLanamentoExames cursor sobre a caixa de texto com o mouse. Ir aparecer uma

O Objeto ativo ser o txtNome e o evento ser o Change. Para caixa de texto esse evento o que primeiro aparece. Vamos mud-lo passando para o evento KeyPress. Para fazer isto, leve o ponteiro do mouse at a caixa de combinao que esta o nome Change e clique no boto que
44

Controles Bsicos esta do lado direito da janela. Aparecer a lista de Eventos disponveis para a caixa de texto. Click sobre o nome KeyPress. Ele ir agora criar um outro procedimento de evento chamado Private Sub txtNome_KeyPress(KeyAscii As Integer). Vamos usar esse evento no objeto txtNome para no aceitar o usurio digitar nmeros nesta caixa de texto. A linha de comando ficar assim:

Private Sub txtNome_KeyPress(KeyAscii As Integer) if Keyascii >= vbKey0 and Keyascii <= vbKey9 then Keyascii = 0 endif EndSub

Pronto! Quando o usurio digitar um dgito numrico no teclado ele ser ignorado pela caixa de texto. Existem algumas expresses novas como KeyAscii, If, vbKey0 e vbKey9. Vamos falar melhor deles nos prximos 45

Lionardo@base.com.br

captulos. Por ora, para se ter um entendimento melhor do que ocorreu durante a execuo deste evento vamos explicar rapidamente essas novas expresses: KeyAscii : uma varivel criada pelo evento KeyPress cujo contedo ser o valor (na tabela ASCII) correspondente a tecla digitada. VbKey0 : Uma constante que simboliza o nmero Zero. vbKey9 : Uma constante que simboliza o nmero nove. If : Comando condicional. Significa Se. Ou seja, se a tecla digitado for maior ou igual a zero e tambm menor e igual a nove ento faa algo. Rode o programa e verifique que a caixa de texto j esta devidamente codificada para no aceitar nmeros. Para melhorarmos ainda mais nossa aplicao, vamos analisar o seguinte: No podemos deixar o usurio digitar o sexo do paciente antes de digitarmos o nome dele! Temos que fazer uma codificao que verifique se o usurio digitou o nome, e somente depois liberar a digitao do sexo. OK? Vamos l! Selecione o Objeto lblSexo e mude Enabled dele para False, e o Objeto tambm para False. a propriedade txtSexo.Enabled

Note que quando executarmos o programa o label Sexo estar na cor cinza e a caixa de texto abaixo no aceitar digitao. Ento vamos agora colocar uma codificao que verifique se na caixa de texto txtNome existe algo digitado. Se existir, libera a digitao do Sexo, se no existir continua sem liberao. D dois clickes com o mouse no Objeto txtNome e veja se o evento Change est ativo para ser configurado. Se no 46

Controles Bsicos tiver leve o mouse at a caixa de combinao com dos eventos e selecione a palavra Change. a lista

Como foi explicado acima, esse evento acionado sempre que o usurio altera um valor digitado na caixa de texto. Mas isto no significa que na caixa de texto obrigatoriamente tem que existir um valor para ser alterado. Na verdade quando est vazia e digitamos algo ali estamos alterando seu contedo. Com isto, conclumos que sempre que digitarmos algo ali (letra, nmero, barra de espao, delete, Backspace, etc.) o evento Change ser acionado. Digite aberta: o seguinte cdigo na janela de codificao

O programa ir policiar a caixa de texto txtNome. Se a sua propriedade Text (que contm o que o usurio 47

Lionardo@base.com.br

digitou), for igual a vazio (), ento as propriedades Enabled do lblSexo e do txtSexo sero desabilitadas, caso contrario ( Else ), essas propriedades sero habilitadas. Note que podemos mudar a propriedade de um Objeto tanto a nvel de codificao em tempo de execuo, como em tempo de projeto. Execute o programa, o digite seu nome na caixa de texto Nome do Paciente. Observe que quando voc comear a digitar automaticamente a caixa de texto Sexo ser liberada. Agora use a tecla Backspace para voltar a digitao e apagar o nome digitado. Veja que quando se apaga o ultimo caractere e a caixa de texto fica vazia as propriedades Enabled do Sexo so desabilitadas automaticamente.

2.1.6 Caixa de Texto para vrias linhas


Se quisermos configurar uma caixa de texto para receber vrias linhas de digitao, e no uma linha como no exemplo acima, temos que fazer as seguintes mudana no objeto:

Aumente o tamanho da caixa de texto na vertical, para darmos espaos para as novas linha que sero inseridas. Mude as propriedades: Propriedade Text1 Descrio MultiLine Text ScrollBars True Vazio 2 - Vertical Habilita mltiplas linhas Tira o texto Text1 Coloca barra de rolagem vertical

48

Controles Bsicos

No fim de cada linha o cursor passar automaticamente para a linha de baixo.

2.1.7 Propriedades Principais do CheckBox


Exibe uma caixa de checagem (ou verificao) onde o usurio poder ligar ou desligar uma determinada opo. Usamos o CheckBox para mostrar vrias opes ao usurio para ele escolher uma, algumas, todas ou nenhuma. No nosso exemplo de Lanamento de Exames esse objeto poderia substituir com vantagens a caixa de texto onde digitaremos o Exame que o paciente far. Sabendo de antemo que o laboratrio possui somente exames de Raio X, Sangue, gravidez e espermograma podemos criar 4 caixas de checagem, sendo cada uma para um exame diferente. Com isto, poderamos selecionar ou no o exame em vez de digit-lo. Alignment: Especifica se o texto ficara do lado esquerdo da caixa.

Caption: O texto anexado ao Objeto CheckBox. Enabled: Habilita ou no esse Objeto. Estando desabilitado no aceitar que o usurio faa evento com a caixa de checagem. Font: Escolhe uma fonte de letra para o texto digitado no Caption Name: Nomeia o Objeto. A inicial abreviada para este tipo de controle chk. Value: Determina o estado o objeto: 0 - Unchecked, 1 - Checked e 2 - Grayed.

49

Lionardo@base.com.br

Value est com valor 1, de selecionado ou checado.

Value esta com valor 0, de desmarcado, ou no foi escolhido.

No exemplo Lanamento de Exames, Elimine a caixa de texto txtExames e o label lblExames. Em seu lugar coloque 4 caixas de checagem. Mude as seguintes propriedades: Propriedade Check1 Check2 Check3 Check4 Name
chkRaioX chkSangue chkGravidez chkEspermo grama

Caption

Raio X

Sangue

Gravidez

Espermogr ama

Pronto! Agora ficou mais fcil escolher o exame que o paciente quer fazer. Na codificao do programa, sempre que quisermos saber se algum desses exames foi escolhido s verificarmos se a propriedade Value de cada um deles esta Checked, ou seja, selecionado. Note que podemos marcar um exame, alguns, todos ou nenhum. Fica a critrio do usurio. Mas no nosso exemplo vai ser difcil um paciente entrar em nosso laboratrio e no fazer NENHUM exame. Se o nome dele esta sendo
50

Controles Bsicos processado no computador porque pelo menos um exame ele vai fazer. Depois vamos fazer uma rotina que verifica isto. Algumas outras alterao teremos que fazer tambm, como por exemplo no deixar o programa aceitar que um paciente do sexo masculino faa exame de Gravidez, ou do sexo feminino fazer Espermograma. Mas antes de trabalharmos nisto necessrio conhecermos mais um objeto importante.

2.1.8 Propriedades Principais do OptionButton


Este boto de opo usado para o usurio poder escolher entre uma opo ou outra. Quando ele escolhe uma a outra desmarcada. Diferentemente da Caixa de Checagem onde poderamos ter vrias marcadas ou nenhuma, o Objeto OptionButton exibe que somente uma opo seja marcada. Por exemplo, precisamos criar um objeto em que o usurio coloque se uma determinada pessoa Casada, Solteira, Divorciada ou Viva. Quando o usurio Solteiro passa para Casado o Objeto boto de opo desmarca o anterior para marcar o atual: Casado. Seja l qual estado civil seja, quando mudar a outra deixa de existir. Uma pessoa no pode ser Casado e Solteiro ao mesmo tempo. Ento neste caso o usual o Boto de Opo, pois se colocssemos a Caixa de Checagem, o Objeto aceitaria que escolhssemos dois ou mais estado civil. Alignment: Determina se o texto ficar do lado direito ou esquerdo do boto de opo. Caption: O texto que ser anexado ao Objeto. Enabled: Habilita ou no o objeto. Estando desabilitado o usurio no poder selecionar a opo, e a cor do texto ser acinzentado. Name: O nomeia o Objeto. A inicial abreviada que se usa opt. Value: True para quando a opo esta selecionada e False para quando a opo no esta selecionada.

51

Lionardo@base.com.br

Para nosso programa de Lanamento de Exames vamos trocar a caixa de edio onde o usurio digita o Sexo do paciente por dois boto de opo. Como s existe dois tipos de sexo e uma pessoa no pode ter mais de um sexo ( pelo menos teoricamente! ), nossa aplicao mais prtica se usarmos esse objeto. Apague o lblSexo e o txtSexo e coloque em seu lugar dois Controles OptionButton. Propriedade Name Caption Option1 optMasculino Masculino Option2 OptFeminino Feminino Os Botes de Opo quando so inseridos no formulrio automaticamente so conjugados, de maneira que quando selecionamos um o outro desmarcado. No importa quantos sejam.

Vamos agora ponderar alguns pontos: Se o usurio no digitar o nome do paciente primeiro, ele no podero escolher o sexo, e se no escolher o sexo ele no poder escolher a exame que o paciente far, pois o tipo de exame necessita do sexo do paciente, para evitar que algum do sexo masculino faa exame de gravidez. Ento para corrigir esses problemas, vamos primeiro passar todas as propriedades Enabled dos Objetos OptionBottum e CheckBox para False. Com isto, sempre que se entrarmos no formulrio pela primeira vez esses objetos estaro indisponvel para o usurio manipular at que ele cumpra algumas determinaes. Vamos agora liberar a escolha do Sexo depois que um nome tiver sido digitado na Caixa de Texto txtNome.
52

Controles Bsicos Chame a janela de Codificao e na rotina txtNome_Change() altere para ter as seguintes linhas de comando:

Rode o programa e teste para verificar se esta tudo correndo bem. Todas os objetos de escolha esto desabilitados at que um nome seja digitado. Neste momento a escolha do Sexo do paciente liberado. Vamos agora fazer o mesmo com os Objetos OptionButton. Vamos criar um evento Click para eles, de maneira que quando o usurio escolher um determinado sexo para o paciente seja liberado os exames correspondente. D dois clickes com o mouse no objeto optMasculino. A janela de codificao ser aberta e o evento Click j ter sido criado. Vamos ento habilitar os exames para esse Objeto:

53

Lionardo@base.com.br

Colocamos Enabled = True para os exames liberados para o objeto optMasculino e Enabled = False para os exames que no esto liberados. Faa a mesma coisa para o optFeminino agora.

Execute o programa. Esta funcionando perfeitamente. Tentamos tirar o mximo de possibilidades de erro que um usurio pode cometer.

2.1.9 Propriedades Principais do Frame


Esse objeto muito til para nos ajudar na criao de uma interface mais limpa para o usurio. Podemos criar molduras que agruparo outros objetos. Essas molduras possuem formato 3D embelezando ainda mais nossa janela. Caption: Coloca um texto no topo da moldura. No obrigatrio.

Caption com texto digitado. 54

Caption sem nenhum texto.

Controles Bsicos Enabled: Determina se todos todos os objetos colocados no interior da moldura estar ou no disponvel para o usurio. Name: Nome dado ao objeto. A inicial abreviada fra. Cuidado para no colocar frm a abreviatura do Objeto Form.

Vamos fazer uma ultima alterao em nosso programa de Lanamento de Exames. Nossa interface est precisando de uns retoques, e para fazer esse incremento vamos colocar um objeto Frame envolvendo os OptionButton e os CheckBox.

Perceba que a aparncia de nosso programa melhorou muito agora. E ainda usamos a propriedade Caption do Frame para rotular as opes de escolha do sexo e do exame. Vale comentar que para que os objetos que estaro dentro do Frame seja realmente anexados a ele, necessrio que esses objetos sejam criados dentro dele. Assim, sempre que movermos a moldura, os Objetos acompanharam. Ento, para que no nosso exemplo as coisas funcionem com perfeio, devemos apagar os objetos OptionButton e CheckBox, inserir as duas molduras em seus respectivos lugares e somente depois criar (dentro do Frame) os objetos apagados.

55

Lionardo@base.com.br

EXERCCIOS PROPOSTOS
1 - Explique a finalidade dos Objetos: Form: CommandButton: Label: TextBox: CheckBox: OptionButton Frame:

2 - Explique:

3 - Quais as abreviaturas que usamos para os Objetos: Form: CommandButton: Label: TextBox: CheckBox OptionButton 56

Controles Bsicos Frame: 4 - Pela aparncia descreva que tipo de Borda possui os formulrios abaixo:

5 - Explique a finalidade das Propriedades do Formulrio MouseIcon e MousePointer:

6 - Qual a importncia da propriedade AutoSize do objeto Label?

7 - Descreva as propriedades do objeto TextBox relacionadas abaixo: Font Locked Name Text

57

Lionardo@base.com.br

8 - O que um Evento?

9 - Explique a diferena entre o Evento Change e o KeyPress do objeto TextBox:

10 - Em que situao podemos usar uma Caixa de Checagem e um Boto de Opo? Exemplifique.

11 - A propriedade Enabled existe em quase todos Objetos, e sua finalidade : ( ) Deixar o Objeto invisvel ( ) Mudar a cor do Objeto ( ) Fazer com que o Objeto no aceite interferncia do Usurio. 12 - Crie um novo formulrio que contenha as seguintes especificaes: Alguns pontos deste nosso simples programa tem que ser levado em considerao: Se for primeira compra o cliente pode comprar somente a vista. Se o valor da compra for maior que 200 reais ele poder comprar

58

Controles Bsicos com 60 dias. Logicamente que no campo valor no poder aparecer letras.

ANOTAES PARA NO ESQUECER

59

Lionardo@base.com.br

60

Controles Bsicos

3 SELECIONANDO ITENS

ListBox ComboBox

61

Lionardo@base.com.br

ANOTAES PARA NO ESQUECER

62

Selecionando Itens

3.1 O OBJETO LISTBOX

Caixa de Lista um objeto onde pode-se adicionar ou remover vrios itens, e o usurio pode selecionar um ou vrios destes itens. Caixa de Lista Vazia com vrios nomes inseridos na propriedade List

Caixa de Lista Vazia, sem nenhum texto digitado em seu interior.

Este tipo de objeto muito til para mostrarmos uma relao de nomes ou cdigos para se um (ou vrios) seja selecionado, e sempre que a quantidade desses itens superar o tamanho do ListBox um ScroolBar Vertical automaticamente ir aparecer. bom ressalvar que este objeto, internamente, cria um ndice comeando com 0 (zero) at na quantidade existente de itens. Exemplo: se temos 4 nomes dentro do ListBox, Maria, Jos, Cornlios, Pedro e Peter, ento o ndice criado ser 0 para Maria, 1 para Jos, e assim sucessivamente. Este ndice ser usado sempre que for referenciar aos nomes contido dentro do ListBox.

3.1.1 Propriedades Principais do ListBox


Columns: Determina a quantidade de colunas que a caixa de lista ter. Quando esta com 0 (zero) significa que ter somente uma coluna e a barra de rolagem ser vertical. Se o valor desta propriedade for 1 ser formado tambm somente uma coluna mas a barra de rolagem ser horizontal. Valor 2 significa que os itens inseridos no ListBox sero ajustados em 2 colunas, e assim por diante.

Columns ajustado para 0. Columns ajustado para 1. Columns igual a 2. Os Os nomes ficam em 1 coluna Os nomes ficam e 1 coluna nomes ficam dispostos em de forma vertical. de forma horizontal. duas colunas de 63 forma

Lionardo@base.com.br

Enabled: Habilita ou no o ListBox para o usurio selecionar algum item no objeto. IntegralHeight: Determina a possibilidade dos itens dentro da caixa de lista ser exibido de forma parcial. IntegralHeight com TRUE IntegralHeight com FALSE

List: o Local onde digitamos os itens que estaro dentro do ListBox. Os nomes digitados nesta propriedade em tempo de projeto so automaticamente inseridos dentro do ListBox, mas existe outro processo de se incluir dados no objeto em tempo de execuo.

MultiSelect: Quando esta propriedade esta habilitada significa que a caixa de lista aceitar mltiplas selees, ou seja, poder ser selecionado mais de um tem. As opes so 0 - None para seleo somente de 1 tem. 1 - Simple para seleo de vrios itens usando apenas o clicar do mouse ou barra de espao. 2 - Extended o padro do Windows para multiplas selees. Para selecionar mais de 1 item usa-se a combinao de tecla CTRL + Click do mouse ou barra de espao. Name: Nome que o Objeto ListBox ter. A abreviao padro lst. Sorted: Classifica os itens existente dentro do ListBox em ordem alfabtica ou numrica ascendente. Esta propriedade em tempo de execuo tem a finalidade de informar o estado que se encontra o Sorted.

Style: CheckBox

Style: Standard

Style: O Estilo Standard o padro, e o Visual Basic 5 acrescentou o Estilo 64

Selecionando Itens CheckBox, onde os itens existentes no ListBox so acompanhados de um quadradinho do lado esquerdo para se fazer a seleo dos itens. Para multiplas selees esse tipo de ListBox mais intuitivo para o usurio.

Coloque um Objeto ListBox no formulrio, e d um nome para o objeto de lstNomes, e na propriedade List Digite os nomes contido na figura abaixo.

Execute o programa e veja como ficar a disposio dos nomes digitados dentro do Objeto. Note que podemos selecionar somente um nome. Vamos tentar selecionar vrios nomes. Habilite a propriedade MultiSelect com 2 - Extended. Rode o programa novamente e veja que agora vrios nomes podem ser selecionado. Vamos agora colocar esses nomes em 2 colunas. Para isto a propriedade Columns deve conter o valor 2. Mude o IntegralHeight para False para melhorar a aparncia. Em tempo de execuo voc ver o resultado. Mude a propriedade Sorted para True e todos os itens ficar na ordem alfabtica.

3.1.2 Propriedades em tempo de execuo


Existe algumas propriedades que no aparecem em tempo de projeto na janela de Propriedades, e podemos nos referenciar a elas somente atravs da janela de codificao, e sero executadas em tempo de execuo. ListCount: Retorna a quantidade de itens existente dentro de um ListBox. ListIndex: Retorna o nmero correspondente ao ndice do item selecionado. NewIndex: Retorna o nmero correspondente ao ndice do ultimo item inserido no ListBox.

65

Lionardo@base.com.br

SelCount: Quando a propriedade MultiSelect esta ativada, possibilitando a seleo de vrios itens dentro da caixa de lista, o SelCount retorna a quantidade de itens que foi selecionado. Selected: Retorna True ou False sinalizando se algum item foi selecionado. necessrio informar o ndice correspondente. Exemplo: Selected(2): Se o item que possui o ndice 2 for selecionado retornar True, se qualquer outro for selecionado retornar False. Text: Retorna o texto do item selecionado. No necessita de ndice. List: Retorna o texto do item especificado no ndice. Exemplo: List(2) ir mostrar o texto existendo na lista referente ao ndice 2.

No exemplo que criamos acima, um ListBox com nomes inseridos nele, vamos fazer algumas mudanas. Acrescente mais 3 botes no formulrio. Propriedadades Caption Name Boto1 Quantidade cmdQuantidade Boto2 ndice Cmdndice Boto3 Text cmdText formulrio. A

Vamos Colocar 3 objetos Label no disposio do formulrio ficaria assim:

Propriedadades AutoSize Caption Name

Label1 True deixar vazio lblQuantidade

Label2 True deixar vazio Lblndice

Label3 True deixar vazio lblText

Vamos agora codificar o programa para quando o usurio apertar o boto Quantidade aparecer a quantidade de 66

Selecionando Itens itens dentro da caixa de Lista. Quando apertar o boto ndice mostrar o ndice correspondente ao item selecionado. O boto Texto ir mostrar o texto selecionado dentro do ListBox. Veja os Cdigos a serem usados:

Note que as propriedades esto retornado valores que esto sendo inseridos no Objeto lblQuantidade e na sua propriedade Caption em tempo de execuo.

3.1.3 Eventos do ListBox


Somente um evento do ListBox veremos agora: O DblClick. Este evento executar alguma ao quando dermos duplo click em algum item de nossa caixa de Lista. No use o Click! Para este tipo de objeto mais intuitivo usar o Duplo click que o click. Enquanto o usurio esta escolhendo qual item selecionar, ele ficar passeando com o mouse entre os itens existente, dando click em algum deles e clicando no ScrollBar.

3.1.4 Mtodos AddItem, RemoveItem e Clear


No exemplo dado anteriormente digitamos os itens que iriam compor o ListBox atravs da propriedade List em tempo de projeto. Mas nem sempre acontece de sabermos quais os itens que faro parte do objeto antes de sua execuo. O mais natural que esses itens sejam inseridos durante a execuo. Para que isto acontea temos que usar o Mtodo AddItem. 67

Lionardo@base.com.br

O Mtodo RemoveItem retira do ListBox o item selecionado, e o Clear limpa todo o Objeto.

Vamos criar um formulrio novo (Menu File/New Project). Dentro do formulrio inserir trs botes de comando, uma caixa de lista e uma caixa de texto.
Propriedadades Boto1 Boto2 Boto3

Caption Name
Propriedadades

Adicionar CmdAdicionar
Caixa de Lista

Remover cmdRemover

Limpa Tudo CmdLimpaTudo

Caixa de Texto

Name Text

LstNomes

txtNome Deixar Vazio

As propriedades do formulrio ser Relao de Nomes para o Caption e frmRelaoDeNomes para o Name. Veja ao lado como ficar a janela.

O programa funcionar da seguinte forma: Digita-se um nome na Caixa de Texto e ao teclar o boto Adicionar o contedo ser transferido para a Caixa de Lista. Quando quisermos remover algum item, selecionamos e apertamos o boto Remover. O boto Limpar Tudo remove todo o contedo do ListBox.

68

Selecionando Itens O mtodo AddItem requer na sua sintaxe o texto que ser adicionado ao ListBox. Chamamos ento o objeto txtNome e sua propriedade Text que contm o texto. O mtodo RemoveItem necessita do nmero do ndice que o item existente dentro ListBox possui. Para se obter este ndice usamos a propriedade ListIndex.

Execute o programa e digite alguns nomes, adicionando, removendo alguns e depois limpando tudo. Alguns problemas apareceram: Sempre que adicionamos algo o ultimo nome digitado na caixa de texto continua l. Do jeito que o programa esta ele aceita adicionarmos nomes em branco. Se apertarmos o boto Remover sem ter um nomes no ListBox selecionado ele retorna um erro de execuo, pois a propriedade ListIndex retorna o ndice do item selecionado. Ou seja, tem que haver uma seleo do item que se quer apagar. A tecla ENTER no aceita na confirmao dos nomes digitados. Nossa! todos. Quantos problemas. Mas vamos ento resolver

O Objeto txtNome tem sua propriedade Text adicionada ao lstNomes, e em seguida igualada a um contedo vazio. Resolvemos o primeiro problema. Rode o programa comprove isto! Agora temos que desabilitar o boto Adicionar e somente deix-lo habilitado quando o usurio digitar algo na caixa de texto (objeto txtNome). Sendo assim no corremos o risco de algo vazio ser inserido na caixa de lista.

69

Lionardo@base.com.br

Primeiro passo ser selecionarmos em tempo de projeto o Objeto cmdAdicionar. V na propriedade Enabled e passe para False. Crie agora um evento Change para a caixa de texto txtNome: Veja que na codificao verificamos se o txtNome esta vazio. Se tiver desabilita o boto Adicionar, e no tiver vazio habilita o boto. Usamos o Evento Change porque ele o responsvel pela verificao constante do que foi digitado na caixa de texto. Sempre que digitamos, alteramos ou apagamos algo numa caixa de texto o evento Change chamado. Note agora que se comearmos a digitar um nome qualquer na caixa de texto o boto aparece. Se apagarmos o contedo digitado, com delete ou backspace, o boto desabilitado. Para resolver o terceiro problema, teremos que primeiro somente aceitar o mtodo RemoveItem se houver um item selecionado. Se no houver ele no executa esse mtodo. Ento vamos a luta! Em tempo de projeto mude a propriedade Enabled do boto Remover para False. Iremos habilita-lo somente quando um item for selecionado usando o evento click do objeto lstNomes. No evento Click do objeto lstNomes solicitado ao programa para habilitar o boto remover. Depois, quando o usurio aperto o boto e remover o item pretendido, colocamos o boto remover novamente desabilitado. 70

Selecionando Itens Rode o programa e veja o que acontece. Para o usurio que esta digitando desconfortaste ter que digitar um nome e ter que usar o mouse (tirar a mo do teclado) para inserir um nome e depois clicar novamente na caixa de texto para digitar outro nome. Para resolver esse problema simples. Selecione o boto Adicionar e mude a propriedade Default dele para True. Assim sempre que o usurio digitar um nome e teclar ENTER ser como se tivesse apertado o boto Adicionar. Agora o programa est pronto! Pode vend-lo!

3.2 O OBJETO COMBOBOX

Este objeto na verdade uma combinao da caixa de texto e da caixa de lista. Uma diferena que este Objeto possui em relao a caixa de lista que ele no aceita multiseleo. Somente acessado um item de cada vez. Objeto ComboBox com sua caixa de Lista recolhida. Ela somente acessada ao darmos um click com o mouse na seta para baixo do lado direito. Da forma em que esta podemos digitar na caixa de texto apresentada. ComboBox com a caixa de lista expandida. Pode-se escolher um nome qualquer na lista que ele ser automaticamente levado at a caixa de texto.

Uma das grandes vantagens da Caixa de Combinao a economia de espaos na tela. Podemos colocar uma relao enorme de itens dentro de uma caixa de combinao que ela ser apresentada somente com uma caixa de texto, e a relao aparece somente se o usurio necessitar, digitando assim na seta para baixo do Objeto. 71

Lionardo@base.com.br

3.2.1 Propriedades Principais do ComboBox


O ComboBox usa as mesmas propriedades que aprendemos para o ListBox. A diferena esta somente em duas que veremos agora. Style: Aqui escolhemos o tipo de Caixa de Combinao iremos colocar no formulrio:

0 - Dropdown Combo: a opo padro do Objeto. Aqui pode-se digitar qualquer nome na rea de digitao, clicar a seta para baixo e escolher qualquer um dos itens que ele ser automaticamente inserido na rea de texto. 1 - Simple Combo: Caixa de Combinao simples. Aparece em destaque a rea de edio de texto, onde podemos digitar algum item; ou selecionar qualquer um que esteja na caixa de lista, que ser inserido na rea de texto. O boto em forma de seta para baixo no existe neste tipo de ComboBox. Se aumentarmos o tamanho da Caixa de Combinao na vertical, aparecer a lista e esta ficar fixa. Caso deixamos ela somente do tamanho da rea de texto, ento a lista no aparecer, e se quisermos saber quais nomes existe teremos que apertar no teclado a seta para baixo ou para cima, para que os itens existentes dentro da Lista apaream.

2 - Dropdown List: Neste tipo de Caixa de Combinao o usurio pode somente escolher um item relacionado na lista, no podendo digitar nada. A rea de texto no aceitar digitao. Text: Nesta propriedade digita-se um texto que ficar, como padro, fixo na rea de texto na caixa de combinao. Geralmente deixa-se em branco. Podemos usar essa propriedade tambm, em tempo de execuo, para saber qual texto o usurio digitou ou selecionou. 72

Selecionando Itens

3.2.2 Os Mtodos
Usamos para o ComboBox os mesmos mtodos usados para o ListBox: AddItem, RemoveItem e Clear. O modo de manipul-los na janela de codificao tambm o mesmo.

Crie um formulrio novo e coloque nele um ComboBox e um label conforme figura abaixo: nomeie a Caixa de Combinao para cboNomes e deixe a propriedade Text vazia. O label nomei-o para lblNomes, o Caption deixe vazio e o AutoSize como True. Crie forma: um evento Load para o formulrio da seguinte

O Evento Form_Load do formulrio o primeiro que lido pelo programa assim que a janela aparece na tela em tempo de execuo. Tudo que for codificado para este evento ser, ento, executado antes da leitura pelo programa de qualquer objeto inserido no formulrio. Defina a propriedade Style do cboNomes como 2. Assim o usurio no poder digitar nenhum nome, somente escolher na lista. Crie um evento Click para o cboNomes:

73

Lionardo@base.com.br

Estamos solicitando ao programa para quando o usurio der um click na lista de nomes aparecer a mensagem que ele escolheu determinado nome. O sinal de & que aparece na codificao o responsvel pela concatenao (juno, emenda)da expresso Nome escolhido com o contedo de cboNomes.Text.

74

Selecionando Itens

EXERCCIOS PROPOSTOS
1 - Descreva as seguintes propriedades do ListBox: List: Sorted: MultiSelect: Selected: ListCount ListIndex:

2 - Qual a diferena entre as propriedades em tempo de execuo e as em tempo de projeto.

3 - Marque Verdadeiro ou Falso para as afirmaes: a) As propriedades existentes em tempo de projeto no possvel us-las em tempo de execuo. ( ) b) A propriedade NewIndex retorna o ultimo ndice entrado na caixa de Lista. ( ) c) A propriedade Name e Caption possuem o mesmo valor. ( ) 4 - Explique os mtodos: AddItem: RemoveItem: Clear:

75

Lionardo@base.com.br

5 - Quais so as diferenas entre o ListBox e o ComboBox?

6 - Na propriedade Style quais os tipos existentes:

7 - Explique o evento Form_Load:

8 - Desenvolva um cadastro de mercadoria, onde o usurio digitar a descrio das mesmas (TextBox) e elas sero includas dentro de uma lista (ListBox). Crie os botes Adicionar e Remover. Na mesma janela, quando o usurio selecionar qualquer das mercadorias dentro da Caixa de Lista, dando duplo click, a descrio da mercadorias ser mostrada num label. Veja a disposio da janela:

76

Selecionando Itens

4 O FOCO

TabIndex GotFocus e LostFocus SetFocus Mnemnico

77

Lionardo@base.com.br

ANOTAES PARA NO ESQUECER

78

Selecionando Itens

4.1 O FOCO
Foco o termo usado para descrever o objeto que esta em destaque no momento. O objeto que esta sendo usado pelo usurio. Um objeto pode perder ou ganhar o foco. Quando estamos manipulando-o ele ganha o foco, se apertamos a tecla TAB ou clicarmos com o mouse em outro objeto o foco transferido para outro objeto, ou seja, um ganha o foco e outro perde o foco. A seqncia que a tecla TAB usa para dar foco aos objetos no formulrio a ordem que eles foram inseridos no formulrio. Se voc inseri um boto de comando e depois insere uma caixa de texto, ento quando executarmos o programa o primeiro a receber o foco ser o boto de comando. Quando apertar a tecla TAB o foco ser ento transferido para a caixa de texto. Podemos tambm passar o foco para um determinado objeto usando o mouse.

4.1.1 Propriedades TabIndex e TabStop


Estas duas propriedades existem na maioria absoluta dos objetos, e com elas podemos manipular a ordem de tabulao (passagem do foco) entre os controles existentes no nosso formulrio. A propriedade TabIndex possui uma seqncia numrica que representa a ordem de tabulao dentro do formulrio. O primeiro objeto inserido possui sempre o numero 0, e assim que outros so tambm inseridos este nmero vai sendo incrementado em mais um, independente do objeto inserido.

79

Lionardo@base.com.br

Neste exemplo, quando o programa executado e apertamos a tecla TAB o foco passado do boto de comando para a caixa de texto e depois para a caixa de checagem. Mas se quisermos alterar esta ordem s mudar o numero existente na propriedade TabIndex. Vamos passar a ordem de tabulao destes objetos para: Boto de comando, caixa de checagem e depois caixa de texto. Para fazer isto basta alterar a propriedade da caixa de texto para 1. A propriedade TabStop possui a finalidade de fazer a tecla Tab ignorar o controle na tabulao. Ou seja, o objeto que tiver TabStop = False, no receber o foco via teclado, somente se o usurio clicar com o mouse no objeto.

Quando o objeto esta com a propriedade Enabled = False ou Visible = False, o foco no passa por eles, nem via teclado nem via mouse. O Objeto Label no possui foco, pois ele no interage com o usurio.

4.1.2

A Tecla Enter

O Windows possui a tecla TAB para mudar o posicionamento do Foco, porm a grande massa de usurios que sempre acostumou usar a tecla ENTER para passar o foco de um objeto para outro no se adaptou ainda. Se voc quizer fazer um programa que habilite a funcionalidade da tecla ENTER para mudana de foco, aqui vai a dica:

80

Selecionando Itens

Crie um formulrio e acrescente nele algumas caixas de texto como no exemplo a seguir:

A propriedade TabIndex desses objetos devem estar na ordem crescente. O foco ira acompanhar exatamente o que for inserido nesta propriedade. Se colocar o boto Fechar com o TabIndex 1, ele sera o segundo a receber o foco. Defina a verdadeiro. propriedade KeyPreview do formulrio para

Com isto, o programa dara prioridade aos eventos de teclado do formulrio como um todo antes de verificar os eventos de teclado de cada objeto inserido no form.

81

Lionardo@base.com.br

Uma vez feito isto, precisamos agora criar o evento de teclado para o formulario. Entre na janela de codificao e chame o evento KeyPress do Form. Repetindo: Do Form!

Os codigos digitados neste evento sera avaliado a cada pressionamento de tecla. Criamos ento a seguinte codificao:

O Programa verifica se foi pressionado a tecla ENTER que referenciada aqui pela constante VbKeyReturn. Se foi pressionado chamado a funo SendKeys que fora o pressionamento da tecla TAB, ou seja, seria como se o programa dissesse para a mquina: Se o usurio apertar a tecla ENTER troque pela tecla TAB. Por fim usamos "KeyAscii = 0" para cancelar o Beep que emitido sempre que a tecla ENTER pressionado.

4.1.3 Mtodo SetFocus


O mtodo SetFocus move o foco para o objeto especificado. Veja sua sintaxe: NomeDoObjeto.SetFocus 82

Selecionando Itens NomeDoObjeto: Um objeto Form que representa um formulrio, ou um objeto Control que representa um controle no formulrio ou folha de dados ativo Use o mtodo SetFocus quando voc quiser que um determinado campo ou controle tenha o foco, para que toda a entrada do usurio seja direcionada para esse objeto. De modo a ler algumas das propriedades de um controle, voc precisa assegurar que o controle tenha o foco. Algumas propriedades s podem ser definidas quando o controle no tem o foco. Por exemplo, voc no pode definir as propriedades Visible ou Locked de um controle como False quando esse controle tem o foco. Voc no pode mover o foco para um controle se sua propriedade Enabled estiver definida como False. Voc precisa definir a propriedade Enabled de um controle como True antes de poder mover o foco para esse controle. Voc pode, porm, mover o foco para um controle se sua propriedade Locked estiver definida como True.

4.1.4 Eventos GotFocus e LostFocus


GotFocus : Ocorre quando um formulrio ou controle recebe o foco. LostFocus : Ocorre quando um formulrio ou controle perde o foco. Esses eventos ocorrem quando o foco movido em resposta a uma ao do usurio, como o pressionamento da tecla TAB ou o clicar no objeto, ou quando voc usa o mtodo SetFocus no Visual Basic. Um controle s pode receber o foco se suas propriedades Visible e enabled estiverem definidas como True. Um formulrio s pode receber o foco se no tiver controles ou se todos os controles visveis estiverem desativados. Voc pode especificar o que acontece quando um formulrio ou controle recebe o foco executando um procedimento de evento quando o evento GotFocus ocorrer. Por exemplo, anexando um procedimento de evento GotFocus a cada controle de um formulrio, voc pode guiar o usurio atravs de seu aplicativo exibindo breves instrues ou mensagens em uma caixa de texto. Voc tambm pode oferecer indicaes visuais ativando, desativando ou exibindo controles que dependam do controle que tem o foco. Tambm Pode-se usar um procedimento de evento LostFocus para validar dados inseridos conforme o usurio move o foco de um controle. Voc 83

Lionardo@base.com.br

tambm pode reverter ou alterar as condies que voc define no procedimento de evento GotFocus do objeto. Outros usos para os procedimentos de evento LostFocus e GotFocus so ativar, desativar, ocultar e exibir outros objetos.

84

Selecionando Itens

Crie um novo projeto e coloque no formulrio os objetos relacionados abaixo: Formulrio: Caption:Recursos Humanos Name:frmRecursosHuma nos Caixa de Texto 1: Text: <deixar vazio> Name:txtNomeFuncion rio Caixa de Texto 2: Text: <deixar vazio> Name:txtCargo Caixa de Texto 3: Text: <deixar vazio> Name:txtNomeConjuge Enabled = False Label 1: Caption:Nome do
Funcionrio

Label 2: Caption:Cargo Label 3: Caption: Nome do Cnjuge Enabled: False Name: lblNomeConjuge Frame 1: Caption:Estado Civil Frame 2: Caption: Setor

Os botes de opo OptionButton para estado civil, d o nome de optEstadoCivil para todas as trs opes. Com isto 85

Lionardo@base.com.br

o Visual Basic perguntar se voc esta criando um array de controle, e pode responder que sim. Fazendo isto, criamos uma matriz de nome optEstadoCivil com 3 elementos, sendo que o elemento 1 representa a opo casado, elemento 2 representa opo Solteiro e elemento 3 opo Viuvo. A ordem de tabulao a seqncia dos objetos dispostos no formulrio. Os dois boto de comando deve ter o TabStop = False, pois no sero includos na tabulao. A caixa de texto txtNomeConjuge somente poder ser habilitada se funcionrio for casado. Para isto a para o objeto optEstadoCivil deve ser esta desabilitada, e o estado civil do seguinte codificao feito:

Note que usamos o SetFocus para, no caso do usurio escolher a opo Casado, o foco ir para a caixa de texto txtNomeConjuge. Para entender melhor esse evento, veja que o Visual Basic criou automaticamente um argumento chamado Index do tipo integer. O contedo deste argumento o nmero do ndice correspondente a opo da matriz optEstadoCivil. Vamos criar um evento LostFocus para txtNomeConjuge:

86

Selecionando Itens

Este evento acionado sempre que o objeto perde o foco, ou seja, codificamos para no momento que tiver perdendo o foco verificar se o nome do cnjuge foi preenchido. Se no foi da uma mensagem avisando que obrigatrio o preenchimento e retorna o foco para a caixa de texto para que o nome seja ento digitado. Rode o programa e veja o resultado. Colocamos o mtodo SetFocus dentro de um evento LostFocus para demostrar sua utilizao, mas esta uma prtica no recomendada, pois imagine se voc clica na opo casado por engano, e quer voltar para a opo solteiro (que seria o correto). O programa no deixaria, pois exigiria a digitao do nome do cnjuge.

4.1.5 Mnemnico (Tecla de Acesso)


Mnemnico a letra sublinhada onde, via teclado, podemos fazer um acesso diretamente ao objeto, apertando a tecla ALT e a letra correspondente. Para criar um Mnemnico usamos a propriedade Caption dos objetos, e anexado a letra escolhida digitamos o smbolo & (sempre do lado direito da letra). Por exemplo, se temos um boto de comando Cancelar e queremos que a letra n seja a Mnemnica, ento no Caption alteramos para Ca&ncelar. Assim aparecer no vdeo como : Cancelar, e se o usurio usar a combinao de tecla ALT+N passar o foco para este objeto e o acessar. Este recurso vale para todos os objetos que possuem a propriedade Caption, mas bom lembrar que alguns objetos no faz sentido colocar o Mnemnico, como por exemplo para um formulrio.

87

Lionardo@base.com.br

Sempre que possvel use as mesmas teclas de acesso em todo seu programa. Se numa janela voc tem o boto Cancelar com o mnemnico na letra n, ento sempre que este boto aparecer em outras janelas tente repetir a tecla de acesso usada. Outra dica: No use tecla de acesso para opes perigosas, como por exemplo um boto Apaga Tudo. Se colocarmos uma tecla de acesso ALT+P nele corremos o risco de do usurio apertar esta combinao por engano e limpar tudo. Estas opes delicadas sempre bom obrigar o usurio a usar o mouse ou a tecla TAB para ele ter certeza do que esta fazendo.

Usando o exemplo acesso nos objetos:

anterior,

vamos

colocar

teclas

de

Perceba que agora s apertar a tecla ALT e a letra sublinhada para que o objeto seja acessado. Entretanto para que o programa combine o objeto label no objeto mais prximo, que no nosso exemplo so as caixas de texto, necessrio que a ordem do TabIndex esteja rigorosamente crescente.

88

5 CONTROLES ESPECIAIS

MaskEdBox CommonDialog

Lionardo@base.com.br

Alguns controles do Visual Basic necessitam de uma explicao mais profunda devida a sua grande utilidade dentro da linguagem de programao. Habitualmente estes controles so pouco tratados em literaturas sobre o Visual Basic, e devido a isto vamos aprofundar mais sobre eles aqui.

5.1

MASKEDBOX

Este objeto semelhante a uma caixa de texto, entretanto ele possui alguns recursos adicionais, como a possibilidade de colocar uma mscara para o texto que ir ser digitado e validar a digitao automaticamente. Vejas as principais propriedades: AllowPrompt : Determina se o caractere informado como prompt vlido durante a digitao. AutoTab : Determina se quando o usurio terminar de preencher a mascara do objeto o foco automaticamente passado para o objeto seguinte, sem necessidade do usurio apertar TAB ou o mouse. ClipMode : Determina se, diante de um evento de copiar ou recortar dados do objeto Maskedit para a rea de transferncia, devem ser enviados os dados digitados com os caracteres que compem a mscara ou no.

* ClipText : Retorna o texto digitado no objeto sem os caracteres que compem a mscara.

90

Selecionando Itens Format : Determina o formato que os dados sero exibidos. Seque os mesmos padres estabelecidos para a funo Format (veja no captulo Funes Auxiliares) Use a propriedade Format para exibir dados em um formato consistente, ou seja, os dados sero exibidos neste formato, mesmo que o usurio digite os dados diferentemente do formato. Por exemplo, se voc definir a propriedade Format para dd/mmm/yyyy, todas as datas digitadas sero exibidas no formato 18/Set/1995. Se o usurio digitar a data como 18/09/95 (ou qualquer outro formato de data vlido), o Visual Basic converter a exibio para o formato estabelecido, que dia / ms-por-extenso-abreviado / ano-com-4-digitos. A propriedade Format afeta apenas a maneira como um valor exibido e no como ele armazenado. Da mesma forma, um formato de exibio no aplicado at que o usurio termine a digitao e o controle perca o foco. Nada exibido no campo para sugerir ou controlar o formato no qual os dados so inseridos. Se voc precisar controlar a maneira como os dados so digitados, use uma mscara de entrada alm de ou ao invs de um formato de exibio de dados. Se voc quiser que os dados sejam exibidos exatamente como foram inseridos, no defina a propriedade Format. * FormattedText : Retorna o texto digitado, incluindo os caracteres que compem a mscara. Mask : Mscara que moldar o controle. O Visual Basic fornece duas propriedades que produzem resultados parecidos: a propriedade Format e o Mask. Use a propriedade Mask para exibir caracteres de exibio literais no campo com espaos em branco a serem preenchidos. Por exemplo, se todos os nmeros de telefones que inserir em um campo tiverem o mesmo formato, voc poder criar uma mscara de entrada: (###) ###-#### (___) ___ -____ (062) 621-3862

Uma mscara de entrada garante que os dados se ajustem ao formato definido e voc poder especificar os tipos de valores que podero ser inseridos em cada espao em branco. Por exemplo, a mscara de entrada anterior solicita que todas as entradas contenham exatamente os dgitos necessrios para completar um cdigo de rea e nmero de telefone, e que somente dgitos possam ser inseridos em cada espao em branco. Voc pode definir uma mscara de entrada usando os seguintes caracteres. 91

Lionardo@base.com.br

0 9 #

L ? A a & C , . : ; - /

< > \

Dgito (de 0 a 9, entrada requerida, sinais de mais (+) e menos (-) no permitidos). Dgito ou espao (entrada no requerida, sinais de (+) e menos (-) no permitidos). Dgito ou espao (entrada no requerida, os espaos so exibidos como vazios enquanto os dados so editados, mas so removidos quando perde o foco, sinais de mais e menos permitidos). Letra (de A a Z, entrada requerida). Letra (de A a Z, entrada opcional). Letra ou dgito (entrada requerida). Letra ou dgito (entrada opcional). Qualquer caractere ou espao (entrada requerida). Qualquer caractere ou um espao (entrada opcional). Marcador de posio decimal e separadores de milhares, de data e de hora. (O caractere realmente usado depende das configuraes do Painel de Controle do Windows). Faz com que todos os caracteres sejam convertidos para minsculos. Faz com que todos os caracteres sejam convertidos para maisculos. Faz com que o caractere seguinte seja exibido literalmente (por exemplo, \A exibido simplesmente como A).

Quando voc define uma mscara de entrada e a propriedade Format para o mesmo objeto, a propriedade Format tem precedncia quando os dados so exibidos. Isso significa que mesmo voc tendo salvo uma mscara de entrada, ela ignorada quando os dados so formatados. O dado original como foi digitado no alterado; a propriedade Format s afeta a maneira como os dados so exibidos. MaxLength : Determina a quantidade mxima de caracteres que o MaskEdBox pode ter. Name: Nomeia o objeto. Geralmente inicia o nome com msk PromptChar : Escolhe o caractere padro que ser exibido simbolizando o estado vazio. Por default possui o caractere _, e aconselho a substituir pelo caractere de espao. Esta propriedade no aceita vazio. PromptInclude : Determina se o caractere inserido na propriedade PromptChar ser includo na propriedade Text. * Text : Contm o texto digitado pelo usurio no objeto. Evento ValidationError : Este evento ocorre sempre que o usurio digita alguma entrada que no corresponde a mscara estabelecida.

92

Selecionando Itens

Crie um novo projeto e insira 1 MaskEdBox

e 3 labels:

Nomeie o maskedit para mskCGC e coloque altere a propriedade Mask para ##.###.###/###-##. Rode o programa e veja o resultado. Vamos ver agora como algumas propriedades recebem o contedo digitado. Abra a janela de codificao e digite:

Cada propriedade recebe o contedo de uma maneira. Quando precisar armazenar ou apresentar esse contedo s escolher a forma que necessitar. Perceba que os pontos e a barra esta fixa, mas aparece um inconveniente sinal de _. Para retir-lo mude a propriedade PromptChat para (uma barra de espao). Agora sim, aparece somente nossa formatao. Vamos agora criar um evento ValidationError para quando o usurio digitar alguma tecla invlida o Visual Basic dar um alerta:

93

Lionardo@base.com.br

Numa mscara onde se exige a digitao de nmeros, se digitar uma letra do alfabeto ou tentar digitar mais digitos que a mascara suporta, a mensagem de advertncia ir aparecer.

5.2 COMMONDIALOG
O Visual Basic traz algumas caixas de dilogos prontas para Abrir arquivo, Salvar, Imprimir, escolher Cor, ou escolher fontes de letra. Sua utilizao simples e basta inserirmos o objeto CommonDialog no formulrio para ativarmos os dilogos. Na codificao do programa usamos a propriedade Action para o Visual Basic abrir o dilogo pretendido: * Action : Determina o tipo de dilogo que ser exibido: 0 Nenhum dilogo. 1 Mostra caixa de dilogo Abrir Arquivo 2 Mostra caixa de dilogo Salvar Arquivo 3 Mostra caixa de dilogo Escolher Cor 4 Mostra caixa de dilogo Escolher Fonte de Letra 5 Mostra caixa de dilogo de Impresso. 6 Executa o WINHELP.EXE. As principais propriedades deste objeto podem ser acessadas selecionando (Custom) ou clicando no boto direito do mouse e selecionando Propriedades no menu:

Open/SaveAs: Aqui definimos as caractersticas do arquivo que


ser aberto ou salvo.

94

Selecionando Itens

DialogTitle: Determina o texto que ir aparecer na barra de ttulo. FileName: Nome e Caminho padro para um determinado arquivo. InitDir: Diretrio padro onde sempre ser iniciado o dilogo Filter: Especifica os tipos de arquivos que podero ser selecionados. Veja a regra de uso desta propriedade: Descrio | Tipo de arquivo | Primeiro usamos um texto descritivo para o arquivo que ser selecionado. Depois uma barra vertical (|), e a extenso que este arquivo usa e finaliza com outra barra. Textos (*.txt) | *.txt | Documentos (*.Doc) | Figuras (*.bmp,*.pcx) | *.bmp;*.ico | Colocando desta forma veja como ficar a caixa de dilogo:

Color: Definimos as caractersticas da janela para escolha de cores.

95

Lionardo@base.com.br

Color: Especifica a cor selecionada no dilogo. Essa propriedade serve no s para capturar a cor escolhida como para levar para a janela Color a cor em uso.

Font: Janela para definio de fontes de letra.

96

Selecionando Itens

FontName: Nome da fonte corrente, usado no momento em que a janela de escolha de fonte foi chamada. Tambm informa qual o nome da nova fonte escolhida. FontSize: Determina o tamanho da fonte corrente e o novo tamanho escolhido. Min e Max: Tamanho mnimo e mximo que um usurio pode escolher para uma determinada fonte de letra. Flags: Determina algumas opes para a caixa de dlogo. Coloque 1. Style: Determina como ser o tipo da fonte de letra.

Print: Janela de configurao de impressora e impressora.


Obrigatoriamente temos que usar quando enviamos algum relatrio para ser impresso. 97

Lionardo@base.com.br

Copies: Determina a quantidade de cpias padro para serem impressas. FromPage: Pgina inicial a ser impressa. ToPage: Pgina final a ser impressa. Min: Limite mnimo de um intervalo de impresso Max: Limite mximo de intervalo de impresso. PrinterDefault: Determina se o usurio poder alterar a impressora padro do Windows.

Mtodos Aplicveis ao Controle: Podemos usar mtodos para exibir as caixas de dilogo. NomeDoObjeto.ShowColor Exibe janela para escolha de cores. NomeDoObjeto.ShowFont Exibe janela para escolha de fonte de letra. 98

Selecionando Itens NomeDoObjeto.ShowOpen arquivo. NomeDoObjeto.ShowSave arquivo. NomeDoObjeto.ShowPrinter impresso. Exibe janela com opes de Exibe janela com opes para salvar Exibe janela com opes de abrir

Crie um formulrio da seguinte forma:

Nomeie os objetos: Tipo de Objeto Label Command1 Command2 CommonDialog

Name LblTeste CmdCorLetra cmdFonte Dialogo

Crie a seguinte codificao para os botes:

99

Lionardo@base.com.br

Com isto o usurio poder escolher a cor da letra que para o label assim como mudar a fonte de letra e o tamanho. Repare que usamos o "Flags = &H1" para forar o Visual Basic a ler somente as fontes de tela. Consulte o Help para ver os outros Flags possveis.

100

Selecionando Itens

6 MENUS

Criando Menus Menus Instantneos

101

Lionardo@base.com.br

ANOTAES PARA NO ESQUECER

102

Selecionando Itens

6.1 MENUS

A maioria das aplicaes possuem menus para facilitar o usurio na localizao de todas as janelas que compem um programa. Para criar menus, usamos o menu TOOLS opo Menu Editor. Sempre que criarmos menu temos que seguir algumas regras como colocar acesso Mnemnico em todos os itens e seguir um padro, como, pr exemplo, o menu Arquivo colocar o sublinhado na letra A, colocar ... quando este menu abre uma janela de dilogo, estabelecer uma Tecla de Atalho para as principais opes do menu e colocar um trao de separao para separar sees dentro de um mesmo menu, como pr exemplo, no menu ao lado, usou este recurso para separar algumas opes.

6.1.1 Criando Menus

Veja as principais propriedades do objeto menu: 103

Lionardo@base.com.br

Caption : Nesta propriedade definimos o titulo do item que ir aparecer no menu. Nesta propriedade prefixamos um letra com o smbolo & para que o Visual Basic destaque a letra com sublinhado. Se for um item da barra de menus, ao teclarmos ALT e a letra destacada, o menu desse item ser aberto automaticamente. Se for um item de uma menu j aberto, basta acionarmos somente a letra destacada para executarmos a funo vinculada ao mesmo. Name : Usamos esta propriedade para definirmos o identificador para o item. Nomeamos cada item de um menu para podemos manipul-los atravs de codificaa. Para menus usamos abreviao mnu Index : Permite criar uma matriz para identificar os itens do menu. Para que a matriz seja estabelecida o name deve ser igual para os que vo compor a matriz. ShortCut : Determinamos uma combinao de tecla para que o menu seja acessado de forma mais rpida. Quando definimos tecla de atalho para um item do menu, a rotina anexada chamada independente do local onde o foco esteja. WindowList : Quando esta propriedade esta habilitada, numa aplicao com vrias janelas, o Visual Basic cria uma lista das ultimas janelas que foram acessadas. Checked : Sempre que o usurio clica no item que possui esta propriedade habitada para True o Visual Basic coloca um sinal de marcado ao lado do nome. Se clicar novamente esta marca retirada. Usamos esta propriedade quando queremos mostrar para o usurio o estado Ligado ou Desligado de algum item do menu. Enabled: Habilita ou no um item do menu. Quando esta desabilitada o Visual Basic coloca o texto do Caption acinzentado. Visible : Quando necessitamos que um determinado item do menu exista mas que fique invisvel para o usurio at que determinada condio seja estabelecida, usamos esta propriedade. Usamos os botes de setas para Baixo de para Cima para movermos um item de lugar depois de criado. O boto seta para Direita transforma o item selecionado em submenu item imediatamente acima. O boto seta para esquerda volta o item um nvel. O boto Next o default, ou seja, ele acionado sempre que digitamos ENTER. Ele passa para o prximo item de menu a ser digitado ou na seqncia. Insert usado para inserir um item de menu entre outros j criados e Delete apaga o item selecionado.

104

Selecionando Itens Num projeto novo vamos criar um menu para um programa de controle de estoque. Vamos primeiramente definir as opes mestre que vo ficar no topo do menu.

Para criarmos estes itens basta abrirmos a janela de criao de menu e fazer os lanamentos conforme estabelecido abaixo:

Pronto. Execute o programa e veja o menu j criado automaticamente. Mas logicamente precisamos agora criar subitens em cada uma dessas opes. Selecione &Lanamento e aperte a tecla Insert e depois o boto seta para a direita. Fazendo estaremos criando subitens para o item Cadastro. Vamos criar as opes Mercadoria e Fornecedor. Note que quando apertamos ENTER para o prximo ele no insere um novo item. Temos que repetir a operao Insert e Seta para Direita.

105

Lionardo@base.com.br

Agora repita o processo para criar subitens para Lanamento de nomes Entrada e outro Sada e coloque uma tecla de atalho para cada um conforme modelo:

106

Selecionando Itens

Criar um menu simples, e o nico evento que existe para os menus o Click que exatamente igual ao evento Click usado para CommandButton. Se em tempo de projeto dermos um click num item de menu o Visual Basic abre a janela de codificao para digitarmos alguma rotina de programao para o menu. Afinal, um menu no somente enfeite. Cada item seu teve efetuar um determinado evento. Vamos criar um evento Click para as opo Entrada Saida bastante simples: e

107

Lionardo@base.com.br

Execute o programa e veja que clicando nas opes com o mouse ou apertando as teclas de atalho correspondentes o MsgBox acionado. Vamos agora voltar ao Editor de Menu e na opo Cadastro inclua no final o item Sair. Vamos colocar um item Separador para esteticamente ficar mais apresentvel. Este item colocando inserindo o caractere - no caption.

108

Selecionando Itens

Crie um evento para o item Sair:

O Comando END encerra a aplicao.

6.1.2 Menus Instantneos


O Windows 95 usa com muita freqncia este tipo de menu. So menus que se abrem sempre que um apertamos o boto direito do mouse sobre algum objeto. Para esses menus surgirem na tela usamos o comando PopupMenu no evento MouseUp de qualquer objeto. Veja como usar essas rotinas. PopupMenu : Neste comando especificamos o nome dado ao Menu que contm submenus e que ir aparecer ao acionarmos este comando. Exemplo: PopUpMenu mnuLanamento Ir aparecer os subitens do menu Lanamento, ou seja, Entrada e Saida. MouseUp (Button as Integer, Shift As Integer, X as Single, Y as Single): Sempre que o usurio aperta um boto do mouse este evento chamado. Usamos os argumentos que o evento oferece para sabermos qual dos botes foram apertados, se foi em conjunto com alguma tecla e qual coordenada estava o ponteiro do mouse no momento que o evento foi chamado. Button : retorna um nmero inteiro que informa qual dos botes foram apertados: 1 Boto esquerdo pressionado. vbLeftButton 2 Boto direito pressionado. vbRightButton 4 Boto do centro pressionado. vbMiddleButton 109

Lionardo@base.com.br

Shift : retorna um nmero inteiro que informa qual tecla estava pressionada no momento em que algum boto do mouse tambm foi pressionado. 1 SHIFT pressionado. vbShiftMask 2 CTRL pressionado. vbCtrlMask 4 ALT pressionado vbAltMask X : Coordenada para linha Y : Coordenada para Coluna

Na aplicao anterior coloque no formulrio um CommandButton e crie um evento MouseUp para ele com a seguinte codificao:

Como no especificamos as coordenadas, como padro o Visual Basic estabelece a posio atual do mouse. Note que pedimos para o menu mnuCadastro ser carregado sempre que apertamos o boto direito do mouse sobre o objeto Command1. Se chamarmos este evento sobre o formulrio ou qualquer outro objeto nada acontecer.

110

Selecionando Itens

7 VARIVEIS E MATRIZES

Numrica Texto Data Byte Boolean Object Variant Matrizes

111

Lionardo@base.com.br

112

Variveis e Matrizes

7.1 AS CARACTERSTICAS DE UMA VARIVEL


As variveis possuem uma importncia fundamental dentro de qualquer linguagem de programao. Elas armazenam os dados que vo para a memria do computador, e sempre que referenciamos a elas, esses dados retornam da memria. E quando esto na memria podem fazer clculos e executar determinadas funes. Para uma varivel receber um contedo qualquer necessrio anexar esse contedo ao nome que daremos para a varivel. Exemplo: Aluno = Joo Batista da Silva Note que usamos o sinal de igual para que o nome do aluno fosse inserido na varivel Aluno, que estar agora na memria do computador, e sempre que nos referenciarmos a Aluno ser como se tivssemos referenciado ao Joo Batista da Silva. Para darmos nomes a uma varivel necessrio seguir algumas regras bsicas: 1. Sempre iniciar com letras (A at Z). No use nmeros ou smbolos para iniciar o nome de uma varivel. 2. Pode-se usar at 255 caracteres para compor o nome da varivel, ento batize-as com nomes bastante claros, para que, apenas lendo seu nome, saibamos do que se trata e para que serve. Exemplo: NomeDependenteFuncionrio. Parece grande demais, mas s de l-lo j saberemos que se trata de uma varivel que ir armazenar o nome do dependente de um funcionrio. 3. Na composio do nome no podemos usar espao em branco, sinal de hfen, smbolos como @#*&^$% ou sinais de pontuao. Pode-se usar somente Letras do alfabeto, nmeros e o sublinhado. 4. Cuidado para no usar nomes reservados pela linguagem. Exemplo: If, Caption, Name, Sub, End, etc.

7.1.1 O Comando Dim


Sintaxe: Dim NomeDaVarivel As TipoDeVarivel NomeDaVarivel: Representa um nome vlido como descrito acima que usamos sempre que precisarmos nos referenciar ao seu contedo. As TipoDeVarivel: Cada varivel tem um tipo predefinido, e na criao dela, usando o comando DIM, aconselha-se a j definir para o programa que tipo de dados essa varivel ir guardar. Exemplo: Nmeros, Dados, Textos, etc. 113

Lionardo@base.com.br

O comando DIM usado para declararmos para o programa a existncia de uma varivel e o tipo que ela . Este comando obrigatrio e podemos declarar as variveis no momento em que estamos necessitando delas, j em uso. Exemplo: Function CalculaFormula() x = 10 y = 13 CalculaFormula = x*y+30 End Function Este exemplo bem simples somente para mostrar que usamos duas varivels chamadas x e y e no as declaramos. Precisamos delas e usamos. Caso fosse usar o comando Dim, esta mesma funo ficaria assim: Function CalculaFormula() Dim x As Integer Dim y As Integer x = 10 y = 13 CalculaFormula = x*y+30 End Function A expresso Integer significa tipo de varivel numrica que poder aceitar somente nmeros inteiros. Veremos melhor esses tipos adiante. Este mtodo extremamente til, pois imagine um programa onde existe uma imensa quantidade de variveis. Se todas foram previamente declaradas saberemos de antemo os nomes dela e para que servem. Podemos forar o Visual Basic a aceitar em nosso programa somente variveis que foram declaradas. Para tanto temos que acessar o TOOLS no menu principal, opo OPTIONS:

114

Variveis e Matrizes No menu options, janela Environment, habilite a opo Require Variable Declaration (Requer Varivel Declarada). Assim sempre que usar uma varivel que no foi declarada pelo comando Dim e no tem seu tipo definido o Visual Basic apresentar uma janela de alerta. Faa isto agora! Usando isto, o Visual Basic ir exigir a declarao das variveis, e no corremos o risco de, quando digitarmos o nome de alguma varivel errada, ele aceitar. Exemplo: Criamos uma varivel de nome: ClienteCadastrado. E em algum canto de nossa codificao digitamos: ClienteCadastado. Faltou a letra r. Se a opo Require Variable Declaration estiver habilitada o Visual Basic nos avisar que este nome no existe como varivel. Caso contrrio, o Visual Basic ir imagin-la como uma nova varivel e aceitar o erro. No corra risco!

7.1.2 Os Tipos de Varivel


Nome
Integer Long Byte Single Double

Descrio
Numrico Inteiro Numrico Inteiro Numrico Inteiro Numrico real Numrico real

Abrangncia
-32.768 a 32.767 -2.147.483.648 a 2.147.483.648 0 a 255 -3,402823E38 a -1,401298E-45 1,401298E-45 a 3,402823E38 -1,79769313486232E308 a 4,94065645841247E324 4,94065645841247E-324 a 1,79769313486232E308 -922.337.203.685.477,5808 a 922.337.203.685.477,5807 2.147.483.648 de caracteres nos sistemas 32 bits 65.536 de caracteres nos sistemas 16 bits entre 01/01/100 a 31/12/9999 True (verdadeiro) False (falso)

Currency String

Numrico Valores monetrios Texto

Date Boolean

Data e Hora

115

Lionardo@base.com.br

Object Variant

Contm um objeto Pode ser numrico, string, objeto ou valor nulo.

7.1.3 As Variveis Nmericas


As variveis Integer, Long, Byte, Single, Double e Currency armazm em eu contedo somente nmeros. A diferena entre elas esto na abrangncia de cada uma e se aceitam ou no casas decimais. A varivel Currency mais especifica para tratar valores monetrios, e ela j converte os valores no formato estabelecido no Painel de Controle (Configuraes Regionais) para moeda. Sempre bom verificarmos o tipo de nmero que ir conter a varivel numrica que estamos criando. Se for conter somente nmeros inteiros, e no mximo 10.000 registros, ento a Integer esta de bom tamanho. Se vamos criar um contador que ir contar at 100, ento a varivel mais cabvel a byte. A escolha correta da varivel numrica importante no consumo de recursos de processador de seu computador. Se voc escolhe o tipo Double essa varivel ir consumir os recursos de sua mquina para que possa trabalhar com nmeros dos tipo 4,94065645841247E-324. Mas se voc vai
somente armazenar na varivel nmeros na casa do milhar, ento a mquina estar absorvendo do processador mais recursos do que vai usar. Acostume a definir uma determinada varivel como numrica somente quando esta varivel ser objeto de clculos.

7.1.4 Varivel String


Esta varivel armazena textos. Esses textos podem ser caracteres alfanumricos, smbolos, etc. Sempre que formos nos referenciar a expresso que est contida na varivel string temos que colocar (aspas). Exemplo: NomeEscola=Modelo Informtica. Neste tipo de varivel podemos fazer comparaes, concatenao de duas variveis string, ou at extrair uma parte do contedo. O que concatenao? a juno de duas variveis ou expresses texto. Exemplo: 12 + 13 resultar em 1213. Editora + Terra resultar em Editora Terra. Entretanto, apesar de podermos usar o operador + para fazer concatenao, vamos usar em seu lugar sempre o operador &. Esse operador, em detrimento ao outro, fora a concatenao mesmo quando os dados so incompatveis. Exemplo: 12 + 13 resultar em 25. Observe que uma expresso era String e a outra numrica, e o operador + forou a soma. 116

Variveis e Matrizes Se usssemos neste exemplo 12 & 13 resultaria em 1213 apesar da expresso 13 ser numrica. Quando criamos uma varivel do tipo String podemos delimitar previamente o tamanho que ela ter. Veja a sintaxe: Dim NomeEscola as String * 30 Criamos uma varivel de nome NomeEscola do tipo String (texto) e que ter no mximo 30 caracteres. Se colocarmos mais que isto em seu contedo o excedente ser ignorado. Se colocarmos menos que isto ser preenchido com espaos em branco.

7.1.5 Varivel Boolean


Este tipo de varivel contm somente dois valores: True ou False. Indicado como resultado de comparaes. Exemplo: Dim Comparao As Boolean Dim NomeEscola As String NomeEscola = Modelo Informtica Comparao = (NomeEscola = Informtica) A varivel Comparao resultar em False. As propriedades dos objetos que temos que informar True ou False (como por exemplo Enabled) so do tipo Boolean.

7.1.6 Varivel Date


Como o prprio nome diz, so variveis que armazenam Datas. Entretanto podemos tambm armazenar horas. Para sinalizar para o programa que vamos armazenar uma data numa determinada varivel usamos o #. Exemplo: Hoje=#15/07/96#. Veja o que acontece se usarmos de forma diferente: Hoje = 15/07/96 O programa ir imaginar que estamos na verdade dividindo 15 por 7 e depois dividindo por 96. Hoje = 15/07/96 O programa ir ter seu contedo como uma string (texto) no formato de uma data. Uma varivel data aceita alguns tipos de clculo como por exemplo: a = #15/07/96# b = #30/07/96# b - a = 15 (Uma data menos outra retorna o intervalo em dias) a + 3 = #18/07/96# ( uma data mais um valor numrico soma a quantidade de dias na data) 117

Lionardo@base.com.br

a - 3 = #12/07/96# ( uma data menos um valor numrico subtrai a quantidade de dias na data.

7.1.7 Varivel Object


O Visual Basic trabalha com objetos. Nossa caixa de ferramentas est cheia deles. Mas temos tambm objetos Database, Fonts, etc. Se precisarmos inserir esses objetos em uma varivel usamos um comando chamado Set, e no o sinal de igual. Exemplo: Dim BancoDeDados As Object Set BancoDeDados = OpenDatabase(C:\Visual Basic\BIBLIO.MDB)

7.1.8 Varivel Variant


Este tipo de varivel no possui um tipo definido. Ele se transforma em qualquer tipo dependendo de seu contedo. Usamos uma Variant quando no sabemos que tipo de dados ter a varivel ou se j sabemos de antemo que o contedo vai necessitar passar por transformaes nos tipos de dados armazenados.

7.1.9 Null
Quando o contedo da varivel um dado invlido ela retorna a palavra-chave Null.

7.2 ABRANGNCIA E TEMPO DE VIDA DE UMA VARIVEL


Variveis criadas dentro de uma rotina valem somente para a rotina que a criou. Por exemplo, quando criamos um evento para um boto de comando, estamos criando uma rotina (procedure) chamada Private Sub: Private Sub Command1_Click() Dim Nome as String NomeTeste = Fechar Command1.Caption = NomeTeste End Sub A varivel NomeTeste que criamos dentro do Private Sub possui validade somente dentro desta rotina de cdigo. Chamamos de varivel Local. Quando encerrar (comando End Sub) a varivel ser retirada da memria do computador e no mais existir. Outro Exemplo: Private Sub Command1_Click() Dim NomeTeste as String 118

Variveis e Matrizes NomeTeste = Fechar End Sub Private Sub Command2_Click() Command2.Caption = NomeTeste End Sub Repare, a varivel NomeTeste foi criada dentro da rotina Private Sub Command1 e na outra rotina Private Sub Command2 fazemos referencia a ela. Como ela foi criada dentro da Private Sub Command1 ela tem validade somente l. Este exemplo nosso retornar um erro, pois NomeTeste no existe para Private Sub Command2. Entretanto, se queremos que uma varivel tenha uma abrangncia em todas as rotinas criadas dentro do formulrio, ento na janela de cdigo do formulrio na parte superior mude o Object para General e o Proc para declarations). As variveis que forem criadas ali valer para todas as rotinas criadas para o formulrio e seus objetos anexados a ele.

Exemplo: Option Explicit Dim teste As String Private Sub Command1_Click() teste = "Testando a Variavel" Print teste End Sub Veja que a varivel teste foi criada fora da rotina Private Sub, mas possui abrangncia dentro dela. Se criarmos um outro formulrio e pedirmos para imprimir a varivel teste ir ocasionar um erro, pois a validade desta varivel somente dentro do formulrio em que ela foi criada. Caso precisamos de uma varivel de carter publico, que tenha validade Global, em todos os formulrios e rotinas de nossa aplicao, ser necessrio inserir um mdulo (Menu Insert opo Module) e dentro dele criar a varivel com o comando PUBLIC no lugar de DIM. Veja exemplo: Public Teste as String 119

Lionardo@base.com.br

Menu Project Janela de codificao do mdulo criado

Resumindo: Veja ento as formas de se declarar uma varivel: Varivel pblica todo o programa: podemos declarar uma varivel pblica, especificando-a com o comando Public na seo Declarations de qualquer mdulo. Varivel pblica ao mdulo: atravs do comando de declarao Dim na seo Declarations do mdulo desejado, especificamos que uma varivel ser pblica apenas ao mdulo onde fora declarada. varivel local rotina (Sub ou Function): declarando uma varivel com o comando Dim dentro de qualquer procedimento Sub ou Function a mesma ser reconhecida apenas pelo procedimento.

Crie um novo projeto e coloque nele um boto de comando e dois Labels. No esquea de habilitar no Menu Tools/Options a opo Require Variable Declaration. Codifique o boto da seguinte forma: Segundo Label. Deixar Caption Vazio e Ligar o AutoSize. Nome: lblTreino

Vamos agora codificar o boto. D dois clickes nele e digite os seguinte comandos:
120

Variveis e Matrizes

Foi criado uma varivel de nome Teste, e seu contedo Modelo Informtica. Assim, sempre que fizermos referencia a Teste ir aparecer o valor contido nela.

Execute o programa e aperte o boto. Onde estava o Label lblTreino ir aparecer o contedo da varivel. Como criamos a varivel dentro da rotina Private Sub cmdTesteVariavel_Click ela ter validade somente ali dentro. Para comprovar isto, crie outro boto:

Crie a seguinte codificao para este boto:

Nesta codificao do segundo boto apenas mandamos inserir o contedo da varivel Teste para o Label

Rode o programa e aperte o segundo boto. Ir aparecer uma mensagem de erro alertando que a varivel Teste no existe: 121

Lionardo@base.com.br

Agora apague a linha Dim Teste as String. V at o Object (Caixa de Combinao na parte superior), chame a opo General, e digite: Colocando o comando Dim no object General as todas variveis criadas ali tem abrangncia em toda a janela de codificao do formulrio (todas as rotinas existentes).

Rode o programa e aperte o segundo boto cmdSegundoTeste e veja o que acontece: A mensagem de erro que aparecia antes no aparece mais, pois agora a varivel abrange esta rotina tambm. Mas no existe nenhum contedo para a varivel Teste at o momento em que o boto cmdTesteVarivel seja pressionado. A varivel Teste ter um contedo somente quando o boto cmdTesteVarivel for pressionado. At ento, a varivel existe mas seu contedo vazio. 122

Variveis e Matrizes Para entender melhor, cmdSegundoTeste para: mude a codificao do boto

123

Lionardo@base.com.br

7.3 MATRIZES
Nas matrizes podemos armazenar vrios dados (seja texto, nmeros ou datas) em uma nica varivel. O que diferencia essencialmente uma matriz de uma varivel que a primeira possui nveis dentro de si, e em cada nvel podemos armazenar dados. Veja o exemplo de uma declarao e inicializao de uma matriz: Dim NomeCliente(3) as String NomeCliente(0) = Fernando Henrique NomeCliente(1) = Fernando Collor NomeCliente(2) = Jos Sarney Criamos um matriz de nome NomeCliente e definimos como sendo uma String. Entretanto, definimos tambm que essa matriz ter 3 nveis somente. Em cada nvel podemos colocar um elemento (um contedo) dentro dele. Todos os elementos da matriz precisam ser do mesmo tipo estabelecido no comando Dim. Porm, se declararmos um matriz do tipo Variant, cada elemento poder ser de um tipo de dado diferente. Para acessarmos um determinado contedo temos que especificar o nmero que acompanha o nome da matriz. Chamamos esses nmeros de ndice, e so estes ndices que localiza os elementos dentro da matriz. Exemplo: Se desejamos imprimir a matriz que contm o nome Jos Sarney temos que digitar: Print NomeCliente(2) Se digitar somente NomeCliente o Visual Basic no ir retornar um erro em tempo de execuo:

Este erro acontece porque uma vez definido NomeCliente como matriz, ela poder somente ser chamada como uma matriz (com seu ndice). A abrangncia e tempo de vida de uma matriz segue as mesmas regras estabelecida para as variveis. As regras de nomeao de uma matriz tambm so as mesmas aplicadas as variveis. 124

Variveis e Matrizes

7.3.1 Matrizes Unidimensional


Quando vamos criar uma matriz colocamos logo no incio a quantidade de elementos que ela poder conter. Essa quantidade colocamos entre parnteses e assim criado na memria do computador espaos reservados a todos os elementos que iremos usar. Veja o exemplo abaixo, onde temos uma matriz de nmeros inteiros contendo 10 elementos: Dim Contador(10) as Integer O primeiro elemento ser referenciado com o ndice 0, ou seja, Contador(0); o segundo elemento como Contador(1), e assim por diante. O ndice do ltimo elemento ser sempre um a menos que a quantidade especificada entre os parnteses na declarao. Isto acontece porque como padro o Visual Basic inicia sua contagem para ndices em 0. No exemplo, o ndice varia de 0 a 9. Mas isto no quer dizer que no podemos mudar esse padro. Para isto usamos o comando Option Base, adicionado seo Declarations. Option Base 0 faz com que o ndice das matrizes inicie em 0, por outro lado, como Option Base 1, o valor inicial para para 1.

Se quiser personalizar as matrizes para algumas comearem a partir de um determinado numero de outras a partir de outro, podemos especificar na criao o menor e o maior ndice que a matriz ter: Dim Contador (1 to 10) as Integer Dim NomeCliente( 5 to 10) as String O primeiro exemplo ter um ndice de 1 a 10 e no outro um ndice de 5 a 10. Qualquer nmero informado fora desse intervalo retornar um erro.

7.3.2 Matrizes Multidimensional


Imagine matriz multidimensional como sendo uma matriz dentro de outra. Por Exemplo:

125

Lionardo@base.com.br

Option Base 1 Dim Contador(3,2) as String. Significa que temos um matriz de nome Contador, possui 3 elementos e cada elemento possui 2 elementos. Ou seja, no total, essa matriz ter 6 elementos. Veja como ficaria: Contador(1,1) = Janeiro Contador(2,1) = Fevereiro Contador(3,1) = Maro Contador(1,2) = Venda Ruim Contador(2,2) = Venda Regular Contador(3,2) = Venda Boa Veja como ficaria a representao grfica dessa matriz Coluna 1 Linha 1 Linha 2 Linha 3 Janeiro Fevereiro Maro (1,1) (2,1) (3,1) Coluna 2 Venda Ruim Venda Regular Venda Boa (1,2) (2,2) (3,2)

Perceba que esses tipos de matriz so multidimensional porque criam subdivises dentro de cada elemento. Poderamos ter matrizes do tipo: Dim Contador(3,5,8) as Integer Esse monstro que criamos significa essa matriz possui 3 elementos. Cada Elemento se subdivide em outros 5 elementos. Cada elemento desses cinco elementos se subdividem em outros 8 elementos, formando no total 120 elementos (3X5X8). Confesso que a primeira impresso horrvel. Mas a possibilidade existe e o bicho no to feio. Podemos usar matrizes multidimensional como uma planilha eletrnica de clculo.

7.3.3 Matrizes Dinmicas


As vezes necessitamos de criar uma matriz mas no sabemos de antemo quantos elementos ela ter, assim, no poderamos especificar no comando Dim o valor mximo do ndice. Para isto, o Visual Basic criou as Matrizes Dinmicas. Elas no possuem tamanho fixo. Podemos variar seu tamanho de acordo com nossa necessidade na execuo do programa. A criao de uma matriz assim usa a seguinte sintaxe: Dim NomeCliente() as String Veja que entre parnteses deixamos vazio para durante o programa preenchermos. 126

Variveis e Matrizes Usamos o comando ReDim para fazer esse Redimensionamento da matriz. Exemplo: Se precisarmos incluir mais 1 elemento na matriz NomeCliente usariamos o comando: ReDim NomeCliente(1) NomeCliente(1) = Joo Figueiredo Se depois precisarmos colocar mais 2 elementos usariamos: ReDim NomeCliente(3) NomeCliente(1) = Joo Figueiredo NomeCliente(2) = Jos Sarney NomeCliente(3) = Fernando Collor Neste exemplo quando redimensionamos pela segunda vez tivemos que colocar um contedo novamente para o NomeCliente(1) pois o comando ReDim sempre apaga os dados armazenados anteriormente. Quando no queremos que isto acontea usamos a clusula Preserve Juntamento com o ReDim. Assim os contedos anteriores so preservados. Veja: ReDim NomeCliente(1) NomeCliente(1) = Joo Figueiredo Se depois precisarmos colocar mais 2 elementos usaramos: ReDim Preserve NomeCliente(3) NomeCliente(2) = Jos Sarney NomeCliente(3) = Fernando Collor

127

Lionardo@base.com.br

7.3.4 Matrizes no ComboBox e no ListBox


Insira no formulrio um ListBox e nomeie-o para lstPresidentes. Coloque tambm um boto de comando. Veja ao lado como ficar a codificao.

Objetos como o ComboBox e o ListBox usam matrizes para fazer referencia ao seu contedo atravs da propriedade List. Veja este exemplo:

Note que na propriedade List existe um ndice que usamos para referenciar aos dados contido no Objeto ListBox. Este ndice sempre inicia com 0 e vai at o ultimo existente dentro da Caixa de Lista. A propriedade NewIndex do objeto retorna o ndice do ultimo item que entrou no ListBox, e a propriedade ListCount retorna a quantidade de itens existentes. No nosso exemplo, o NewIndex seria igual a 3 e o ListCount igual a 4. LstPresidentes.List(3) retorna a expresso Fernando Henrique. Print lstPresidentes.List(lstPresidentes.NewIndex) retorna a expresso Fernando Henrique tambm.

7.3.5 A Propriedade Index dos Objetos


Todos objetos que so inseridos no formulrio, e possuem o mesmo nome, o Visual Basic automaticamente os converte para matriz, e na propriedade Index inserido o nmero correspondente ao seu ndice. Isto acontece porque no podemos ter dois ou mais objetos com o mesmo nome (propriedade Name) em nosso projeto.

128

Variveis e Matrizes Por exemplo, vamos colocar dois Labels no formulrio e mudar sua propriedade Name para lblTestaMatriz. No primeiro o Visual Basic aceitar o nome sem problemas, no segundo Label quando tentarmos colocar o mesmo nome j usado anteriormente por outro Label, o Visual Basic avisar que o nome j existe e pergunta se no queremos usar uma matriz:

Se optarmos pelo sim ele criar uma matriz e renomear o objeto para lblTestaMatriz(0) e lblTestaMatriz(1). A propriedade index de cada um possuir os nmeros 0 e 1 respectivamente.

Usando uma matriz o nosso objeto agora ter que ser referenciada com o seu ndice para podermos saber qual objeto estamos querendo usar: Se formos fazer alguma codificao para este objeto, teramos que sempre colocar o ndice correspondente ao objeto que estamos trabalhando.

Note que o evento click que criamos para o Label possui um argumento Index As Integer. A varivel index ter em seu contedo o nmero do ndice correspondente ao Objeto clicado. Ou seja, se chamarmos o evento 129

Lionardo@base.com.br

click atravs do Label1 o nmero do ndice ser 0. Se usarmos o Label2 o ndice ser 1.

Crie um novo formulrio e nele coloque CheckBox com as seguintes propriedades: Propriedades Name Caption Check1 chkNome Figueiredo Check2 chkNome Jos Sarney Check3 chkNome Collor

Objetos Check4 chkNome FHC

Coloque tambm no formulrio um Label. Deixe o Caption vazio, o Autosize em True e nomeio lblTeste.

Crie uma codificao para o objeto CheckBox da seguinte forma:

Para conseguirmos o mesmo efeito sem usar matriz teramos que criar um evento click para cada opo do CheckBox.

130

Variveis e Matrizes

EXERCCIOS PROPOSTOS
1 - Cite trs regra que temos que respeitar na criao de uma varivel:

2 - Explique o comando DIM:

3 - Quais os tipos de variveis existente?

4 - O que voc entendeu de varivel LOCAL?

5 - A seo declarations da janela de codificao tem qual finalidade?

6 - O que voc entendeu de Matriz?

7 - Qual a diferena de Matriz Unidimensional e Multidimensional? 131

Lionardo@base.com.br

8 - O que uma matriz Dinmica?

9 - Qual a diferena da propriedade NewIndex e ListCount?

10 - Explique a propriedade Index dos objetos.

132

8 OPERADORES

Matemtico Relacional Lgico String

Lionardo@base.com.br

8.1 OPERADORES
A finalidade bsica dos operadores so para comparar, calcular, igualar, concatenar... enfim, fazer operaes envolvendo variveis ou campos de Banco de Dados.

8.1.1 Operadores Matemticos


Estes tipos de operadores possuem a finalidade de efetuar clculos e j so bastante conhecidos, principalmente para quem usa calculadora. Operador Descrio Exemplo + Soma Var = 18+5 Subtrao Var = 18-5 * Multiplicao Var = 18*5 / Diviso Var = 18/5 \ Diviso. Resultado ser um nmero inteiro Var = 18\5 ^ Exponenciao Var = 18^5 Mod Resto da Diviso Var = 18 Mod 5 Esses operadores respeitam uma ordem de precedncia universal: 1. Exponenciao 2. Multiplicao e Diviso 3. Adio e Subtrao Caso precisamos de efetuar um calculo: 3+4*2^2/4-1+5 resultar em 11. Se por algum motivo precisarmos que o programa efetue a soma primeiro, ento devemos coloca-la entre parnteses: (3+4)*2^2/4-(1+5) = 1. Usamos os parnteses para mudar a ordem de precedncia dos operadores. Os operadores atuam no somente em nmeros, mas tambm nas variveis cujo contedo seja valores numricos. Exemplo:.

134

Operadores

8.1.2 Operadores Relacionais


Estes operadores fazem comparaes entre variveis ou expresses. O retorno desta comparao ser sempre True (Verdadeiro) ou False (Falso). Nos exemplos abaixo todas as comparaes sero verdadeiras. Operador > < <= >= = <> Descrio Menor Maior Menor ou Igual Maior ou Igual Igual Diferente Exemplo 3<5 5>3 3 <= 5 5 >= 3 5=5 3 <> 5

8.1.3 Operadores Lgicos


Enquanto que os operadores matemticos retornam o resultado de um clculo, os operadores lgicos sempre retornam True quando a lgica exata, ou False quando a lgica no exata. And: Usamos quando precisamos comparar duas relaes e ambas tem que ser verdadeira. 20 > 10 and 5 = 5 O Resultado ser verdadeiro ( True ). 20 maior que 10 e 5 igual a 5. 20 > 10 and 5 = 4 O Resultado ser falso (False). 20 maior que 10 mas 5 no igual a 4. Somente 1 das duas expresses deram certo. Or: Usamos quando precisamos comparar dois relacionamentos e pelo menos um deve ser verdadeiro ( ou um ou outro ). 20 < 10 Or 5 > 4 O resultado ser verdadeiro. 20 no menor que 10, mas 5 maior que 4. 20 < 10 Or 4 > 5 O resultado ser falso. 20 no menor que 10 e nem 4 maior que 5. Not: um operador que inverte o resultado, passando algo que seria verdadeiro para falso e vice-versa. Not(10 > 5)

135

Lionardo@base.com.br

O resultado ser falso. 10 maior que 5. Seria Verdadeira a comparao, mas como possui o Not, e ele inverte o resultado, o retorno falso. Xor: Este operador exige preciso. No admite confuso na comparao dos relacionamentos. Ou uma coisa ou outra. Nunca as duas. 8 > 10 Xor 8 > 6 Retorna verdadeiro, pois o resultado das duas comparaes foram diferentes. A primeira falsa e a segunda verdadeira. 8 > 10 Xor 6 > 8 Retorna falso, pois o resultado das duas comparaes foram semelhantes. A primeira falsa e a segunda tambm. 10 > 8 Xor 8 > 6 Retorna falso, pois o resultado das duas comparaes foram semelhantes. A primeira verdadeira e a segunda tambm. Eqv: Abreviatura de Equivalente. Faz uma equivalncia lgica entre duas expresses. 10 > 8 Eqv 8 > 6 Retorna verdadeiro, pois ambas comparaes so iguais. 8 > 10 Eqv 8 > 6 Retorna falso, pois as comparaes retornam valores diferentes. Imp: Abreviatura de Implicao (uma coisa implica em outra). O resultado ser False somente se a primeira comparao for True e a segunda for False. Nos outros casos o resultado ser sempre True. Este operador o nico onde a ordem dos operandos fazem diferena. 10 > 8 Imp 6 > 8 Retorna Falso, pois a primeira comparao Verdadeira e a segunda falsa. 10 > 8 Imp 8 > 6 Retorna Verdadeiro. 8 > 10 Imp 6 > 8 Retorna Verdadeiro.

8.1.4 Operador de String


O mais simples de todos. o smbolo & que serve para juntar duas expresses ou variveis texto. Exemplo: Lionardo & Fonseca Paiva

136

Operadores Resulta em Lionardo Fonseca Paiva. O operador + tambm pode ser usado, mas no aconselhado, uma vez que o & possui uma abrangncia maior, convertendo expresses de outros formatos para o string para forar a concatenao.

Crie um formulrio conforme modelo abaixo.

Vamos criar um programa em que o usurio ir digitar um valor qualquer, ele valor ser multiplicado pelo numero informado e o resultado era apresentado no "Label4" juntamente com o nome do usurio. Nomeie as caixas txtMultiplicado e txtNome de texto para txtValor,

Vamos codificar o boto "cmdResultado": Isto far com que o programa calcule o valor informado e concatene este valor com o nome do usurio.

137

Lionardo@base.com.br

Importante o programador tentar cercar o mximo de erros possiveis que o usurio pode cometer, como por exemplo, se for digitado caracteres do alfabeto onde se espera numeros ou deixar um dos itens em branco, o programa ir dar a seguinte mensagem de erro:

Para se evitar isto o programa deve verificar se os dados digitados so vlidos para depois efetuar o clculo.

138

Operadores

EXERCCIOS PROPOSTOS
1 - Qual a diferena entre o operador / e o operador \ ?

2 - Quando que um operador retorna True ou False como resultado?

3 - Qual o resultado do operador Mod?

4 - Explique os operadores lgicos e exemplifque: And: Exemplo: Or: Exemplo: Xor: Exemplo: Not: Exemplo: 5 - D um exemplo de cada operador de comparao relacionado abaixo: > >= < <= <> =

139

9 COMANDOS CONDICIONAIS E DE LAO

Condicionais Lao

Comandos Condicionais e de Lao

141

Lionardo@base.com.br

9.1

COMANDOS CONDICIONAIS

Como o prprio nome j indica, estes comandos executam determinadas aes desde que algumas condies sejam favorveis (verdadeiras). IF <<Condio>> THEN... END IF Traduzindo: IF = Se, THEN = Ento, END IF = Fim do Comando Se. Quando colocamos uma estrutura condicional IF dentro do nosso programa estamos querendo que o computador avalie uma condio e conforme for o resultado siga determinado caminho. Veja um exemplo: Dim Contador as Integer Contador = 20 IF Contador < 20 Then Print Contador menor que 20 End If Print Fim do Programa O programa verifica: Se contador for menor que 20 ento imprima no formulrio Contador menor que 20. Quando terminar imprima Fim do Programa. Quando uma determinada condio que colocamos no comando IF verdadeira ele comea a executar todas as linhas que existem entre IF e END IF. Se a condio no for verdadeira ento o programa passa a execuo para a linha aps o END IF e ignora tudo que houver dentro da estrutura IF... END IF. Dim Contador as Integer Contador = 20 IF Contador > 20 Then Print Contador maior que 20 End If Print Fim do Programa Agora o programa ir verificar se Contador maior que 20. Ele no maior que 20. Esta condio falsa. Ento, sendo assim, ele no executar as linhas existentes dentro da estrutura IF...END IF, e s ir imprimir no formulrio a frase Fim do Programa. 142

Comandos Condicionais e de Lao

IF <<Condio>> THEN... ELSE... END IF Traduzindo: IF = Se, THEN = Ento, ELSE = Seno, END IF = Fim do Comando Se. Acrescentamos na estrutura o comando ELSE, que sempre executado quando a condio no verdadeira. Dim Contador as Integer Contador = 20 IF Contador < 20 Then Print Contador menor que 20 ELSE Print Contador maior ou igual a 20 End If Print Fim do Programa O programa verifica: Se o Contador for menor que 20 imprima a frase: Contador menor que 20, seno, imprima Contador maior ou igual a 20. Perceba que agora o programa ir executar um comando da estrutura, seja um ou outro, mas pelo menor um ser executado. Se a condio for verdadeira o comando executado sempre o que esta aps o comando IF, se for falsa ele ignora as instrues que existem aps o comando IF e passa a execuo para a linha aps o ELSE e vai at o final. Lembre-se: Sempre que usar o comando IF necessrio usar o comando THEN aps a condio, e depois encerrar a estrutura condicional IF com END IF. IF <<Condio>> THEN... ELSEIF... ENDIF Traduzindo: IF = Se, THEN = Ento, ELSEIF = Seno se, END IF = Fim do Comando Se. Modificamos comando ELSE para ELSE IF, que sempre executado quando a condio no verdadeira, mas ainda dependendo de uma outra condio. Dim Contador as Integer Contador = 20 IF Contador < 20 Then Print Contador menor que 20 143

Lionardo@base.com.br

ELSEIF Contador = 20 Print Contador igual a 20 ELSE Print Contador maior que 20 End If Print Fim do Programa O programa verifica se o contador menor que 20. Se no for verifica se ento igual a 20, seno ir imprimir que contador maior que 20. Veja outro exemplo:

SELECT CASE Significa Seleo de Casos. Ou seja, colocamos possibilidades (varios casos) para o Visual Basic e ele escolhe um. Veja a estrutura do comando: Opo = 3 Select Case Opo Case 1 Print Opo 1 acionada Case 2 144 vrias

Comandos Condicionais e de Lao Print Opo 2 acionada Case 3 Print Opo 3 acionada End Select Veja que este comando verifica se a Opo 1, depois verifica se 2 e depois se 3. Se a varivel Opo for 3 ele executar as instrues contidas na prxima linha. Caso a varivel Opo no seja 1,2 ou 3 ento o comando SELECT CASE encerrado. Opo = 3 Select Case Opo Case 1 Print Opo 1 acionada Case 2 Print Opo 2 acionada Case 3 Print Opo 3 acionada Case Else Print Opo no 1,2 ou 3 End Select Acrescentando na estrutura clusula CASE ELSE (caso contrrio), o Visual Basic ir verificar se a varivel 1,2 ou 3, no sendo ento ser CASE ELSE, e a linha seguinte a esta clusula ser executada. No comando Case podemos usar tambm intervalos, como por exemplo: Case 2 to 4 Ou seja, caso a condio esteja entre 2 e 4. Caso queira que na verificao da condio seja avaliado se a varivel maior ou menor que determinada expresso, usamos: Case Is > 50

145

Lionardo@base.com.br

Em um novo formulrio crie uma caixa de texto digitarmos uma data e um boto como esta abaixo:

para

Vamos codificar o boto para quando digitarmos uma data o programa verificar se igual a data de hoje ou no. Para obtermos da data de hoje do sistema temos que usar a funo Date.

O programa analizara a data digitada, e mostrar vdeo como a data em comparao com a data de hoje.

no

9.2
146

COMANDOS DE LAO

Comandos Condicionais e de Lao Estes comandos criam crculos viciosos, ou seja, criam um estrutura condicional que se repetem at a que condio seja satisfeita. DO WHILE <<Condio>> LOOP ( Faa enquanto ) Executa todos os comandos que existem entre DO WHILE e o LOOP. Quando a execuo do programa encontra o comando LOOP, o DO WHILE reavaliado e a rotina continua at que a condio estabelecida esteja satisfeita. Contador = 0 Do While Contador < 10 Contador = Contador + 1 Print Contador Loop Print Fim da execuo

Faa enquanto Contador for menor que 10.

Inicializamos uma varivel de nome Contador com Zero, e pedimos para o programa: Repita as instrues abaixo enquanto Contador for menor que 10. O comando LOOP faz com que o programa volte para a linha do DO WHILE e teste a condio de novo. Somente quando a condio for verdadeira, ou seja, quando Contador for maior ou igual a 10, que o programa executar a linha aps o LOOP. Perceba que dependendo do resultado da condio os comandos existentes dentro da estrutura podem no serem executados, passando direto para a linha aps o comando LOOP. DO ... LOOP WHILE <<Condio>> ( Repita enquanto ) Neste caso o Comando Do abre a seqncia de repetio, mas no faz nenhum teste de condio. Este teste feito no final da estrutura com o comando LOOP WHILE, ou seja, obrigatoriamente as instrues contidas aps o comando DO sero executadas. Contador = 0 Do Contador = Contador + 1 Print Contador Loop While contador < 10 Print Fim da execuo Retorne para repetir os comandos enquanto o Contador for menor que 10.

147

Lionardo@base.com.br

DO UNTIL <<Condio>> LOOP ( Faa at que) Executa todos os comandos que existem entre DO UNTIL e o LOOP. Quando a execuo do programa encontra o comando LOOP, o DO UNTIL reavaliado e a rotina continua at que a condio estabelecida esteja satisfeita. Contador = 0 Do Until contador >= 10 Contador = Contador + 1 Print Contador Loop Print Fim da execuo

Faa at que Contador seja maior ou igual a 10.

Inicializamos uma varivel de nome Contador com Zero, e pedimos para o programa: Repita as instrues abaixo at que Contador seja maior ou igual que 10. O comando LOOP faz com que o programa volte para a linha do DO UNTIL e teste a condio de novo. Somente quando a condio for verdadeira, ou seja, quando Contador for realmente maior ou igual a 10, que o programa executar a linha aps o LOOP. Semelhante ao DO WHILE, dependendo do resultado da condio os comandos existentes dentro da estrutura podem no serem executados, passando direto para a linha aps o comando LOOP. DO ... LOOP UNTIL <<Condio>> ( Repita at que ) O Comando DO abre a seqncia de repetio, mas no faz nenhum teste de condio. Este teste feito no final da estrutura com o comando LOOP UNTIL, ou seja, obrigatoriamente as instrues contidas aps o comando DO sero executadas. Contador = 0 Do Contador = Contador + 1 Print Contador Loop Until Contador >= 10 Print Fim da execuo

Retorne para repetir os comandos at que o Contador seja maior ou igual a 10.

FOR <<Intervalo>> ... NEXT (Conte de nmero inicial at numero final)

148

Comandos Condicionais e de Lao O comando FOR faz uma contagem de um determinado intervalo de nmeros. Sempre que essa contagem encontra com o comando NEXT (prximo) a execuo do programa retorna ao comando FOR at que o nmero final seja alcanado. Exemplo: Contador = 0 Conte de um at 10 For Contador = 1 to 10 Print A varivel Contador agora vale &Contador Next Print Fim da execuo Neste programa o Visual Basic inicializa a varivel Contador em zero, e o comando FOR avisa vamos contar at 10, comeando pelo 1. As instrues contidas na linha abaixo so executadas, e quando o comando NEXT encontrado a execuo volta para o FOR, e a varivel Contador incrementada em mais um e assim por diante. Quando Contador for igual a 10 a estrutura FOR/NEXT desfeita. STEP Usamos o STEP em conjunto com o FOR para fazer com que a contagem seja incrementada. Exemplo: Se queremos que o comando conte de 2 em 2 colocamos FOR Varivel = 1 TO 10 STEP 2 EXIT <<Comando>> Exit Sub: Fora a sada da Sub rotina. Quando a execuo do programa encontra este comando, o Visual Basic transfere o controle do programa para a linha seguinte a aquela que chamou a rotina. Exit Function: Fora a sada da funo. Quando a execuo do programa encontra este comando, o Visual Basic transfere o controle do programa para a linha seguinte a aquela que chamou a rotina. Exit Do: Fora a sada de um LOOP, seja WHILE ou UNTIL, mesmo que a condio estabelecida no seja verdadeira: Contador = 0 Do While Contador < 10 Contador = Contador + 1 Print Contador if Contador = 5 then Exit Do end if 149

Lionardo@base.com.br

Loop Print Fim da execuo Exit For: Fora a sada de um FOR..NEXT, mesmo que o nmero final no tenha sido alcanado. Contador = 0 For Contador = 1 to 10 Print A varivel Contador agora vale &Contador If Contador = 6 Exit For end if Next Print Fim da execuo expresses de outros formatos para o string para forar a concatenao.

150

Comandos Condicionais e de Lao

EXERCCIOS PROPOSTOS
1 - Cite duas diferenas entre um lao DO WHILE e um lao DO - LOOP WHILE?

2 - Qual intruo que verifica sua condio antes da execuo das rotinas que fazem parte do lao?

3 -Se necessitassemos executar um vrios comandos e funes repetidamente at que uma determinada condio fosse verdadeira, qual loop usuariamos?

4 -Explique quando usamos um loop DO UNTIL e quando usamos um DO LOOP UNTIL:

5 - De um exemplo de utilizao do loop FOR..NEXT

151

10 FUNES DE AUXILIO

Data e Hora Converso String Matemtica Entrada de Dados Identificao Manipulao de Matriz

Comandos Condicionais e de Lao

ANOTAES PARA NO ESQUECER

153

Lionardo@base.com.br

10.1 FUNES
Funes nada mais que rotinas prontas para executar determinadas aes. Existem no Visual Basic diversos tipos de funes que nos auxiliam na programao em todos os aspectos. So funes que fazem clculos, funes que exibem resultados, funes para todos os gostos. Vamos comear a ver algumas dessas funes e com isto descobriremos o poder que elas exercem dentro da linguagem e sua utilidade. Existem funes que precisam de um argumento para executar uma tarefa, outras somente retorna algum valor sem necessidade do argumento, como visto nos exemplos abaixo:

10.1.1

Funes matemticas

ABS: Retorna sempre um valor positivo (absoluto). VarivelNumrica = Abs(Expresso numrica) Print Abs(-45) Valor Impresso: 45 ATN: Retorna o arco-tangente de um nmero. VarivelNumrica = Atn(Expresso numrica) COS: Calcula o cosseno de um ngulo VarivelNumrica = Cos(<expressoNumrica>) FIX: Retorna a parte inteira de um nmero, ignorando as casas decimais, se houver. No faz arredondamento VarivelNumrica = Fix(<expressoNumrica>) Print Fix(145.87) Valor Impresso: 145 Print Fix(-145.87) Valor Impresso: -145 HEX: Retorna a representao hexadecimal de um nmero decimal. VarivelNumrica = Hex(<expressoNumrica>) INT: Retorna a parte inteira de um nmero, ignorando as casas decimais, se houver. No faz arredondamento. Se o argumento for um nmero negativo ser incrementado em um. VarivelNumrica = INT(<expressoNumrica>) 154

Comandos Condicionais e de Lao Print Int(145.87) Valor Impresso: 145 Print Int(-145.87) Valor Impresso: -146 LOG: Calcula o logaritmo natural de um nmero VarivelNumrica = LOG(<expressoNumrica>) RND: Retorna um nmero randmico, ou seja, escolhe um nmero aleatoriamente. VarivelNumrica = Rnd[(<expressoNumrica>)] SGN: Retorna -1 se o argumento for um nmero negativo, e 1 se for um nmero positivo. VarivelNumrica = Sgn(<expressoNumrica>) SIN: Calcula o seno de um ngulo. VarivelNumrica = Sin(<expressoNumrica>) SQR: Calcula a raiz quadrada de um nmero. VarivelNumrica = Sqr(<expressoNumrica>) TAN: Calcula a tangente de um ngulo. VarivelNumrica = Tan(<expressoNumrica>)

155

Lionardo@base.com.br

Crie um novo formulrio da seguinte forma:

Para todos os labels deixe o Caption vazio e habilite o AutoSize. Faa a seguinte codificao para o boto:

10.1.2

Funes de Converso

CBOOL: Converte uma expresso para um valor lgico (True ou false). Se o argumento for um zero, retornar False, caso contrrio ser True. VarivelLgica = CBool(<expresso>) Print Cbool(43) 156

Comandos Condicionais e de Lao Valor Impresso: True Print Cbool(0) Valor Impresso: False Print Cbool(4 = 6) Valor Impresso: False. O resultado da comparao no verdadeira. CBYTE: Converte uma expresso para um tipo Byte. VarivelByte = cbyte(<expresso>) Print Cbyte(155.56) Valor Impresso: 156 Print Cbyte(355.56) Erro. Overflow. Expresses do tipo byte no podem ser maior que 255. CCUR: Converte uma expresso numrica para um tipo-moeda. VarivelCurrency = Ccur(<expresso numrica>) Print Ccur(120) Valor Impresso: 120 CDATE: Converte uma expresso para um tipo Data. Entretanto, esta converso se concretizar desde que a expresso usada como argumento seja mesmo no formato de uma data, ou seja, dia/ms/Ano. Se pedirmos para fazer converso da palavra teste para data ser retornado um erro. VarivelData = Cdate(<expresso>) Print Cdate(12/04/95) Valor Impresso: 12/04/95 Print Cdate(120495) Erro. O contedo informado como argumento no esta formatado como data. Print Cdate(30/02/95) Erro. O argumento no uma data real importante salientar que essa converso necessrio principalmente quando o usurio digita uma data e esta data vai ser objeto de clculo. Ento a converso necessria. CDBL: Converte uma expresso numrica em um nmero de ponto flutuante de preciso dupla. VarivelNumrica = Cdbl(<expresso numrica>) CINT: converte uma expresso numrica em um nmero inteiro. Faz arredondamento. VarivelNumrica = CInt(<expresso numrica>) 157

Lionardo@base.com.br

Print CInt(45.40) Valor Impresso: 45 Print CInt(45.60) Valor Impresso: 46 CLNG: Converte uma expresso numrica em um nmero inteiro longo. VarivelNumrica = CLng(<expresso>) VarivelNumrica = CLng(<expresso numrica>) Print Clng(45.40) Valor Impresso: 45 Print Clng(45.60) Valor Impresso: 46 A diferena entre a funo CINT e CLNG a abrangncia da prpria varivel. CSNG: Converte uma expresso numrica em um nmero de ponto flutuante de preciso simples. VarivelNumrica = CSng(<expresso >) CSTR: Converte uma expresso numrica, data ou outra em uma string (texto). VarivelString = CStr(<expresso>) Print Cstr(452) Valor Impresso: 452 CVAR: Converte uma expresso de qualquer tipo para o tipo variante. VarivelVariant = Cvar(<expresso>) STR: Converte um valor numrico para o tipo String (texto). Valido somente para argumentos numricos. VarivelString = Str(<expressoNumrica>) Print Str(452) Valor Impresso: 452 STRCONV: Retorna uma string convertida de acordo com o tipo de converso especificado. VarivelString = Strconv(<ExpressoString>, <TipoDeConverso>) Tipos de converso que podemos usar: vbUpperCase Converte toda a expresso em letras maisculas. vbLowerCase Converte toda a expresso em letras minsculas. 158

Comandos Condicionais e de Lao vbProperCase Converte somente a primeira letra em maiscula e o restante em minsculo. Print StrConv(Lionardo, vbUpperCase) Valor Impresso: LIONARDO Print StrConv(LIONARDO, vbProperCase) Valor Impresso: Lionardo ASC: Retorna o cdigo ANSI do primeiro caractere de uma String. VarivelNumrica = Asc(<string>) Print Asc("B") Valor Impresso: 66 (Numero correspondente na tabela ASCII da letra B.) CHR: Retorna o caractere correspondente ao cdigo na tabela ASCII VarivelString = Chr(<cdigoDoCaractere>) Print Chr(66) Valor Impresso: B VAL: Converte uma String com caracteres numricos em uma varivel nmerica. VarivelNumrica = Val(<stringNumrica>) Print Var(003) Valor Impresso: 3 Print Var(123) Valor Impresso: 123

10.1.3

Funes de Data e Hora

DATE: Retorna a data corrente do sistema operacional. VarivelData = Date DATEADD: Incrementa uma data nos dias, meses ou anos especificados. VarivelVariant = DateAdd(<Intervalo>, <Incremento>,<ExpressoData>) Retorna uma Variant que contm uma data qual foi adicionado um determinado intervalo de tempo. <Intervalo> Expresso de seqncia de caracteres que o intervalo de tempo que voc quer adicionar. Tipos de caracteres usados: 159

Lionardo@base.com.br

yyyy q m y d w ww h n s

Ano Trimestre Ms Dia do ano Dia Dia da semana Semana Hora Minuto Segundo

<Incremento> Expresso numrica que o nmero de intervalos que voc quer adicionar. Pode ser positivo (para obter datas no futuro) ou negativo (para obter datas no passado). <ExpressoData> Data que est sendo adicionada. Print DateAdd("d",2,"31/07/96") Valor Impresso: 02/08/96 A funo DateAdd pode ser usada para adicionar a uma data ou subtrair dela um intervalo de tempo especificado. Por exemplo, voc poderia usar DateAdd para calcular uma data 30 dias a partir de hoje ou uma hora que 45 minutos a partir de agora. Se quiser adicionar dias a data, voc pode usar Dia do Ano ("y"), Dia ("d") ou Dia da Semana ("w"). A funo DateAdd no retornar uma data invlida. O exemplo abaixo adiciona um ms a 31 de janeiro: DateAdd("m", 1, "31-Jan-95") Neste caso, DateAdd retorna 28-Fev-95 e no 31-Fev-95. Se date for 31-Jan-96, ele retornar 29-Fev-96 pois 1996 um ano bissexto. DATEDIFF: Calcula o intervalo entre duas datas. VarivelData=DateDiff(<intervalo>, <expressoData1>, <expressoData2>) <Intervalo> Expresso de seqncia de caracteres, que o intervalo de tempo que voc usa para calcular a diferena entre uma data e outra. O argumento intervalo tem estas configuraes: yyyy Ano q Trimestre 160

Comandos Condicionais e de Lao m y d w ww h n s Ms Dia do ano Dia Dia da semana Semana Hora Minuto Segundo

<ExpressoData1 e 2> Duas datas que voc quer usar no clculo. Dim data1 As Date Dim data2 As Date Data1 = #31/7/96# Data2 = #8/8/96# Print DateDiff("d", data1, data2) Valor Impresso: 8 A funo DateDiff pode ser usada para determinar quantos intervalos de tempo especificados existem entre duas datas. Por exemplo, voc poderia usar DateDiff para calcular o nmero de dias entre duas datas ou o nmero de semanas entre o dia de hoje e o final do ano. Se quiser saber o nmero de dias entre date1 e date2, voc pode usar tanto o Dia do Ano ("y") como o Dia ("d"). Quando interval Dia da Semana ("w"), DateDiff retorna o nmero de semanas entre as duas datas. Se date1 cair numa segunda-feira, DateDiff contar o nmero de segundas-feiras at a date2. Ele conta date2, mas no date1. Se, contudo, interval for Semana ("ww"), a funo DateDiff retornar o nmero de semanas do calendrio entre as duas datas. Ele conta o nmero de domingos entre date1 e date2. DateDiff contar date2 se ela cair num domingo; mas no contar a date1, mesmo que caia num domingo. Se date1 se referir a um ponto no tempo posterior date2, a funo DateDiff retornar um nmero negativo. Se data for um literal de data (uma data entre sinais numricos (#)), o ano, se especificado, se tornar uma parte permanente dessa data. Contudo, se data estiver entre aspas ("") e voc omitir o ano, o ano atual ser inserido no cdigo sempre que a expresso data for avaliada. Isto torna possvel escrever um cdigo que pode ser usado em anos diferentes. DATEPART: extrai de uma determinada data uma parte dela relativo a dia, ms, semana, quinzena, etc. 161

Lionardo@base.com.br

ParteDaData = DatePart(<intervalo>, <expressoData>) Intervalo pode ser: yyyy Ano q Trimestre m Ms y Dia do ano d Dia w Dia da semana ww Semana h Hora n Minuto s Segundo Dim Data As Date Data = #8/2/96# Print DatePart("m", data) Valor Impresso: 8 DATESERIAL: Retorna uma data para um dia, ms e ano especificados, ou seja, informe cada item separado que a funo monta a data. VariavelData = DateSerial(<ano>, <ms>, <dia>) Print DateSerial("96","08","02") Valor Impresso: 02/08/96 DATEVALUE: Retorna a data especificada numa string, ou seja, converte uma varivel String para o tipo Data. VarivelData = DateValue(<VarivelStringDeData>) Print DateValue("02/08/96") Valor Impresso: 02/08/96 DAY: Retorna o dia do ms referente a uma data. VarivelNumrica = Day(<expressoData>) Print Day("02/08/96") Valor Impresso: 2 HOUR: Retorna a hora de uma expresso de data e hora. VarivelNumrica = Hour(<ExpressoHora>) Print Hour("12:34:12") Valor Impresso: 12 Print Hour(now) Valor Impresso: 15 162

Comandos Condicionais e de Lao

MINUTE: Retorna o minuto de uma expresso de data e hora. VarivelNumrica = Minute(<ExpressoHora>) MONTH: Retorna o ms de uma data. VarivelNumrica = Month(<ExpressoData>) NOW: Retorna a data e a hora correntes do sistema operacional. VarivelData = Now Print Now Valor Impresso: 02/08/96 15:08:07 SECOND: Retorna os segundos de uma expresso de data e hora. VarivelNumrica = Second(<ExpressoHora>) TIME: Retorna a hora corrente do sistema operacional. VarivelData = Time Print Time Valor Impresso: 15:08:07 TIMER: Calcula a quantidade de segundos passados desde a meia noite. VarivelNumrica = Timer TIMEVALUE: Retorna a hora especificada numa string, ou seja, converte uma String cujo contedo esta no formato de hora para uma varivel tipo Data e Hora. VarivelData = TimeValue(<ExpressoStringDeHora>) WEEKDAY: Retorna o dia da semana de uma data, ou seja, seu numero correspondente: 1 para Domingo at 7 para Sbado. VarivelNumrica = WeekDay(<ExpressoData>) YEAR: Retorna o ano de uma data. VarivelNumrica = Year(<ExpressoData>)

163

Lionardo@base.com.br

Para criar um programa que faa calculos de data bastante simples se usarmos as funes acima de forma correta. Abra um novo projeto e desenvolva um formulrio como no modelo:

No boto "Calcule" crie

a seguinte codificao:

Na caixa de texto txtDataCompra incluido dados no formato Texto, mesmo que seja uma data. Para o visual Basic entender que a expresso ali existente deve ser tratada como uma data e no como um texto, usamos a funo de converso Cdate. Vamos agora fazer a seguinte verificao: se o dia do pagamento cair num Domingo, fazer com que a data de pagamento passe para a Segunda-feira.

164

Comandos Condicionais e de Lao

10.1.4

Funes de String

INSTR: Retorna a posio da primeira ocorrncia de uma seqncia de caracteres dentro de outra Varivel = InStr ({<posioInicial>,] <string>, <SubStringAPesquisar>[, <MtodoDeComparao]) Posio Inicial: Expresso numrica que define a posio inicial de cada pesquisa. Se omitido, a pesquisa comea na posio do primeiro caractere.. Este argumento necessrio se o Mtodo de Comparao for especificado. String : Expresso de seqncia de caracteres que est sendo pesquisada. 165

Lionardo@base.com.br

SubStringAPesquisar : Expresso de seqncia de caracteres procurada. MtodoDeComparao : Especifica o tipo comparao de seqncias de caracteres. Este argumento pode ser omitido, pode ser 0 ou 1. Especifique 0 (padro) para realizar uma comparao binria. Especifique 1 para realizar uma comparao textual que desconsidere maisculas/minsculas. Se este argumento for omitido, a configurao de Option Compare determinar o tipo de comparao. Print InStr(8,"Lionardo Fonseca", "FO",1) Valor Impresso: 10 A partir do 8 caractere procure na expresso Lionardo Fonseca em que posio comea a expresso FO, e ignore diferenciao maisculas/minsculas. Print InStr(8,"Lionardo Fonseca", "FO",0) Valor Impresso: 0 (no encontrado). LCASE: Converte uma expresso string para minsculas. VarivelString = Lcase (<stringAConverter>) Print Lcase(Editora Terra) Valor Impresso: editora terra LEFT: Retorna uma quantidade de caracteres que se encontra da esquerda para a direita. VarivelString = Left(<string>, <QuantidadeDeCaracteres>) Print Left("Lionardo",4) Valor Impresso: Lion LEN: Retorna o nmero de caracteres de uma expresso String ou nmero de bytes requerido para armazenar uma varivel. VarivelNumrica = Len (ExpressoCaractere>) Print Len(Lionardo) Valor Impresso: 8 LTRIM: Remove os espaos em branco esquerda de uma String. VarivelString = Ltrim (<ExpressoString>) MID: Retorna uma Substring de uma String, ou seja, retorna um nmero especificado de caracteres de uma seqncia de caracteres. SubString=Mid(<string>,<posioInicial>[, <quantidadeDeCaracteres>]) 166

Comandos Condicionais e de Lao String : Expresso de seqncia de caracteres a partir da qual os caracteres so retornados. PosioInicial: Posio de caractere em String na qual a parte a ser considerada inicia. Se Posio Inicial for maior do que o nmero de caracteres em String, Mid retorna uma seqncia de caracteres de comprimento zero. QuantidadeDeCaracteres: Nmero de caracteres a serem retornados. Se omitidos ou se o nmero de caracteres do texto for inferior ao QuantidadeDeCaracteres (inclusive o caractere em PosioIncial), sero retornados todos os caracteres desde a PosioInicial at o final da seqncia de caracteres. Print Mid("Lionardo Fonseca Paiva",10,8) Valor Impresso: Fonseca Na expresso String Lionardo Fonseca Paiva, a partir do 10 caractere conte 8 para frente e retorne a String que esta neste intervalo. RIGHT: Retorna uma substring com os caracteres que se encontram da direita para a esquerda dentro de uma expresso String. VarivelNumrica=Right([<ExpressoString>, <QuantidadeDeCaracteres>) Print Right(Lionardo Fonseca,7) Valor Impresso: Fonseca RTRIM: Remove os espaos direita em uma String. VarivelString = Rtrim(<string>) SPACE: Retorna uma String com uma determinada quantidade de espaos vzios. VarivelString = Space(<quantidadeDeCaracteres>) STR: Retorna a representao de um nmero como uma String. VarivelString = Str (<ExpressoNumrica>) STRCOMP: Compara duas expresses Strings. VarivelNumrica=StrComp(<string>,<string>[,Comparao>]) Comparao: Especifica o tipo de comparao de seqncias de caracteres. Este argumento pode ser omitido, pode ser 0 ou 1. Especifique 0 (padro) para fazer uma comparao binria. Especifique 1 para fazer uma comparao de texto. 167

Lionardo@base.com.br

Valores de retorno da funo: -1 quando a primeira String for menor que a Segunda, 0 quando forem iguais e 1 quando a primeira String for maior que a segunda. STRING: Repete um determinado caractere a quantidade de vezes estabelecido na funo. String = String (<QuantidadeDeCaracteres>, <caracteres>) Print String(30,"-") Valor Impresso: -----------------------------TRIM: Remove os espaos esquerda e direita de uma string. VarivelString = Trim(<String>) UCASE: Converte uma expresso String para maisculas. VarivelString = Ucase (<string>) Print Ucase(Editora Terra) Valor Impresso: EDITORA TERRA

10.1.5

Funes de Manipulao de Matrizes

ARRAY: Retorna um Array do tipo Variant. ArrayVariant = Array (<NmeroDeElemento>) NmeroDeElemento: consiste de uma lista delimitada por vrgula de um nmero arbitrrio de valores que so atribudos aos elementos da matriz contidos em Variant. Se nenhum argumento for especificado, ser criada uma matriz de comprimento zero. Embora uma Variant que contm uma matriz seja conceitualmente diferente de uma matriz cujos elementos so do tipo Variant, o modo como so acessados os elementos da matriz o mesmo. A notao usada para se referir a um elemento de uma matriz consiste no nome da varivel seguido por parnteses que contm um nmero do ndice que indica o elemento desejado. O limite inferior de uma matriz criada com a funo Array determinado pelo limite inferior especificado com a instruo Option Base. Dim VariavelMatriz As Variant VariavelMatriz = Array("Dom", "Seg", "Ter", "Qua", "Qui", "Sex", "Sb") Print VariavelMatriz(2) Print VariavelMatriz(4) Valor Impresso: Ter Valor Impresso: Qui 168

Comandos Condicionais e de Lao

LBOUND: Retorna o menor ndice de uma matriz. VarivelNumrica = Lbound(<NomeDaMatriz>) Dim VariavelMatriz As Variant VariavelMatriz = Array("Dom", "Seg", "Ter", "Qua", "Qui", "Sex", "Sb") Print LBound(VariavelMatriz) Valor Impresso: 0 UBOUND: Retorna o maior ndice de uma matriz. VarivelMatriz = Ubound(<NomeDaMatriz>]) Dim VariavelMatriz As Variant VariavelMatriz = Array("Dom", "Seg", "Ter", "Qua", "Qui", "Sex", "Sb") Print UBound(VariavelMatriz) Valor Impresso: 6

10.1.6

Funes Lgicas

IIF: Analisa uma expresso lgica, e retorna valores para quando for falso ou verdadeiro. ExpressoDeRetorno = IIF (<ExpressoLgica>, <ExpressoParaVerdadeiro>, <ExpressoParaFalso>) Print iif(10 > 2,10 maior que 2, 2 maior que 10) Valor Impresso: 10 maior que 2 Print iif(10= 5,Igual, Diferente) Valor Impresso: Diferente SWITCH: Avalia uma lista de expresses e retorna o valor associado quela primeiro avaliada como verdadeira. Switch(Expr-1, Valor-1[, Expr-2, Valor-2 , Expr-etc, Valor-etc]) Expr : Expresso variant que voc quer avaliar. Valor : Valor ou expresso que retornado se a expresso correspondente for True. A lista de argumentos da funo Switch consiste de pares de expresses e valores. As expresses so avaliadas medida que aparecem 169

Lionardo@base.com.br

na lista da esquerda para a direita e retornado o valor associado primeira expresso para avaliar True. Se as partes no forem corretamente pareadas, ocorre um erro em tempo de execuo. Por exemplo, se expr-1 for True, Switch retornar valor-1. Se expr-1 for False, mas expr-2 for True, Switch retornar valor-2, e assim por diante. Switch retornar um valor Null se nenhuma das expresses for True. Switch avalia todas as expresses, mesmo que retorne apenas uma delas. Por este motivo, voc deve ficar atento para efeitos colaterais indesejveis. Por exemplo, se a avaliao de qualquer expresso resultar num erro de diviso por zero, ocorrer um erro. A=2 B=2 C=2 Print Switch(A<2,"Letra A < 2", B=2,"Letra B = 2", C<3, "Letra C < 3") Valor Impresso: Letra B = 2 A segunda expresso na lista foi impresso, pois foi a primeira a ter uma condio verdadeira. Note que o ultimo valor (C<3) tambm verdadeiro, mas como a funo Switch encerra sua execuo quando encontra a primeira ocorrncia verdadeira, ele foi ignorado. A=2 B=3 C=2 Print Switch(A<2,"Letra A < 2", B=2,"Letra B = 2", C<3, "Letra C < 3") Valor Impresso: Letra C < 3

10.1.7

Funes de Disco

CURDIR: Retorna o diretrio corrente. VarivelString = CurDir[(<drive>)] Print CurDir("C:") Valor Impresso: C:\WINDOWS\Desktop\ DIR: Retorna o nome de um arquivo, diretrio ou pasta correspondente a um padro especificado ou atributo de arquivo, ou a etiqueta de volume de uma unidade de disco. VarivelString = Dir[(Nomedocaminho[, Atributos])]

170

Comandos Condicionais e de Lao Nomedocaminho : Expresso de seqncia de caracteres que especifica um nome de arquivo e pode incluir diretrio ou pasta e unidade de disco. Null retornado se nomedocaminho no for encontrado. Atributos : Constante ou expresso numrica, cuja soma especifica atributos de arquivo. Se omitido, todos os arquivos normais que tiverem Nomedocaminho correspondente so retornados. As configuraes do argumento Atributos so: vbNormal 0 Normal. vbHidden 2 Oculto. vbSystem 4 Arquivo de sistema,. vbVolume 8 Etiqueta de volume; se especificada, todos os outros atributos so ignorados. vbDirectory 16 Diretrio ou pasta. FILEDATETIME: Retorna a data e a hora da ltima atualizao do arquivo. VarivelData = FileDateTime(<NomeArquivo>) Print FileDataTime("C:\WINDOWS\SYSTEM.INI") Valor Impresso: 03/08/96 16:50:20 FILELEN: Retorna o tamanho do arquivo em bytes. VarivelNumrica = FileLen(<NomeArquivo>) Print FileLen("C:\WINDOWS\SYSTEM.INI") Valor Impresso: 3481 GETATTR: Verifica os atributos de um arquivo ou diretrio. VarivelNumrica = GetAttr(<NomeArquivo>) Veja os valores de retorno desta funo: 0 1 2 4 16 32 backup. Print GetAttr("C:\WINDOWS\SYSTEM.INI") Valor Impresso: 32 171 vbNormal vbReadOnly vbHidden vbSystem vbDirectory vbArchive Normal. Somente Leitura. Oculto. Arquivo de sistema Diretrio ou pasta. O arquivo foi modificado desde o ltimo

Lionardo@base.com.br

10.1.8

Funes de Teste

ISARRAY: Testa se uma varivel uma matriz VarivelBoolean = IsArray(<varivel>) ISDATE: Testa se o argumento pode ser convertido para uma data. Esta data deve estar dentro dos padres de data. VarivelBoolean = IsDate(<expresso>) ISEMPTY: Verifica se uma varivel foi inicializada. IsEmpty retornar True se a varivel estiver iniciada; caso contrrio retornar False. Se a expresso contiver mais de uma varivel, o retorno ser sempre False. VarivelBoolean = IsEmpty(<expresso>) ISERROR: Testa se uma expresso um valor de erro. VarivelBoolean = IsError(<expresso>) ISMISSING: Testa se um argumento opcional foi passado como parmetro para uma procedure ou funo. VarivelBoolean = IsMissing(<NomedoArgumento>) ISNULL: Testa se uma varivel possui valor invlido. VarivelBoolean = IsNull(<Expresso>) ISNUMERIC: Testa se o argumento pode ser convertido para um nmero. VarivelBoolean = IsNumeric(<Expresso>) Print IsNumeric(AB) Valor Impresso: False Print IsNumeric(03) Valor Impresso: True ISOBJECT: vlido. VarivelBoolean = IsObject(<Expresso>) VARTYPE: Retorna o tipo de varivel especificada como argumento: VarivelNumrica = VarType(<Varivel>) Retorna os valores abaixo: 172 Testa se uma expresso referencia a um objeto OLE

Comandos Condicionais e de Lao 0 1 2 3 4 5 6 7 8 9 10 11 12 13 17 8192 Empty (No iniciada). Null Nenhum dado vlido. Inteiro (Integer). Inteiro por extenso (Long) Nmero de ponto flutuante de preciso simples (Single). Nmero de ponto flutuante de preciso dupla (Double). Moeda (Currency). Data (Date). Seqncia de caracteres textos (String). objeto de Automao OLE (Object). Erro (Error). Booleano Boolean). Variant (usada somente com matrizes de Variantes). Um objeto que no seja de Automao OLE (DataObject). Byte Matriz (Array).

TYPENAME: Retorna o nome descritivo do tipo de uma varivel. VarivelString = TypeName(<Varivel> Eis os nomes de retorno da funo: Byte Um byte. Integer Um inteiro. Long Um inteiro por extenso. Single Um nmero de ponto flutuante de preciso simples. Double Um nmero de ponto flutuante de preciso dupla. Currency Um valor de moeda. Date Uma data. String Uma seqncia de caracteres. Boolean Um valor Booleano. Error Um valor de erro. Empty No iniciado. Null Nenhum dado vlido. Object Um objeto que suporta Automao OLE.

10.1.9

Funes de Escolha

CHOOSE: Seleciona um valor de uma lista de argumentos. Varivel = Choose (<ndice>, <escolha>[, <escolha>]...)

173

Lionardo@base.com.br

ndice : Expresso numrica ou campo que resulta num valor entre 1 e o nmero de opes disponveis. Escolha : Expresso Variant que contm uma das possveis opes. Choose retorna um valor da lista de opes com base no valor de ndice. Se ndice for 1, Choose retorna a primeira opo da lista; se ndice for 2, retorna a segunda opo e assim por diante. Choose pode ser usado para pesquisar um valor numa lista de possibilidades. Por exemplo, se ndice avalia para 3 e a opo-1 = "um", opo-2 = "dois" e opo-3 = "trs", Choose retorna "trs". Esta capacidade particularmente til se ndice representar o valor num grupo de opes. Se ndice no for um nmero inteiro, ele ser arredondado para o nmero inteiro mais prximo antes de ser avaliado. Print Choose(2,"Apostilas","CD-ROM","Livros","Servios Grficos") Valor Impresso: CD-ROM INPUTBOX: Exibe um aviso numa caixa de dilogo, aguarda at que o usurio insira texto ou escolha um boto e retorna o contedo da caixa de texto. Varivel=Inputbox(<expresso>,<barraDeTtulo>,<escolhaDefault>) EmpressoPrompt : Expresso de seqncia de caracteres exibida como a mensagem numa caixa de dilogo. O tamanho mximo de prompt de aproximadamente 1024 caracteres, dependendo da largura dos caracteres usados. BarraDeTtulo : Expresso de seqncia de caracteres exibida na barra de ttulos da caixa de dilogo. Se voc omitir este argumento, o nome do aplicativo ser includo na barra de ttulos. EscolhaDefault : Expresso de seqncia de caracteres exibida na caixa de texto como a resposta padro se nenhuma outra entrada for fornecida. Se voc omitir EscolhaDefault, a caixa de texto ser exibida vazia. Se o usurio escolher "OK" ou pressionar ENTER, a funo InputBox retorna o contedo da caixa de texto, qualquer que seja ele. Se o usurio escolher "Cancelar", a funo retorna uma seqncia de caracteres de tamanho zero (""). Observao : Se quiser especificar mais do que o primeiro argumento nomeado, voc dever usar InputBox em uma expresso. Se quiser omitir alguns argumentos posicionais, voc dever incluir o delimitador de vrgula correspondente. 174

Comandos Condicionais e de Lao Print InputBox("Digite Seu Nome","Cadastro de Cliente")

Valor Impresso: <Ser o nome digitado na caixa de texto> MSGBOX: Exibe uma caixa de dilogo para exibir informaes e obter respostas simples atravs de botes de comando. VarivelNumrica = MsgBox (<ExpressoPrompt>,<BotesDisponveis>, <BarraDeTtulo>) ExpressoPrompt : Expresso de seqncia de caracteres exibida como a mensagem numa caixa de dilogo. O tamanho mximo de ExpressoPrompt de aproximadamente 1024 caracteres, dependendo da largura dos caracteres usados. Se ExpressoPrompt for composto por mais de uma linha, voc poder separar as linhas usando um caractere de retorno de carro (Chr(13)), um caractere de alimentao de linha (Chr(10)) ou uma combinao de caracteres de retorno de carro e alimentao de linha (Chr(13) & Chr(10)) entre cada linha. BotesDisponvel : Expresso numrica que a soma de valores que especificam o nmero e tipo de botes a serem exibidos, o estilo de cone a ser usado, a identidade do boto padro e a modalidade da caixa de mensagem. Se omitido, o valor padro ser 0. Veja abaixo os tipos de botes disponvel:

Constante vbOKOnly VbOKCancel VbAbortRetryIgnore VbYesNoCancel VbYesNo VbRetryCancel VbCritical

Valor 0 1 2 3 4 5 16

Descrio Exibe apenas o boto "OK". Exibe os botes "OK" e "Cancelar". Exibe os botes "Anular", "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". 175

Lionardo@base.com.br

VbQuestion VbExclamation VbInformation VbDefaultButton1 VbDefaultButton2 VbDefaultButton3 VbApplicationModal

32 48 64 0 256 512 0

VbSystemModal

4096

Exibe o cone "Consulta de advertncia". Exibe o cone "Mensagem de advertncia". Exibe o cone "Mensagem de informao". O boto "Primeiro" o padro. O boto "Segundo" o padro. O boto "Terceiro" o padro. Janela restrita do aplicativo; o usurio deve responder caixa de mensagem antes de continuar seu trabalho no aplicativo atual. Janela restrita do sistema; todos os aplicativos so suspensos at que o usurio responda caixa de mensagem.

O primeiro grupo de valores (05) descreve o nmero e tipo de botes exibidos na caixa de dilogo; o segundo grupo (16, 32, 48, 64) descreve o estilo de cone; o terceiro grupo (0, 256, 512) determina qual boto o padro; e o quarto grupo (0, 4096) determina modalidade da caixa de mensagem. Quando adicionar nmeros para criar um valor final para o argumento buttons, use somente um nmero de cada grupo. Observao Estas constantes so especificadas pelo Visual Basic para aplicativos. Assim, os nomes podem ser usados em qualquer lugar do cdigo em lugar dos valores reais. BarraDeTtulo : Expresso de seqncia exibida na barra de ttulos da caixa de dilogo. Se voc omitir BarraDeTtulo, o nome do aplicativo ser includo na barra de ttulos. Estes so os valores que esta funo retorna, para informar qual foi a ao do usurio:

Constante vbOK vbCancel vbAbort vbRetry vbIgnore vbYes vbNo 176

Valor de Retorno 1 2 3 4 5 6 7

Boto escolhido "OK" "Cancelar" "Anular" "Repetir" "Ignorar" "Sim" "No"

Comandos Condicionais e de Lao

Se a caixa de dilogo exibir um boto "Cancelar", pressionar a tecla ESC ter o mesmo efeito que escolher "Cancelar". Se quiser especificar mais do que o primeiro argumento nomeado, voc dever usar MsgBox em uma expresso. Se quiser omitir alguns argumentos de posio, voc dever incluir o delimitador de vrgula correspondente. MsgBox Atmica") ("Deseja Continuar?",VbYesNoCancel, "Ativar Bomba

Print MsgBox ("Deseja Continuar?",VbYesNoCancel+VbExclamation, "Ativar Bomba Atmica")

177

Lionardo@base.com.br

Crie um formulrio conforme modelo abaixo:

Vamos fazer uma codificao para o boto 1 e o boto 2 como esta abaixo. Perceba que usamos o MSGBOX no s para enviar uma mensagem para o usurio, como para executar uma determinada ao dependendo do que o usurio escolher.

178

Comandos Condicionais e de Lao

10.2 A FUNO FORMAT


Formata uma expresso qualquer de acordo com a mscara estabelecida na funo. ExpressoFormatada = Format(<expresso>[, <Mascara de formatao>)

Formatao de Expresses Numricas


Para formatar qualquer expresso numrica usamos # para representar um digito de 0 a 9, , para representar os milhares e . para representar as casas decimais. Como o padro brasileiro para milhares e casas decimais exatamente o contrrio, o Visual Basic automaticamente ir colocar no nosso padro, pois ir verificar qual o formato usado para o pais de acordo com o que foi estabelecido no painel de controle. Print Format(12345.3,##,###.##) Valor Impresso: 12.345,3 Usamos o simbolo # para representar a disposio dos nmeros. No h necessidade de colocar a mesma quantidade de nmeros e #. Se tivessesmos colocado Print Format(12345.3,#,###,###.##), ainda assim seria impresso somente 12.345,3. Entretanto, se colocarmos: Print Format(12345.3, "###.##") 179

Lionardo@base.com.br

Valor Impresso: 12345,3 Perceba que no podemos colocar uma formatao menor que os nmeros que sero impressos, pois seno a formatao no ir alcanar toda a extenso dos nmeros. O smbolo # substitudo por nmeros quando existir nmero para ser substitudo. Note que o nmero decimal .3 e apesar de termos usado uma formatao para casas decimais com dois smbolos ##, no apareceu as duas casas decimais. Se quisermos forar o aparecimento de zeros quando no tiver nmero para ser impresso, usados 0 no lugar de #. Veja: Print Format(12345.3,##,###.00) Valor Impresso: 12.345,30 Print Format(12345,##,###.00) Valor Impresso: 12.345,00 Isto vale tambm para formatao de nmeros sem casas decimais: Print Format(45,0000) Valor Impresso: 0045 Se quisermos uma formatao diferente para nmeros negativos, basta colocar essa formatao aps o ponto-e-virgula. Print Format(12345,##,###.00; (-)##,###.00) Valor Impresso: 12.345,00 Print Format(-12345,##,###.00; (-)##,###.00) Valor Impresso: (-)12.345,00 Veja abaixo os caracteres que podem ser usados na formatao de valores numricos: 0 Exibe um dgito ou um zero. Se a expresso tiver um dgito na posio em que o 0 aparece na seqncia de caracteres de formato, ele ser exibido; caso contrrio, exibido um zero nessa posio. Se o nmero possui um nmero de dgitos inferior ao de zeros (em qualquer lado da casa decimal) na expresso de formato, exibe zeros esquerda ou direita. Se o nmero tiver mais dgitos direita do separador decimal do que zeros direita do separador decimal na expresso de formato, arredonda o nmero para tantas casas decimais quantos forem os zeros existentes. Se o nmero tiver mais dgitos esquerda do separador decimal do que zeros esquerda do separador decimal na expresso de formato, exibe os dgitos a mais sem modificaes. # Exibe um dgito ou nada. Se a expresso tiver um dgito na posio em que o smbolo # aparece na seqncia de caracteres de formato, ele ser exibido; caso contrrio, nada ser exibido nessa posio. Este smbolo funciona como o espao reservado para o dgito 0, mas os zeros esquerda e direita no so exibidos se o nmero tiver a mesma 180

Comandos Condicionais e de Lao quantidade ou menos dgitos do que existem # caracteres em qualquer um dos lados do separador decimal na expresso de formato. . Espao reservado para decimal Para algumas localidades, usada uma vrgula como separador decimal. O espao reservado para decimal determina quantos dgitos so exibidos esquerda e direita do separador decimal. Se a expresso de formato contiver apenas sinais de nmeros esquerda deste smbolo, os nmeros inferiores a 1 comeam com um separador decimal. Se voc quiser que um zero esquerda seja sempre exibido com nmeros fracionrios, use 0 como o primeiro espao reservado para dgito esquerda do separador decimal. O caractere real utilizado como espao reservado para decimal na sada formatada depende do Formato Numrico reconhecido pelo sistema. % Espao reservado para porcentagem A expresso multiplicada por 100. O caractere de porcentagem (%) inserido na posio onde ele aparece na seqncia de caracteres de formato. , Separador de milhar Para algumas localidades, utilizado um ponto como o separador de milhar. O separador de milhar separa milhar de centena dentro de um nmero que tenha quatro ou mais casas esquerda do separador decimal. O uso padro do separador de milhar especificado no formato que contm um separador de milhar delimitado por espaos reservados de dgito (0 ou #). Dois separadores de milhar adjacentes ou um separador de milhar imediatamente esquerda do separador decimal (sendo ou no especificado um decimal) significa "aplique uma escala ao nmero dividindo-o por 1000 e arredonde-o conforme necessrio." Use essa tcnica para aplicar escalas a nmeros extensos. Por exemplo, a seqncia de caracteres de formato "##0,," pode ser usada para representar 100 milhes como 100. Nmeros inferiores a 1 milho so exibidos como 0. Dois separadores de milhar adjacentes em qualquer posio que no seja a imediatamente esquerda do separador decimal sero considerados apenas como especificao do uso de um separador de milhar. O caractere real utilizado como o separador de milhar na sada formatada depende do Formato Numrico reconhecido pelo sistema. E- E+ e- e+ Formato cientfico Se a expresso de formato contiver pelo menos um espao reservado para dgito (0 ou #) direita de E-, E+, e- ou e+, o nmero exibido em formato cientfico, sendo E ou e inserido entre o nmero e seu expoente. O nmero de espaos reservados para dgito direita determina o nmero de dgitos do expoente. Use E- ou e- para incluir um sinal de subtrao (-) ao lado 181

Lionardo@base.com.br

de expoentes negativos. Use E+ ou e+ para incluir um sinal de subtrao ao lado de expoentes negativos e um sinal de adio (+) ao lado de expoentes positivos. - + $ ( ) space Exibe um caractere literal Para exibir uma caractere diferente dos listados, preceda-o com uma barra invertida (\) ou coloque-o entre aspas (" "). \ formato Muitos caracteres da expresso de formato tm um significado especial e no podem ser exibidos como caracteres literais a menos que sejam precedidos por uma barra invertida. A barra propriamente no exibida. Sua utilizao equivale a colocar o caractere seguinte entre aspas. Para exibir uma barra invertida, use duas barras invertidas (\\). Exemplos de caracteres que no podem ser exibidos como caracteres literais so caracteres de formatao de data e hora (a, c, d, h, m, n, p, q, s, t, w, y e /:), caracteres de formatao numrica (#, 0, %, E, e, vrgula e ponto) e os caracteres de formatao de seqncias de caracteres (@, &, <, >, e !). "ABC" Exibe a seqncia de caracteres que est entre aspas. Para incluir uma seqncia de caracteres em Format a partir do cdigo, voc deve usar Chr(34) para delimitar o texto (34 cdigo de caractere para aspas). Usamos tambm como argumento na formatao de expresses numricas algumas palavras-chave que correspondem a algum tipo de formato padro. General Number : Exibe o nmero na forma em que se encontra, sem separadores de milhar. Print Format(123456.7, "General Number") Valor Impresso: 123456,7 Currency : Exibe o nmero com o separador de milhar, se apropriado; exibe dois dgitos direita do separador de casa decimal. Note que a sada baseada nas configuraes do Painel de Controle. Print Format(123456.7, "Currency") Valor Impresso: R$123.456,70 Exibe o caractere seguinte da seqncia de caracteres de

182

Comandos Condicionais e de Lao Fixed : Exibe pelo menos um dgito esquerda e dois dgitos direita do separador de casa decimal. Print Format(123456.7, "Fixed") Valor Impresso: 123456,70 Print Format(1, "Fixed") Valor Impresso: 1,00 Standard : Exibe o nmero com o separador de milhar, pelo menos um dgito esquerda e dois dgitos direita do separador de casa decimal. Print Format(123456.7, "Standard") Valor Impresso: 123.456,70 Percent : Exibe o nmero multiplicado por 100 com um sinal de porcentagem (%) anexado direita; sempre mostra dois dgitos direita do separador de casa decimal. Print Format(123456.7, "Percent") Valor Impresso: 12345670,00% Print Format(1, "Percent") Valor Impresso: 100,00% Scientific : Usa a notao cientfica padro. Print Format(123456.7, "Scientific") Valor Impresso: 1,23E+05

183

Lionardo@base.com.br

Crie um formulrio conforme o exemplo abaixo:

Faa a seguinte codificao para o boto executar:

Formatao de Expresses Lgicas


Yes/No : Exibe No se o nmero for 0; caso contrrio, exibe Yes. True/False : Exibe False se o nmero for 0; caso contrrio, exibe True. On/Off : Exibe Off se o nmero for 0; caso contrrio, exibe On. Print Format(1,True/False) Valor Impresso: True

184

Comandos Condicionais e de Lao

Formatao de Expresses Data e Hora


Usamos a funo Format tambm para formatar uma data ou hora, configurando assim o formato que ser impresso. Veja os caracteres que podemos usar: : Separador de hora. Em algumas localidades podem ser usados outros caracteres para representar o separador de hora. O separador de hora separa horas, minutos e segundos quando os valores de hora so formatados. O caractere real usado como o separador de hora na sada formatada determinado pelas configuraes de seu sistema. / Separador de data. Em algumas localidades podem ser usados outros caracteres para representar o separador de data. O separador de data separa o dia, ms e ano quando os valores de data so formatados. O caractere real usado como o separador de data na sada formatada determinado pelas configuraes de seu sistema. c Exibe a data como ddddd e a hora como ttttt, nessa ordem. Exibe apenas informaes de data se no houver parte fracionria para o nmero de srie de data; exibe apenas informaes de hora se no houver parte inteira. Print Format("01/08/96","c") Valor Impresso: 01/08/96 Print Format(now,"c") Valor Impresso: 01/08/96 22:51:11 d Exibe o dia como um nmero sem zeros esquerda. Print Format("05/07/96","d") Valor Impresso: 5 dd Exibe o dia como um nmero com zeros esquerda. Print Format("05/07/96","dd") Valor Impresso: 05 ddd Exibe o dia da semana como uma abreviado em 3 letras. Print Format("01/08/96","ddd") Valor Impresso: Qui dddd Exibe o dia da semana como um nome completo. Print Format("01/08/96","dddd") Valor Impresso: Quinta-feira 185

Lionardo@base.com.br

w Exibe o dia da semana como um nmero (1 para domingo at 7 para sbado). ww Exibe a semana do ano como um nmero. Print Format("01/08/96","ww") Valor Impresso: 31 m Exibe o ms como um nmero sem zeros esquerda. Se m vier imediatamente depois de h ou hh, exibido o minuto em lugar do ms. Print Format("01/08/96","m") Valor Impresso: 8 mm Exibe o ms como um nmero com zeros esquerda. Se m vier imediatamente depois de h ou hh, exibido o minuto em lugar do ms. Print Format("01/08/96","mm") Valor Impresso: 08 mmm Exibe o ms como uma abreviado em trs letras. Print Format("01/08/96","mmm") Valor Impresso: Ago mmmm Exibe o ms como um nome completo. Print Format("01/08/96","mmmm") Valor Impresso: Agosto q Exibe o trimestre do ano como um nmero. Print Format("01/08/96","q") Valor Impresso: 3 y Exibe o dia do ano como um nmero. Print Format("01/08/96","y") Valor Impresso: 214 yy Exibe o ano como um nmero de dois dgitos. Print Format("01/08/96","yy") Valor Impresso: 96 yyyy Exibe o ano como um nmero de quatro dgitos. Print Format("01/08/96","yy") Valor Impresso: 1996 h 186 Exibe a hora como um nmero sem zeros esquerda.

Comandos Condicionais e de Lao Print Format("09:13:55","h") Valor Impresso: 9 hh Exibe a hora como um nmero com zeros esquerda. Print Format("09:13:55","h") Valor Impresso: 09 n Exibe o minuto como um nmero sem zeros esquerda. nn Exibe o minuto como um nmero com zeros esquerda. s Exibe o segundo como um nmero sem zeros esquerda. ss Exibe o segundo como um nmero com zeros esquerda. t t t t t Exibe uma hora como uma hora completa (inclusive hora, minuto e segundo), formatada usando o separador de hora definido pelo formato de hora reconhecido pelo sistema. Print Format(now,"ttttt") Valor Impresso: 23:17:27 Usando estes caracteres especiais podemos formatar uma data de vrias maneiras, como por exemplo: Print Format(01/08/96,dd/mmmm/yyyy) Valor Impresso: 01/Agosto/1996 Print Format(01/08/96,dd/mmm/yy) Valor Impresso: 01/Ago/96 Veja abaixo a relao das palavras-chaves aceita pela funo Format para expresses de data e hora: General Date : Exibe a data e a hora nos formatos estabelecidos nas configuraes do Windows. Caso a expresso seja somente uma data, ser exibido Print Format(now,"general date") Valor Impresso: 01/08/96 23:21:25 Print Format("01/08/96","general date") Valor Impresso: 01/08/96 Print Format("09:24:11","general date") Valor Impresso: 09:24:11 Long Date : Exibe uma data de acordo com o formato por extenso de data de seu sistema. Print Format("01/08/96","Long Date") 187

Lionardo@base.com.br

Valor Impresso: Quinta-feira, 1 de Agosto de 1996 Medium Date : Exibe uma data usando o formato mdio de data apropriado para a verso de idioma do aplicativo host. Print Format("01/08/96","Medium Date") Valor Impresso: 01-Ago-96 Short Date : Exibe uma data usando o formato abreviado de data de seu sistema. Print Format("01/08/96","Short Date") Valor Impresso: 01/08/96 Long Time : Exibe uma hora usando o formato por extenso de hora de seu sistema: inclui horas, minutos, segundos. Print Format("09:24:11","Long Time") Valor Impresso: 09:24:11 Medium Time : Exibe uma hora no formato 12 horas usando horas e minutos e a designao AM/PM. Print Format("09:24:11","Medium Time") Valor Impresso: 09:24 AM Short Time : Exibe uma hora usando o formato 24 horas. Print Format("09:24:11","Short Time") Valor Impresso: 09:24

188

Comandos Condicionais e de Lao

Crie um formulrio em branco da seguinte forma:

Altere a propriedade AutoSize dos labels para True e digite a seguinte codificao:

Formatao de Expresses String


A manipulao de expresses String podem ser formatados usando os caracteres especiais abaixo: @ Exibe um caractere ou um espao. Se a seqncia de caracteres tem um caractere na posio em que @ aparece na seqncia de formato, ele ser exibido; caso contrrio, um espao ser apresentado nessa posio. Os espaos reservados so preenchidos da direita para a esquerda a menos que exista um caractere ! na seqncia de caracteres de formato. Veja abaixo.
189

Lionardo@base.com.br

& Exibe um caractere ou nada. Se a seqncia de caracteres tem um caractere na posio em que & aparece, ele ser exibido; caso contrrio, nada ser exibido. Os espaos reservados so preenchidos da direita para a esquerda a menos que exista um caractere ! na seqncia de caracteres de formato. Veja abaixo. ! Fora preenchimento da esquerda para a direita dos espaos reservados. O preenchimento padro feito da direita para a esquerda. < > Exibe todos os caracteres no formato de minsculas. Exibe todos os caracteres no formato de maisculas.

190

Comandos Condicionais e de Lao

EXERCCIOS PROPOSTOS
1 - Mostre a diferena entre as funes matemticas FIX e INT:

2 - Para converter uma varivel para o tipo Data usamos qual funo?

3 - Para converso de uma varivel numrica para o formato String (texto) usamos qual funo? 4 - Caso necessitamos de converter uma expresso string INFORMATICA para informatica usamos qual funo? Exemplifique:

5 - Como usariamos a funo DATEADD para incrementar 2 meses na data 27/08/96?

6 - Para saber o intervalo entre a data 27/08/96 e 31/12/96 em: Quantidade de dias: Quantidade de meses: Quantidade de semanas: 7 - Para extrair o dia de uma data usamos qual funo?

8 - Mostre a finalidade das funes: NOW: DATE: TIME: 9 - Mostre a sintaxe completa das funes que: a) Extrai da frase Editora Terra a expresso Terra: 191

Lionardo@base.com.br

b) Extrai da frase Editora Terra a expresso Editora:

c) Extrai da frase Grfica e Editora Terra a expresso Editora:

10 - Mostre como ficaria a codificao de um programa que criasse uma matriz chamada MESES cujo contedo fosse os meses de Janeiro a Dezembro:

11 - Considerando que: A = Editora B = Grfica C = Editora D = IIF(A=B, Igual, Diferente) E = IIF(A=C, Igual, Diferente) F = IIF(C=B, Igual, Diferente) QuaL o contedo das variveis D, E e F?

12 - Descreva a finalidade das Funes: Isdate: Isempty: Isnumeric: 13 - Desenvolva um programa que tenha no formulrio uma caixa de texto para o usurio digitar um numero de 0 a 5 e crie um evento Change cuja codificao a seguinte: Print Choose(Text1.text, Zero,Um, Dois,Trs,Quatro,Cinco) Descreva o que o programa far:

192

Comandos Condicionais e de Lao

14 - Em que situao usamos as funes: INPUTBOX:

MSGBOX:

15 - Cite um exemplo da utilizao da funo Format para as expresses: Numricas:

Data e Hora:

String:

193

11 CRIAO DO BANCO DE DADOS

Caracteristicas Visual Data Manager ndices

Comandos Condicionais e de Lao

195

Lionardo@base.com.br

196

Comandos Condicionais e de Lao

11.1 BANCO DE DADOS


Sempre que trabalhamos com qualquer tipo de dado devemos gravlos em arquivos para no perd-los quando desligamos o computador. Chamamos esses arquivos que recebem vrios dados de Banco de Dados. Neste livro vamos abordar o padro MDB (Microsoft Database) que representa a grande maioria de arquivos de Banco de Dados para Windows existente hoje. Esse padro usado pelo Access e o Visual Basic tambm o aceita.

11.1.1

Caractersticas

Um arquivo que contm dados ir possuir a extenso MDB. Exemplo: Se temos um banco de dados de um controle de estoque possivelmente ele ter o nome de Estoque.MDB. Dentro de um arquivo deste podemos ter vrias tabelas. No exemplo de um controle de estoque, podemos ter uma tabela para Mercadoria, Fornecedor, Cliente, etc. Todas essas tabelas ficam armazenadas dentro do arquivo MDB. Cada tabela possui Campos onde sero armazenado os dados. Por exemplo, na tabela Mercadoria temos o campo de Descrio da Mercadoria, Quantidade no Estoque, Valor de Venda, etc. Tudo isto representa os Campos que esto armazenados dentro da tabela. Dentro dos Campos que esto os dados que precisamos armazenar. Veja a disposio da hierarquia:
BANCO DE DADOS Estoque.MDB

TABELA: Mercadoria

TABELA: Fornecedor

TABELA: Cliente

CAMPO: Descrio Qu antidade Valor

CAMPO: Nom e Endereo Telefone

CAMPO: Nome ValorCompra

DADOS: Calo de Banho 12 R$ 12,00

DADOS: Solaris Ind. e Com. Rua 12, 300 - RJ (021) 451-7854

DADOS: Joaquim Pereira R$ 42,00

197

Lionardo@base.com.br

Quando estamos na fase de desenvolvimento de um programa que ir gerenciar um banco de dados, podemos deixar j criado o Banco de Dados com suas tabelas e campos. Somente os Dados que sero inseridos pelo usurio na medida que for trabalhando com seu programa. Para criar um banco de dados o Visual Basic traz uma ferramenta chamada Visual Data Manager. Ele se encontra no menu ADD-INS.

11.1.2

Visual Data Manager (VisData)

No Menu File usaremos duas opes de grande importncia para nosso estudo: New Database para criao de novos Bancos de Dados e Open Database para abrir um banco de dados j criado. Vamos criar nosso programa de Controle de Estoque rudimentar que apresentamos no organograma acima. Click na opo New. Pode-se criar Bancos de Dados de vrios tipos, como Access, Dbase, FoxPro, etc. Mas o Visual Basic tem como padro o Microsoft Access que cria arquivos com extenso MDB. Escolha ento o Microsft Access/Version 7.0 MDB Ir aparecer uma tela pedindo para digitarmos o nome do Banco de Dados que estamos criando: Digite Estoque. No necessrio colocar a extenso pois o tipo de arquivo, por padro, j MDB.

198

Comandos Condicionais e de Lao

A prxima janela que ir aparecer a que gerncia as tabelas. Para criarmos uma nova tabela s apertar o boto da direita do mouse em "Propriedades" e acionar a opo NEW TABLE.

Ir aparecer outra janela onde nomeamos a tabela e criamos os campos que esta tabela ter:

199

Lionardo@base.com.br

Table Name: Nome da Tabela, obedecendo as mesmas regras impostas para nomeao de variveis, ou seja, no comear no nmeros, no conter espaos, no usar smbolos como hifem (-), etc. Digite: Mercadoria Field List: um Listbox onde aparece a lista dos campos que foram inseridos na tabela. Para inserir os campos aperte o boto "Add Field". Vai aparecer a seguinte janela:

200

Comandos Condicionais e de Lao

Usamos essa janela para criar todos os campos da tabela. Name: Nome do Campo. Digite: Descrio Type: Uma caixa de combinao onde escolhemos o tipo de dado que ter este campo. Usamos as mesmas regras para tipo de varivel (veja o captulo sobre variveis). Text: Textos e nmeros, como nomes e endereos, nmeros de telefone e cdigos postais. Um campo de texto pode conter de 0 a 255 caracteres. Voc deve definir a propriedade Size com a extenso mxima de seu texto, ao declarar um campo como sendo do tipo Text. Memo: Textos e nmeros extensos, como comentrios ou explicaes. O tamanho de um campo Memo limitado pelo tamanho mximo do banco de dados. Date/Time : Datas e horas. Currency : Utilizado quando um campo contm valores monetrios.Os nmeros direita da parte decimal so arredondados durante os clculos. O tipo de dados Currency mantm um nmero fixo de dgitos direita da parte decimal. Boolean : Yes/No, True/False, On/Off ou campos que contm apenas um valor, entre dois. Binary : Objetos criados em outros programas usando o protocolo OLE. Pode ser Qualquer valor que possa ser expresso em binrios com at 1.2 gigabytes de tamanho. Este tipo utilizado para armazenar figuras, arquivos ou outros dados binrios no processados. Byte: Valores positivos de 0 a 255. Armazenado em variveis tipo Byte. 201

Lionardo@base.com.br

Integer : Valores de 32.768 a +32.767. Armazenado em variveis tipo Integer. Long : 2.147.483.648 a 2.147.483.647 (cerca de 2.1 GB). Armazenado em variveis tipo Inteiro Long. Single : 3,402823E38 a 1,401298E45 para nmeros negativos e 1,401298E45 a 3,402823E38. Armazenado em variveis tipo Single. Double : 1,79769313486232E308 a 4,94065645841247E324 para valores negativos e 4,94065645841247E324 a 1,79769313486232E308 para valores positivos. Armazenado em variveis tipo Double. Escolha para nosso exemplo o tipo Text Size : Tamanho definido para o campo. Se colocamos 2 para o campo, poder ser digitado somente 2 caracteres. Esta opo liberada somente para o tipo Text. Digite 30

FixedField:Campo Fixo VariableField: Campo Varivel, que o padro. AllowZeroLength: Permitir comprimento zero, ou seja, quando esta opo esta selecionada o campo aceita (""). Se esta opo no tiver habilitada e o usurio tentar gravar um campo que no tenha nada digitado (como um daado no-obrigatrio no programa) ocorrer um erro em tempo de execuo. Required: Quando esta opo esta marcada o campo se torna obrigatrio, ou seja, necessrio informar valores para o campo, seno ocorre erro em tempo de execuo. DefaultValue: Quando temos um campo que no pode ficar vazio, sempre interessante digitar algo aqui nesta opo, pois os valores que 202

Comandos Condicionais e de Lao informarmos como DefaultValue ser armazenado para o campo quando nada for digitado pelo usurio. Por Exemplo, existe um campo valor obrigatrio, mas o usurio no digitou nada neste local, ento no momento da gravao o programa grava automaticamente a expresso especificada no DefaultValue. Aperto o boto "OK" para gravar o campo e continue inserindo outros campos como na tabela abaixo: Field Name Quantidade Valor Cdigo Data Type Integer Currency Text Size N/A N/A 3

Geralmente se usa colocar o cdigo no inicio. Se quiser mov-lo para cima s colocar "0" no tem OrdinalPosition. Veja como ficar depois de pronto:

Aperte o boto Build The Table para que a tabela seja gravada e inserida no banco de dados.

203

Lionardo@base.com.br

O nome da tabela "Mercadoria" agora j aparece dentro da janela "Database Windows", se clicarmos com o boto da direita em cima desta tabela ira aparecer um menu onde podemos criar uma outra tabela (New Table), digitar dados na tabela (Open) ou at modificar a estrutura da tabela (Design). Crie agora as tabelas abaixo: Tabela: Cliente Field Name CdCliente Nome LimiteCrdito Tabela: Vendas Field Name Cdigo CdCliente ValorVenda QuantidadeVendida

Data Type Text Text Currency

Size 3 30 N/A

Data Type Text Text Currency Integer

Size 3 3 N/A N/A

204

Comandos Condicionais e de Lao

Criamos uma tabela Vendas onde ser lanado o cdigo do cliente que efetuou a compra, o codigo da mercadoria que este cliente comprou, o valor total de sua compra e a quantidade de mercadoria que ele levou. Este exemplo simples mas vai servir para nosso aprendizado.

11.1.3

Criando indices

Usamos ndices nas tabelas para melhorar a performance do acesso durante uma determinada procura. Quando criamos um ndice o Visual Basic faz uma ordenao lgica da tabela atravs de uma chave composta por um ou mais campos. Se precisamos ordenar uma tabela por cdigo para que a procura de um determinado dado digitado seja feita pelo cdigo de maneira mais rpida, ento indexamos a tabela pelo campo que possui o cdigo. Se precisamos colocar uma relao de clientes em ordem alfabtica pelo nome digitado, ento indexamos a tabela pelo campo que possui o nome do cliente. No nosso exemplo, durante a digitao de novos clientes e novas mercadorias, devemos ficar atentos para no cadastrar dois clientes com o mesmo cdigo ou duas mercadorias com o mesmo cdigo. Para verificar isto, sempre que o usurio digitar uma nova mercadoria o programa deve fazer uma procura nas mercadorias j cadastradas para saber se aquele novo cdigo que o usurio digitou j existe ou no. Ento, se temos que fazer uma procura rpida por cdigo ser necessrio indexar a tabela Mercadoria pelo campo Cdigo. O Visual Basic ento ordenar logicamente a tabela pelo cdigo de forma ascendente, e sempre que uma nova mercadoria for cadastrada ela ser automaticamente inserida de forma ascendente dentro da tabela. 205

Lionardo@base.com.br

Para se criar um ndice podemos usar tambm o Visual Data Manager atravs do Design, onde ser apresentado novamente a estrutura que se criou da tabela. Use o boto "Add Index" para adicionar indices.

Name: O nome do indice. Atravs deste nome que ativaremos o indice em nosso programa. Available Fields: Neste ListBox aparece a relao de campos que nossa tabela contm. D um click no campo que deseja indexar. Ao fazer isto o nome do campo ira aparecer no Indexed Fields sinalizando que aquele determinado campo ir ser indexado. Crie ento um indice com o nome de "IndCdigo" e selecione o campo CdCliente. Marque a caixa de verificao Primary Index, habilite tambm a propriedade Unique e click o boto OK. Unique informa ao Visual Basic que a chave do indce exclusiva (nica). Um ndice chave ajuda a otimizar a procura por registros. Ele consiste de um ou mais campos que organizam unicamente todos os registros de uma tabela em uma ordem predefinida. Se o ndice consiste de um campo, os valores desse campo precisam ser nicos. Se o ndice consiste de mais de uma campo, valores duplicados podem ocorrer em cada campo, mas cada 206

Comandos Condicionais e de Lao combinao de valores de todos os campos indexados precisa ser nica. Os campos que compe a chave de ndice no so necessariamente nicos. Primary Index indica que um objeto Index representa um ndice primrio para uma tabela. Um ndice primrio consiste em um ou mais campos que identificam com exclusividade todos os registros de uma tabela em uma ordem predefinida. Como o ndice do campo tem que ser exclusivo, a propriedade Unique do objeto Index definida como True. Se o ndice primrio consistir de mais de um campo, cada campo pode conter valores duplicados mas as combinaes de valores de todos os campos indexados devem ser nicas. Um ndice primrio consiste em uma chave para a tabela e geralmente contm os mesmos campos da chave primria. Faa a mesma coisa para a tabela de mercadoria. O nome do indice tambm pode ser IndCdigo. Para a tabela de Vendas nomeie o indice como indClienteMercadoria e defina para chave de ndice os campos CdCliente e Cdigo nesta ordem: Colocamos estes dois campos como chave do ndice pois para localizarmos os dados referente a venda, como quantidade e valor vendido, temos que saber (procurar por) qual cliente comprou e qual mercadoria ele comprou. Agora que temos o arquivo "Estoque.Mdb" (que o nosso banco de dado) j criado. Vamos fechar definitivamente o Visual Data Manager e voltar para o projeto do Visual Basic. A utilidade do Visual Data Manager somente na criao do banco de dados, as tabelas, os ndices, etc.; mas para manipular os dados, como incluir, alterar, consulta, excluso e relatrios devemos desenvolver um programa para isto dentro do Visual Basic.

207

Lionardo@base.com.br

12 MANIPULAO DO BANCO DE DADOS

Abertura do Banco de Dados e suas tabelas Adicionar Navegao Alterao Consulta Excluso

208

Comandos Condicionais e de Lao

209

Lionardo@base.com.br

12.1 CRIANDO JANELAS


Precisamos criar inicialmente um formulrio para cadastrar mercadoria e depois outro formulrio para cadastrar o cliente. Vamos usar o que j aprendemos anteriormente: Crie um novo projeto e para o formulrio nomeio-o frmEstoque. O Caption ser Controle de Estoque. Neste formulrio vamos criar os menus que iro acessar nossas bases de dados. Veja como ficar:

210

Comandos Condicionais e de Lao No menu "Project" do Visual Basic click na opo "AddForm" para inserirmos um novo formulrio em nosso projeto. Ser o formulrio para cadastramento de mercadoria.

Neste novo formulrio altere o Caption para Cadastro de Mercadoria e o Name para frmCadMercadoria. Vamos montar esta interface, depois abriremos outros Form para Cliente e Vendas. Coloque um frame, 4 labels e 4 caixa de texto com os Names: txtCdigo, txtDescrio, txtQuantidade e txtValor. 211

Lionardo@base.com.br

Coloque tambm 7 botes de comando no formulrio como na. Para nomea-los use os Captions de cada um prefixado com cmd: Importante: Coloque a propriedade TabIndex do Boto "cmdIncluir " como "0" para que ele seja o primeiro a possuir o foco quando entrar na janela. Para rodar este programa e ver o resultado ser necessrio ligar este formulrio ao menu mnuMercadoria. Para fazer isto vamos at o menu localizado no frmEstoque, click no Cadastro para abrir as opes. D dois clickes na opo Mercadoria que uma janela de codificao ser aberta. Digite:

O Mtodo Show abre um novo formulrio a partir de outro, e usamos ele para abrir o formulrio frmCadMercadoria. Vamos aproveitar e codificar a opo Sair do menu tambm. D dois clicks nele e digite:

Este simples comando END encerra toda a aplicao fechando todas as janelas que podem estar abertas. Para completar este raciocnio, vamos at o formulrio frmCadMercadoria e para o boto cmdSair vamos fazer a seguinte codificao:

212

Comandos Condicionais e de Lao

O Comando Unload retira a janela informada da memria e da tela, voltando a execuo do programa para a janela anterior, que no nosso caso o menu principal. Agora estamos prontos para comear a codificar o nosso Banco de Dados.

12.1.1

Abrindo um banco de dados

Uma vez que vamos trabalhar com manipulao de dados, temos que verificar se o Visual Basic est apto para fazer esta manipulao. Os servios necessrios para executar essas funes esto em uma DLL do Microsoft DAO 3.5 Object Library. Para que nosso programa leia essa DLL temos que ir at o menu Project/References e selecionar esta DLL:

213

Lionardo@base.com.br

Se este ajuste no for feito e um objeto de banco de dados for declarado, o Visual Basic gerar um erro. A biblioteca DAO (Data Access Objects) fornece um conjunto de objetos de programao que precisaremos usar para gerncia os Bancos de Dados. Temos que criar agora duas variveis do tipo Banco de Dados e outra do tipo Tabela. Uma servir para fazer referncia ao nome e caminho do Banco de Dados como um todo, e a outra ir fazer referncia a uma tabela especifica. Onde criar estas variveis? No nosso exemplo temos que cri-las na seo General da janela de codificao do formulrio. Variveis criadas ali possuem abrangncia em todo o formulrio. Se criarmos ela dentro de alguma outra rotina (ou vento) a abrangncia destas variveis sero somente dentro da prpria rotina.

A varivel BancoDeDados do tipo Database pois ela sempre ter em seu contedo o nome do banco de dados que ser aberto. Depois criamos uma varivel para a tabela de Mercadoria de nome TBMercadoria. O Objeto Recordset a representao lgica de uma tabela. Usaremos este objeto para manipular todos os dados da tabela. Veja as principais propriedades de um Recordset (somente manipulados na codificao do programa): Sintxe: NomeDoRecordSet.Propriedade AbsolutePosition : Indica o numero do registro corrente da tabela em uso. BOF : Retorna True quando a tabela chegou ao inicio e False quando esta em outro ponto. DateCreated : Retorna a data de criao da tabela manipulada pelo Recordset. EOF : Retorna True quando a tabela chegou ao fim e False quando esta em outro ponto. Index : Especificamos o nome do ndice que ser associado a tabela. 214

Comandos Condicionais e de Lao NoMatch : Retorna True se uma pesquisa efetuada dentro da tabela foi bem-sucedida. PercentPosition : Retorna um percentual referente a posio que a tabela se encontra com comparao com o total de registros da tabela. RecordCount : Retorna a quantidade de registro que uma tabela possui. Os principais mtodos usamos pelo Recordset: AddNew : Prepara a tabela para receber um novo registro. Close : Fecha a tabela, e conseqentemente o objeto recordset. Delete : Remove a registro atual da tabela. Edit : Prepara a tabela para que o registro corrente seja alterado. FindFirst <Condio> : Procura o primeiro registro dentro da tabela que satisfaa a condio estabelecida (Somente para objeto Recordset tipo dynaset ou snapshot). FindLast <Condio> : Procura o ultimo registro dentro da tabela que satisfaa a condio estabelecida (Somente para objeto Recordset tipo dynaset ou snapshot). FindNext <Condio > : Procura o prximo registro dentro da tabela que satisfaa a condio estabelecida (Somente para objeto Recordset tipo dynaset ou snapshot). FindPrevious <Condio> : Procura o registro anterior dentro da tabela que satisfaa a condio estabelecida (Somente para objeto Recordset tipo dynaset ou snapshot). MoveFirst : Move a tabela para o primeiro registro. MoveLast : Move a tabela para o ultimo registro. MoveNext : Move a tabela para o seguinte seguinte. MovePrevious : Move a tabela para o registro anterior. Seek <Operador de Comparao>,<Item a Procurar> : Localiza um registro dentro da tabela. A tabela tem que estar indexada. (Somente para objeto Recordset tipo table) Update : Grava as alteraes e incluses na tabela. O prximo passo ser abrir o banco de dados e abrir a tabela de mercadoria. Para fazer isto selecione o formulrio frmCadMercadoria e abra a janela de codificao dele criando um evento chamado FORM_LOAD. Este evento chamado sempre que este formulrio chamado pelo Windows.

215

Lionardo@base.com.br

Associamos a varivel BancoDeDados ao mtodo OpenDatabase, que vai realmente abrir o arquivo na prtica. Uma vez aberto ao arquivo, sempre que fizermos referncia a ele usaremos a varivel BancoDeDados. Na abertura do arquivo usados o Objeto App.Path que retorna o nome do diretrio corrente, onde esta localizado o arquivo pretendido. Depois concatenamos este diretrio com o nome do arquivo a ser aberto. Para abrir a tabela usamos o mtodo OpenRecordSet, e como argumento informamos o nome da tabela a ser aberta e a constante dbOpenTable que informa que o RecordSet a ser aberto do tipo tabela. Note que necessrio antes do mtodo OpenRecordSet usar o nome do objeto Database BancoDeDados, pois, dentro da hierarquia, a tabela esta dentro do Banco de Dados. Fizemos tudo isto para deixar disponvel para uso o banco de dados Estoque e sua tabela Mercadoria.

12.1.2

Abrindo um indice

Prximo passo abrir o ndice que esta tabela ir trabalhar. Este ndice necessrio para ordenar os dados que forem digitados num determinada ordem (no nosso caso a ordem por cdigo) e fazer uma procura rpida pela chave de indexao. O ndice da tabela Mercadoria o IndCdigo e possui como chave de indexao o campo Cdigo.

Usamos a propriedade Index para TBMercadoria e determinamos que o ndice corrente ser IndCdigo. 216

Comandos Condicionais e de Lao

12.1.3

Fechando um banco de dados

extremamente importante Fechar todas tabelas e banco de dados toda vez que sairmos de um programa ou formulrio. Arquivos abertos perigoso e pode trazer resultados indesejveis. Para fecharmos com segurana um banco de dados usamos o Evento do objeto Formulrio chamado Unload. Este evento chamado sempre que o formulrio retirado da tela (e da memria). Note que este evento o contrrio do evento Load, que lido quando o formulrio colocado na tela. Porque no podemos fechar os arquivos de Banco de Dados no evento click do boto Sair? Por que o usurio pode querer inventar de sair deste formulrio usando outros recursos do Windows que no seja o boto sair, como a opo Fechar do Control Box, Alt-F4, etc. Para no correr risco colocamos o fechamento no evento Unload.

Fechamos primeiro a tabela Mercadoria representada pela varivel TBMercadoria e depois o banco de dados Estoque representada pela varivel BancoDeDados. Ambas usaram o mtodo Close.

12.1.4

Cuidados especiais

Algo que extremamente importante no desenvolvimento de qualquer programa tentar prever o mximo possivel de erros que o usurio pode cometer e tentar previni-los. Imagine a situao: o usurio esta no meio de uma incluso e resolver apertar a tecla excluir ou alterar, sendo que nem terminou a incluso. Ou ento esta numa alterao e resolve apertar o boto alterar novamente. Para podermos tentar cercar esses erros usamos a propriedade Enabled nos botes. Quando o usurio estiver numa incluso somente os botes Gravar e Cancelar deve estar habilitado. Ou seja, ou o usurio confirma o que esta fazendo ou cancela. Se esta numa alterao a mesma coisa ocorre. E assim por diante. Para fazermos isto temos que usar o Enabled em cada boto como veremos abaixo: 217

Lionardo@base.com.br

Fazendo isto quando o usurio apertar o boto incluir, os botes que ele no pode pressionar enquanto no concluir a incluso ficaro desabilitados. Deve-se fazer isto para todos os botes.

Na alterao o mtodo semelhando a incluso. Durante a alterao o usurio s ter liberado para ele os botes "Gravar" e "Sair". 218

Comandos Condicionais e de Lao

No evento click do boto gravar habilite todos novamente. Com exceo do prprio boto gravar que no pode ser habilitado ate que se incluia ou altere algo. Outro detalhe que bom lembrar desabilitar o boto Gravar no evento Form_Load para que esteja devidamente desabilitado quando entrar na janela de cadastro de mercadoria. Desabilitamos tambm o Frame, pois assim todos os objetos contido dentro dele sero tambm desabilitados. Fazemos isto para que o usurio no fique "passeando" pelas caixas de texto sem definir antes (atravs dos botes) o que ele quer fazer.

Uma formatao para as caixas de texto que receber numeros bem vindo para dar um aspecto visual mais interessante.

219

Lionardo@base.com.br

Criamos uma formatao para as caixas de texto no evento LostFocus para quando o usurio terminar de digitar o valor se ajustar. Habilitamos a tecla Enter criando um evento KeyPress no formulario. No esquecer de habilitar a propriedade KeyPreview .

12.1.5

Funes de apoio

Para que nosso programa de cadastro tenha um cdigo mais limpo e de fcil entendimento vamos criar algumas funes que sero teis em nossa programao. Para criar essas funes chame a janela de codificao, selecione TOOLS no menu principal do Visual Basic, e escolha a opo Add Procedure...

220

Comandos Condicionais e de Lao

Nomeia a funo que estamos criando de AtualizaCampos, coloque do tipo Function e o Scope (abrangncia) Private. Com isto, estamos criando uma funo que poder ser usada somente no formulrio corrente. Ao clicar em Ok ser aberta uma janela de codificao para podermos digitar o que a funo ira conter:

A finalidade desta funo inserir o contedo existente nas caixas de textos do formulrio para dentro dos campos da tabela de mercadoria. 221

Lionardo@base.com.br

Com isto, sempre que precisarmos gravar os dados que o usurio digitou no formulrio para dentro de seus respectivos campos na tabela usamos a funo AtualizaCampos. Repita o processo para criar agora a funo AtualizaFormulrio:

Note que o AtualizaFormulrio faz o caminho inverso: Descarrega os dados existente na tabela de seus respectivos campos para dentro das caixas de texto existente no formulrio. Por fim, vamos criar uma funo para limpar as caixas de texto. D o nome de LimpaFormulrio:

Vamos usar esta funo sempre que precisarmos que as caixas de texto fiquem vazias.

12.2 ADICIONANDO DADOS


Antes de comearmos a fazer a codificao para o boto Incluir, a fim de preparar nosso formulrio para manipular a tabela de Mercadoria, vamos fazer uma modificao nas propriedades MaxLength das caixas de texto: todas devem possuir o mesmo valor da propriedade Size usada para os campos na tabela. Usamos isto para no deixar que um usurio coloque um nome com 40 caracteres num campo que foi definido para receber 30 caracteres. 222

Comandos Condicionais e de Lao Outra modificao ser efetuada no evento Form_Load do formulrio frmCadMercadoria:

Quando uma tabela aberta o Visual Basic se posiciona no primeiro registro existente dentro dela. Entretanto, quando ainda no existe nada digitado dentro da tabela, conseqentemente no existir nenhum registro para se posicionar. Neste caso o fim de arquivo encontrado logo na abertura da tabela. A propriedade EOF quem informa se o fim de arquivo esta ativo ou no. Se EOF for True (verdadeiro) significa que a tabela chegou ao fim de arquivo, se for False, significa que a tabela esta posicionada em algum registro em algum lugar. Recapitulando: A propriedade EOF retorna True se a posio do registro atual for posterior ao ltimo registro da tabela, ou seja, se o fim do arquivo for localizado, e False se a posio do registro atual for no ltimo registro ou anterior a ele. O Visual Basic possui tambm a propriedade BOF para informar se o inicio do arquivo foi encontrado. A propriedade BOF retorna True se a posio do registro atual for anterior ao primeiro registro e False se a posio do registro atual estiver no primeiro registro ou for posterior a ele. Os valores de retorno das propriedades BOF e EOF so determinados pela localizao do indicador do registro atual. Podemos usar as propriedades BOF e EOF para determinar se um objeto Recordset contm registros ou se voc foi alm dos limites de um objeto Recordset ao percorrer seus registros. 223

Lionardo@base.com.br

Perceba que somente se EOF for False que atualizamos o formulrio, pois caso contrrio, no poderamos atualizar o formulrio pois no haveria dados a serem atualizados. O primeiro boto que vamos codificar o incluir. Ele funcionar da seguinte forma: Quando clicarmos nele as caixas de textos sero limpas e o mtodo AddNew ser acionado. Este mtodo usado para avisar tabela que alguns dados sero includos. Depois de usar o AddNew temos que atualizar os campos, ou seja, passar tudo que foi digitado nas caixas de texto para seus respectivos campos dentro da tabela TBMercadoria. Fazendo isto usamos o mtodo Updated para efetuar a gravao propriamente dita e atualizar a tabela com os novos campos. Veja um exemplo: TBMercadoria.AddNew TBMercadoria("Cdigo") = 001 TBMercadoria("Descrio") = Cala Jeans TBMercadoria("Quantidade") = 12 TBMercadoria("Valor") = 100 TBMercadoria.Updated Esta rotina o padro para incluso de dados.Repare que sempre inicia com AddNew e termina com Updated Neste exemplo colocamos expresses string para serem inseridas nos campos, mas poderiamos ter colocado variveis. No nosso exemplo vamos colocar as caixas de texto. Ficaria assim: TBMercadoria.AddNew TBMercadoria("Cdigo") = txtCdigo TBMercadoria("Descrio") = txtDescrio TBMercadoria("Quantidade") = txtQuantidade TBMercadoria("Valor") = txtValor TBMercadoria.Updated Desta forma o que o usurio digitar nas caixas de texto sero includos dentro dos campos da tabela. Isto uma forma simplificada de fazer incluso de dados. Mas ns vamos usar um forma mais complexa: 224

Comandos Condicionais e de Lao

Veja o que foi feito: Sempre que o usurio clicar neste boto o programa limpa o formulrio para deixar as caixas de texto vazias para serem preenchidas com novos dados. O Frame habilitado para que as caixas de texto possam ser manipuladas. Em seguida o foco passado para o caixa de texto txtCdigo pois a primeira que deve ser digitada pelo usurio Ainda no aplicamos o mtodo AddNew pois ainda no sabemos se o usurio vai incluir um cdigo vlido. Primeito o programa tem que analizar o cdigo que ele digitou, verificar se ele realmente no existe para depois usar o mtodo AddNew. Fazemos isto no evento LostFocus da Caixa de Texto txtCdigo. Neste evento verificamos primeiramente se o boto CmdGravar esta habilitado. Se estiver porque a incluso foi acionada. O programa procura o cdigo digitado. Se ele existir sera dado um aviso ao usuario e o processo de incluso ser cancelado, caso contrrio (ou seja, se o cdigo no existir dentro da tabela) o mtodo AddNew chamado a fim de preparar a tabela para receber um novo registro.

225

Lionardo@base.com.br

Pronto, a janela j esta preparada para receber os dados. Mas agora falta fazer a codificao para o boto Gravar.

226

Comandos Condicionais e de Lao Atualizamos os campos da tabela com os dados digitado nas caixas de textos e depois chamamos o mtodo Update que far a gravao fisica dentro do banco de dados. Tente incluir vrios dados na tabela para podermos us-los posteriormente nos prximos exerccios. Um recurso interessante que pode ser acrescentado desabilitar os botes de Alterao, Consulta , Excluso, Anterior e Prximo quando a tabela estiver vazia, pois se no houver nenhum registro, no vai haver nada para alterar, consultar, excluir, etc. Somente o boto de incluso que poder ficar habilitado. A maneira mas usual de saber se a tabela esta vazia ou no atravs da propriedade RecordCount que infoma quantos registros existem gravados dentro da tabela.

12.3 PRXIMO E ANTERIOR


Estes botes sero usados o usurio passear pela tabela, verificando os dados de todos os registros cadastrados na ordem especificada pelo Index.

227

Lionardo@base.com.br

O boto Prximo ir mostrar na tela o prximo registro existente. Note que para fazer este movimento usamos a propriedade MoveNext (mova para o prximo), depois fazermos um teste com a propriedade EOF para verificar se foi movido para o ultimo registro na tabela. Se estiver no ltimo, dali ele no pode passar pois no encontrar nada. Encontrando ento o ultimo registro, se tentar passar dali a propriedade MovePrevious (move para o anterior) acionado. Depois disto atualizamos o formulrio. O boto Anterior possui a mesma lgica, mas invertemos as outras propriedades para fazer agora o teste de inicio de arquivo. Ou seja, se o usurio estiver no primeiro registro ele no poder voltar um registro, pois antes do primeiro no existira nada. Se voc usar MoveNext quando o ltimo registro for o atual, a propriedade EOF ser configurada para True e no haver registro atual. Se voc usar MoveNext novamente, um erro ocorrer; EOF permanece True. Se recordset referir-se a um Recordset tipo table (que o nosso caso), a movimentao segue o ndice atual. Voc pode definir o ndice atual usando a propriedade Index. Se voc no configurar o ndice atual, a ordem de registros retornados ser indefinida.

12.4 ALTERAO

Para alterao vamos fazer algo semelhante ao que fizemos na incluso. A diferena ficar numa propriedade nova para ns que EDIT. Esta 228

Comandos Condicionais e de Lao propriedade abre a tabela para que o dado que esta sendo alterado seja editado. Note que no liberamos a caixa de texto txtCdigo para alterao, pois sendo ela a chave de ndice, no pode ser alterada. Quando necessitar de alterao no cdigo, ele deve ser excludo e includo novamente.

12.5 CONSULTA
Para consulta vamos usar a funo INPUTBOX. Aprendemos a us-la nos captulos anteriores. Ela solicita ao usurio a digitao de algum dado e armazena numa determinada varivel. Ento criamos uma varivel de nome ProcuraCdigo e usamos ela para receber o que o usurio digitar.

Feito isto, usamos o mtodo Seek para efetuar uma procura dentro da tabela. Seek: Localiza o registro de um objeto Recordset tipo table indexado que satisfaa os critrios especificados para o ndice atual e torna esse registro o registro atual. Aps o Seek colocamos um sinal de comparao para determinar o tipo de procura que este mtodo fara. Podemos usar = ,<, >, <=, >=, etc O mtodo Seek pesquisa os campos-chave especificados e localiza o primeiro registro que satisfaa os critrios especificados na comparao dentro da chave de ndice. Uma vez encontrado, esse registro torna-se o registro atual e a propriedade NoMatch definida como False. Se o mtodo Seek falhar em localizar um registro correspondente, a propriedade NoMatch configurada como True e o registro atual indefinido. 229

Lionardo@base.com.br

Se comparao for igual (=), maior ou igual a (>=) ou maior do que (>), o Seek comea a pesquisa no incio do ndice. Se comparao for maior do que (<) ou maior ou igual a (<=), o Seek comea a pesquisa no final do ndice e continua em direo ao incio a menos que existam entradas de ndice duplicadas no final. Neste caso, Seek comea por uma entrada arbitrria entre as entradas de ndice duplicadas no final do ndice. Quando informamos uma chave para o mtodo Seek procurar, esta chave deve ser no mesmo formato que o estabelecido no ndice do arquivo (index). Por exemplo: no TBMercadoria a chave do ndice o Cdigo, ento o Seek somente faz a procura pelo cdigo. No podemos pedir para procurar pela Descrio da mercadoria, pois para isto deveria existir um ndice para descrio. Em nosso exemplo se NoMatch for True (ou seja, se no encontrou nenhum registro que seja igual ao contedo da varivel ProcuraCdigo) movemos para o registro anterior e depois o formulrio atualizado. Fazemos isto pois quando uma procura no bem sucedida a tabela posicionada no fim de arquivo, e como no existe nenhum registro nesta posio, movimentamos para um registro antes, onde o ultimo registro includo se encontra. Quando clicarmos no boto Consultar uma janela como a que esta abaixo aparecer no video:

Digitamos o cdigo que queremos procurar e ao clicar Ok a busca iniciada. Se no encontrar uma mensagem ser apresentada:

12.6 EXCLUSO
230

Comandos Condicionais e de Lao

Quando se ai deletar algo bom solicitar ao usurio uma confirmao, pois a deleo acidental pode causar resultados catastrficos. Ento bom que o usurio tenha certeza do que esta fazendo. Quando usamos a propriedade Delete o registro atual (aquele que esta aparecendo no vdeo) excludo da tabela. Mas para a tela no ficar vazia (uma vez que aquele registro que estava l foi eliminado) usamos a procedure cmdAnterior_click que a rotina que usamos quando o boto anterior acionado. Fazemos isto para posicionar a tabela no registro anterior ao que foi deletado e mostr-lo na tela. Desta forma a tela no fica vazia. Em nosso programa podemos localizar um registro com a consulta ou atravs dos botes Anterior e Prximo. Localizando podemos clicar no boto Excluir que o registro desaparece.

12.7 CONSIDERAES FINAIS


Pronto. Esta finalizado este formulrio frmCadMercadoria. Agora usando estes mesmos processos usados aqui programe o Cadastro de Cliente. As vendas um pouco diferente pois esta tabela depende da tabela de Mercadoria e da tabela de Clientes, ou seja, necessrio, nas vendas, informar quem o cliente que esta comprando e qual mercadoria se esta comprando. Estas informaes so coletadas em suas respectivas tabelas. Mas vamos aprender a codific-la aps terminarmos com os Clientes.

231

Lionardo@base.com.br

12.8 CADASTRO DE CLIENTES

Option Explicit Dim BancoDeDados As Database Dim TBCliente As Recordset Private Sub cmdAlterar_Click() cmdIncluir.Enabled = False cmdAlterar.Enabled = False cmdConsultar.Enabled = False cmdExcluir.Enabled = False cmdAnterior.Enabled = False cmdProximo.Enabled = False cmdGravar.Enabled = True cmdSair.Enabled = True Frame1.Enabled = True txtCdCliente.Enabled = False txtNome.SetFocus TBCliente.Edit End Sub Private Sub cmdAnterior_Click() TBCliente.MovePrevious 232

Comandos Condicionais e de Lao If TBCliente.BOF = True Then TBCliente.MoveNext End If AtualizaFormulrio End Sub Private Sub cmdConsultar_Click() Dim ProcuraCdCliente As String ProcuraCdCliente = InputBox("Digite Cliente a ser consultado") TBCliente.Seek "=", ProcuraCdCliente If TBCliente.NoMatch = True Then MsgBox ("Cliente no cadastrado!") TBCliente.MovePrevious End If AtualizaFormulrio End Sub Private Sub cmdExcluir_Click() If MsgBox("Confirma Excluso?", vbYesNo) = vbYes Then TBCliente.Delete cmdAnterior_Click End If End Sub Private Sub cmdGravar_Click() cmdIncluir.Enabled = True cmdAlterar.Enabled = True cmdConsultar.Enabled = True cmdExcluir.Enabled = True cmdAnterior.Enabled = True cmdProximo.Enabled = True cmdGravar.Enabled = False cmdSair.Enabled = True 233 o Cdigo do

Lionardo@base.com.br

Frame1.Enabled = False txtCdCliente.Enabled = True AtualizaCampos TBCliente.Update End Sub Private Sub cmdIncluir_Click() cmdIncluir.Enabled = False cmdAlterar.Enabled = False cmdConsultar.Enabled = False cmdExcluir.Enabled = False cmdAnterior.Enabled = False cmdProximo.Enabled = False cmdGravar.Enabled = True cmdSair.Enabled = True LimpaFormulrio Frame1.Enabled = True txtCdCliente.SetFocus End Sub Private Sub cmdProximo_Click() TBCliente.MoveNext If TBCliente.EOF = True Then TBCliente.MovePrevious End If AtualizaFormulrio End Sub Private Sub cmdSair_Click() Unload frmCadClientes End Sub Private Sub Form_KeyPress(KeyAscii As Integer) 234

Comandos Condicionais e de Lao

If KeyAscii = vbKeyReturn Then SendKeys ("{TAB}") KeyAscii = 0 End If End Sub Private Sub Form_Load() Set BancoDeDados = OpenDatabase(App.Path & "\Estoque.MDB") Set TBCliente = BancoDeDados.OpenRecordset("Cliente", dbOpenTable) TBCliente.Index = "IndCdigo" cmdGravar.Enabled = False Frame1.Enabled = False If TBCliente.EOF = False Then AtualizaFormulrio End If End Sub Private Sub Form_Unload(Cancel As Integer) TBCliente.Close BancoDeDados.Close End Sub

Private Sub txtCdCliente_LostFocus() txtCdCliente.Text = Format(txtCdCliente.Text, "000") TBCliente.Seek "=", txtCdCliente.Text If TBCliente.NoMatch = False Then MsgBox "Cliente j existente. Tente outro Cdigo" AtualizaFormulrio cmdIncluir.Enabled = True 235

Lionardo@base.com.br

cmdAlterar.Enabled = True cmdConsultar.Enabled = True cmdExcluir.Enabled = True cmdAnterior.Enabled = True cmdProximo.Enabled = True cmdGravar.Enabled = False cmdSair.Enabled = True Frame1.Enabled = False Else TBCliente.AddNew End If End Sub Private Sub txtValor_LostFocus() txtLimiteCrdito.Text = Format(txtLimiteCrdito.Text, "Standard") End Sub

Private Function AtualizaCampos() TBCliente("CdCliente") = txtCdCliente TBCliente("Nome") = txtNome TBCliente("LimiteCrdito") = txtLimiteCrdito End Function Private Function AtualizaFormulrio() txtCdCliente = TBCliente("CdCliente") txtNome = TBCliente("Nome") txtLimiteCrdito.Text Format(TBCliente("LimiteCrdito"), "Standard") End Function Private Function LimpaFormulrio() txtCdCliente = "" txtNome = "" 236

Comandos Condicionais e de Lao txtLimiteCrdito = "" End Function

12.9 LANAMENTO DAS VENDAS

A criao do formulrio ser como no exemplo acima; ou seja, comparando com os anteriores, a diferena somente o acrscimo de dois labels que ficaro ao lado do cdigo da mercadoria e do cliente. O primeiro label conter a descrio da mercadoria, e vamos nome-lo para lblDescrio, e o segundo ter o nome do cliente, e vamos nome-lo para lblNomeCliente. Para esta tabela necessrio criar um ndice em que a chave de procura seja o Cdigo da Mercadoria e o Cdigo do Cliente. Usamos para isto o Visual Data Manager:

237

Lionardo@base.com.br

Note que esses dados no existem na tabela de Vendas. O que existe nesta tabela somente o cdigo da mercadoria. A descrio esta em outra tabela (Mercadoria), assim como o nome do cliente tambm esta em outra tabela (Cliente). Para podermos acessar estas tabelas e capturar somente a descrio da mercadoria e nome do cliente, temos somente um ponto de referncia, que o cdigo deles que existe na tabela de Vendas. A lgica usada neste programa consiste em pegarmos o cdigo existente na tabela de vendas e buscar a descrio daquele cdigo em outra tabela. Para fazer isto todas as tabelas envolvidas devem ser abertas, assim como seus ndices, pois ser atravs do ndice que a procura ser feita. Exemplificando atravs da tabela de mercadoria: Como na tabela de vendas existe o cdigo da mercadoria que foi vendida, e na tabela de mercadoria existe a descrio da mercadoria para 238

Comandos Condicionais e de Lao aquele cdigo, usamos o ndice para procurar dentro da tabela de mercadoria, o cdigo existente dentro da tabela de vendas. Isto possvel desde que a tabela de mercadoria esteja indexada pelo cdigo, pois a procura ser feita por ele. Para podermos ento codificarmos o formulrio que ter acesso aos dados da tabela de vendas, vamos criar as variveis que sero usadas para lidar com o banco de dados e as tabelas:

Criamos uma varivel para cada tabela que ser aberta. Precisamos agora criar um evento Form_Load para abrir todas essas tabelas.

Veja que abrimos todas as trs tabelas que sero usadas neste formulrio, e abrimos tambm todos os ndices relativo a cada uma. As nossas funes auxiliares sofrero alguma mudana pois acrescentamos em nosso formulrio dois labels, e um conter a descrio da mercadoria e outro o nome do cliente.

239

Lionardo@base.com.br

Note que quando formos atualizar o formulrio ser necessrio apresentar nos dois labels os dados contido em outras tabelas, por isto necessrio colocar um Seek para cada item a ser procurado. Quando o usurio, por exemplo, aperta o boto "Avanar" o programa avana um registro na tabela de Vendas e usa os cdigos contidos nela para tentar localizar suas respectivas descries e nome do cliente.

240

Comandos Condicionais e de Lao

Para facilitar nosso trabalho, criamos aqui uma funo CancelaDigitao que tem por finalidade anular o que o usurio estiver fazendo, voltar os botes e frame para seu estado natural. Usaremos esta funo quando o usurio digitar algum cdigo invlido. Com as funes prontas, vamos completar a codificao do Form_Load, pois apenas abrimos as tabelas, precisamos agora verificar se a tabela de vendas est vazia, e desabilita o boto "Gravar" e o frame:

241

Lionardo@base.com.br

A incluso para esta tabela segue o estilo que usamos para os outros formulrios. Existe somente uma diferena fundamental que o aparecimento do nome do cliente e a descrio da mercadoria quando o usurio digitar o cdigo correspondente. Ou seja, numa incluso, quando o usurio digitar o cdigo da mercadoria que foi vendida, o programa ter que acessar a tabela de Mercadoria, procurar o cdigo que o usurio acabou de digitar, e trazer de l a descrio daquele cdigo. Este trabalho todo podemos fazer no evento LostFocus da caixa de texto. Por que este evento? Porque esta procura ser feita DEPOIS que o usurio digitar o cdigo e passar para a prxima caixa de texto (ou seja, quando o objeto perder o foco). Ento, diante disto, precisamos criar dois evento LostFocus. Uma para a caixa de texto txtCdigo e outro para txtCdCliente:

242

Comandos Condicionais e de Lao

Usamos o SEEK para efetuar uma procura dentro da tabela TBMercadoria. O que ir procurar? Ir procurar o cdigo digitado na caixa de texto txtCdigo. Se NoMatch for igual a True sinal que no existe nenhuma mercadoria cadastrada com o cdigo digitado. Ento uma mensagem ser mostrada na tela: Mercadoria no cadastrada. Depois chamamos aquela funo que criamos chamada Cancela Digitao. Logicamente que se quisermos incrementar ainda mais nosso programa poderamos fazer com que o programa abrisse uma tela mostrando quais as mercadorias que existem cadastradas para o usurio escolher uma, ou algo assim. Mas para resumir nosso exemplo deixaremos assim. Se o cdigo digitado na caixa de texto for encontrado ento a descrio inserida dentro do label "lblDescrio" para que seja mostrada no formulrio. Fazemos a mesma coisa com a evento LostFocus de txtCdCliente:

243

Lionardo@base.com.br

A incluso de registros dentro da tabela de vendas igual ao apresentado nos outros programas:

244

Comandos Condicionais e de Lao A alterao segue os padres anteriores, lembrando que nesta tabela de vendas no podemos alterar o Cdigo da Mercadoria e o Cdigo do Cliente, pois ambos fazem parte da chave do ndice da tabela. Se necessitar alterar o cdigo, exclua e inclua novamente:

245

Lionardo@base.com.br

A excluso tambm semelhante aos anteriores:

Os botes Anterior e Prximo devem fazer uma pesquisa na tabela de Mercadoria e Clientes para atualizar os labels, a fim de que aparea a descrio da mercadoria e o nome do cliente:

Perceba que esta rotina move a tabela de vendas para o registro anterior, e depois ao chamar a funo AtualizaFormulrio faz uma procura dentro da tabela de mercadoria e depois dentro da tabela de clientes usando como chave de busca o contedo existente dentro da tabela de vendas.

D uma conferida em seu cdigo fonte agora: 246

Comandos Condicionais e de Lao

Option Explicit Dim Dim Dim Dim BancoDeDados As Database TBVendas As Recordset TBMercadoria As Recordset TBCliente As Recordset

Private Sub cmdAlterar_Click() cmdIncluir.Enabled = False cmdAlterar.Enabled = False cmdConsultar.Enabled = False cmdExcluir.Enabled = False cmdAnterior.Enabled = False cmdProximo.Enabled = False cmdGravar.Enabled = True cmdSair.Enabled = True Frame1.Enabled = True txtCdigo.Enabled = False txtCdCliente.Enabled = False txtQuantidadeVendida.SetFocus TBVendas.Edit End Sub Private Sub cmdAnterior_Click() TBVendas.MovePrevious If TBVendas.BOF = True Then TBVendas.MoveNext End If AtualizaFormulrio End Sub Private Sub cmdExcluir_Click() If MsgBox("Confirma Excluso?", vbYesNo) = vbYes Then TBVendas.Delete cmdAnterior_Click End If 247

Lionardo@base.com.br

End Sub Private Sub cmdGravar_Click() cmdIncluir.Enabled = True cmdAlterar.Enabled = True cmdConsultar.Enabled = True cmdExcluir.Enabled = True cmdAnterior.Enabled = True cmdProximo.Enabled = True cmdGravar.Enabled = False cmdSair.Enabled = True Frame1.Enabled = False txtCdigo.Enabled = True txtCdCliente.Enabled = True AtualizaCampos TBVendas.Update End Sub Private Sub cmdIncluir_Click() cmdIncluir.Enabled = False cmdAlterar.Enabled = False cmdConsultar.Enabled = False cmdExcluir.Enabled = False cmdAnterior.Enabled = False cmdProximo.Enabled = False cmdGravar.Enabled = True cmdSair.Enabled = True LimpaFormulrio Frame1.Enabled = True txtCdigo.SetFocus End Sub Private Sub cmdProximo_Click()

248

Comandos Condicionais e de Lao TBVendas.MoveNext If TBVendas.EOF = True Then TBVendas.MovePrevious End If AtualizaFormulrio End Sub Private Sub cmdSair_Click() Unload frmLanamentoVendas End Sub Private Sub Form_KeyPress(KeyAscii As Integer) If KeyAscii = vbKeyReturn Then SendKeys ("{TAB}") KeyAscii = 0 End If End Sub Private Sub Form_Load() Set BancoDeDados=OpenDatabase(App.Path & "\Estoque.MDB") SetTBMercadoria=BancoDeDados.OpenRecordset"Mercadoria", dbOpenTable) Set TBCliente=BancoDeDados.OpenRecordset("Cliente", dbOpenTable) Set TBVendas=BancoDeDados.OpenRecordset("Vendas", dbOpenTable) TBMercadoria.Index = "IndCdigo" TBCliente.Index = "IndCdigo" TBVendas.Index = "indClienteMercadoria" cmdGravar.Enabled = False Frame1.Enabled = False If TBVendas.EOF = False Then AtualizaFormulrio End If 249

Lionardo@base.com.br

End Sub Private Sub Form_Unload(Cancel As Integer) TBVendas.Close TBMercadoria.Clone TBCliente.Close BancoDeDados.Close End Sub Private Function AtualizaCampos() TBVendas("Cdigo") = txtCdigo TBVendas("CdCliente") = txtCdCliente TBVendas("ValorVenda") = txtValorVenda TBVendas("QuantidadeVendida") = txtQuantidadeVendida End Function

Private Function LimpaFormulrio() txtCdigo = "" txtCdCliente = "" txtValorVenda = "" txtQuantidadeVendida = "" lblDescrio.Caption = "" lblNomeCliente.Caption = "" End Function Private Sub txtCdigo_LostFocus() txtCdigo.Text = Format(txtCdigo.Text, "000") TBMercadoria.Seek "=", txtCdigo If TBMercadoria.NoMatch = True Then MsgBox "Mercadoria no cadastrada. Operao Cancelada" CancelaDigitao Exit Sub 250

Comandos Condicionais e de Lao End If lblDescrio = TBMercadoria("Descrio") End Sub Private Sub txtCdCliente_LostFocus() txtCdCliente.Text = Format(txtCdCliente.Text, "000") TBCliente.Seek "=", txtCdCliente If TBCliente.NoMatch = True Then MsgBox "Cliente no cadastrada. Operao Cancelada" CancelaDigitao Exit Sub End If lblNomeCliente = TBCliente("Nome") TBVendas.Seek "=", txtCdCliente.Text, txtCdigo.Text If TBVendas.NoMatch = False Then MsgBox "Vendas j existente. Tente outro cdigo" CancelaDigitao Else TBVendas.AddNew End If End Sub Private Sub txtValorVenda_LostFocus() txtValorVenda.Text = Format(txtValorVenda.Text, "Standard") End Sub Private Function AtualizaFormulrio() txtCdigo = TBVendas("Cdigo") txtCdCliente = TBVendas("CdCliente") 251

Lionardo@base.com.br

txtValorVenda = Format(TBVendas("ValorVenda"), "Standard") txtQuantidadeVendida = TBVendas("QuantidadeVendida") TBMercadoria.Seek "=", txtCdigo TBCliente.Seek "=", txtCdCliente lblDescrio = TBMercadoria("Descrio") lblNomeCliente = TBCliente("Nome") End Function Private Function CancelaDigitao() AtualizaFormulrio cmdIncluir.Enabled = True cmdAlterar.Enabled = True cmdConsultar.Enabled = True cmdExcluir.Enabled = True cmdAnterior.Enabled = True cmdProximo.Enabled = True cmdGravar.Enabled = False cmdSair.Enabled = True Frame1.Enabled = False End Function

Deixamos o boto Consulta de fora propositadamente. Vamos voltar nele nos prximos captulos.

252

Comandos Condicionais e de Lao

253

Lionardo@base.com.br

13 USANDO O CONTROLE DATA

Data DBGrid

254

Comandos Condicionais e de Lao

255

Lionardo@base.com.br

13.1 CONTROLE DATA


Data
Este controle economiza uma sria de linhas de programao, fazendo o intercmbio entre os controles de um formulrio com a tabela do Banco de Dados. Vamos usar a mesma tabela de Mercadoria para criar um formulrio e manipular esta tabela atravs do controle data.

Crie um projeto novo e coloque os seguintes controles nele. Repare que semelhante ao que fizemos no captulo anterior, mas na verdade tem grandes mudanas na codificao. Mude o Caption deste controle para "Mercadoria". As duas propriedades principais deste controle so: DatabaseName e RecordSource. DatabaseName: Nesta propriedade selecionamos o nome do banco de dados que ser manipulado. Uma caixa igual a que aparece abaixo ser apresentada. Em nosso exemplo, selecione Estoque.mdb que o banco de dados que estamos trabalhando.

256

Comandos Condicionais e de Lao

RecordSource: Nesta propriedade deve ser selecionado o nome da tabela que ser manipulada pelo objeto Data. Dentro do Banco de Dados escolhido (Estoque.mdb) existem 3 tabelas: Vendas, Mercadoria e Cliente. As 3 iro aparecer. Escolha "Mercadoria". Cada caixa de texto deve ser agora anexada ao controle data e, por conseguinte, aos seus respectivos campos. Por exemplo: A caixa de Texto txtCdigo deve ser anexada ao campo Cdigo. Esta anexao feita usando as propriedades DataField e DataSource das caixas de texto.

257

Lionardo@base.com.br

DataSource: Origem dos dados. Aqui informado o nome da controle data que possui a tabela que vamos manipular. Selecione Data1 DataField: Nome do Campo. Na caixa de combinao que aparece, esta o nome de todos os campos da tabela existente no controle data. Escolha o campo que corresponda com a caixa de texto selecionada. Pronto. No precisa digitar nada na codificao do programa. Com somente este passos j temos pronto um programa que altera os dados da tabela, pois tudo que for digitado nas caixa de texto ser inserido automaticamente dentro dos registros da tabela. Use o controle data para avanar ou voltar, ir para o primeiro registro ou o ultimo.

Este controle data anexa dados no somente em caixas de texto, mas tambem em outros controles, como por exempo o DBGrid, que muito til para o programador.

13.2 DBGRID
No projeto desenvolvido no captulo anterior, deixamos de codificar o boto de Consulta. Vamos fazer isto agora usando um DBGrid para auxiliar na consulta. Adicione um novo formulrio e mude a propriedade Name para 258

Comandos Condicionais e de Lao frmConsulta. Neste formulrio vamos criar todas as rotinas de consulta que iro aparecer para o usurio. Insira um CommandButton no formulrio, um objeto do tipo Data e um objeto do tipo DBGrid: DBGrid Data Estes Controles sero inseridos na seguinte disposio:

No objeto Data mude a propriedade name para datVendas e o Caption para Dados das Vendas. No objeto DBGrid mude a propriedade name para gridVendas e o Caption para Lanamento das Vendas. O Objeto Data possui algumas propriedades que devem ser alteradas, como o DatabaseName e RecordSource. Escolha "Estoque.MDB" para uma e "Vendas" para outra. Trabalhando somente com essas duas propriedade anexamos a tabela Vendas do Banco de Dados Estoque.mdb no objeto Data, que nomeamos para datVendas. Com isto, sempre que fizermos agora qualquer evento no datVendas ser refletido diretamente na tabela Vendas. O objeto que manipular os dados foi ento criado, que o Data, mas onde os registros do iro aparecer? Poderamos colocar cada Campo anexado a uma caixa de texto, mas em lugar disto vamos colocar todos os registros existentes na tabela Vendas dentro de um objeto DBGrid. O DBGrid possui uma propriedade chamada DataSource. Nesta propriedade informamos o nome do objeto Data que inserimos no formulrio. 259

Lionardo@base.com.br

Fazendo isto estaremos fazendo uma ligao entre o banco de dados e a tabela, j definida no objeto Data, para o objeto DBGrid. Com isto o DBGrid j saber qual tabela que ele ir manipular.

A propriedade Custom deste objeto abre uma janela onde esto as principais propriedades deste objetos. Ao clicar ser mostrado uma janela para configurar estas propriedades que iro dar forma ao DBGrid.

No Caption digitamos o ttulo que ser exibido no Grid. AllowAddNew: Habilita a possibilidade de se poder acrescentar registros na tabela. AllowDelete : Habilita a possibilidade de apagar registros AllowUpdate : Habilita a possibilidade de alterar os registros existentes 260

Comandos Condicionais e de Lao ColumnHeaders : Determina se o cabealho de cada coluna ser exibido. RecordSelectors : Determina se no DBGrid ir aparecer um seletor de registros AllowRowSizing : Habilita a possibilidade do usurio mudar o tamanho das colunas. Enabled : Habilita ou no a interao do DBGrid com o usurio. Selecionando no topo desta janela a seo Columns abriremos novas propriedades para serem configuradas.

Columns : Seleciona em qual coluna de dados do DBGrid que ter as propriedades abaixo disponvel para serem configuradas. Caption : Ttulo da Coluna selecionada. DataField : Campo da tabela que ter seus dados exibidos na coluna selecionada. DefaultValue : Valor padro para um determinado campo. NumberFormat : Determina o formato com que os dados da coluna sero mostrados no vdeo. Usa as mesmas regras da funo FORMAT.

261

Lionardo@base.com.br

Locked : Trava os dados contido nas colunas. AllowSizing : Habilitada a possibilidade de mudar o tamanho da coluna Visible : Indica se a coluna ser visvel ou no. Alignment : Alinha dos dados na coluna na forma determinada nesta propriedade. Uma forma rpida e recomendada para transferir os dados da tabela para suas respectivas propriedades a seguinte: Selecione o DBGrid no formulrio. posicione o ponteiro do mouse sobre ele e pressione o boto da direita. Ir aparecer um menu como o que esta abaixo:

262

Comandos Condicionais e de Lao

Selecione a opo Retrieve Fields. Isto far com que todos os dados relativo a tabela que foi informada na propriedade DataSource sejam automaticamente ajustadas no DBGRid. Use a propriedade (Custom) somente para modificar os Caption das Colunas, se houver necessidade. Desta forma o DBGrid ficar assim:

O boto fechar ser configurado para esconder este formulrio e retornar para o formulrio anterior.

263

Lionardo@base.com.br

Note que usamos o Hide no lugar de Unload, pois o Unload retirna o formulrio da tela e da memria tambm, enquanto que o hide mantm o formulrio na memria. A vantagem disto que o acesso a esta janela se torna mais rpido no segundo acesso que for feito a ela e os valores das variveis do formulrio ainda continuar em uso. Neste caso vamos precisar dos valores dos campos que o usurio selecionou para, na tela de Vendas, uslas. Este tipo de consulta que foi feito bastante simples. Logicamente que pode-se usar outros mtodos mais sofisticados, como o SQL por exemplo. Mas isto j faz parte dos recursos avanados do Visual Basic. Volte agora na tela de Vendas para podermos codificar o boto "Consultar"

No mtodo Show de frmConsulta, usamos como argumento a constante "vbModal" para indicar que essa janela deve ser do tipo modal, ou seja, exclusiva. No se tem acesso a outra janela enquanto o usuario no concluir o que deseja fazer na janela aberta. Usamos o Seek para procurar os cdigos que foi selecionado na janela frmConsulta. Note que usamos o "_" para fazer uma quebra de linha.

264

Comandos Condicionais e de Lao

265

14 IMPRESSO

Printer Crystal Reports

Comandos Condicionais e de Lao

267

Lionardo@base.com.br

14.1 PRINTER
Em nosso programa vamos acrescentar um item no menu principal chamado impresso do Estoque e com isto vamos imprimir o contedo da tabela mercadoria.

Usaremos um novo objeto para nos chamado Printer. E ser este objeto que manipular tudo que enviaremos para a impressora, criando, assim, um canal de comunicao entre nosso programa e a porta em que a impressora esta ligada. Muitas peculiaridades de uma impresso, como falta de papel, impressora em linha, fila de impresso, etc. Tudo isto ser organizado pelo prprio Windows, deixando o programador livre para executar somente uma tarefa: Despachar seu relatrio para a impressora. As propriedades principais do Printer so: ColorMode: Determina ou mostra a capacidade de impresso colorida do dispositivo. Copies: Especifica a quantidade de cpias de uma pgina que deve ser impressa. CurrentX: Determina a coordenada horizontal que a impressora ir imprimir. CurrentY: Determina a coordenada vertical que a impressora ir imprimir. DeviceName: Mostra o nome da impressora padro suportada pelo dispositivo FontName: Determina qual fonte de letra a impressora usar para impresso. FontBold: Determina se a fonte ser em negrito. FontItalic: Determina se a fonte ser em itlico. Fonts: Fornece uma lista de todas as fontes disponveis para impresso. FontSize: Determina o tamanho que a fonte de letra escolhida usar. 268

Comandos Condicionais e de Lao FontUnderline: Determina se a fonte ser sublinhada. Orientation: Determina a orientao do papel: Retrato ou Paisagem. Usamos as constantes para definir o tipo escolhido: vbPRORPortrait1 Retrato vbPRORLandscape 2 Paisagem Page : Retorna o nmero da pgina que esta sendo impressa. PaperSize: Determinamos o tamanho do papel. Podemos usamos as seguintes constantes: vbPRPSLetter 1 Letter, 8 1/2 x 11 in. VbPRPSLetterSmall 2 Letter Small, 8 1/2 x 11 in. VbPRPSTabloid 3 Tabloid, 11 x 17 in. VbPRPSLedger 4 Ledger, 17 x 11 in. VbPRPSLegal 5 Legal, 8 1/2 x 14 in. VbPRPSStatement 6 Statement, 5 1/2 x 8 1/2 in. VbPRPSExecutive 7 Executive, 7 1/2 x 10 1/2 in. vbPRPSA3 8 A3, 297 x 420 mm vbPRPSA4 9 A4, 210 x 297 mm vbPRPSA4Small 10 A4 Small, 210 x 297 mm vbPRPSA5 11 A5, 148 x 210 mm vbPRPSB4 12 B4, 250 x 354 mm vbPRPSB5 13 B5, 182 x 257 mm vbPRPSFolio 14 Folio, 8 1/2 x 13 in. VbPRPSQuarto 15 Quarto, 215 x 275 mm vbPRPS10x14 16 10 x 14 in. vbPRPS11x17 17 11 x 17 in. VbPRPSNote 18 Note, 8 1/2 x 11 in. vbPRPSEnv9 19 Envelope #9, 3 7/8 x 8 7/8 in. vbPRPSEnv10 20 Envelope #10, 4 1/8 x 9 1/2 in. vbPRPSEnv11 21 Envelope #11, 4 1/2 x 10 3/8 in. vbPRPSEnv12 22 Envelope #12, 4 1/2 x 11 in. vbPRPSEnv14 23 Envelope #14, 5 x 11 1/2 in. VbPRPSCSheet 24 C size sheet vbPRPSDSheet 25 D size sheet vbPRPSESheet 26 E size sheet vbPRPSEnvDL 27 Envelope DL, 110 x 220 mm vbPRPSEnvC3 29 Envelope C3, 324 x 458 mm vbPRPSEnvC4 30 Envelope C4, 229 x 324 mm vbPRPSEnvC5 28 Envelope C5, 162 x 229 mm vbPRPSEnvC6 31 Envelope C6, 114 x 162 mm 269

Lionardo@base.com.br

vbPRPSEnvC65 vbPRPSEnvB4 vbPRPSEnvB5 vbPRPSEnvB6 vbPRPSEnvItaly vbPRPSEnvMonarch vbPRPSEnvPersonal vbPRPSFanfoldUS vbPRPSFanfoldStdGerman vbPRPSFanfoldLglGerman vbPRPSUser

32 33 34 35 36 37 38 39 40 41 256

Envelope C65, 114 x 229 mm Envelope B4, 250 x 353 mm Envelope B5, 176 x 250 mm Envelope B6, 176 x 125 mm Envelope, 110 x 230 mm Envelope Monarch, 3 7/8 x 7 1/2 in. Envelope, 3 5/8 x 6 1/2 in. U.S. Standard Fanfold, 14 7/8 x 11 in. German Standard Fanfold, 8 1/2 x 12 in. German Legal Fanfold, 8 1/2 x 13 in. User-defined impresso que ser usada pela resoluo que a impressora ir -1 -2 -3 -4 Resoluo Draft Baixa Resoluo Mdia Resoluo Alta Resoluo

Port: Retorna o nome da porta de impressora padro. PrintQuality: Determina ou seta a usar. VbPRPQDraft vbPRPQLow vbPRPQMedium vbPRPQHigh

Os mtodos: EndDoc: Finaliza a impresso de um relatrio KillDoc: Termina imediatamente a impresso NewPage: Fora a impresso passar para a prxima pgina. Print <expresso> : Imprime uma expresso ou varivel especificada. O Objeto Printer no aparece na caixa de ferramentas, nem possui um cone como outros objetos. Ele interno que no possui formato visual. Para desenvolver nossa rotina de impresso, d um click na opo Impresso Estoque no menu e vamos codificar o programa:

270

Comandos Condicionais e de Lao

Criamos primeiro as variveis que iro manipular o Banco de Dados e a tabela. Como vamos imprimir o contedo da tabela de mercadoria isto se torna necessrio. A varivel Linha ir fazer um contador de linhas, para podermos controlar quantas linhas esta sendo impressa numa pgina. Depois colocamos uma mensagem para o usurio ter certeza que realmente quer imprimir o relatrio. Se o MsgBox retornar o nmero 7 sinal que o usurio digitou escolheu no.

Na seqncia definimos o contador de linha para 1, e abrimos o banco de dados e a tabela de mercadoria. No necessrio abrir o ndice. Se no tivssemos aberto a ordem em que os registros iriam aparecer no relatrio seria a ordem em que foram digitados. Como abrimos um ndice que ordena todos os dados na ordem de cdigo, o relatrio ser impresso ento nesta ordem. Caso houvesse necessidade de criar um relatrio na ordem alfabtica da descrio das mercadorias, ento seria necessrio criar um ndice pelo 271

Lionardo@base.com.br

campo Descrio, ou uma SQL ordenado pela "Descrio", e abri-lo na rotina de impresso. Usamos o objeto Printer para definir com qual fonte de letra o relatrio ser impresso e qual o tamanho usado

Abrimos um DO WHILE para sempre verificar se o fim do arquivo foi atingido. Enquanto no for (Not TBMercadoria.EOF) executa as rotinas definidas entre o DO WHILE e o LOOP. Em seguida verificado se o contador de linha igual a 1. Se for chama uma funo chamada Cabealho. Esta funo ir imprimir o cabealho de nosso relatrio. O contedo dos campos da tabela de mercadoria inserido dentro das variveis, para depois podermos imprimir no papel estas variveis. Usamos a funo Format para melhorar a formatao numrica. Usamos a propriedade CurrentX para definir qual ser a coordenada horizontal a ser utilizado durante a impresso. A propriedade Print quem efetivamente faz a impresso. Em conjunto com o Print usamos a funo TAB que efetua uma tabulao para cada varivel que ser impressa. Isto ajuda a alinhar as expresses impressas. 272

Comandos Condicionais e de Lao Note que colocamos um ; aps o nome da varivel que ser impressa. Usamos isto para o Objeto Printer continuar imprimindo na mesma linha. No ultimo campo a ser impresso TBMercadoria("Valor") j no necessrio, pois a prxima impresso j ser na linha seguinte. Fazemos depois um incremento de + 1 na varivel linha. Isto para atualizar o contador de linha. MoveNext posiciona a tabela no prximo registro, pois o atual j foi impresso e agora necessrio ler o registro seguinte. Se o registro seguinte for o fim do arquivo, quando a execuo do programa encontrar o LOOP esta rotina ser encerrada. No nosso exemplo definimos que numa pgina pode conter no mximo 50 linhas. Ento quando o contador de linha chegar neste ponto, o Objeto Printer chamar uma nova pgina (NewPage) e o contador de linha volta a ser igual a 1.

Encerramos nossa rotina com um EndDoc que finaliza a impresso e um Close fechando a tabela e o banco de dados. Neste programa esta faltando, cabealho: para encerrar, a funo que cria o

273

Lionardo@base.com.br

Quando colocamos um print sozinho, sem nenhuma expresso acompanhado, indica que queremos forar a impresso de uma linha em branco. Private Sub mnuImpresso_Click() Dim BancoDeDados As Database Dim TBMercadoria As Recordset Dim Linha As Integer If MsgBox("Inicia a impresso?",36,"Relao Mercadoria")=7 Then Exit Sub End If Linha = 1 Set BancoDeDados = OpenDatabase(App.Path & "\Estoque.MDB") Set TBMercadoria = BancoDeDados.OpenRecordset("Mercadoria", dbOpenTable) TBMercadoria.Index = "IndCdigo" Printer.FontName = "Arial" Printer.FontSize = 10 Do While Not TBMercadoria.EOF If Linha = 1 Then Cabealho End If

Printer.CurrentX = 300 Printer.Print Tab(3); TBMercadoria("Cdigo"); Printer.Print Tab(10); TBMercadoria("Descrio"); Printer.Print Tab(50); Format(TBMercadoria ("Quantidade"), "##,###"); Printer.Print Tab(70); Format(TBMercadoria("Valor"), "Currency") 274

Comandos Condicionais e de Lao

Linha = Linha + 1 TBMercadoria.MoveNext If Linha >= 50 Then Printer.NewPage Linha = 1 End If Loop Printer.EndDoc TBMercadoria.Close BancoDeDados.Close End Sub Private Function Cabealho() Printer.Print Printer.Print Printer.Print Printer.Print Printer.Print Printer.Print End Function Tab(3); "Cd"; Tab(10); "Descrio"; Tab(50); "Quantidade"; Tab(70); "Valor" String(100, "-")

14.2 CRYSTAL REPORTS


O Crystal Reports consegue dar uma aparecia mais profissional para os relatrios, alem do usurio poder dar um "preview" de seus relatrios antes deles serem impressos. Usar o Crystal muito simples e fcil. Muito mais fcil que usar o Printer para relatrios. Entre no programa atravs do menu Add-Ins e entre na opo Report Designer.

275

Lionardo@base.com.br

Vamos usar este gerador de relatrio para criar um relatrio de Mercadoria. No ser necessrio codificaes complexas, pois o programa automatiza muitas tarefas. Ao aparecer o Programa Crystal Reports entre na opo NEW.

Ir aparecer uma janela onde devemos escolher qual estilo de relatrio ser criado. Vamos usar o "Standard" 276

Comandos Condicionais e de Lao

Para que o programa crie nosso relatrio devemos passar algumas informaes, e essas informaes sero coletadas atravs dessas opes que vem a seguir:

Aperte o boto Data File para escolher o banco de dados que sera usado no relatrio. Depois de escolhido ir aparecer a relao de todas as tabelas existentes no Banco de Dados. Escolha o Arquivo "Estoque.MDB".

277

Lionardo@base.com.br

Aperte o boto "Next >>"

Na prxima tela aparece as tabelas e um grfico mostrando o relacionamento entre as tabelas.

278

Comandos Condicionais e de Lao

Nesta tela selecionamos os campos que vo compor o relatrio. Escolha um campo na lista que aparece no "Database Fields", aperte o boto "Add" e d um ttulo para o campo (que ir aparecer no cabealho) no item Column Heading.

Escolha somente os campos da tabela de Mercadoria. 279

Lionardo@base.com.br

Se quisermos criar grupos ou subgrupos, usamos esta tela. Como por exemplo, um relatrio que aparece primeiro o grupo de Material Esportivo e depois o Grupo de Roupa Social. Quando escolhemos um campo que ser a chave do grupo, o relatrio ordena o relatrio primeiro pelo grupo. No nosso caso, no existe grupo. Aperte o "Next"

Ir aparecer esta mensagem, alertando que como no foi escolhido nenhum grupo no ser possvel entrar nesta opo. Aperte o boto OK e vamos direto para a opo "6 - Select"

280

Comandos Condicionais e de Lao

Nesta tela pode-se fazer um filtro dos registros que iro compr o relatrio. No faremos nenhum tipo de filtro.

Aqui colocamos um ttulo para o relatrio e escolhemos um estilo na lista que aparece em "Style". Escolha Shading . Cada estilo monta o relatrio 281

Lionardo@base.com.br

num formato diferente. Deve-se escolher o que mais se adapta ao tipo que relatrio que se esta criando. Aperte agora o boto "Preview Report" para ver como ficou.

Vamos agora colocar um total para o "Valor". D um click com o mou se em cima do registro e aperte o boto da direita. 282

Comandos Condicionais e de Lao Dentre as vrias opes que ir aparecer, escolha "Inset Grand Total". Ser ento inserido um totalizador para o "Valor".

Uma vez feito tudo isto, nosso relatrio esta pronto. Vamos agora salvar o arquivo e mandar executar em nosso programa. Va no menu "File", opo "Save" e grave este relatrio com o nome de "Mercadoria". Feche o Cristal Reports e volte para o nosso programa. Crie mais um formulrio para o projeto, e d o nome de "frmRelatrios". Abra uma opo no menu principal do programa e acrescenteo nele.

283

Lionardo@base.com.br

Nesta janela o usurio ir escolher o tipo de relatrio que ele deseja e pressiona o boto "Imprimir". Note que inserimos no formulrio um novo controle chamado CrystalReports. Ele quem ir na verdade fazer todo o trabalho "pesado" de gerar o relatrio. Vamos ento codificar o boto imprimir:

Primeiro verificamos se o usurio escolheu o relatrio de mercadoria. Caso seja positivo mudamos o ponteiro do mouse para uma ampulheta (para no deixar o usurio fazer nada ate que o relatrio seja concluido. 284

Comandos Condicionais e de Lao Na propriedade ReportFileName coloque o arquivo que criamos. L existe a matriz de nosso relatrio. Em DataFiles especificamos o nome do banco de dados que ser lido pelo relatrio. CopiesToPrinter determina quantas copias ter o relatrio. Na propriedade Destination informamos que o relatrio deve ser gerado na tela primeiro antes de ir para a impressora. Por fim, usamos o Action que envia todas as informaes captadas para o Crystal e cria o relatrio.

Quando o relatrio criado e mostrado na tela, usamos os botes que fica na parte inferior para manipular o relatrio.

Os botes em forma de seta so utilizados para navegar nas pginas do relatrio. O boto em forma de impressora envia o relatrio para a porta de impresso. O relatrio de Vendas tem uma particulariadade. Nele deve conter o nome do cliente e o nome da mercadoria comprada, entretanto na tabela de Vendas no existe esses dados, existe somente os cdigos relacionados. Como o Crystal Reports faz o relacionamento entre tabelas de forma quase que automaticas, temos que somente inserir os respectivos campos.

285

S-ar putea să vă placă și