Vous êtes sur la page 1sur 284

Passo a Passo

Lionardo Fonseca Paiva


Lionardo@base.com.br

Lionardo@base.com.br

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

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

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

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

CONTROLES ESPECIAIS ................................................................................. 89


5.1
5.2

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

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


CONTROLE DATA ...........................................................................................255
DBGRID .......................................................................................................257
IMPRESSO...................................................................................................265
7

Lionardo@base.com.br

14.1
14.2

PRINTER ........................................................................................................ 267


CRYSTAL REPORTS ........................................................................................ 274

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
formulrio.
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()
End Sub
21

Lionardo@base.com.br

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

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.

23

Lionardo@base.com.br

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 que o
29

Lionardo@base.com.br

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:

(Default) Ponteiro padro.

Ponteiro em forma de seta

Ponteiro de seleo exata


31

Lionardo@base.com.br

Seleo de escrita

4
5

cone
Seleo de Mover Objetos

Redimensionamento na diagonal

Redimensionamento na vertical

Redimensionamento na diagonal

Redimensionamento na horizontal

10

Seleo alternada

11

Sinal de ocupado.

12

No disponvel ( Ocupado )

13

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:
32

Controles Bsicos
Caption = Lanamentos dos Exames
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

Boto2

Explicao

Caption

OK

Cancelar

ttulo para o boto

Name

cmdOk

cmdCancelar

nomear o boto

Cancel

False

True

habilitar ESC

Default

True

False

habilitar ENTER

D dois clickes no boto Cancelar. Ir aparecer a janela


de codificao para o boto Cancelar. Digite: Print Voc
apertou a tecla ESC.
36

Controles Bsicos
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.

2.1.3

apertarmos o boto

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.
BackStyle: Escolhe entre o fundo Transparente ou Opaco para o label.
38

Controles Bsicos
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

TxtNome

txtSexo

TxtExame

Text

deixar vazio

deixar vazio

MaxLength

30

deixar
vazio
9

ForeColor

Vermelho

Preto

Preto

15

Coloque agora 3 Objetos Label no formulrio na seguinte


disposio:

Propriedade

Label1

Label2

Label3

Name

lblNomePaciente

lblSexo

LblExame

Caption

Nome do Paciente

Sexo

Exame a ser feito


41

Lionardo@base.com.br

AutoSize

True

True

True

Appearance

3D

3D

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.
Change: Ocorre sempre que o usurio altera o valor contido na caixa de texto.
42

Controles Bsicos
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
29
30

Backspace

Tab

Enter

Esc

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
61
62

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

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
93
94

@
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
[
\
]
^

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
125
126

`
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
{
|
}
~
43

Lionardo@base.com.br

31

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
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
44

Controles Bsicos
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
captulos. Por ora, para se ter um entendimento melhor do
que ocorreu durante a execuo deste evento vamos explicar
rapidamente essas novas expresses:
45

Lionardo@base.com.br

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
tiver leve o mouse at a caixa de combinao com a lista
dos eventos e selecione a palavra Change.

46

Controles Bsicos

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:

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
digitou), for igual a vazio (), ento as propriedades
Enabled do lblSexo e do txtSexo sero desabilitadas,
47

Lionardo@base.com.br

caso contrario
habilitadas.

Else

),

essas

propriedades

sero

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

True

Habilita mltiplas linhas

Text

Vazio

Tira o texto Text1

ScrollBars

2 - Vertical

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 esta com


valor
0,
de
desmarcado, ou no
foi escolhido.

Value est com valor


1, de selecionado ou
checado.

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

Option1

Name

optMasculino

OptFeminino

Masculino

Feminino

Caption

Option2
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
Frame:
56

Controles Bsicos
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

8 - O que um Evento?
57

Lionardo@base.com.br

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
com 60 dias. Logicamente que no campo valor no poder aparecer letras.

58

Controles Bsicos

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,
sem
nenhum
texto
digitado em seu
interior.

Caixa de Lista
Vazia
com
vrios nomes
inseridos na
propriedade
List

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. Os Columns ajustado para 1. Os Columns igual a 2. Os nomes


nomes ficam em 1 coluna de nomes ficam e 1 coluna de ficam dispostos em duas
forma vertical.
forma horizontal.
colunas de forma horizontal.
63

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 Boto1
Boto2
Boto3
Quantidade
ndice
Text
Caption
Name

cmdQuantidade

Cmdndice

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

Propriedadades

cmdText
formulrio.

AutoSize

Label1
True

Label2
True

Label3
True

Caption

deixar vazio

deixar vazio

deixar vazio

Name

lblQuantidade

Lblndice

lblText

Vamos agora codificar o programa para quando o usurio


apertar o boto Quantidade aparecer a quantidade de
itens dentro da caixa de Lista. Quando apertar o boto
66

Selecionando Itens
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

Adicionar

Remover

Limpa Tudo

Name

CmdAdicionar

cmdRemover

CmdLimpaTudo

Propriedadades

Caixa de Lista

Caixa de Texto

Name

LstNomes

txtNome

Text

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

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.
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!
81

Lionardo@base.com.br

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
tambm pode reverter ou alterar as condies que voc define no
procedimento de evento GotFocus do objeto. Outros usos para os
83

Lionardo@base.com.br

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
o Visual Basic perguntar se voc esta criando um array de
85

Lionardo@base.com.br

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

Lionardo@base.com.br

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

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

0
9
#

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

Exibe janela com opes de abrir

NomeDoObjeto.ShowSave

Exibe janela com opes para salvar

arquivo.
arquivo.
NomeDoObjeto.ShowPrinter
impresso.

janela

com

opes

de

Crie um formulrio da seguinte forma:

Nomeie os objetos:
Tipo de Objeto
Label
Command1
Command2
CommonDialog

Exibe

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:

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

Descrio

Abrangncia

Integer
Long
Byte
Single

Numrico Inteiro
Numrico Inteiro
Numrico Inteiro
Numrico real

Double

Numrico real

Currency

Numrico Valores monetrios


Texto

-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)

String

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.
Se usssemos neste exemplo 12 & 13 resultaria em 1213 apesar da
expresso 13 ser numrica.
116

Variveis e Matrizes
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)
a - 3 = #12/07/96# ( uma data menos um valor numrico subtrai a
quantidade de dias na data.
117

Lionardo@base.com.br

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
NomeTeste = Fechar
End Sub
118

Variveis e Matrizes
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
todas
as
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

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:
Option Base 1
125

Lionardo@base.com.br

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

Coluna 2

Linha 1

Janeiro

(1,1)

Venda Ruim

(1,2)

Linha 2

Fevereiro

(2,1)

Venda Regular

(2,2)

Linha 3

Maro

(3,1)

Venda Boa

(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 4


CheckBox com as seguintes propriedades:
Propriedades
Check1
Check2
Check3
chkNome
chkNome
chkNome
Name
Caption

Figueiredo

Jos Sarney

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
Resulta em Lionardo Fonseca Paiva. O operador + tambm pode
ser usado, mas no aconselhado, uma vez que o & possui uma
136

Operadores
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 vrias 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

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.

9.2
146

COMANDOS DE LAO

no

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.
ParteDaData = DatePart(<intervalo>, <expressoData>)
161

Lionardo@base.com.br

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
MINUTE: Retorna o minuto de uma expresso de data e hora.
162

Comandos Condicionais e de Lao


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>)

Para criar um programa que faa calculos de data


bastante simples se usarmos as funes acima de forma
correta.
163

Lionardo@base.com.br

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 na
169

Lionardo@base.com.br

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

vbNormal
vbReadOnly
vbHidden
vbSystem
vbDirectory
vbArchive

Normal.
Somente Leitura.
Oculto.
Arquivo de sistema
Diretrio ou pasta.
O arquivo foi modificado desde o ltimo

backup.
Print GetAttr("C:\WINDOWS\SYSTEM.INI")
Valor Impresso: 32
171

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:

Testa se uma expresso referencia a um objeto OLE

vlido.
VarivelBoolean = IsObject(<Expresso>)
VARTYPE: Retorna o tipo de varivel especificada como argumento:
VarivelNumrica = VarType(<Varivel>)
Retorna os valores abaixo:
172

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

Valor

Descrio

vbOKOnly
VbOKCancel
VbAbortRetryIgnore
VbYesNoCancel
VbYesNo
VbRetryCancel
VbCritical
VbQuestion

0
1
2
3
4
5
16
32

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".
Exibe o cone "Consulta de advertncia".
175

Lionardo@base.com.br

VbExclamation
VbInformation
VbDefaultButton1
VbDefaultButton2
VbDefaultButton3
VbApplicationModal

48
64
0
256
512
0

VbSystemModal

4096

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

Valor de Retorno

Boto escolhido

vbOK

"OK"

vbCancel

"Cancelar"

vbAbort

"Anular"

vbRetry

"Repetir"

vbIgnore

"Ignorar"

vbYes

"Sim"

vbNo

"No"

176

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 de
181

Lionardo@base.com.br

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 (" ").
\

Exibe o caractere seguinte da seqncia de caracteres de

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
Fixed : Exibe pelo menos um dgito esquerda e dois dgitos direita
do separador de casa decimal.
182

Comandos Condicionais e de Lao


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

Formatao de Expresses Data e Hora

Comandos Condicionais e de Lao


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

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.

190

<

Exibe todos os caracteres no formato de minsculas.

>

Exibe todos os caracteres no formato de maisculas.

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
Quantidade
Valor

CAMPO:
Nome
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

Data Type
Text
Text
Currency

Size
3
30
N/A

Tabela: Vendas
Field Name
Cdigo
CdCliente
ValorVenda
QuantidadeVendida

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
If TBCliente.BOF = True Then
232

Comandos Condicionais e de Lao


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

Cdigo

do

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
Frame1.Enabled = False
233

Lionardo@base.com.br

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)
If KeyAscii = vbKeyReturn Then
SendKeys ("{TAB}")
234

Comandos Condicionais e de Lao


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
cmdAlterar.Enabled = True
cmdConsultar.Enabled = True
cmdExcluir.Enabled = True
cmdAnterior.Enabled = True
235

Lionardo@base.com.br

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 = ""
txtLimiteCrdito = ""
End Function

236

Comandos Condicionais e de Lao

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
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:

238

Comandos Condicionais e de Lao

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:

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
241

Lionardo@base.com.br

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:

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:

242

Comandos Condicionais e de Lao

A incluso de registros dentro da tabela de vendas igual ao


apresentado nos outros programas:

243

Lionardo@base.com.br

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:

A excluso tambm semelhante aos anteriores:


244

Comandos Condicionais e de Lao

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:


245

Lionardo@base.com.br

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
246

Comandos Condicionais e de Lao


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()
TBVendas.MoveNext
If TBVendas.EOF = True Then
247

Lionardo@base.com.br

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
End Sub
Private Sub Form_Unload(Cancel As Integer)
248

Comandos Condicionais e de Lao

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
End If
lblDescrio = TBMercadoria("Descrio")
249

Lionardo@base.com.br

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")
txtValorVenda = Format(TBVendas("ValorVenda"),
"Standard")
txtQuantidadeVendida = TBVendas("QuantidadeVendida")
TBMercadoria.Seek "=", txtCdigo
TBCliente.Seek "=", txtCdCliente
250

Comandos Condicionais e de Lao


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.

251

Lionardo@base.com.br

252

Comandos Condicionais e de Lao

13 USANDO O CONTROLE
DATA

Data
DBGrid

253

Lionardo@base.com.br

254

Comandos Condicionais e de Lao

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.

255

Lionardo@base.com.br

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.

256

Comandos Condicionais e de Lao

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
257

Lionardo@base.com.br

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.
Fazendo isto estaremos fazendo uma ligao entre o banco de dados e a
258

Comandos Condicionais e de Lao


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
259

Lionardo@base.com.br

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.

260

Comandos Condicionais e de Lao

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:

261

Lionardo@base.com.br

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.

262

Comandos Condicionais e de Lao

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, us-las.
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.

263

Lionardo@base.com.br

264

14 IMPRESSO

Printer
Crystal Reports

Lionardo@base.com.br

266

Comandos Condicionais e de Lao

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

Lionardo@base.com.br

FontSize: Determina o tamanho que a fonte de letra escolhida usar.


FontUnderline: Determina se a fonte ser sublinhada.
Orientation: Determina a orientao do papel: Retrato ou Paisagem.
Usamos as constantes para definir o tipo escolhido:
vbPRORPortrait 1
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
268

Comandos Condicionais e de Lao


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

Port: Retorna o nome da porta de impresso que ser usada pela


impressora padro.
PrintQuality: Determina ou seta a resoluo que a impressora ir usar.
VbPRPQDraft
vbPRPQLow
vbPRPQMedium
vbPRPQHigh

-1
-2
-3
-4

Resoluo Draft
Baixa Resoluo
Mdia Resoluo
Alta Resoluo

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:

269

Lionardo@base.com.br

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
270

Comandos Condicionais e de Lao


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

Lionardo@base.com.br

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:

272

para encerrar, a funo que cria o

Comandos Condicionais e de Lao


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")
273

Lionardo@base.com.br

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

Tab(3); "Cd";
Tab(10); "Descrio";
Tab(50); "Quantidade";
Tab(70); "Valor"
String(100, "-")

End Function

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.

274

Comandos Condicionais e de Lao

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

Lionardo@base.com.br

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

276

Comandos Condicionais e de Lao

Aperte o boto "Next >>"

Na prxima tela aparece as tabelas e um grfico mostrando o


relacionamento entre as tabelas.

277

Lionardo@base.com.br

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.


278

Comandos Condicionais e de Lao

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"

279

Lionardo@base.com.br

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

280

Comandos Condicionais e de Lao


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

Lionardo@base.com.br

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.

282

Comandos Condicionais e de Lao

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

Lionardo@base.com.br

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.

284

Vous aimerez peut-être aussi