Logo Passei Direto
Buscar

Esta é uma pré-visualização de arquivo. Entre para ver o arquivo original

Microsoft Visual Basic 4.0 1
 
 
 
Módulo 1 
 
Criando Aplicações 
Visual Basic 
 
 
 
 1.1 Programação Procedural Versus Programação 
 Orientada a Eventos 
 
 
 Na programação procedural, ou seja, baseada nas chamadas de 
procedimentos/rotinas, a aplicação em si inicia na primeira linha do código e 
segue um fluxo determinado pelo próprio programa, durante a sua execução. 
 Devido a essa característica, o usuário se vê amarrado à forma de 
trabalho da aplicação. 
 Na programação orientada a eventos, as ações do usuário (comumente 
denominadas eventos) determinam o fluxo de execução do programa, ou seja, 
qual procedimentos/rotina será chamada. 
 
 Isso significa que um programa desenvolvido com base nessa técnica, 
as chamadas das rotinas dependem dos eventos que ocorrem, em outras 
palavras, dependem do que o usuário fará ou não. 
 
 Portanto, com base nisso, podemos definir um evento como sendo uma 
ação reconhecida por um controle, que nada mais é que um objeto adicionado 
ao formulário. Os diversos controles do Visual Basic (campos de entrada, lista 
de opções, caixas de seleção, etc.) reconhecem e respondem a um conjunto 
predefinido de eventos. 
 
 
 Para que um controle responda a um evento de 
uma forma particular, você deverá escrever um 
procedimento na linguagem Visual Basic e atribuir 
esse código ao evento desejado. 
 
 
 
 Por exemplo, você pode escrever uma rotina para avançar para o 
próximo registro de uma tabela de dados assim que o botão identificado pela 
Microsoft Visual Basic 4.0 2
legenda Avança de um formulário for pressionado. Você então atribui o nome 
dessa rotina ao evento Click do botão. Assim, toda vez que o botão for 
pressionado através de um clique do mouse, a rotina será chamada. Após o 
término de sua execução, haverá o retorno automático ao formulário. 
 
 Podemos perceber então que o primeiro passo no desenvolvimento de 
uma aplicação no Visual Basic consiste na criação dos formulários, aplicando-
lhes os controles (botões de ação, menus, caixas de listagem, caixas de 
combinação, etc.). 
 Após isso passamos ao desenvolvimento das rotinas que serão 
vinculadas aos controles do formulário. 
 
 Note que essa técnica difere do processo antigo, em que primeiro o 
programador definia o que seria feito pelo programa (desenvolvia as rotinas), 
para depois pensar na interface com o usuário. Agora o mesmo programador 
sentir-se-á mais livre da árdua tarefa de elaboração dessa interface, já que o 
Visual Basic executa a maior parte do processo, tendo assim mais tempo para 
se concentrar nas rotinas principais do programa. Isso torna a tarefa de 
desenvolvimento de aplicações mais produtiva. 
 
 Do lado do usuário, um programa orientado a eventos é mais fácil de 
assimilar e utilizar, pois ele reflete a maneira como uma pessoa trabalharia no 
mundo real. Não há necessidade de se adaptar ao aplicativo. 
 
 
 1.2 Criando um programa Visual Basic 
 
 Prática : 
 
 Adicionar no formulário : 
 
 1 command : Propriedade Caption = &OK 
 1 Label : Propriedade Caption = Nome 
 1 Textbox : Limpar Propriedade Text 
 1 Label : Propriedade Caption = Endereço 
 1 Textbox : Limpar Propriedade Text 
 
 
 Nomeá-los :Na janela de propriedades colocar no campo Name o nome 
com o prefixo indicativo do tipo de objeto. 
 
 
 
 
 
 
Microsoft Visual Basic 4.0 3
Exemplos: 
 
Objetos Prefixo Exemplo 
form frm frm_cliente 
check box chk chkapenasleitura 
combo box cbo cboidioma 
image img imgicon 
label lbl lblnome 
menu mnu mnufileopen 
text box txt txtnome 
 
 
 
Dica: Para chamar o Help clique no ícone e tecle F1 
 
 
 
 1.3 Algumas Propriedades 
 
 Podemos defini-las em tempo de projeto ou em tempo de execução: 
 
• Tempo de Projeto : No objeto lblnome - clique sobre o objeto uma vez. 
 Propriedade caption : vai para janela de propriedades. 
 Resultado : &NOME ⇒ NOME 
 
( Tecla de Atalho ALT+N ) 
 
• Tempo de Execução : No objeto txtnome - dê um double clique no objeto. 
No evento txtnome_click( ) - colocar : 
 txtnome.text = “BOCA” ou lblnome.caption = 
txtnome.text 
 
 
 Sempre: <nome objeto.propriedade> = <valor>. 
 
 
 
 Executar ⇒ Clicar sobre o Label Nome. 
 
 
 No objeto Form colocar : 
Caption exemplo 
Name frmexemplo 
Backcolor ( escolher ) 
Fillstyle ( escolher ) 
Microsoft Visual Basic 4.0 4
 
 
Uma proprieddade de um objeto1, pode ser alterada 
em tempo de execução por outro objeto2 
 
 
 
 1.4 Métodos 
 
 
 Os métodos determinam a realização de uma ação para um determinado 
objeto. Essa ação quem define é o programador. 
 
Exemplos : 
 
 txtnome.setfocus { posiciona o ‘foco’ para a caixa de texto do 
 objeto txtnome}. 
 
 lblcodigo.move 0,0 { posiciona o objeto lblcodigo para as 
 coordenadas 0,0}. 
 
 txtfrase.textwidth { retorna o tamanho da string do objeto 
txtfrase}. 
 
 frmcliente.hide { esconde, mais permanece na memória 
 principal, o objeto frmcliente}. 
 
 
 
 
 
 
 1.5 Eventos 
 
 É uma ação reconhecida por um formulário ou por um controle, o agente 
da ação pode ser : o usuário ou o código. 
 
Exemplos : 
 
 click 
 dblclick 
 keypress 
 load 
 gotfocus 
 lostfocus 
 
Microsoft Visual Basic 4.0 5
 1.6 Formulários e Controles Básicos 
 
 Formulários 
 
 O usuário interage com os controles no formulário para obter resultados 
 
 
 Algumas Propriedades para Formulários 
 
 backcolor ⇒ cor do fundo 
 borderstyle ⇒ estilo da moeda 
 caption ⇒ cabeçalho 
 name ⇒ nome do objeto 
 
 
 Alguns Métodos para Formulários 
 
 hide ⇒ esconde 
 nome ⇒ movimenta o formulário 
 print ⇒ imprime 
 setfocus ⇒ ativa o formulário 
 show ⇒ mostra na tela o formulário ( semelhante 
 chamada de rotina ). 
 
 
 Alguns Eventos para Formulários 
 
 click ⇒ 1 click 
 dblclick ⇒ 2 clicks 
 gotfocus ⇒ quando ele ganha o foco 
 load ⇒ carrega 
 mousedown ⇒ 1 click para baixo 
 mouseup ⇒ 1 click para cima ( larga o botão ) 
 unload ⇒ descarrega 
 
 
 
 
Obs. : Para obter mais informações, clique no formulário e tecle <F1>. 
 
 
 
Microsoft Visual Basic 4.0 6
 Controle Label 
 
 
 Mostra uma informação estática ( um rótulo). 
 
 Exemplo : Fornecer instruções ao usuário. 
 
 Nome 
 
 ↑ ↑ 
 label textbox 
 
 
 Algumas Propriedades 
 
 caption ⇒ rótulo 
 font ⇒ tipo de letra 
 autosize ⇒ tamanho automático 
 appearance ⇒ aparência (2D,3D) 
 
 Alguns Eventos (mais usados) 
 
 click 
 dblclick 
 
 
 
 Controle Textbox 
 
 Usado para obter informação do usuário. 
 
 
 
Obs. : Você pode utilizar o textbox em conjunto com o controle 
 data, para exibir informações de um Banco de Dados 
 
 
 
 Algumas Propriedades 
 
 multiline ⇒ mais de uma linha 
 passwordchar ⇒ senha ( **** ) 
 Alguns Métodos 
Microsoft Visual Basic 4.0 7
 
 move ⇒ move o objeto 
 setfocus ⇒ deixa o objeto ativo 
 
 
 Alguns Eventos 
 
 change ⇒ qualquer alteração no campo 
 click ⇒ evento clique 
 gotfocus ⇒ evento ganho de foco 
 
 
 
 Controle Commandbutton 
 
 É utilizado para invocar uma ação. A maioria dos formulários possuem 
os controles OK e CANCEL 
 
 
 Algumas Propriedades 
 
 visible ⇒ visível ou não 
 default ⇒ irá indicar que o botão é o que irá ficar ativo 
 inicialmente quando o formulário for lido. ( note 
 que deverá existir apenas um controle de 
 comando default por formulário. 
 
 
 Controle Combobox 
 
 Permite que você selecione uma opção existente em uma lista pre-
determinada, digitando-os em uma caixa de texto associada a esta lista 
 
 
 Data 
 
 Permite acessar dados
armazenados em um arquivo de Banco de 
Dados. 
 
 
 
 Algumas Propriedades 
Microsoft Visual Basic 4.0 8
 
 editmode 
 readonly 
 top 
 database 
 
 
 Menu 
 
 Permite a criação de menus personalizados para a sua aplicação, 
deixando-a com uma aparência mais profissional. 
 
 
 Algumas Propriedades 
 
 appearance 
 name 
 caption 
 index 
 
 
 Evento ( único ) 
 
 click 
 
 
 Ole Container 
 
 Insere no formulário outros aplicativos ( som, .doc, planilha excel, etc). 
 
 
 Picture Box 
 
 O controle picture box é utilizado para exibir imagens de arquivos 
bitmap, icon e metafile. 
 
 
 Timer 
 
 Permite a você executar certas partes de seu código a intervalos de 
tempo. ( Background ) 
 
 Exemplo : A cada ‘ t ‘ segundos você pode verificar se foi realizada a 
inclusão de um nome ou você pode inserir a hora atual. 
Microsoft Visual Basic 4.0 9
 
 
File List Box 
 
 Apresenta uma caixa de listagem de itens. Seu ícone no toolbox 
corresponde à figura de uma folha com a ponta direita superior dobrada. Adiante 
faremos um exercício para melhor entendermos esse controle. 
 
 
 
 
 Prática 1 
 
 
 O Objetivo desta prática é fazer com que o aluno se familiarize com o 
ambiente e obtenha conceito básicos dos objetos do Visual Basic. 
 
 Vamos simular um pequeno editor de texto para que você entenda como 
o controle Timer vai realizando tarefas em segundo plano (background). 
 
 Dentro do seu aplicativo. Inclua no formulário : 
 
1 textbox propriedades ⇒ multiline = true 
 name = txtedit 
 scrollbar = 2-vertical 
 text = <apaga> 
 
1 timer propriedades⇒ interval = 1000(ms), 
 name = timer 
 
1 label propriedades ⇒ caption = <apagar> 
 name = lbltime 
 
 
 
 Na seção General (geral) inclua o seguinte código: 
 
 Public tempo as date 
 
 No procedimento sub form_load() inclua: 
 
 tempo = now 
 
 No procedimento timer_timer inclua: 
 
Microsoft Visual Basic 4.0 10
 lbltime.caption = format(now-tempo, “long time”) 
 
 Execute sua aplicação. 
 
 
 
 Prática 2 
 
 
 
 Para vermos como o controle FileListBox funciona, vamos fazer o 
seguinte: 
 
 Crie um objeto FileListBox em um novo formulário e dê a ele o Nome = 
File1 (Já é o nome default dele!). 
 Depois insira o seguinte código no evento click do formulário: 
 
 
 
Private Sub Form_Click () 
 
Dim nome As String, I As Integer, Msg As String ' Declarando variaveis. 
 
 File1.Pattern = "Arquivo.*" ' Setando a forma geral do nome do arquivo 
 
 For I = 1 To 8 ' oito vezes. 
 nome = "Arquivo." & I 
 Open nome For Output As FreeFile ' cria um arquivo vazio. 
 File1.Refresh ' abre e atualiza o file list box. 
 Close ' fecha ao arquivo. 
 Next I 
 
 Msg = "Tecle OK para remover os arquivos criados." 
 MsgBox Msg ' mostra mensagem. 
 Kill "Arquivo.*" ' Remove os arquivos de teste. 
 File1.Refresh ' atualiza o filelistbox. 
 
 
End Sub 
 
 Agora execute a aplicação. 
 
 Prática 3 
 
 
• Crie um formulário (form) {nomeie, escolha um caption} 
Microsoft Visual Basic 4.0 11
 
• Insira um textbox e um label {nomear, limpar textos} 
 
• No evento form_mousemove inclua o seguinte código: 
 
 Fillcolor = qbcolor (int (rnd * 15)) ‘ sortea-se uma cor para o fundo da 
 ‘circunferência 
 Fillstyle = int(rnd * 8) ‘ sortea-se um grid para a circunf. 
 Circle (x,y), 250 ‘ desenha um círculo 
 
 
 No evento Textbox_change() inclua: 
 
 Label_caption = textbox.text ‘o que for escrito no textbox sairá no 
caption ‘ do label 
 
 
 
 Prática 4 
 
 
 
• Crie um form {nome:login} 
 
• Desenhe o seguinte layout 
 
 
 Forneça seu nome e sua senha para logar: 
 
 Nome OK Command ⇒ cmd Ok 
 cmd 
Cancela 
 Senha Cancelar 
 
 
 
 
 Label Textbox ⇒ txtnome 
 txtsenha 
 
 
 
Obs .: Nomear todos os objetos 
 Limpar textos dos texbox’s 
 
Microsoft Visual Basic 4.0 12
 
 Inserir Código : 
 
 
cmdcancela_click() 
 msgbox “Esse botão cancela a aplicação” 
 end 
 
 
cmdok_click() 
 
 msgbox “Nome do usuário = “ & txtnome.text & “, senha = “& txtsenha.text 
 
txtsenha_change() 
 If txtnome.text<> “ ” and txtsenha.text<> “ “ 
 then cmdok.enable = true 
 endif 
 
txtnome_change() 
 If txtnome.text <> “ “ and txtsenha.text <> “ “ 
 then cmdok.enable= true 
 endif 
 
 
 
 
 Prática 5 
 
 
 
 
 Vamos fazer um programa em Visual Basic que calcule o número de 
dias (aproximado) vividos pelo usuário após ele ter fornecido a idade. 
 
 Adicione a um formulário (abra um novo projeto) 4 label’s, 2 textbox’s e 2 
command’s, conforme a figura abaixo : 
 
 
 
 
 
 Form1 
 
 
 Label1 Text1 
 
Microsoft Visual Basic 4.0 13
 Label2 Text2 
 
 
 Comand1 Comand2 
 
 Label3 
 
 Label4 
 
 
 
 A seguir ajuste as propriedades conforme a tabela a seguir : 
 
 
Objeto Propriedade Valor 
Label1 Autosize 
Caption 
Name 
TRUE 
Entre com seu nome : 
lblNome 
Label2 Autosize 
Caption 
Name 
TRUE 
Entre com sua idade : 
lblidade 
Label3 Autosize 
Caption 
Name 
TRUE 
(nenhum) 
lblNomeResposta 
Label4 Autosize 
Caption 
Name 
TRUE 
(nenhum) 
lblidadeResposta 
text1 Name 
Text 
txtNome 
(nenhum) 
text2 Name 
Text 
txtIdade 
(nenhum 
Command1 Caption 
Name 
Default 
&OK 
btnOK 
TRUE 
Command2 
 
 
Caption 
Name 
 
&Cancela 
btnCancela 
 
Form1 Caption 
Name 
Dias vividos 
Idade 
 
 
 
Obs : A propriedade “default” do objeto command1 está setada em “TRUE” 
para que inicialmente, quando o usuário teclar ENTER, acione o botão OK. 
 
 
Microsoft Visual Basic 4.0 14
 
 A seguir inserir o código 
 
 btnOK_click() 
 
 DIM idade as integer, dias as long 
 idade = val(txtidade.text) 
 dias = idade * 365 
 lblNomeResposta.caption = txtnome.text 
 lblidadeResposta.caption = “Você viveu até hoje aproximadamente “ 
 &dias& “dias.” 
 
 
 btnCancela_click() 
 end 
 
 
 
 Para executar : 
 
1. 4 
2. Criando um .EXE 
• Selecione opção Make EXE File do menu File. 
 
• Escolha Options. 
 
• No quadro Version Number podemos entrar com o número da versão 
do programa. 
 
• No quadro application podemos informar o nome do programa ou um 
ícone. 
 
• No quadro version information podemos comentar o programa. 
 
Clique OK duas vezes depois execute o programa através da pasta onde foi 
gerado o executável. 
 
 
 
 1.7 Criando Rotinas para Validação de Dados 
 
 
 
Como fazer para inibir a entrada de dados numéricos em um textbox alfabético 
e/ou a entrada de
dados alfabéticos em um textbox numérico ? 
 
Microsoft Visual Basic 4.0 15
 
 
 Faça o seguinte, crie um novo formulário com apenas um objeto (um 
textbox) e no procedimento Keypress (para achá-lo clique sobre a seta da caixa 
de combinação denominada Proc) do objeto textbox e insira o código: 
 
 If keyascii >= asc(“0”) and keyascii <= asc(“9”) then keyascii = 0 
 
 Isso irá inibir a entrada de dados numéricos. 
 
 Asc(X) - retorna a ordem de X na tabela ascii, então, se o caractere 
teclado estiver entre 0 e 9 o campo é realimentado. 
 
 Para inibir entrada alfabética, insira o código a seguir em 
txtidade_keypress() : 
 
 If keyascii < asc(“0”) or keyascii > asc(“9”) then keyascii = 0 
 
 Para convertermos caracteres alfabéticos, por exemplo nomes de 
pessoas, para maiúsculos fazemos: 
 
 Private Sub Text1_KeyPress(KeyAscii As Integer) 
 
 If KeyAscii >= Asc("0") And KeyAscii <= Asc("9") Then 
 
 KeyAscii = 0 
 
 ElseIf KeyAscii >= Asc("a") And KeyAscii <= Asc("z") Then 
 
 KeyAscii = KeyAscii - 32 
 
 End If 
 
 
 
 
Módulo 2 
 
Trabalhando com 
Formulários 
 
 
 
Microsoft Visual Basic 4.0 16
 Cada formulário na sua aplicação é gravado com a extensão .FRM e 
contém: 
 
• As instâncias das propriedades do formulário e do controle. 
 
• Declaração das variáveis ao nível de formulário. 
 
Procedimentos e módulo “General”. {O código situado neste módulo pode ser 
“visto” por todos os procedimentos do formulário} 
 
 
 
 2.1 Configurando o Ambiente de Trabalho 
 Menu Tools/Options 
 
 
 Ambiente (Environment) 
 
 
 Grid do formulário(Form design grid) : determina o espaçamento do grid 
do formulário. 
 
 Janelas superiores(Windows on top) : Determina quais janelas sempre 
serão mostradas durante o projeto. 
 
 Exige declarações de variáveis(Require variable declaration) : Determina 
a obrigatoriedade de declaração de variáveis (cuidado !!!) 
 
 Checagem automática de sintaxe (Auto sintaxe check) : quando 
permitida fornece correção ao código durante implementação. 
 
 
 
 Project 
 
 Startup form : Indica qual formulário deverá ser executado incialmente. 
 
 
 
 
É comum o programador ter mais de um formulário 
em umaplicativo e com isso se esquecer de setar o início da 
execução para o formulário inicial. Vamos prestar atenção. 
 
 
Microsoft Visual Basic 4.0 17
 
 
 
 
 
 Editor 
 
 
 Fonte(Font) : Determina a fonte usada nos códigos. 
 Tamanho(Size) : Determina o tamanho da fonte usada nos códigos. 
 
 Cor do código(code color) : determina a cor do código. 
 
 
 2.2 Interagindo com o Usuário 
 
 
 2.2.1 Função MSGBOX 
 
 
 Mostra informações ou questionamento ao usuário. 
 
 Sintaxe : 
 
 MSGBOX (Mensagem, [botão],[Título do Botão]) 
 
 Mensagem - Informação enviada ao usuário. 
 
 Botão - Tipo de caixa de diálogo + tipo de ícone. 
 
 
Valor Tipo de Ícone 
16 ⊗ 
32 ? 
48 ! 
64 i 
 
 
 
Valor Tipo de Caixa 
0 OK 
1 OK, Cancela 
2 Aborta, Retorna, Ignora
Microsoft Visual Basic 4.0 18
3 Sim, Não Cancela 
4 Sim e Não 
5 Retorna e cancela 
 
 
 
 
 
Valor Botão Default Ativo 
0 1° Botão 
256 2° Botão 
512 3° Botão 
 
 
 
 A função MSGBOX irá retornar um valor baseado no tipo de caixa 
escolhida. 
 
 
Botão Valor(constantes) 
OK vbok(1) 
Cancela vbcancel(2) 
Aborta vbabort(3) 
Retorna vbretry(4) 
Ignore vbignore(5) 
Yes vbyes(6) 
No vbno(7) 
 
 
Exemplo : 
 
 Inserir o seguinte código em um objeto cmdaqui com caption = clique 
aqui. 
 
 
 Clique Aqui 
 
 
 No evento click do objeto cmdaqui insira o código 
 
 
Private Sub cmdaqui_Click() 
 
Dim Resposta As Integer 
 
Microsoft Visual Basic 4.0 19
 Resposta = MsgBox("quer continuar?", 4 + 48 + 256, "mensagem") 
 
 If Resposta = vbYes Then MsgBox "Escolheu SIM", 0 + 48 + 0, "Resultado" 
 Else MsgBox "Escolheu NÃO", 0 + 48 + 0, "Resultado" 
 End Sub 
 2.2.2 Caixa de Entrada (INPUTBOX Function) 
 
 
 Esta função fornece um meio fácil de obter informações do usuário. É 
semelhante ao controle textbox, difere na emissão de uma caixa de diálogo. 
 
 
 Sintaxe : INPUTBOX (Mensagem, Título da caixa, Mensagem Default) 
 
 Exemplos: 
 
• Crie um objeto command (cmd) 
 
• No evento Dbclick insira o código 
 
 Private Sub Form_DblClick() 
 
 Dim arquivo As String 
 
 
 arquivo = InputBox("Entre com o nome do arquivo", "Abrir Arquivo", "C:\") 
 MsgBox "Arquivo " & arquivo & " aberto ! " 
 
 End Sub 
 
 
 
 
Dica : Para mais informações, veja “INPUTBOX” no Help 
 
 
 
 
 2.3 Gerenciando Formulários 
 
 
 Na maioria dos aplicativos a interface com o usuáro é composta por 
mais de um formulário. 
 O formulário “STARTUP” é mostrado automáticamente quando a 
aplicação VB é inicializada. 
Microsoft Visual Basic 4.0 20
 
 
 
 
 
Ação Método ou Função 
Lê um formuláro na memória mas não 
mostra na tela 
LOAD 
Lê e mostra um formulário SHOW 
Mostra um formulário já lido SHOW 
Esconde um formulário mostrado na tela HIDE 
Esconde e tira da memória um 
formulário 
UNLOAD 
 
 
 Exemplo : 
 
 
Frmform1.show Frmform1.hide 
Load Frmform1 Unload Frmform1 
 
 
 
 Formulário Modal ou Não-Modal 
 
 
 Um formulário Modal não permite que o usuário interaja com outros 
formulários da aplicação ao mesmo tempo (como o “Save File as”) 
 
 Um formulário Não-Modal permite que o usuário escolha entre os 
formulários. 
 O método Show seta um formulário como modal ou não modal. 
 
 Exemplo: 
 
 Frmform1.show vbmodeless ‘ não modal 
 Frmform1.show vbmodal ‘ modal 
 
 
 
 
Terminando uma aplicação 
 
 END faz um Unload em todos os formulários e termina a aplicação. 
 
Microsoft Visual Basic 4.0 21
 
 
 
 
 Prática 6 
 
 
 
 Faça um aplicativo que calcule raízes de um polinômio de grau dois. O 
polinômio é da forma : 
 
 AX2 + BX + C = 0 
 
 Relembrando : 
 
 A,B coeficientes da equação 
 C termo independente 
 
 Resolver uma equação do 2° grau é encontrar o valor ou os valores 
que se colocados no lugar da variável X, tornam a sentença verdadeira. 
 A fórmula para encontra as raízes (X1,X2) é a seguinte: 
 
 X = - B ± SQR( delta) , Delta = B^2 - 4AC 
 2A 
 
 Os resultados deverão ser fornecidos por outro formulário. 
 
 
 
 
 Você deverá fazer esta prática sozinho! 
 
 Mesmo sem conseguir você estará assimilando 
com maior ênfase as características da programação 
orientada a evento e os “macetes” do ambiente Visual Basic. 
 Deixe para olhar a resolução depois que você “eventualmente” se 
perdeu! 
 
 
 
 
 
 Resolução: 
 
 Passos : 
Microsoft Visual Basic 4.0 22
 
 Crie um formulário com as seguintes propriedades : 
 
 Name - Frmmain 
 Caption - Equação do 2° grau 
 
 
 
Objetos : 
 
Label 
 da Equação 
ientes A= 
 3 - Name lblB 
 Caption B= 
 - Name lblC 
o independente C= 
ular 
 
r 
 
 
 
 1 - Name lblDados
 Caption Dados
 2 - Name lblA 
 Caption Coefic 
 
 
 4 
 Caption Term
 
Command 
 
 1 - Name cmdcalc
 Caption &Calcular
 Default TRUE 
 2 - Name cmdsai
 Caption &Sair
 
 
Textbox 
 
 1 - Name TXTA 
 Text <vazio> 
Microsoft Visual Basic 4.0 23
 Maxlength 5
2 - Name TXTB 
 Text <vazio> 
 Maxlength 5 
 
 
double , delta as double, A as double, B 
 
 
 
 Raiz2 = (-(-b) - SQR(delta))/(2*A) 
 FrmResultado.txtx1.text = Raiz1 
Resultado.txtx2.text = Raiz2 
 FrmMain.Hide 
do.Show 
 Elseif Delta = 0 then 
 Raiz1 = (-(b) + SQR(delta))/(2*A) 
 FrmResultado.txtx1.text = Raiz1 
 FrmResultado.txtx2.text = Raiz2 
 FrmResultado.Show 
 Else 
 Msgbox ‘Não existem raízes reais !!!” 
 Endif 
 EndSub 
 
 CmdSair_click() 
 End 
 EndSub 
 
 
 A seguir crie outro formulário com as seguintes caracteristicas: 
Name FrmResultado 
Caption Resultado 
 
 3 - Name TXTC 
 Text <vazio>
 Maxlength 5 
 
Código 
 
 CmdCalcular_click() 
 
 DIM Raiz1 as double, Raiz2 as 
 as double, C as double 
 A = VAL (txta.text) 
 B = VAL (txtb.text) 
 C = VAL (txtc.text) 
 Delta = (B*B) - 4*A*C 
 If Delta>0 then 
 Raiz1 = (-(-b) + SQR(delta))/(2*A) 
 
 
 Frm
 
 FrmResulta
 
 
 
 
 FrmMain.Hide 
 
 
 
 
 
 
 
 
Microsoft Visual Basic 4.0 24
 
 
 
 
 
me lblX1 
 = 
 
ult TRUE 
2 
 text <vazio> 
 
 
 Depois insira o código seguinte no evento click do objeto cmdvoltar 
 
 FrmMain.txta.text = “ “ 
 FrmMain.txtb.text = “ “ 
 FrmMain.txtc.text = “ “ 
 Frmresultado.Hide 
 FrmMain.Show 
 
 Execute a aplicação !!! 
Label 
 
 1 - Na
 Caption X1
 
 2 - Name lblX2 
 Caption X2 = 
 
Command 
 1 - Name Cmdvoltar 
 Caption &Voltar 
 Defa
 
Textbox 
 
 1 - Name txtx1 
 text <vazio> 
 
 2 - Name txtx
Microsoft Visual Basic 4.0 25
Módulo 3 
 
Aspectos de Programação 
Visual Basic 
 
 
 
 
 3.1 Atribuindo Valores 
 
 
 [LET] nome_da_palavra = <valor> 
 
 
 3.3 Variáveis 
 
 
 O que são variáveis ? 
 
 Toda linguagem de programação precisa de algum lugar para armazenar 
o resultado de seus cálculos ou simplesmente para controlar o fluxo do 
programa. 
 Assim como acontece na álgebra cotidiana, as linguagens de 
programação se valem de variáveis para armazenar dados na memória do 
computador. 
 Uma variável de memória nada mais é do que uma posição da memória 
do computador reservada exclusivamente para que sejam guardadas 
informações e dados. A essa posição de memória damos um nome para 
referência dentro do nosso programa, como por exemplo, NomeCliente. 
 Quem controla qual posição de memória do computador será reservada 
é a própria linguagem e o sistema operacional, ou seja, devemos apenas nos 
preocupar em nomear e declarar as variáveis. 
 
 E já que estamos falando de variáveis, quando formos nomeá-las, 
deveremos seguir algumas regras básicas: 
 
⇒ O nome precisa iniciar com uma letra. 
 
⇒ Somente são permitidas letras, números e o caractere de sublinhado. 
 Qualquer sinal de pontuação e espaço em branco será inválido. 
 
Microsoft Visual Basic 4.0 26
⇒ No Visual Basic 4.0, os nomes podem ter até 255 caracteres de comprimento. 
Isso significa que podemos ter nomes de variáveis bem descritivos, como por 
exemplo, PrimeiroNomedoCliente. 
⇒ Não podem coincidir com uma palavra reservada do Visual Basic, como 
nomes de funções ou procedimentos. 
 
⇒ Precisam ser únicos dentro do escopo atual, ou seja, não podemos ter duas 
variáveis com o mesmo nome dentro de uma rotina, porém, entre rotinas 
diferentes, isso é perfeitamente possível. 
 
 
 Escolha nomes sugestivos para as variáveis, de tal forma que 
descrevam sua função ou conteúdo que será armazenado nelas. 
 Por exemplo para uma variável onde seria armazenado o resultado do 
cálculo do salário de um funcionário, poderíamos escrever nSalarioFunc, em vez 
de X, Y ou Z. 
 
 
 3.4 Declaração de Variáveis 
 
 
 Dim Nomedavariavel [ as tipo de dados] 
 
 
 3.5 Tipos de Dados 
 
 
 Como toda linguagem de programação, o Visual Basic também possui 
vários tipos de dados aplicáveis às varáveis, que definem quais os valores que 
essas poderão armazenar. 
 O Visual Basic 4.0 define 11 tipos de dados básicos, cada qual com suas 
características peculiares, como largura da faixa de dados, tamanho em bytes, 
etc. 
 
 A tabela a seguir relaciona todos esses tipos: 
 
 
Tipo de 
Dado 
Tamanho em Bytes Faixa de Valores 
Integer 2 Bytes - 32.768 a 32.767 
Long 4 Bytes - 2.147.483.648 a 2.147.483.647 
Single 4 Bytes - 3,402823E38 a - 1,401298E-45 (Val. 
Negativos) 
 1,401298E-45 a 3,402823E38 (Val. 
Positivos) 
Double 8 Bytes -1,79769313486232E308 a -
Microsoft Visual Basic 4.0 27
4,9406564584124E-324 
(Val. Negativos) 
4,9406564584124E-324 a 
1,79769313486232E308 
(Val. Positivos) 
Currency 8 Bytes - 922.337.203.685.477,5808 a 
 922.337.203.685.477,5807 
String 1 Byte por caractere De zero a 65.500 caracteres 
Em sistemas de 32 bits,máximo de 2E32 
caracteres. 
Byte 1 Byte 0 a 255 
Boolean 2 Bytes True (verdadeiro) ou False (falso) 
Date 4 Bytes Qualquer referência a objeto 
Variant 16 bytes + 1 byte para 
cada caractere 
Qualquer valor numérico, caractere, objeto ou 
valor nulo. 
 
 
 Os tipos de dados determinam o que você pode armazenar numa 
variável. 
 
 Por exemplo, você não pode entrar com uma expressão caractere numa 
variável do tipo numérico, nem tampouco digitar um número numa variável 
lógica. 
 
 Vejamos os detalhes dos tipos de dados mais comumente utilizados. 
 
 
 
 
 Tipos lnteger e Long 
 
 
 Esses dois tipos de dados permitem o armazenamento de valores 
numéricos inteiros, com os quais podemos efetuar cálculos e operações 
matemáticas. 
 A faixa de valores permitida para o tipo lnteger vai de -32.768 a 32.767, 
sendo portanto limitada para alguns tipos de operações. Variáveis desse tipo 
são muito úteis como contadores de loops For... Next, por serem de 
manipulação muito rápida pelo processador, pois necessitam de poucas 
instruções de máquina. 
 O tipo Long, por outro lado, abrange uma faixa muito maior de valores, da 
ordem de 2 milhões, conforme pode ser constatado pela tabela anterior. 
 
 
 
 
Microsoft Visual Basic 4.0 28
 Tipos Single e Double 
 
 
 Single e Double também são tipos de dados numéricos, porém permitem 
a manipulação de valores decimais, como pesos, unidades de medidas, etc. 
Como os tipos anteriores, podemos efetuar qualquer operação matemática com 
eles. 
 O que diferencia o tipo Single do tipo Double é a precisão nas casas 
decimais e a faixa de valores abrangida por cada um. Veja a tabela anterior 
para comparação. Variáveis do tipo Single são ditas de precisão simples, 
comumente chamadas apenas de variáveis de ponto-flutuante. Variáveis do tipo 
Double são denominadas variáveis de dupla precisão. 
 
 
 
 Tipo Currency 
 
 
 O Visual Basic possui um tipo de dado especial para tratamento de 
valores monetários, evitando-se assim erros de arredondamento durante 
cálculos matemáticos. Esse tipo de dado é chamado de Currency. Devemos 
utilizá-lo apenas para armazenamento de valores monetários. 
 Se num determinado cálculo, o valor resultante tiver mais de quatro casas 
decimais, as casas decimais extras (a partir da quinta casa) serão
truncadas. 
Assim, o número 5402,105782 será armazenado como 5402,1057 numa variável 
do tipo Currency. 
 
 
 
 Tipo String 
 
 
 O tipo de dado string é certamente o mais utilizado. Ele possibilita que 
uma sequência de caracteres seja armazenada numa variável. 
 Essa sequência de caracteres pode conter desde letras do alfabeto até 
símbolos gráficos e números, muito embora não possamos efetuar cálculos com 
os números armazenados numa sequência. Devemos envolver a cadeia de 
caracteres com aspas ("). 
 Com variáveis do tipo caractere, é possível efetuarmos algumas 
operações de comparação, concatenação (junção) de duas ou mais seqüências 
de caracteres ou extração de uma parte da seqüência. 
 
 Não é possível, porém, efetuar cálculos matemáticos e aritméticos, já que 
qualquer número armazenado numa variável desse tipo será considerado como 
uma sequência de texto e não um valor numérico. 
 
Microsoft Visual Basic 4.0 29
 Podemos determinar um tamanho máximo para urna variável do tipo 
String, simplesmente adicionando um asterisco (*) seguido por um número que 
define o tamanho máximo em caracteres. 
 
 
 
 
 
 Por exemplo, para declarar uma variável strNomeCliente com um 
tamanho máximo de 50 caracteres, você escreveria: 
 
 
 
 Dim strNomeCliente As String * 50 
 
 
 Se for armazenada uma cadeia de caracteres menor que o tamanho 
máximo especificado, a variável será preenchida com espaços em branco à 
direita para completá-la. Se por outro lado, você tentar armazenar mais 
caracteres do que o permitido, os excedentes serão descartados. 
 
 
 
 Tipo Byte 
 
 
 Variáveis do tipo Byte são também numéricas, mas somente podem 
armazenar números na faixa de O a 255. Esse tipo de variável também , é útil 
em contador de loops For... Next pequenos, cujo ciclo de repetição não 
ultrapasse 255. 
 
 
 
 Tipo Boolean 
 
 
 Uma variável do tipo Boolean pode conter apenas dois tipos de valores: 
True (verdadeiro) ou False (falso). São muito utilizadas como sinalizadores, ou 
seja, variáveis que indicam se uma determinada condição lógica retornou ou 
resultou num desses dois valores. Veja o pequeno exemplo a seguir : 
 
 Dim blnrepete As Boolean 
 blnrepete = True 
 While blnrepete 
Microsoft Visual Basic 4.0 30
 . 
 . 
 Wend 
 
 
 
 
 Tipo Date 
 
 
 Variáveis do tipo data permitem o armazenamento de valores que 
representam uma data do calendário ou um horário. Para armazenar uma data 
numa variável, especifique-a entre "#", como no seguinte exemplo: 
 
 
 dtDataVencimento = #05/06/95# 
 dthora = #05:25# 
 
 
 Com valores do tipo data é possível executarmos adição ou subtração, 
para assim calcularmos uma nova data. Por exemplo: 
 
 dtDataHoje = Now 
 dtDataAmanha = dtDataHoje + 1 
 dtDataOntem = dtDataHoje - 1 
 
 Tipo Object 
 
 
 Variáveis do tipo Object podem fazer referência a objetos definidos pelo 
Visual Basic ou mesmo campos de uma base de dados, como dados OLE ou 
binários. Elas são armazenadas em endereços de 32 bits. Para esse tipo de 
variável, precisamos utilizar o comando de atribuição Set para assinalar valores 
a ela, em não apenas o sinal de igualdade. 
 
 
 Tipo Variant 
Microsoft Visual Basic 4.0 31
 
 O dado Variant é um tipo especial, já que ele permite que qualquer valor 
seja armazenado. Se você declara uma variável mas não especifica seu tipo de 
dado, o Visual Basic automaticamente atribui a ela o tipo Variant. Assim, o dado 
que você armazenar na variável é que definirá o seu tipo naquele momento. 
 
 Podemos atribuir também um valor nulo à variáveis variant, especificando 
a palavra-chave Null à direita do sinal de igual. Diversas funções podem ser 
utilizadas para determinar qual o tipo de dado armazenado numa variável 
Variant. 
 
 
 
 3.6 Constantes 
 
 
 Agora que já falamos de variáveis, vejamos as constantes, que são o 
oposto das primeiras. 
 As constantes, diferentemente das variáveis, não podem ter seus valores 
alterados durante a execução da aplicação. Elas são utilizadas principalmente 
para fornecer maior legibilidade ao código-fonte, substituindo expressões 
numéricas ou caractere mais complexos e de difícil entendimento. 
 
 Um dos tipos de constantes mais famoso é o famigerado valor de PI 
(3,14159265358979... ). 
 Como convenção, adotamos letras maiúsculas para os nomes de 
constantes, mas isso não é regra geral. 
 Essa é uma prática comum para os programadores em C/C++, Pascal ou 
mesmo Assembly. 
 
 
 3.7 Matrizes 
 
 
 Dim NomeMatriz (n,m) As <tipo de dados> 
 
 Exemplo: 
 Dim idade(30) As integer 
 Dim nota( 60,4) As double 
 
 
 
 
 3.8 Tipos definidos pelo usuário 
 
Microsoft Visual Basic 4.0 32
 Semelhantemente às variáveis estruturadas da linguagem C/C + + ou às 
variáveis registro do Pascal, o Visual Basic oferece a capacidade de definirmos 
nossos próprios tipos de dados. 
 
 Definir um novo tipo de dado pode ser muito útil quando precisamos 
agrupar vários tipos de dados diferentes mas correlacionados numa única 
variável, facilitando assim seu tratamento. Você poderia pensar que as matrizes 
resolveriam esse problema, mas nesse caso não são tão convenientes. 
 
 Para criar uma variável com um novo tipo de dado você utiliza o comando 
Type, colocado na seção Declarations do módulo. Vejamos um exemplo 
prático, onde criaremos uma variável tipada chamada tpcliente, contendo outras 
variáveis para armazenamento do código do cliente, do endereço do cliente, 
nome da firma, cidade onde reside, salário e departamento onde trabalha. 
 
 Type tpcliente 
 
 intCodigoCliente As Integer 
 strendereco As String * 50 
 strcidade As String * 25 
 strempresa As String * 40 
 strdepto As String * 20 
 sglsalario As Single 
 
 End Type 
 
 Aqui podemos dizer que a variável tpcliente comporta-se como um 
registro completo de um banco de dados e as diversas variáveis que a 
compõem, são os campos do registro. 
 
 
 tpCliente 
 
 intCodigoCiiente 
 
 strendereco 
 
 strcidade 
 
 strempresa 
 
 strdepto 
 
 sglsalario 
 
 
Microsoft Visual Basic 4.0 33
 Após ter sido criado o tipo de dado definido pelo usuário, você deverá 
ainda declarar a(s) variável(eis) desse tipo específico, como ocorre com as 
demais variáveis: 
 
 Dim DadosCliente As tpcliente 
 
 Cada campo da variável estruturada é acessado através de uma sintaxe 
própria. Precisamos especificar a variável estruturada seguida pela variável 
campo desejada, separadas por um ponto. Por exemplo, para acessar o campo 
strEndereco, deveríamos especificar a seguinte expressão: 
 
 DadosCliente.strEndereco = "Av. Paulista, no 1815, 6o andar" 
 
 Se você tiver duas variáveis do mesmo tipo de dado definido pelo usuário, 
poderá assinalar o valor de uma à outra apenas com o sinal de atribuição (=), 
similarmente às variáveis simples. Por exemplo, suponhamos que você tenha 
criado um tipo de dado chamado ContaCorrente, e que a partir dele tenha 
declarado as variáveis ContaBanco1 e ContaBanco2. Assim você poderia 
atribuir todos os valores dos campos da variável ContaBanco1 a ContaBanco2 
através da expressão: 
 
 ContaBanco2 = Contabancol 
 
 Você pode também ter campos numa variável tipada que é uma matriz de 
dados. Por exemplo: 
 
 Type ConsumoMensal 
 strmes(12) AS String * 15 
 intconsumo(12) As Integer 
 End Type 
 
 Aqui nós temos um novo tipo de dado que nos permite entrar com os 
consumos mensais de energia elétrica, e quem sabe desenvolver um sistema 
aplicativo que nos auxiliará a economizar energia. 
 
 Um outro recurso interessante é que você pode ter uma estrutura de 
dados dentro de outra estrutura. Veja o seguinte exemplo: 
 
 Type DadosPessoais 
 strNome AS String * 20 
 strSobreNome As String * 40 
 btIdade As Byte
btEstadoCivil As Byte 
 End Type 
 
 Type DadosEndereco 
 strrua As String * 50 
 strBairro As String * 30 
Microsoft Visual Basic 4.0 34
 strCidade As String * 30 
 strEstado AS String * 2 
 End Type 
 
 
 Type Funcionário 
 DadosFuncionario As DadosPessoais 
 DadosResidencia As DadosEndereco 
 btCodigoEmpresa As Byte 
 btCodigoCargo As Byte 
 End Type 
 
 
 Type Empresa 
 strNomeEmpresa As String * 50 
 EnderecoComercial As DadosEndereco 
 End Type 
 
 
 Aqui definimos duas estruturas básicas, denominadas DadosPessoais e 
DadosEnderecos. A partir delas,pudemos montar as outras duas estruturas de 
forma mais organizada e legível. 
 
 
 Obviamente, para saber o nome do funcionário, teríamos de escrever a 
expressão: 
 
 Funcionario.DadosFuncionario.strNome = "William Pereira Alves" 
 
 
 
 
Microsoft Visual Basic 4.0 35
 
3.9 Operadores 
 
 
 
Aritméticos 
 
 
Operador Descrição 
+ Efetua a soma entre dois ou mais números 
- Efetua a subtração entre dois ou mais números 
* Efetua a multiplicação entre dois ou mais números 
/ Efetua a divisão entre dois números e resulta num número de 
ponto-flutuante 
\ Efetua a divisão entre dois números e resulta num número 
inteiro 
^ Efetua a exponênciação 
Mod Retorna o resto de uma divisão não exata entre dois números 
 
 
 
 
Lógicos 
 
 
Operador Descrição 
And Efetua a operação lógica E. Se ambas as expressões forem 
verdadeiras, então o resultado será verdadeiro 
Or Efetua a operação lógica OU. Se uma das expressões (ou 
ambas) for verdadeira, então o resultado será verdadeiro 
Not Efetua a operação lógica NÃO. Inverte o estado lógico de uma 
expressão, se ela for verdadeira, torna-a falsa e vice-versa 
Xor Efetua a operação OU EXCLUSIVO. Se uma das expressões for 
verdadeira, o resultado será verdadeiro, porém se ambas forem 
verdadeiras, o resultado será falso 
Eqv Efetua a operação de equivalência de expressões. O resultado 
será verdadeiro somente se ambas as expressões forem 
equivalentes. 
Imp Efetua a operação de implicação lógica. Retorna verdadeira se 
uma expressão implica em outra 
 
 
Tabela do operador lógico Imp 
Microsoft Visual Basic 4.0 36
A primeira expressão é A segunda expressão é O resultado será 
Verdadeiro Verdadeiro Verdadeiro 
Verdadeiro Falso Falso 
Verdadeiro Nulo Nulo 
Falso Verdadeiro Verdadeiro 
Falso Falso Verdadeiro 
Falso Nulo Verdadeiro 
Nulo Verdadeiro Verdadeiro 
Nulo Falso Nulo 
Nulo Nulo Nulo 
 
 
 
Operadores Relacionais 
 
 
Operador Descrição 
< Menor que 
> Maior que 
<= Menor que ou igual a 
>= Maior que ou igual a 
= Igual a 
<> Diferente de 
 
 
 
 String 
 
 
 “&” ou “+” ⇒ concatenam duas strings 
 msgbox “exemplo” & “concatenação” ⇒ Exemploconcatenção 
 
 
 
 
Prática 7 
 
 
 Vamos fazer uma aplicação que some dois vetores com 8 elementos do 
tipo inteiro cada um. Lembre-se que os vetores na linguagem Visual Basic inicia-
se com índice zero (0). 
 
 Crie um formulário com os seguintes objetos: 
Microsoft Visual Basic 4.0 37
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Calcular 
Entrada do vetor A 
Entrada do Vetor B 
 Ok 
 Ok 
Resultado 
cmdok 
cmdok2 
txtentrada txtentrada2 
lblentrada 
cmdcalcular 
 
 
 Tente fazer sozinho! Apenas em caso de emergência consulte a 
resolução. 
 
 
 
 
 Resolução: 
 
 Nomeie os objetos e depois insira o seguinte código: 
 
 
 Na seção General (declarations) insira: 
 
Option Explicit ‘ na parte General (declarations) 
 
 Dim vetorA(8), vetorB(8), vetorC(8) As Integer 
Microsoft Visual Basic 4.0 38
 Dim i As Integer 
 
 
 
 
 Na rotina click do botão calcular: 
 
Private Sub cmdcalcular_Click() 
 
 lblsaida.Caption = "Resultado = " 
 For i = 0 To 7 
 vetorC(i) = vetorA(i) + vetorB(i) 
 
 lblsaida.Caption = lblsaida.Caption & " " & vetorC(i) 
 Next i 
 
End Sub 
 
 
 
No evento click do primeiro botão Ok do formulário: 
 
Private Sub cmdok_Click() 
 
 If i <= 8 Then 
 
 
 vetorA(i) = Val(txtentrada.Text) 
 i = 1 + i 
 txtentrada.Text = "" 
 txtentrada.SetFocus 
 If i = 8 Then 
 
 txtentrada.Enabled = False 
 txtentrada.Text = "" 
 cmdok.Enabled = False 
 cmdok2.Enabled = True 
 txtentrada2.SetFocus 
 i = 0 
 End If 
 
 End If 
 
 No evento click do segundo botão Ok: 
 
Private Sub cmdok2_Click() 
 
Microsoft Visual Basic 4.0 39
 If i <= 8 Then 
 
 vetorB(i) = Val(txtentrada2.Text) 
 
 i = i + 1 
 txtentrada2.Text = "" 
 txtentrada2.SetFocus 
 
 If i = 8 Then 
 
 txtentrada2.Enabled = False 
 txtentrada2.Text = "" 
 cmdok2.Enabled = False 
 End If 
 
 End If 
 
End Sub 
 
 
 No evento load do formulário: 
 
Private Sub Form_Load() 
 
 
 lblentrada.Caption = "Entrada do vetor A" 
 lblentrada2.Caption = "Entrada do vetor B" 
 
End Sub 
 
 
Microsoft Visual Basic 4.0 40
 
 
Prática 8 
 
 
Fazer uma aplicação que simule uma calculadora, as operações possíveis 
serão: 
 
 + soma 
 - subtração 
 / divisão com resto 
 Mod resto 
 \ divisão com inteiro 
 ^ exponenciação 
 * multiplicação 
 
 
 
 
 Ajuste as propiedades dos objetos da seguinte forma: 
 
 frm (formulário) 
 caption = calculadora 
 icon = <escolhe um ícone> 
 name = frm calculadora 
 
 cmd (botões de comando) 
 1. name = cmdsair 
 caption = &sair 
 2. name = cmdlimpar 
 caption = &limpar 
 3. name = cmdcalcular 
 caption = &calcular 
 default = true 
 txt (caixas de texto) 
 1. name = txtresultado 
 enable = false 
 text = <vazio> 
 2. name = txtop2 
 tabindex = 2 
 text = <vazio> 
 3. name = txtop 
 tabindex = 1 
 text = <vazio> 
 3. name = textop1 
 tabindex = 0 
Microsoft Visual Basic 4.0 41
 text = <vazio> 
 
 lbl 
 1. name = lblresultado 
 captiom = resultado 
 2. name = lblanuncio 
 caption = operações : + - / mod ^ \ * 
 3. name = lbloperação 
 caption = operação 
 4. name = lbloperador2 
 caption = operador2 
 5. name = lbloperador1 
 caption = operador1 
 6. name = lbligual 
 caption = = 
 
 A seguir insira o seguinte código: 
 
cmdcalcular_click( ) 
 dim op1 as double, op2 as double, opção as string 
 op1 = val (txtop1.text) 
 op2 = val (txtop2.text) 
 opção = txtop.text 
 
 select case opção ‘nós ainda não vimos esta estrutura mas ela já nos é 
 ‘ familiar 
 
 case “+” : txtresultado.text = op1 + op2 
 case “-” : txtresultado.text = op1 - op2 
 case “/” : txtresultado.text = op1 / op2 
 case “\” : txtresultado.text = op1 \ op2 
 case “Mod” : txtresultado.text = op1 Mod op2 
 case “^” : txtresultado.text = op1 ^ op2 
 case “*” : txtresultado.text = op1 * op2 
 end select 
 cmdlimpar.setfocus 
end sub 
 
 
 No evento click do objeto cmdlimpar insira: 
 
 cmdlimpar_click( ) 
 
 txtop1.text = “ “ 
 txtop2.text = “ “ 
 txtop.text = “ “ 
 txtop1.setfocus 
Microsoft Visual Basic 4.0 42
 
No evento click do botão sair escreva: 
 
cmdsair_click( ) 
 end 
end sub 
 
 
Microsoft Visual Basic 4.0 43
Módulo 4 
 
Estruturas de 
Controle 
 
 
 
 
 Neste módulo, aprenderemos a criar estruturas de controle, que são 
importantes componentes de qualquer linguagem de programação. 
 Estas estruturas permitem que
você verifique a ocorrência de 
determinadas condições lógicas bem como reutilize blocos de código, tomando 
seu trabalho de programação mais produtivo. 
 
 
 
 Como já adiantamos a você, as estruturas de controle são uma 
importante ferramenta de programação, permitindo não só a realização de 
desvios lógicos no processamento de seu programa, mas também a reutilização 
de blocos de código existentes até que determinado resultado seja obtido. 
 
 O Visual Basic coloca à sua disposição uma série de comandos com esta 
finalidade, permitindo-lhe uma grande flexibilidade no desenvolvimento de suas 
aplicações. 
 Como você já deve estar imaginando, a melhor maneira de aprender 
como estas estruturas operam é na prática, através de um novo aplicativo que 
iremos desenvolver. 
 
 
 
 4.1 Criando o Aplicativo Estruturas de Controle 
 
 Vamos iniciar a criação de nosso aplicativo selecionando a opção New 
Project no menu File. 
 
 
 
 
 Prática 9 
 
 
 Crie um formulário com o seguinte layout: 
 
 
Microsoft Visual Basic 4.0 44
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
FOR NEXT (LABEL1) 
Início 
(label2) 
Limite 
(label 3) 
Passo 
(label 4) 
Valor Atual de Início: (label 6) 
Iniciar (command) 
ESTRUTURAS DE CONTROLE 
(label 5, sem texto) 
(Text 5) 
Text 1 Text 2 Text3 
Text 4 
Imagem 
 
 
 
 Determine as seguintes propriedades aos objetos: 
 
 
 
 
 
Vamos iniciar pelo Formulário. 
 
Propriedade Valor 
Caption Estrutura de Controle 
Name frmEstruturas 
Microsoft Visual Basic 4.0 45
 
 
 
 
 
 
 
 
 
 
Selecione agora o controle Label1: 
 
Propriedade Valor 
Alignment 2 - Center 
Caption FOR NEXT 
Font MS Sans Serif - Negrito - 14* 
Name LblTítulo 
 
 
 
 
 
* Ao selecionar o botão “...”, é aberta a janela “Fonte” onde você pode 
definir as características do texto a ser exibido. 
 
 
 
 
 
Passe agora para o controle Label2: 
 
Propriedade Valor 
Alignment 1 - Right Justify 
Caption Início: 
Name LblÍnicio 
 
 
 
 
Vamos ajustar agora o controle Text1. 
 
Propriedade Valor 
Name TxtÍnicio 
Text <apagar o valor atual> 
 
Microsoft Visual Basic 4.0 46
 
 
Selecione o controle Label3: 
 
Propriedade Valor 
Alignment 1 - Right Justify 
Caption Limite: 
Name LblLimite 
 
 
 
Passe agora para o controle Text2: 
 
Propriedade Valor 
Name TxtLimite 
Text <apagar o valor atual> 
 
 
 
 
Ajuste agora Label4: 
 
Propriedade Valor 
Alignment 1 - Right Justify 
Caption Passo: 
Name LblPasso 
 
 
 
Faça o mesmo com Text3: 
 
Propriedade Valor 
Name TxtPasso 
Text <apagar o valor atual> 
 
 
 
 
Selecionar agora Label5 e ajuste as suas propriedades conforme a tabela 
abaixo : 
 
Propriedade Valor 
Alignment 2 - Center 
Caption <apagar o valor atual> 
Name LblMsg 
Microsoft Visual Basic 4.0 47
 
 
 
 
Aproveite para alterar as propriedades do Label6 para : 
 
Propriedade Valor 
Alignment 1 - Right justify 
Caption <apagar o valor atual> 
Name Lblação 
 
 
 
Calma, agora falta pouco. Pode parecer cansativo, mas seja sincero: 
Quanto tempo você gastou para criar este aplicativo ? Uns poucos minutos não 
foi ? Pode ter certeza de que os minutos que você empenhou na criação deste 
aplicativo renderão bons conhecimentos sobre as estruturas de controle que 
estamos estudando agora. 
 
Respire fundo e passe para o próximo controle, que é o Text4. 
 
 
 
 
Faça as seguintes alterações : 
 
Propriedade Valor 
Name TxtValorAtual 
TabStop False 
Text <apagar o valor atual> 
 
 
 
 
O próximo passo será alterar o controle Text5: 
 
Propriedade Valor 
Name TxtAção 
TabStop False 
Text <apagar o valor atual> 
 
 
 
 
Complementando nosso aplicativo, altere as propriedades do controle Image1 
para o seguinte: 
Microsoft Visual Basic 4.0 48
 
 
Propriedade Valor 
BorderStyle 1 - FixedSingle 
Enabled False 
 
 
Repita o mesmo para o controle Image2 : 
 
Propriedade Valor 
BorderStyle 1 - FixedSingle 
Enabled False 
 
 
 
 
Finalmente, ajuste as propriedades do controle Command1: 
 
Propriedade Valor 
Caption &Iniciar 
Default True 
Name BtnIniciar 
 
 
 
 A única coisa que falta agora é definirmos o código que será associado ao 
botão "Iniciar" de nosso formulário, mas isto dependerá dos próximos 
assuntos que iremos aprender em seguida. 
 
 
 
 4.2 Adicionando Comentários em seu Código 
 
 
 Agora que você já está ficando com mais prática na utilização do Visual 
Basic e pouco a pouco está desenvolvendo aplicativos cada vez mais 
sofisticados, está na hora de começar a documentar as suas rotinas. 
 
 Talvez você até ache desnecessário fazer isto devido à simplicidade dos 
códigos que estamos criando, mas não custa nada documentar desde o início, 
pois é uma boa prática ir se acostumando a documentar as rotinas criadas por 
voce. 
 Lembre-se de que uma rotina que é óbvia hoje pode não ser tão óbvia 
quando você voltar a estudá-la daqui há seis meses ou um ano. 
 
Microsoft Visual Basic 4.0 49
 Imagine também que talvez outra pessoa irá analisar sua rotina no futuro, 
e que poderá ter grandes dificuldades para entender o que você fez. 
 
 
 
 
 
Documentar suas rotinas é muito importante para 
tornar seu código mais legível não só para você, mas também 
para as outras pessoas que irão analisá-lo mais tarde. 
Adotar este hábito saudável irá poupar seu tempo 
no futuro, quando será necessário relembrar por que 
 você adotou determinadas soluções técnicas 
e , não outras aparentemente mais simples. 
 
 
 
 
 
 
A Instrução REM 
 
 
 A instrução REM nada mais é do que uma abreviação da palavra Remark, 
que significa Comentário. 
 
 Você pode incluir comentários em seus códigos de duas formas: através 
da instrução REM seguida do comentário desejado, ou do apóstrofo ( ‘ ) antes 
do comentário a ser incluído. 
 
 Tudo o que estiver à direita da palavra Rem ou do sinal de apóstrofo será 
simplesmente ignorado pelo Visual Basic. 
 Quando você utilizar a instrução REM, deixe um espaço em branco entre 
esta instrução e o comentário propriamente dito, como em: 
 
 
 REM Este é um exemplo de comentário 
 
 
 Já para o apóstrofo, não é necessário deixar o espaço em branco entre o 
sinal e o comentário: 
 
 'Exemplo de comentário usando o apóstrofo 
 
 Estes comentários também podem ser utilizados em linhas de código que 
contêm outras instruções, como em: 
Microsoft Visual Basic 4.0 50
 
 Dim Teste As lnteger 'Declara a variável Teste como Inteiro 
 
 O único cuidado que deve ser tomado quando incluímos comentários em 
uma linha que contém instruções para o Visual Basic, é quando utilizamos a 
instrução REM. 
 
 Neste caso, será necessário acrescentarmos o sinal de dois pontos ( : ) 
logo após a última instrução válida, para em seguida incluirmos a instrução 
REM. Você entenderá melhor vendo o exemplo abaixo: 
 
 
 Dim Teste As lnteger: REM Não esqueça de incluir : antes de REM 
! 
 
 
 
 Note que este caso somente se aplica à utilização de REM em uma linha 
que já contém comandos. 
 
 
 
 
 
 
 
 
 
 
Este recurso é bastante útil durante a fase de 
desenvolvimento de aplicativos, pois podemos evitar 
 a execução de determinadas linhas de nosso código pelo 
 Visual Basic, sem que haja necessidade de apagarmos tais informações 
de nossas rotinas. Após os testes, basta eliminar os 
 sinais de comentário para que o Visual Basic volte a 
 interpretar as linhas de código 
 existentes. 
 
 
 
 
 Agora que já sabemos utilizar os comentários para documentar nossas rotinas, 
vamos iniciar nosso estudo pela estrutura de controle lf Then Else.
Microsoft Visual Basic 4.0 51
4.3 Estrutura lf Then Else 
 
 
 Uma das estruturas de controle mais utilizadas na programação em Visual Basic é 
sem dúvida alguma a instrução lf Then, que é utilizada para avaliar uma determinada 
expressão e definir se um determinado bloco de código deve ou não ser executado. 
 
 A sintaxe para utilização deste comando é a seguinte: 
 
 
 If Condição Then 
 [Bloco de Código] 
 
 [Elseif Condição-n Then 
 [Bloco de Códígoll 
 
 [Else 
 [Bloco de Código]] 
 
 End lf 
 
 
 
 
 
 
 
 Detalhes: 
 
• Condição - É a condição a ser avaliada pelo VB. Esta condição utiliza os 
operadores de comparação que aprendemos anteriormente, sendo que a 
mesma tanto pode ser do tipo numérico como do tipo String. 
 
• Condlção-n - É uma outra condição lógica que pode ser avaliada pelo VB. 
O índice n indica que você pode inserir quantas condições lógicas quiser, 
bastando para isso repetir a instrução Elself. 
 
• Else - O bloco de código associado a esta instrução só será executado caso 
nenhuma das condições lógicas anteriores tenha sido verdadeira, ou seja, se 
todas as condições lógicas associadas ao lf e Elself resultaram em False, o VB 
executará o bloco de código associado ao Else. 
 
 
• End lf - Indica o final da estrutura de controle lf Then. Ao longo deste 
módulo você notará que a maioria das estruturas de controle são 
iniciadas pelo comando que as identifica e terminadas pela instrução 
Microsoft Visual Basic 4.0 52
End. Por questões de documentação, o VB aceita que você identifique 
que estrutura está sendo finalizada através do acréscimo do comando 
inicial da estrutura à palavra End, como em End lf por exemplo. 
 
 
 
 Descrição 
 
 A instrução lf ... Then (Se ... Então) sempre está associada a uma 
comparação lógica qualquer, como A > 10, por exemplo . 
 Se a condição for verdadeira (True), o VB executa o bloco de código 
imediatamente abaixo desta linha até encontrar uma outra instrução Elself, Else 
ou Endif, quando então a execução do programa passa para a linha 
imediatamente abaixo da instrução Endif. 
 Caso o primeiro teste lógico resulte em False, o VB irá procurar pela 
próxima instrução de comparação da estrutura lf Then. Caso exista alguma 
instrução Elself, o VB procederá da mesma forma como fez com a instrução lf, 
executando o bloco de código logo abaixo desta linha se a comparação for 
verdadeira, ou continuando a busca pela próxima instrução se a comparação for 
falsa. 
 
 Caso todas as comparações lógicas anteriores tenham resultado em 
False e exista uma instrução Else no bloco de código, esta será executada sem 
a realização de qualquer tipo de comparação lógica. 
 
 Caso não exista a condição Else em sua estrutura lf Then, a execução 
será encerrada quando o VB encontrar a instrução Endlf, que sinaliza o fim da 
estrutura de controle. 
 
 Como já construímos um novo aplicativo para o estudo das estruturas de 
controle, vamos utilizá-lo para entender melhor como funciona o comando lf... 
Then. 
 
 
 
 
 
Prática 10 Alterando o Aplicativo Estruturas de Controle 
 
 
 
 Selecione o botão "Iniciar" e dê dois cliques sobre o mesmo para ter 
acesso à janela de código. 
 
 Entre com as seguintes instruções neste arquivo: 
 
Microsoft Visual Basic 4.0 53
 Rem Estudo de lfThenElse 
 
 Dim Inicio As Integer, Limite As Integer 
 
 lnicio = Txtinicio.TEXT ' inicializa variável com o valor do controle 
 
 Limite = TxtLimite.TEXT ' Idem 
 
 lf Inicio > Limite Then ' Se Inicio > Limite executa esta opção 
 
 TxtAção.TEXT = "A opção IF foi a escolhida! " 
 
 Elseif Inicio = Limíte Then ' Se Inicio = Limite executa esta: 
 
 TxtAção.TEXT = "A opção ELSEIF foi a escolhida!" 
 
 Else 'Se nenhuma das anteriores executa esta: 
 
 TxtAção. TEXT = "A opção ELSE foi a úníca escolhida! " 
 
 Endif 
 
 
 
 Faça um último ajuste em sua janela de código, selecionando a opção 
Form na caixa de listagem Object e a opção Load na caixa de listagem Proc. 
 
 Digite a seguinte expressão nesta janela: 
 
 
 LbiTitulo. Caption = "IF THEN " ' Altera o titulo da janela 
 
 TxtPasso.Enabled = False 'Desabilita a TextBox Passo 
 Execute o seu aplicativo e entre com os valores 100 e 10 nas caixas de 
texto Início e Limite. Não se preocupe com os demais controles, pois os 
mesmos serão utilizados pelos exercícios futuros no momento adequado. 
 
 Por enquanto utilizaremos apenas as caixas de texto citadas. 
 Clique sobre o botão "Iniciar" e veja o resultado obtido em nosso primeiro 
exemplo. 
 
 
 Note que agora a condição associada à instrução IF não é mais 
verdadeira (início não é maior do que Limite) e desta forma o VB procurou a 
próxima instrução de comparação. Como existe uma condição lógica que 
analisa se o valor de Início e Limite são iguais, o VB executou esta opção, 
apresentando a mensagem correspondente a esta situação. 
Microsoft Visual Basic 4.0 54
 
 Um último teste: entre com 1 e 10. 
 
 
 Se você reparar com atenção, perceberá que nós estabelecemos três 
condições lógicas possíveis em nossa estrutura lf then se o valor Inicial fosse 
maior do que o valor Limite, se ambos os valores fossem iguais e se nenhuma 
das condições anteriores ocorresse. 
 Aliás, foi o que ocorreu em nosso exemplo, pois os valores que entramos 
não satisfazem as condições do lf ou do ElselF. 
 
Diante disso a opção Else foi executada sem maiores perguntas. 
 
 Vamos fazer uma leve modificação em nosso aplicativo. 
Pare a sua execução e dê dois cliques sobre o botão "iniciar" ou selecione 
F7 para abrir a janela de código. 
 Acrescente a seguinte expressão dentro da estrutura lffhen, logo a seguir 
da opção Elself existente: 
 
 
 Elself Inicio = 12 Then ' Somente se Inicio = 12 executa esta opção 
 TxtAção. TEXT = "A 2a. opção ELSEIF foi escolhida! " 
 
 
 Execute o seu aplicativo mais uma vez e entre com os valor 12 e 10 para 
ver o que ocorre: 
 
 Pode parecer estranho, mas apesar de termos declarado o valor Início 
como sendo igual a 12 o VB não executou o segundo Elself como haviamos 
determinado. 
 
 A explicação para este fato serve de alerta para quando você for criar 
seus próprios aplicativos utilizando as estruturas de controle lfThen. 
 
 Observe seu código com cuidado e note que o segundo Elself que 
inserimos na estrutura somente será executado quando o valor Início for igual a 
12 e o valor Limite for maior que 12, caso contrário a instrução IF será 
executada em primeiro lugar, pois sempre que 12 for maior do que o valor 
Limite, a primeira condição lógica será satisfeita e o VB não analisará nenhuma 
outra condição do lf. O mesmo acontecerá se você utilizar os valores 12 e 12, 
pois também neste caso o VB executará o primeiro Elseif da estrutura onde a 
condição estabelecida é valor Início = Limite, ignorando todas as demais 
condições. 
 
 
 Instrução Será executada se... 
Microsoft Visual Basic 4.0 55
 
 lf Início > Limite 
 Elself Início = Limite 
 2o Elself Início = 12 e Limite > 12 
 Else Início < Limite 
 
 
 
 Execute o aplicativo novamente com os valores 12 e 20 e veja que desta 
vez sua rotina foi executada sem maiores problemas. 
 
 
 
 
 É importante perceber que o VB analisa as 
condições lógicas em seqüência, de forma que se 
você quiser que uma determinada ação seja 
tomada quando ocorrer uma situação bastante 
específica, coloque esta condição em primeiro 
lugar na estrutura lf then. 
 
 
 
 
 
 Utilizando apenas uma Linha 
 
 Você também pode definir condições lógicas lfthen utilizando apenas uma 
linha de código, tornando seu código bem compacto, porém menos legível. 
 
 Geralmente, esta opção é mais utilizada durante a fase de testes de 
aplicativos devido sua praticidade, pois
basta acrescentar a palavra REM na 
frente da expressão para que o seu aplicativo simplesmente ignore-a. Já, 
utilizando uma estrutura como a que estudamos no item anterior, teríamos bem 
mais trabalho para torná-la "transparente" para o Visual Basic. 
 
 A sintaxe para esta estrutura não difere muito do que vimos 
anteriormente: 
 
 
 
 lf Condição Then Expressão [Else Expressão] 
 
 
 Um exemplo de utilização desta sintaxe poderia ser a seguinte condição: 
Microsoft Visual Basic 4.0 56
 
 íf Teste = 'Sim' Then A = 1 Else A = O 
 
 Note que o VB operaria da mesma forma que na estrutura completa, 
avaliando primeiramente se a condição proposta é verdadeira. Em caso 
afirmativo, seria atribuído à variável A o valor 1, caso contrário a mesma 
receberia o valor zero. 
 
 Você também pode executar mais de um comando associado ao IF ou ao 
Else quando utiliza esta estrutura em uma única linha basta separá-los pelo 
sinal de dois pontos entre um e outro, como no exemplo a seguir: 
 
 
 lf Teste = "Sim' Then A = l : Nome = "João” Else A = O: Nome = "Nulo" 
 
 
 
 O único cuidado a ser tomado é que todos os componentes da expressão 
devem estar numa mesma linha e separados pelo sinal de dois pontos ( : ) um 
do outro. 
 
 
 
 
4.4 Estrutura Select Case 
 
 
 Você também pode selecionar um determinado grupo de comandos 
simplesmente avaliando o valor de uma expressão através da estrutura Select 
Case. 
 
 Este comando possui a seguinte sintaxe: 
 
 Select Case Expressão 
 
 [Case condição-n 
 [Bloco de Código1]... 
 
 [Case Else 
 [Bloco de Códígon] 
 
 End Seíect 
 
 
 
 Detalhes: 
Microsoft Visual Basic 4.0 57
 
• Expressão - É qualquer expressão numérica ou de string avaliada pelo 
Visual Basic. 
 
 
• Condição-n - É a condição lógica a ser avaliada pelo VB. O índice n 
indica que você pode inserir quantas condições lógicas quiser, 
bastando para isso repetir a instrução Case. 
 
• Case Else - O bloco de código associado a esta instrução só será 
executado caso nenhuma das condições lógicas anteriores tenha sido 
verdadeira. 
 
• End Seiect - Indica o final da estrutura de controle Select Case. 
 
 
Descrição: 
 
 Inicialmente, é necessário definir a expressão que será avaliada pela 
estrutura Case, atribuindo a mesma à instrução Select Case. 
 
A partir daí o Visual Basic compara o valor desta expressão com a 
primeira instrução Case existente na estrutura de controle. Se os valores de 
ambas forem iguais, o Visual Basic executará o bloco de código associado à 
condição Case avaliada, e ao final desta passará o controle do programa para a 
primeira linha de código logo abaixo da instrução End Seiect. 
 
 Caso o valor da instrução Case seja diferente da expressão associada ao 
Select Case, o Visual Basic passará para a próxima instrução Case da estrutura, 
repetindo o processo até encontrar uma instrução que satisfaça a condição 
lógica definida. 
 
 
 
Se não existir nenhuma instrução na estrutura de 
 controle que satisfaça esta condição proposta, o VB 
 poderá adotar dois caminhos: executar a instrução 
Case Else caso a mesma exista, ou simplesmente 
encerrar a execução da estrutura. 
 
 
 
 
 A instrução Case Else será executada sempre que todas as demais 
condições existentes resultarem em False na comparação com a expressão 
definida em Select Case. 
Microsoft Visual Basic 4.0 58
 Você entenderá melhor o que queremos dizer, observando na prática o 
funcionamento desta estrutura. 
 
 
 
 
 Prática 11 
 
 
 
 Faça a seguinte alteração no código associado ao botão "iniciar" do nosso 
aplicativo: 
 
 
Rem Estudo de Select Case 
 
Dim Inicio As lnteger 
 
Inicio = Txtlnlcio. TEXT 'lnicializa variável com o valor do controle 
 
Select Case Inicio 'Avalia a expressão 
 
Case 1 'Verifica se Início = 1 
 TxtAção.TEXT = "Você escolheu o número 1 " 
 
Case 2 'Verifica se Inicio = 2 
 TxtAção.TEXT = "Você escolheu o número 2” 
 
Case 5 'Verifica se Início = 5 
 TxtAção. TEXT = "0 número 5 foí a sua escolha!" 
 
Case Else 'Se as condições anteriores forem Falsas 
 TxtAção. TEXT = "Você não escolheu 1, 2 ou 5. " 
 
End Select I 
 
 
 Necessitamos ainda de um outro pequeno ajuste em nosso 
formulário. 
 Altere a rotina Form_load conforme abaixo: 
 
 
LblTítulo.Caption = "CASE SELECT" ' Altera o título da janela 
 
TxtPasso.Enabled = False 'Desabilita a TextBox Passo 
 
Microsoft Visual Basic 4.0 59
TxtLimite.Enabled = False 'Desabilita a TextBox Limite 
 Como você pode reparar, apenas quando o valor de entrada for igual a 1, 
2 ou 5 é que o VB emitirá uma mensagem específica. 
 Para todos os demais valores informados o Visual Basic exibirá a 
mensagem associada à instrução Case Else. 
 
 Execute agora o seu aplicativo e entre com o valor 1 na caixa de texto 
Início. 
 
 
 
Definindo Faixas de Valores 
 
 
 No exemplo que criamos, todas as instruções Case estão vinculadas à 
ocorrência de um número ou string predeterminado, porém você pode definir 
que ações serão tomadas para determinadas faixas de valores. 
 
 Você pode fazer isto simplesmente definindo a condição Case da 
seguinte forma: 
 
 
 
 Case i To j 
 
 Onde i é o valor inicial e j o valor final da faixa avaliada. 
 
 
 
 
 Prática 12 
 
 
 
 Encerre a execução de seu aplicativo e faça uma rápida alteração na 
estrutura Select Case: 
 
Select Case Inicio 'Avalia a expressão 
 
Case 1 To 4 'Verifica se Inicio está entre 1 e 4 
TxtAção.TEXT = "Você escolheu um número entre 1 e 
4" 
 
Case 5 'Verifica se Início = 5 
 TxtAção.TEXT = "0 número 5 foi a sua escolha! " 
 
Microsoft Visual Basic 4.0 60
Case 6 To 8 'Verifica se Inicio está entre 6 e 8 
 TxtAção.TEXT = "Você escolheu um número entre 6 
e 8 " 
 
Case Else 'Se as condições anteriores forem 
Falsas 
 TxtAção.TEXT = "0 número escolhido é maior que 
8! " 
 
End Select 
 Execute seu aplicativo novamente e entre com alguns valores entre 1 e 
10 e veja como o VB interpreta seus dados. 
 
 Você perceberá que esta característica é muito útil quando os valores 
avaliados podem ter determinadas tolerâncias, pois permite que você torne seu 
código bem mais compacto do que definir uma condição Case para cada valor a 
ser avaliado. 
 
 
 Utilizando Operadores de Comparação 
 
 Você também pode utilizar operadores de comparação com a instrução 
Case, basta acrescentar o operador ls na expressão lógica definida por você, 
como por exemplo em: 
 
 Case ls >= 20 
 
 Altere o código de seu aplicativo acrescentando mais uma instrução Case 
na estrutura de controle, logo abaixo da última instrução Case definida por você 
e antes da instrução Case Else: 
 
Case ls > 20 
 TxtAção.TEXT = "Você escolheu um número maior que 20 " 
 
 Execute o seu aplicativo e entre com qualquer valor acima de 20 para ver 
o que acontece. 
 
 
 
 Avaliando Expressões do Tipo String 
 
 
 Até agora em nossos exemplos, sempre utilizamos valores numéricos para 
estudar o comportamento da estrutura Case, porém o Visual Basic também 
permite que você utilize valores do tipo String em suas expressões. 
 
Microsoft Visual Basic 4.0 61
 Vamos alterar um pouco o código de nosso aplicativo, alterando os 
valores analisados nas instruções Case para dados do tipo string, como 
mostramos a seguir: 
 
 
Rem Estudo de Select Case 
 
Dim Inicio As String 
 
Início = Txtinlcio.TEXT 'lnicializa variável com o valor do controle 
 
Select Case Inicio 'Avalia a expressão 
 
Case "José " 'Verifica se Inicio é igual a José 
TxtAção.TEXT = "José foi escolhido " 
 
Case "João " 'Verifíca se Início = João 
 TxtAção.TEXT
= "0 nome é João!" 
 
Case "Maria " 'Verifica se Inicio = Maria 
 TxtAção.TEXT = "Você dígitou Maria" 
 
Case Else TxtAção.TEXT = "Nenhum nome foí selecionado! 'Se as 
condições anteriores são False 
 
End Select 
 
 
 Coloque seu aplicativo em execução e entre com os nomes José, jose, 
João e joao e repare como o VB trata cada um destes nomes. Note que nesta 
comparação de strings, o Visual Basic diferencia palavras acentuadas ou não e 
palavras grafadas em maiúsculas e minúsculas, por isso tome muito cuidado ao 
realizar comparações de strings, pois seu programa pode apresentar um 
comportamento bastante estranho apesar de você ter a certeza de que tudo está 
em perfeito estado. 
 
 
 Vamos estudar agora a estrutura For Next, que é uma outra instrução 
muito utilizada na programação em Visual Basic. 
 
 
 
 
 4.5 Estrutura For Next 
 
 
Microsoft Visual Basic 4.0 62
 Este comando repete um mesmo bloco de código um determinado 
número de vezes independentemente de qualquer condição lógica. 
 
A sintaxe deste comando é a seguinte: 
 
For Contador = Valorinicial To ValorFinal [Step Passo] [Bloco de Código] [Exit 
For] 
[Bloco de Código] 
Next [Contador] 
 
 
 
 Detalhes: 
 
• Contador - É uma variável de memória numérica que será utilizada para 
controlar o número de execuções do bloco de código. 
 
• Valorlniclal - Valor de inicialização do contador. Você pode iniciá-lo 
com o valor zero, um ou mesmo qualquer outro que julgue necessário. 
 
• ValorFinal - É o valor final que a variável Contador assumirá antes de 
encerrar a execução do loop. 
 
• Passo - Você pode determinar se a variável contador será incrementada 
de um em um ou de dois em dois por exemplo. 
 Caso você não informe este parâmetro, o Visual Basic considera que o 
incremento será positivo de uma em uma unidade. Você também pode 
definir números negativos para esta opção. 
 
• Exit For - Você pode interromper a execução do loop através desta 
instrução. Ao encontrá-la no meio de seu bloco de código, o loop é 
interrompido. Esta instrução normalmente está associada à ocorrência de 
uma determinada condição lógica. 
 
 
 
 Descrição 
 
 Para utilizar esta estrutura de controle você necessitará de uma variável 
de memória para ser o contador do número de repetições que a estrutura fará. 
 
 Esta variável é inicializada com o valor especificado por você em 
Valorlnicial e é feita uma comparação de seu valor com o valor definido por você 
em ValorFinal. 
Se o valor do Contador é menor do que o valor de ValorFinal, o bloco de 
código localizado entre as declarações For e Next é executado uma vez. 
Microsoft Visual Basic 4.0 63
 
 Ao final da execução do bloco de código, o Visual Basic incrementa a 
variável de controle o número de unidades especificado em Passo. 
É feita uma nova comparação, e se o contador ainda for menor que a 
variável ValorFinal, o ciclo se repete. 
 Quando o contador atinge um valor maior que a variável limite, a 
execução do loop é encerrada e o Visual Basic passa para a linha 
imediatamente seguinte à declaração Next. 
 Vamos aprender na prática como se comporta um loop do tipo For Next 
através do aplicativo que criamos no início deste módulo. 
 
 
 
 
 Prática 13 
 
 
 
 Alterando o Aplicativo Estruturas de Controle. 
 
 Selecione o botão "Iniciar" e dê dois cliques sobre o mesmo para ter 
acesso à janela de código. 
 
 Entre com as seguintes instruções neste arquivo: 
 
 
 
 
Vamos considerar que o sinal @ indica que o comando 
 continua na mesma linha, que por questões de editoração da 
apostila, o mesmo foi dividido em duas ou mais linhas. 
 
 
 
 
 Rem Estudo de For Next 
 
 Dim Contador As integer, Inicio As integer, Limite As integer, @ 
Passo As integer, Vezes As integer 
 
 Início = Txtinlcio.TEXT 'lnicializa vanável com o valor do controle 
 Limite = TxtLimite.TEXT 'Idem 
 Passo = TxtPasso.TEXT 'Idem 
 Vezes =0 'lnicializa a vanável Vezes com zero 
 
Microsoft Visual Basic 4.0 64
 LblMsg.Captfon = " Enquanto Contador for menor ou igual a " & 
Limite @ 
& " o bloco de código será executado! " 
 
 
 
LblMsg.Refresh 'Atualiza o controle LblMsg 
For Contador = inicio To Limite Step Passo 
 
Vezes = Vezes +1 
TxtValorAtual. TEXT = Contador 
TxtValorAtual.Refresh 'Atualiza o controle 
TxtAção.TEXT = "Executando o bloco de código pela " & Vezes & @ 
“ a. vez” 
TxtAção.Refresh 'Atualiza o controle 
 
Next 
 
Rem Depois de executar o loop o controle do programa passa para esta 
linha: 
 
 
 
 TxtAção.Text = "0 bloco de código foí executado " & Vezes & " vezes!" 
 
 
 
 
 Faça um ajuste na procedure Form-load, deixando apenas as seguintes 
linhas de código: 
 
 
 
LblTítulo.Caption = "FOR NEXT” ‘ Altera o titulo da janela 
LblAção.Caption = "Valor Atual do Contador" 
 
 
 Execute o aplicativo e entre com os valores 1 para Inicio, 10 para Limite e 
1 para Passo. 
 
 
 Clique sobre o botão "iniciar" e veja o que ocorre. 
 
 Dependendo da velocidade de seu microcomputador, você só conseguirá ver a 
última mensagem exibida na tela após o término do loop. 
Microsoft Visual Basic 4.0 65
 
 Na prática, o que o sistema faz é exibir na tela os valores das variáveis 
definidas por nós conforme a instrução For Next vai alterando as mesmas. 
 
 Para facilitar a sua vida vamos fazer uma pequena alteração em nosso 
aplicativo, incluindo mais algumas linhas de código a fim de "desacelerarmos" nosso 
computador. 
 Acrescente as seguintes instruções logo abaixo da linha TxtAção.Refresh, de 
modo a deixar sua rotina com a seguinte aparência: 
 
 
 For n = 1 To 100000 
 REM Este loop não faz nada! 
 Next 
 
 
 Na verdade, o que fizemos foi nada mais do que acrescentar um outro loop 
dentro do já existente, para fazer com que o Visual Basic gaste um determinado tempo 
entre uma atualização de tela e outra, e assim podermos ver o conteúdo das variáveis 
envolvidas no loop. 
 
 
 
 Saiba que o valor de 100000 foi obtido experimentalmente, e dependendo 
da velocidade de seu computador, você terá que aumentar ou reduzir este valor 
até obter o intervalo desejado entre uma exibição e outra em seu monitor. 
 
 
 
 
 
 
Saindo de um Loop For Next 
 
 Como já vimos no item anterior, sempre que você inicia a execução de 
um loop For Next, ele somente encerra sua operação quando o contador atingir 
um valor maior do que o valor final do loop. 
 Na verdade, você pode interromper a execução do mesmo, utilizando 
para isso o comando Exit For. 
 Geralmente, este comando é utilizado em conjunto com uma instrução lf, 
como a que vimos no início deste capitulo. 
 
 Vamos supor que você deseja executar um bloco de código um 
determinado número de vezes ou até que um dado valor seja atingido. Este 
valor tanto pode ser proveniente do cálculo de uma fórmula qualquer como de 
uma variável de memória existente. 
Microsoft Visual Basic 4.0 66
 
 
 Você poderia, por exemplo, definir esta condição da seguinte maneira: 
 
 lf Vezes = Limite / 2 Then 
 Exit For 
 End lf 
 
 
 Como a variável Vezes é incrementada em uma unidade a cada execução 
do loop, você pode definir que assim que o valor da mesma for igual ao valor da 
variável Limite dividido por dois, o loop será encerrado. 
 É claro que neste caso, seria mais fácil definirmos logo de início o valor 
adequado para a variável Limite ao invés de acrescentarmos uma cláusula Exit 
For, mas como estamos apenas querendo mostrar a você o mecanismo desta 
instrução Exit, vamos aproveitar as variáveis de memória que já existem em 
nosso código, evitando assim termos que fazer mais alterações na rotina 
existente. 
 
 
 
 Utilizando Instruções For Next Aninhadas 
 
 No exemplo anterior, utilizamos duas instruções
For Next aninhadas, isto 
é, uma dentro da outra. Veja a seguir, um fragmento do código que utilizamos 
em nosso exemplo: 
 
 For Contador = Inicio To Limite Step Passo 
 
 Vezes = Vezes + 1 
 TxtValorAtual.TEXT = Contador 
 
 For n = 1 To 100000 
 Rem Este loop não faz nada! 
 Next 
 
 Next 
 
 Até que olhando desta forma não há muitas dúvidas sobre que instrução 
Next está relacionada à primeira instrução For, mas e quando suas rotinas forem 
ficando cada vez maiores complexas? 
 
Ao analisar seu código, você pode ser levado a concluir erroneamente 
que um determinado Next está associado a uma instrução For, quando na 
verdade ambas não têm nada a ver uma com a outra, o que fatalmente o levará 
a cometer um erro de avaliação de sua rotina. 
Microsoft Visual Basic 4.0 67
 
Outro ponto importante é que se por um erro seu, uma instrução Next for 
encontrada antes da instrução For correspondente, o VB apresentará um erro 
em tempo de execução, paralisando a execução de seu aplicativo. 
 
Este tipo de erro bastante comum pode ser evitado, bastando para isso 
declarar junto à instrução Next o nome da variável de memória que é utilizada 
como contador pelo Visual Basic, como no exemplo a seguir: 
 
 
For Contador = Inicio To Limite Step Passo 
 
 Vezes = Vezes + 1 
 TxtValorAtual.TEXT = Contador 
 For n = 1 To 100000 
 Rem Este loop não faz nada! 
 Next n ‘Incrementa a variável n 
 Next Contador ‘Incrementa a variável Contador 
 
 
 
Para evitar erros de execução ao utilizar 
 instruções For aninhadas, você sempre deve declarar a 
instrução acompanhada do nome da respectiva 
 variável utilizada como contador do loop. 
 
 
 
 
 Um último comentário sobre a estrutura For Next: 
 
 Como você pode observar nos exemplos que criamos, o valor do contador 
sempre é armazenado em uma variável de memória, e por isso mesmo sempre 
é possível modificarmos o seu valor, alterando o comportamento do loop. Isto 
tanto pode ser um importante recurso de programação como uma fonte de 
dores-de-cabeça, dependendo da forma como você utilize esta possibilidade e 
da complexidade de seu código. 
 
 A utilidade deste recurso é que você pode repetir a execução do loop 
indefinidamente até que uma determinada condição desejada seja obtida. 
 Na verdade, existem outras formas mais adequadas de se fazer isto, 
porém não podemos deixar de considerar a possibilidade de realizarmos esta 
tarefa com a estrutura For Next. 
 
Microsoft Visual Basic 4.0 68
 O ponto negativo é que alterando o valor do contador do loop durante a 
execução, você pode levar o seu programa a entrar num loop infinito caso a 
meta definida por você não possa ser atingida, além de tornar o seu aplicativo 
mais difícil de entender e depurar. 
 
 Só para ter uma idéia do que queremos dizer, imagine que seu aplicativo 
faça uso do seguinte bloco de código: 
 
 Private Sub BtniniciaLClíckO 
 
 Rem Estudo de For Next com alteração do Contador durante a 
execução 
 Dim Contador As integer, Resultado As Single, Vezes As integer 
 
 Resultado = 100 ‘ lnicializa a variável com o valor 100 
 
 For Contador = 1 To 10 
 
 Resultado = Resultado + (1.005 ^ 2) 'Fórmula a ser calculada 
 Vezes = Vezes + 1 'Número de execuções 
 
 TxtValorAtual. TEXT = Resultado 'Exibe o resultado na 
Textbox 
 TxtValorAtual.Refresh 'Atualiza o controle 
 
 For n = 1 To 100000 'Loop para desacelerar o programa 
 Rem Este loop não faz nada! 
 Next n 
 
 lf Resultado < 120 And Contador = 10 Then Contador 
=1'Ajusta valor do Contador Para o valor 1 
 
 
 Next Contador 
 
Rem Depois de executar o loop o controle do programa 
Rem passa para esta linha: 
 
 TxtAção. TEXT = "0 bloco de código foí executado ". & Vezes & " vezes!" 
 End Sub 
 
 Note que o ponto crítico é a linha que analisa o valor atual da fórmula. Em nosso 
exemplo, sabemos que num determinado momento o valor da fórmula será maior que 120, 
fazendo com que o loop deixe de ser executado. 
Microsoft Visual Basic 4.0 69
 Mas e quando os valores são definidos no decorrer do programa com valores 
entrados pelo usuário? Dependendo dos dados entrados pelo usuário, pode ser bastante 
complicado estimar se uma determinada condição irá ocorrer ou não, comprometendo o 
funcionamento de seu aplicativo. 
 
 
 
 
A nossa sugestão é que você evite alterar o valor do 
contador do loop durante a execução deste, se não 
tiver a certeza de que o valor limite para o encerramento 
do loop será atingido em um determinado momento da execução. 
 
 
 
 
 Aliás, se você executar o aplicativo acima, verá que o valor limite para o 
encerramento do loop será atingido após 28 execuções, isto é, o contador mesmo foi 
reiniciado duas vezes após a execução inicial. 
 
 
 
 4.6 Estrutura DO...LOOP 
 
 
 Este comando repete a execução de um bloco de código enquanto uma 
determinada condição for verdadeira, ou até que uma condição especificada 
torne-se verdadeira. 
 
 Este comando pode ser declarado de duas formas distintas: 
 
 
 Do [{While I Until} Expressão] 
 [Bloco de Código] 
 [Exit Do] 
 [Bloco de Código] 
 Loop 
 
 
 Ou se você preferir, da seguinte maneira: 
 
 Do 
 [Bloco de Código] 
 [Exit Do] 
 [Bloco de Código] 
 Loop [{While I Until} Expressão] 
Microsoft Visual Basic 4.0 70
 
 
Detalhes: 
 
• Expressão - É qualquer expressão numérica ou de string avaliada pelo 
Do While / Do Until. Utilizando o comando While o bloco de código 
associado ao loop é executado enquanto a expressão definida for 
verdadeira. Quando isto não mais ocorrer, o Visual Basic passará o 
controle do programa para instrução imediatamente seguinte à 
instrução Loop estrutura de controle. Já, utilizando a sintaxe Do Until, 
o bloco de código será executado até que uma determinada situação 
torne-se verdadeira, ou seja, enquanto a expressão especificada for 
falsa. 
 
• Exit Do - Você pode interromper a execução do loop através desta 
instrução. Ao encontrá-la no meio de seu bloco de código, o loop é 
imediatamente interrompido, e a execução do programa passa para a 
primeira instrução abaixo do comando Loop. Esta instrução 
normalmente está associada à ocorrência de uma determinada 
condição lógica. 
 
 
 
 Descrição: 
 
 O funcionamento desta estrutura é bastante simples, mas nem por isso 
menos poderosa que as outras instruções que estudamos anteriormente. 
 
 Como você já deve ter percebido, existem duas formas de utilizarmos 
esta estrutura de controle, de modo que vamos iniciar pela sintaxe Do While 
primeiro. 
 
 Inicialmente, é feita uma avaliação da expressão associada à instrução 
Do While. Se a mesma for verdadeira (resultar em True), o bloco de código 
associado a esta instrução é executado. Ao encontrar a instrução loop, o Visual 
Basic retorna à linha inicial, onde a expressão lógica é novamente avaliada. Se 
a mesma ainda for verdadeira, o bloco de código será executado outra vez, até 
encontrar a instrução loop. Isto se repetirá ininterruptamente enquanto a 
expressão lógica resultar em verdadeira. 
Aliás o nome Do While pode ser traduzido como Faça Enquanto. 
 
 O mesmo ocorre com a expressão Do Until, só que de maneira contrária, 
já que esta expressão pode ser traduzida como Faça Até . 
 
 Neste caso, o bloco de código será executado até que a expressão 
avaliada torne-se verdadeira. 
Microsoft Visual Basic 4.0 71
 
 Como já dissemos a você, existem duas formas diferentes de utilização 
desta estrutura. A primeira, como vimos, parte inicialmente da análise da 
expressão antes da execução do bloco de código. Isto significa que, se a 
expressão lógica for falsa desde a primeira análise, o bloco de código não será
executado uma vez sequer. Já com a segunda sintaxe, antes de mais nada o 
bloco de código será executado, independentemente do resultado da expressão. 
 
 No final do bloco de código, está a instrução Loop While / Loop Until, 
associada à expressão lógica. 
 Mais uma vez, ver na prática é o melhor caminho para entender a 
diferença entre ambas estruturas. 
 
 
 
 
 Prática 14 
 
 
 
 Selecione mais uma vez o aplicativo Estruturas de Controle e faça as 
seguintes alterações no código associado a este projeto: 
 
 Na procedure Form_load( ) altere o código existente para: 
 
 LblTítulo.Caption = "DO WHILE" 'Altera o título da janela 
 TxtPasso.Enabled = False 'Desabilíta a Textbox Passo 
 LblAção.Caption = "Valor Atual de inicio:" 'Exibe a mensagem indicada 
 
 
 Já para a procedure Btnlniciar_Click faça os seguintes ajustes: 
 
 
 Rem Estudo de Do While 
 
 Dim Inicio As integer, Limite As lnteger, Vezes As integer 
 
 Início = Txtlnício.TEXT 'lnicializa variável com o valor do controle 
 Limite = TxtLimite.TEXT 'idem 
 Vezes = 0 'Inicializa a variável Vezes com zero 
 
 
LblMsg.Caption = "Enquanto Inicio for menor ou igual a " & Limite & 
" o bloco de código será executado!” 
LblMsg.Refresh 'Atualiza o controle LblMsg 
Microsoft Visual Basic 4.0 72
Do While Inicio <= Limite 
 
Inicio = Inicio + 1 'lncrementa a variável Início 
Vezes = Vezes + 1 'lncrementa a variável Vezes 
TxtValorAtual.TEXT = Início 
TxtValorAtual.Refresh 'Atualiza o controle 
 
TxtAção.TEXT = "Executando o bloco de código pela " & 
Vezes & "a . vez” 
TxtAção.Refresh 'Atualíza o controle 
 
For n = 1 To 100000 
 Rem Este loop não faz nada! 
 Next 
 
 Loop 
 
 Rem Depois de executar o loop, o controle do programa 
 Rem passa para esta linha: 
 
 TxtAção.TEXT = "0 bloco de código foi executado " & Vezes & " 
vezes!" 
 
 
 Execute o aplicativo e veja o que ocorre. 
 
 A princípio, não existe muita diferença entre o comando For Next e a 
rotina que acabamos de desenvolver se você observar apenas a tela de 
resultados, mas lembre-se de que enquanto o For Next repete um bloco de 
código um determinado número de vezes, o comando Do While repete este 
mesmo bloco até que uma determinada condição seja atingida ou enquanto 
determinada situação for verdadeira. 
 
 Faça agora duas pequenas alterações no código associado ao botão 
"Iniciar" para vermos na prática esta condição. Altere a seguinte linha do seu 
código: 
 
 De: 
 LblMsg.Caption = "Enquanto Inicio for menor ou igual a " & Limite & " o 
bloco de código será executado!" 
 
Microsoft Visual Basic 4.0 73
 Para: 
 LblMsg. Caption = "Enquanto Inicio for maior que " & Limite & " o bloco 
de código será executado!" 
 
 Aproveite para alterar as seguintes linhas também: 
 
 De: 
 
 Do While Inicio <= Limite 
 
 Inicio = Inicio + 1 'lncrementa a variável Início 
 
 
 Para: 
 
 Do While Inicio > Limite 
 
 Inicio = Início - 2 'Decrementa a variável Inicio 
 Execute novamente o aplicativo e entre com os valores 20 e 10. 
 
 
Utilizando a Segunda Sintaxe Do While 
 
 Como já havíamos adiantado no início deste módulo, você tanto pode 
definir que o bloco de código associado à instrução Do While seja executado 
somente se a expressão de controle for verdadeira, ou mesmo que o bloco de 
código seja executado uma única vez antes de avaliarmos a expressão de 
controle. 
 Você perceberá a diferença da seguinte forma: 
 Execute o aplicativo que alteramos no item anterior e entre com os 
valores 20 e 20 nas respectivas caixas de texto. Você receberá a mensagem 
que o bloco de código não foi executado uma única vez sequer. 
 
 Isto ocorre porque a avaliação da expressão Início > Limite resulta em 
False, já que 20 não é maior do que 20. Neste caso, o Do While passa o 
controle do programa para a instrução imediatamente seguinte ao comando 
Loop. 
 
 Faça uma pequena alteração no seu código, de modo a deixar a 
avaliação da expressão para depois da execução do loop. Para fazer isto basta 
transferir a palavra While e a expressão associada a esta da linha que contém o 
Do para a linha Loop: 
 
Microsoft Visual Basic 4.0 74
 
 Do 
Inicio = Inicio - 2 'Decrementa a variável inicio 
Vezes = Vezes + 1 ‘Incrementa a variável Vezes 
TxtValorAtual.TEXT = Inicio 
TxtValorAtual.Refresh 'Atualiza o controle 
 
 
 
 TxtAção. TEXT = "Executando o bloco de código pela " & Vezes & 
"a. vez’ 
 TxtAção.Refresh ‘Atualiza o controle 
 
 For n = 1 To 100000 
 Rem Este loop não faz nada! 
 Next 
 
 Loop While Inicio > Liniite 
 
 Reexecute o aplicativo e torne a entrar com os valores 20 e 20. 
 
 Note que desta vez o bloco de código foi executado pelo menos uma vez 
antes que o Visual Basic avaliasse a expressão lógica definida por nós. Após a 
avaliação da expressão (que resultará em False), o Visual Basic não mais 
executará o loop, passando para a próxima instrução da rotina. 
 
 
 
 
 4.7 A Estrutura Do Until 
 
 
 Como já havíamos antecipado a você, a diferença entre o Do Until e o Do 
While é o modo com que a estrutura avalia a expressão lógica associada à 
mesma. No caso do Do Until, o Visual Basic executará o bloco de código 
enquanto o resultado da expressão avaliada for False. Quando o mesmo se 
tornar verdadeiro (True), o Visual Basic encerra a execução do bloco de código. 
 
 
 
 Prática 15 
 
 
 
 Vamos aproveitar parte do código que utilizamos para estudar o Do While, 
fazendo apenas algumas rápidas modificações. 
Microsoft Visual Basic 4.0 75
 
 Rem Estudo de Do Until 
 
 Dim Inicio As lnteger, Limite As Integer, Vezes As lnteger 
 
 Inicio = Txtlnício.TEXT 'Inicializa variável com o valor do controle 
 Limite = TxtLimite.TEXT 'Idem 
 Vezes = O 'lnicializa a variável Vezes com zero 
 
 LblMsg.Caption = “Enquanto Início for menor que “ & Limite &” o bloco de 
código será executado!” 
 
 LblMsg.Refresh 'Atualíza o controle LblMsg 
 
 
 
 Do Until Início > Limite 
 Início = Início + 1 'íncrementa a variável Início 
 Vezes = Vezes + 1 'lncrementa a variável Vezes 
 TxtValorAtual.TEXT = Inicio 
 TxtValorAtual.Refresh 'Atualiza o controle 
 
 TxtAção.TEXT = "Executando o bloco de código pela " & Vezes & " 
a .vez" 
 TxtAção.Refresh 'Atualiza o controle 
 
 For n = 1 To 100000 
 Rem Este loop não faz nada! 
 Next 
 
 Loop 
 
TxtAção. TEXT = "0 bloco de código foi executado " & Vezes & " 
vezes! " 
 
End Sub 
 
Faça também um rápido ajuste na rotina Form-load( ), alterando a 
seguinte linha: 
 
LblTítulo.Caption = "DO UNTIL" 'Altera o título da janela 
 
Ponha seu programa para rodar e entre com os valores 1 e 10. Note que 
o resultado da expressão Inicio > Limite com estes valores será False, já que 10 
é menor que 20. Mesmo assim o VB executará o bloco de código, sendo que só 
deixará de fazê-lo quando a expressão tornar-se verdadeira, ou seja, quando o 
Microsoft Visual Basic 4.0 76
valor de início for igual a 21, que por sua vez tornará a expressão avaliada 
verdadeira (21 > 20). 
 
Se você entrar com os valores 25 e 20, por exemplo, o Visual Basic não 
executará uma vez sequer o bloco de código, pois desde o início a avaliação da 
expressão associada ao Do Until resulta em Verdadeiro. 
 
 
Para garantir que seu bloco de código será executado pelo menos uma 
vez, faça as seguintes alterações no Código de seu aplicativo: 
 
 
Do 
Início = Início + 1 'lncrementa a varíável início 
Vezes = Vezes + 1 'lncrementa a variável vezes 
TxtValorAtual.TEXT = Início 
TxtValorAtual.Refresh 'Atualíza o controle 
 
 TxtAção.TEXT = "Executando o bloco de código pela “ & Vezes & “ 
a. vez 11” 
 
 TxtAção.Refresh 'Atualiza o controle 
 
 For n = 1 To 100000
Rem Este loop não faz nada! 
 Next 
 
 Loop Until Início > Limite 
 
 Agora é só executar o programa novamente com os valores 25 e 20 e ver 
o resultado obtido. 
 
 
 
 
Saindo do Loop com Exit Do 
 
 Como já vimos anteriormente, você pode encerrar a execução de um loop 
a qualquer momento através da palavra de comando Exit. 
 
 A estrutura Do While/Do Until não é exceção, pois também permite que 
você utilize este recurso sempre que necessitar interromper a execução de um 
loop qualquer. 
 Aproveite o último exercício que criamos e acrescente as seguintes linhas 
antes da instrução Loop Until Início > Limite: 
 
Microsoft Visual Basic 4.0 77
 if Início = 15 Then 
 Exit Do 
 End íf 
 
 Execute novamente o seu aplicativo e entre com os valores 1 e 20 para 
ver o que ocorre. 
 Assim que a variável Início atingir o valor predeterminado, o loop será 
encerrado, e o controle do programa passará para a próxima linha abaixo da 
instrução Loop. 
 
 Note que não existe um número limite para o uso de instruções Exlt Do, 
ou seja, você pode utilizar esta declaração quantas vezes necessitar, como por 
exemplo no código abaixo: 
 
 Do 
 Inicio = Inicio +1 'lncrementa a variável Início 
 Vezes = Vezes + 1 'lncrementa a variável Vezes 
 
 lf Início = 15 Then 
 Exit Do 
 Elseif Início = 1 And seleção = False Then 
 Exlt Do 
 Elseif Início = 1 And Teste = 20 Then 
 Exit Do 
 End lf 
 
 Loop Until Inicio > Limite 
 
 
 Vamos aprender agora uma nova estrutura de controle bastante parecida 
com a estrutura Do Loop que acabamos de estudar, a While... Wend. 
 
 4.8 While Wend 
 
 Este comando repete a execução de um determinado bloco de código 
enquanto uma determinada condição for verdadeira. 
 Este comando possui a seguinte sintaxe: 
 
 While condição 
 [Bloco de Código] 
 Wend 
 
 
 Detalhes: 
 
Microsoft Visual Basic 4.0 78
• Condição - É qualquer expressão numérica ou de string avaliada pelo 
While. 
 
 
 
 
 Descrição: 
 
 O funcionamento desta estrutura é bem simples: se a condição 
especificada for verdadeira, o Visual Basic executará o bloco de código 
associado à estrutura. 
 
 Ao atingir a declaração Wend, o Visual Basic retoma à primeira linha da 
estrutura e reavalia a expressão. Se a mesma ainda for verdadeira, o Visual 
Basic repetirá a execução do código, reiniciando o processo ao alcançar o 
Wend. Quando esta condição de controle tornar-se falsa, a execução do loop 
será interrompida, e o controle do programa passará para a linha imediatamente 
seguinte ao Wend. 
 
 
 Apesar da simplicidade desta estrutura de controle, você deve 
preferencialmente utilizar-se da estrutura Do Loop, já que a mesma oferece uma 
maior flexibilidade na criação de loops, através da possibilidade de encerrá-los a 
qualquer momento. 
 
 
 
 
Na estrutura While... Wend não existe o comando Exit. 
 
 
 
 
 O problema é que se você definir uma expressão de controle que nunca 
resultará em False, seu aplicativo será executado indefinidamente, já que não há 
a possibilidade de utilizar um comando Exit para encerrá-lo após um 
determinado número de execuções, ou da ocorrência de alguma condição que 
indique a anormalidade na execução do código. 
 
 
 Caso você tenha interesse em ver na prática como esta estrutura de 
controle se comporta, faça as seguintes alterações no código de seu aplicativo: 
 
 Rem Estudo de While... Wend 
 
 Dim Início As lnteger, Limite As lnteger, Vezes As lnteger 
Microsoft Visual Basic 4.0 79
 
 Inicio = TxtInício.TEXT 'lnícialíza varíável com o valor do controle 
 Limíte = TxtLimite.TEXT 'Idem 
 Vezes = 0 'Inicializa a variável Vezes com zero 
 
 LblMsg.Caption = "Enquanto Início for menor que " & Limite & ", o bloco 
de código será executado!" 
 
 LblMsg.Refresh 'Atualiza o controle LblMsg 
 
 While Início < Limite 
 lnício = Inicio + 1 'lncrementa a variável 
 Vezes = Vezes + 1 'lncrementa a variável Vezes 
 TxtValorAtual.TEXT = Inicio 
 TxtValorAtual.Refresh 'Atualiza o controle 
 
 TxtAção.TEXT = "Executando o bloco de código pela " & Vezes & " 
a .vez" 
 TxtAção.Refresh 'Atualiza o controle 
 
 For n = 1 To 100000 
 Rem Este loop não faz nada! 
 Next 
 
 Wend 
 
 Rem Depois de executar o loop o controle do programa 
 Rem passa para esta linha: 
 TxtAção.TEXT = "0 bloco de código foi executado " & Vezes & " 
tezes! " 
 End Sub 
 
 Só para deixar bem documentado o que você está fazendo, altere a rotina 
Form-load( ) conforme a seguir: 
 
 LblTítulo.Caption = "WHILE" 'Altera o título da janela 
 
 
 
 Execute o seu aplicativo e repare que ele funciona de maneira idêntica à 
estrutura Do Loop que estudamos anteriormente. 
 
 
 
Microsoft Visual Basic 4.0 80
 4.9 Utilizando Funções 
 
 Nesta seção, aprenderemos o que são Funções e como utilízá-Ias em 
nossos aplicativos. Aprenderemos também o que são argumentos e valores de 
retomo de funções, além de vermos uma listagem completa das funções 
disponíveis no Visual Basic agrupadas de acordo com a sua finalidade. 
 
 
 O Que São Funções ? 
 
 As funções nada mais são do que um determinado tipo de rotina 
(procedimentos) que realiza tarefas específicas dentro de seu aplicativo, 
retomando ao aplicativo um determinado valor resultante ou não da execução 
destas tarefas. 
 
 Basicamente, as funções dividem-se em dois tipos distintos: 
 
 
⇒ Funções definidas pelo usuário, que são as rotinas desenvolvidas por você de 
acordo com as suas necessidades. 
 
⇒ Funções internas do Visual Basic, que foram criadas pela própria equipe de 
desenvolvimento do Software na Microsoft. 
 
 
 Nesta seção, aprenderemos sobre as funções internas do Visual Basic, 
ou seja, sobre aquelas funções que já estão prontas para serem utilizadas por 
você, não necessitando de nenhuma programação adicional. 
 
 Como já adiantamos a você, as funções internas realizam tarefas 
bastante específicas, que podem ser agrupadas em várias categorias conforme 
a sua finalidade. 
 
 Entre as várias categorias existentes podemos citar como exemplo as 
funções matemáticas, financeiras, de data, de manipulação de strings, 
ambientais, de conversão, etc. 
 
 
 Por que Utilizar Funções? 
 
 A grande vantagem da utilização das funções é permitir o 
reaproveitamento de determinadas partes seu código, evitando que você tenha 
que repeti-Ias mesmas várias vezes dentro de seu programa. 
 
 Isto evita que o seu aplicativo fique enorme devido à repetição de várias 
linhas de código sem necessidade, bem como diminuir a possibilidade de 
Microsoft Visual Basic 4.0 81
ocorrerem erros, já que com menos linhas seu código ficará mais fácil de ler e 
de depurar. Além disso, se uma função foi criada e testada adequadamente, as 
chances da mesma apresentar algum problema no futuro são praticamente 
nulas ou muito reduzidas, dando uma maior confiabilidade à sua aplicação. 
 Outra vantagem a ser destacada é que a manutenção de seu código 
ficará bem mais fácil, pois ao invés de corrigir linhas e linhas de comandos basta 
revisar apenas a função que sofreu alterações para atualizar todo o seu código 
de uma só vez. 
 
 Outra vantagem indiscutível das funções é a maior facilidade na criação 
de suas aplicações, pois permite que você utilize não só as funções internas do 
Visual Basic, mas também as funções desenvolvidas por você e mesmo por 
outros programadores, resultando numa maior produtividade por parte do 
programador. 
 
 Aliás foi pensando nisso que a Microsoft desenvolveu as funções internas 
do VB, poupando o seu trabalho de criação de funções básicas como as que 
retomam a data e hora do sistema ou de funções complexas, de difícil criação, 
como as que calculam valores de Seno e Cosseno, por exemplo. 
 
 
 
 Utilizando as Funções Internas do Visual Basic
A utilização das funções internas do Visual Basic é bastante simples, 
basta observar as informações (argumentos) que você deve fornecer ou não à 
função a ser utilizada. 
 
 Você pode utilizar as funções internas do Visual Basic simplesmente 
declarando o nome da função desejada dentro de suas rotinas, como por 
exemplo, no código a seguir: 
 
 Valor = Date 
 
 
 Neste caso, Valor é uma variável que receberá uma resposta vinda da 
função Date. 
 
 O único cuidado a ser tomado na utilização das funções é verificar se a 
função desejada necessita ou não de alguma informação adicional (chamada de 
argumento pelo VB) para conseguir realizar as tarefas às quais esta se propõe. 
Repare que nem todas as funções internas do VB exigem que você forneça esta 
informação adicional, sendo que para muitas delas basta incluir seu nome na 
linha de comando como fizemos no exemplo anterior. 
 
Microsoft Visual Basic 4.0 82
 Vamos aprender agora um pouco mais sobre o que são argumentos e 
sua utilização. 
 
 
 
 Argumentos de Funções 
 
 
 O argumento é uma variável, constante ou mesmo uma expressão que 
você precisa informar à função para que ela possa executar a tarefa à qual se 
propõe. 
 
 Um exemplo de função que necessita de argumento é a função que 
calcula o Cosseno de um determinado ângulo. Neste caso, você deve 
obrigatoriamente informar o valor do ângulo a ser calculado, como no exemplo a 
seguir: 
 
 Valor = Cos(0,785) 
 
 Note que neste caso o argumento deverá ser informado entre parênteses, 
logo após o nome da função. 
 
 O tipo de dado de argumento varia conforme a função escolhida, sendo 
que ele tanto poderá ser do tipo de dados numérico, data, string, lógico, etc. 
 
 
 
 Valores de Retorno 
 
 
 Toda função sempre apresenta um valor de retorno, que nada mais é do 
que o resultado final obtido após a sua execução. 
 Para que entenda melhor, imagine que você necessita calcular a raiz 
quadrada de um número qualquer como 16, por exemplo. Você pode fazer isto 
no Visual Basic através da função Sqr (de square), bastando para isso fornecer 
como argumento o valor a ser calculado, de forma que nossa função ficaria igual 
a Sqr(16). Como todos nós sabemos, a resposta encontrada por esta função 
será o valor 4. Mas fica uma dúvida, como o Visual Basic nos indicaria que esta 
foi a resposta encontrada? 
 
 Como já havíamos adiantado a você, a resposta para esta pergunta é o 
Valor de Retomo. Isto que dizer que sempre que você utilizar uma função 
qualquer para a realização de urna tarefa, deverá associá-la a uma variável de 
memória ou controle de seu formulário, de modo a ter um lugar determinado 
para receber o valor retomado pela função. 
 
Microsoft Visual Basic 4.0 83
 
 
 
 
 
 
 
 
 4.10 Funções Internas do Visual Basic 4.0 
 
 
Funções Matemáticas 
 
Abs Retorna o Valor Absoluto de um Número
Atn Calcula o Arco Tangente de um Número
Cos Calcula o Cosseno de um Número 
Exp Retorna o Valor de e Elevado a uma 
Potência 
Fix Retorna a Parte Inteira de um Número 
Int Retorna a Parte Inteira de um Número 
Log Calcula o Logaritmo Natural de um 
Número 
Rnd Retorna um Número Aleatório 
(Randômico) 
Sgn Retorna um Inteiro Conforme o Sinal do 
Número 
Sin Calcula o Seno de um número 
Sqr Calcula a Raiz Quadrada de um Número
Tan Calcula a tangente de um Número 
 
 
 
 
Funções de Data e Hora 
 
Date Retorna a Data Atual do Sistema 
DateAdd Retorna a Data Especificada Acrescida 
do Intervalo de Tempo Informado 
DateDif Retorna o Intervalo ed Tempo Decorrido 
entre Duas Datas Especificas 
DatePart Retorna a Parte Especificada de uma 
Determinada Data 
DateSerial Retorna uma Data para o Ano, Mês e 
Microsoft Visual Basic 4.0 84
Dia Especificados 
DateValue Retorna uma Data a Partir de uma Data 
na Forma de String 
Day Retorna o Número do Dia de uma Data 
(de 1 a 31) 
Format Formata uma Expressão de Acordo com 
as Instruções Definidas pelo Usuário 
Hour Retorna o Número da Hora (0 a 23) de 
uma Determinada Hora Especificada 
Minute Retorna o Número de Minutos da Hora 
Especificada (0 a 59) 
Mounth Retorna o Número do Mês de uma 
Determinada Data (1 a 12) 
Now Retorna a Data e Hora Atuais do seu 
Sistema 
 
Time Retorna a Hora Atual do Sistema 
Timer Retorna o Número de Segundos 
Decorridos desde 0:00h (de 0 a 59) 
Weekday Retorna o Número do Dia da Semana (1 
- Domingo, ..., 7 - Sábado) 
Year Retorna o Número do Ano de uma 
Determinada Data 
 
 
 
Funções de Sistema Operacional 
 
Command Retorna o Argumento Informado na 
Linha de Comando Utilizado na 
Inicialização do Visual Basic ou de um 
Programa Executável Desenvolvido pelo 
mesmo 
CreateObject Cria um Objeto OLE 
CurDir Retorno a Pasta (ou diretório) Atual 
Dir Retorna o Nome do(s) Arquivo(s) ou 
Diretório(s) que combina(m) com o 
Padrão Especificado ou Atributo de 
Arquivo, ou Volume de um Drive 
DoEvents Interrompe Momentaneamente a 
Execução de seu Aplicativo para que o 
Sistema Operacional possa Processar 
outros Eventos 
Enviroment Retorna a String Associada a uma 
Microsoft Visual Basic 4.0 85
Variável de Ambiente do Sistema 
Operacional (como Path e Prompt, por 
exemplo) 
Error Retorna a Mensagem de Erro que 
Corresponde a um Dado Número de 
Erro 
GetObject Recupera um Objeto OLE de um 
Arquivo 
InputBox Exibe uma Caixa de Dialogo para que o 
Usuário possa Digitar uma Resposta 
Qualquer. Após Escolher um dos Botões 
Disponíveis, o VB Retorna o Valor 
Digitado 
LoadPicture Carrega uma Imagem dentro de uma 
Objeto Form Object, Controle 
PictureBox ou Controle Image 
MsgBox Exibe uma Mensagem em um Quadro 
de Dialogo e Espera que o Usuário 
Escolha um dos Botões Disponíveis. 
Após a Seleção, o VB retorna um Valor 
Indicando o Botão Escolhido 
QBColor Retorna o Valor da Cor RGB 
Correspondente ao Número de Cor 
Informado 
RGB Retorna um Número Representando 
uma Cor do Padrão RGB 
Shell Indica a Execução de um Programa 
Qualquer 
Spc Utilizada com o Comando Print # ou 
com o Método Print para Posicionar a 
Saída de uma Expressão Qualquer 
Tab Utilizada com o Comando Print # ou 
com o Método Print para Posicionar a 
Saída de uma Expressão Qualquer 
 
 
 
 
 
 
 4.11 Procedimentos 
 
 
 Nesta seção, aprenderemos o que são procedimentos, seus tipos e como 
e onde criá-los. 
Microsoft Visual Basic 4.0 86
 Veremos também como os mesmos podem aumentar em muito a nossa 
produtividade no desenvolvimento de aplicativos em Visual Basic. 
 Qualquer necessidade de informações adicionais consulte as referências 
citadas na Bibliografia Básica. 
 
 
 O que são Procedimentos ? 
 
 Os Procedimentos (ou Procedures) nada mais são do que uma 
determinada seqüência de comandos que são executados de uma só vez ao 
serem chamados, operando como um bloco de código para o aplicativo. 
 
 As funções que estudamos na seção anterior não deixam de ser 
procedures, pois apesar de você não poder ver o seu conteúdo, elas executam 
vários comandos internamente para realizarem as tarefas às quais as mesmas 
se propõem. 
 
 
 
Qual a Diferença entre Procedimentos Sub e Function? 
 
 
 A diferença básica entre estes dois tipos de procedimentos é que os 
procedimentos Function podem retomar valores para o aplicativo que solicitou a 
execução do procedimento, enquanto os procedimentos Sub não retomam 
valores. 
 
 Na seção anterior, você viu que ao chamarmos a função Date, obtivemos 
como resposta a data atual do sistema, sendo que esta resposta foi armazenada 
em uma variável de memória. Esta função poderia ser chamada em um 
procedimento como este: 
 
 Private Sub BtnExecutar Click( ) 
 
 Dim Valor As Date 
 
 Valor = Date 'Função Date 
 TxtEntrada. TEXT = "Função Date" 
 TxtResultado. TEXT = Valor 
 BtnExecutar.Enabled
= False 'Desabilita o botão Executar 
 BtnLimpar.Enabled = True 'Habílita o botão Limpar 
 
 End Sub 
 
 Neste caso o valor de retorno da função Date foi armazenado na variável 
de memória Valor. 
Microsoft Visual Basic 4.0 87
 Se você tentasse fazer o mesmo corn uma procedure Sub, receberia a 
seguinte mensagem de erro do Visual Basic: 
 
Expested Function or variable 
 
 
 Isto ocorre pois quando você atribui uma procedure a uma variável de 
memória como em 
 
 NovoValor = Calculaldade(“12/03/65") 
 
você está indicando ao Visual Basic que CalculaIdade é uma procedure do tipo 
Function, e que o valor de retorno gerado pela mesma será armazenado na 
variável de memória NovoValor. 
 Agora que você já sabe a diferença básica entre estes dois tipos de 
procedimento, vamos relembrar um pouco quais as vantagens de utilizarmos 
estes componentes em nossos aplicativos: 
 
 
 Porque Utilizar Procedimentos ? 
 
 
 Já falamos um pouco sobre a vantagem da utilização das funções no dia-
a-dia do programador, mas tendo em vista apenas as funções internas do Visual 
Basic. (Abordaremos os procedimentos desenvolvidos pelo usuário, também 
conhecidos como UDF (de User Defined Functions) ou funções definidas pelo 
usuário (isto no caso das funções) nos exercícios práticos. 
 
 Basicamente, existem três grandes vantagens em utilizarmos os 
procedimentos em nossos aplicativos: 
 
1. A primeira grande vantagem é a possibilidade de reaproveitarmos rotinas 
criadas anteriormente por nós (ou por outros) no desenvolvimento de novas 
aplicações, poupando com isso tempo e esforço. Você pode aproveitar 
Funções e Subs que realizará tarefas bem específicas (como um cálculo 
científico bastante complexo) já existentes em outro aplicativo desenvolvido 
por você, ou mesmo criadas por algum colega que seja especialista no 
assunto. Neste caso, o único cuidado a ser adotado por você é fornecer os 
argumentos corretamente e saber o que esperar como resposta. 
 
2. Outra vantagem indiscutível é a possibilidade de modularização de seu 
código, tornando mais legível e menos sujeito a erros. A modularização 
permite que você divida tarefas complexas em pedaços menores, como as 
Funções ou Subs. Desta forma, quando você tiver a certeza de que um 
determinado procedimento está operando corretamente, menores serão as 
chances de ocorrerem erros de processamento em seu aplicativo. 
Microsoft Visual Basic 4.0 88
 
3. Como vantagem adicional poderíamos citar a possibilidade de um programa 
ser desenvolvido por mais de um programador ao mesmo tempo. Basta 
definir que tarefas cada função deverá realizar, os dados que cada uma irá 
utilizar na entrada e a resposta que deverá ser obtida. Então, é só entregar 
a tarefa de codificação a cada um dos programadores e unir as Funções e 
Subs criadas por cada um deles em um único aplicativo. 
 
 
 
 Isto significa que você pode padronizar determinados procedimentos para 
serem reaproveitados em outros aplicativos, Imagine que você esteja 
desenvolvendo um programa para a sua empresa e que normalmente você 
necessita calcular a média de dois números, por exemplo. 
 Ao invés de reescrever as linhas de código que executam esta tarefa em 
cada um dos seus aplicativos, você poderia criar uma função que realizasse esta 
tarefa e simplesmente copiar o código desta função dentro de cada aplicativo 
quando fosse necessário. 
 
 Uma solução bastante prática seria criar uma função que recebesse os 
dois valores a serem calculados como argumentos, e que a mesma retomasse o 
valor resultante do cálculo da média dos dois números. Desta forma você não 
precisaria perder tempo definindo variáveis ou tipo de dados, simplificando 
bastante o seu trabalho. Um exemplo de como esta função seria utilizada em 
seus futuros aplicativos poderia ser a seguinte linha de código: 
 
 ValorMedio = CalculaMedia(12,5) 
 
 
 Agora que você já sabe as vantagens que a utilização dos procedimentos 
pode trazer aos seus aplicativos, vamos aprender a criar estes componentes na 
prática. 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Microsoft Visual Basic 4.0 89
 
 
 
 
 
 Prática 16 
 
 
 
 Crie um formulário como o da figura abaixo : 
 
 
 Funções 
 
 
 
 Entrada 
 
 Resultado 
 
 
 
 Executar Limpar 
 
 
 
 Enabled = False 
 
 
 
 Nomeie os objetos conforme os label’s fornecidos no layout. 
 
 A seguir inclua o código seguinte no evento click do botão executar. 
 
CmdExecutar_click( ) 
 Dim Valor as date 
 Valor = Txtentrada.Text 
 TxtResultado.Text = Month(Valor) ‘esta função 
retorna a ‘parte da data que diz respeito ao mês 
 CmdExecutar.Enabled = False 
 CmdLimpar.Enabled = True 
 
 
 No evento click do objeto botão limpar insira o código: 
 
 TxtEntrada.Text = “” 
Microsoft Visual Basic 4.0 90
 TxtResultado.Text = “ “ 
 CmdLimpar.Enabled = False 
 CmdExecutar.Enabled = True 
 
 
 Execute a aplicação colocando uma data (D/M/A) no campo de 
entrada e pressionando executar. 
 
 
 
 Prática 17 
 
 
 
 Vamos ver agora, utilizando o formulário anterior, como funciona a 
função DATEDIFF, e como fazemos para criar um procedimento nosso. 
 
 Altere o código do evento click do botão executar colocando o 
código. 
 
 Dim Valor as Date, Retorno as Integer 
 
 Valor = TxtEntrada.Text 
 Retorno = Datediff (“d”, #1/1/95#, Valor) ‘Valor - 1/1/95 
 TxtResultado.Text = Retorno 
 CmdExecutar.Enabled = False 
 CmdLimpar.Enabled = True 
 
 
 Agora digite na parte General (declarations) o seguinte 
procedimento 
 
 Sub limpar 
 
 TxtEntrada.Text = “” 
 TxtResultado.Text = “ “ 
 CmdLimpar.Enabled = False 
 CmdExecutar.Enabled = True 
 
 End Sub 
 
 
 obs: Digite tudo. 
 
 
Microsoft Visual Basic 4.0 91
 Depois insira a chamada deste procedimento no evento click do botão 
limpar. 
 
 Sub cdmlimpar_click() 
 
 limpar ‘Chamando procedimento limpar 
 
 End sub 
 
 
 Execute novamente a aplicação e veja os resultados. Consulte a 
tabela de funções e verifique outras funções de manipulação de datas. 
 
 
 Prática 18 
 
 
 
 
 Construir um aplicativo VB que calcule a área de uma determinada 
figura geometrica. Formulário principal deverá conter o seguinte LayOut : 
 
 
 
 
 Cálculo de áreas 
 
 
 Escolha uma Opção 
 Form 
 O Cálculo da Área de um retângulo 
 
 O Cálculo da Área de uma Circunferência 
 
 O Cáluco da Área de um Triângulo 
 Frame 
 
 
 Termina 
 
 
 
Option Control Command 
 
 
 
Microsoft Visual Basic 4.0 92
 
 
 
 
Para cada cáculo de área deverá ser utilizado um formulário separado. 
 
 
 
 
 
 
 
 
 
 
 Exemplo : Cálculo da Área do Triângulo 
 
 
 Cálculo da Área de um Triângulo 
 
 Forneça : 
 
 Base Resultado 
 
 Altura 
 
 Calcular Voltar 
 
 
 
 
 Fórmulas : 
 
 
Área do Triângulo = (Base * Altura)/2 
 
Área do Retângulo = (LadoA * LadoB) 
 
Área da Circunferência = (Π * R2) , com Π = 3.1416 
 
 
 
 
 Este exercício não possui a resolução na apostila, 
tente realmente fazer sozinho!!!
Microsoft Visual Basic 4.0 93
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 Prática 19 
 
 
 
 Contruiremos um aplicativo bastante simples que nos ensinará a 
trabalhar com o controle Progressbar: 
 
 
 
 
 
 PROGRESSBAR 
 
 
 Crie um formulário com o seguinte conteúdo : 
 
 
 
 Utilizando PROGRESSBAR 
 
 
 
 
 
 
 Inicio Fim 
 
 
 
 
Controle 
Progressbar 
Microsoft Visual Basic 4.0 94
 Command 
 
 
 Depois insira o seguinte código na sua aplicação : 
 
CmdInicio_Click( ) 
 
Dim I as Integer 
For I = 1 to 1000 
 Progressbar.Value = i / 10 
Next I 
 
Cmd_Fim( ) 
End 
 
 Execute sua aplicação e teste novos valores para o laço acima. 
 
 
 
 Prática 20 
 
 
 
 Vamos construir um aplicativo que nos ensine a trabalhar com os 
controles: Lista de Drivers, Diretórios e Lista de Arquivos. 
 
• objetivo do nosso aplicativo é : o usuário “busca” através dos 
controles, um arquivo de figura e após selecioná-lo, o aplicativo 
imprimirá a figura em um segundo formulário. 
 
 Crie um formulário com os seguintes objetos: 
 
 
 Visualização de Figuras 
 
 
 
 Visualizar 
 
 
 
 Encerrar 
 
 
 
 
Microsoft Visual Basic 4.0 95
 
 
 
 
 
Drivers Diretórios FileListBox Command 
 
 
 
 
 Ajuste as seguintes propriedades aos objetos: 
 
 
 
 
 
 
 
Formulário: 
 
Name FrmLista 
Caption visualização de Figuras 
 
 
 
 
 
Command: 
 
Name CmdEncerrar 
Caption Encerrar 
 
Name CmdVisualizar 
Caption &Visualizar 
Default True 
Enabled False 
 
 
Driver: 
 
Name DrvDrives 
 
 
Diretório : 
 
Name DirDiretórios 
Microsoft Visual Basic 4.0 96
 
 
FileListBox : 
 
Name Filarquivos 
Pattern *.bmp (ou Icon) 
 
 
 
 Insira o código: 
 
 
CmdEncerrar_Click( ) 
 
 End 
 
CmdVisualizar_Click( ) 
 
Dim Arquivo as string 
Arquivo = ucase(filarquivos.path + “\”+ Filarquivos.filename) 
FrmVisualização.show 
 FrmVisualização.windowstate = 2 
 FrmVisualização.caption = ärquivo:”+ arquivo 
 FrmVisualização!imgfigura.picture = loadpicture(arquivo) 
 
 
DirDiretórios_change( ) 
 
 Filarquivos.path = disdiretorios.path 
 CmdVisualizar.Enable = false 
 
Drvdrives_change( ) 
 
 Dirdiretorios.path = Drvdrives.drive 
 Cmdvisualizar.enable = false 
 
Filarquivos_click( ) 
 
 Cmdvisualizar.enabled = true 
 
 
 Depois disso abra um novo formulário com a seguinte forma: 
 
 
 
 
Microsoft Visual Basic 4.0 97
 
 
 
 
 
 Image 
 
 
 
 
 
 Retorna 
 
 
 
 
 Command 
 
 
 
 
 
 
 
Propriedades: 
 
Formulário: 
 
Name FrmVisualização 
 
 
Image : 
 
Name ImgFigura 
 
 
 
 
 
Command: 
 
Name Cmdretorna 
Caption &Retorna 
Default True 
 
 
Microsoft Visual Basic 4.0 98
 Depois disto, insira o seguinte código no procedimento 
CmdRetorna_Click(): 
 
 FrmVisualização.WindowState = 0 
 Unload FrmVisualização 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 Prática 21 
 
 
 
 Vamos aprender agora como trabalhar com os controles de barras 
verticais e horizontais (Controles ScrollBar). 
 
 Crie um formulário com os seguintes objetos : 
 
 
 
 Animação 
 
 
 
 
 Controle Image 
Microsoft Visual Basic 4.0 99
 (Situar na 
 Posição 1800,600) 
 
 Controle 
Barras 
Verticais 
Controle 
Barras 
Horizontais 
 
 
 
 
 
 
 
 
 
 
 
 
 
 Propriedades: 
 
 
 Formulário : 
 
Name FrmBarras 
BackColor &H00FFFFFF& 
Caption Animação(demonstração scrollBar) 
 
 
 
 
 ScrollBar Vertical: 
 
 
Name VscrEixoY 
LargeChange 500 
Max 2000(tamanho do eixo) 
SmallChange 100(grid) 
 
 
 ScrollBar Horizontal: 
 
 
Name HscrEixoX 
LargeChange 500 
Max 2000 
SmallChange 100 
 
Microsoft Visual Basic 4.0 100
 
 
 
 Image: 
 
 
Name ImgFigura 
Picture (Sugestão : Arquivos de 
programa1\MicrosoftVisualBasic\Bitmap
s\Assorted\Beany 
 
 
 
 
 
 A seguir insira o código: 
 
 HscrEixoX_Change( ) 
 ImgFigura.Left = 1300 + HscrEixoX.Value 
 End Sub 
 
 VscrEixoY_Change( ) 
 ImgFigura.Top = 600 + VscrEixoy_value 
 End Sub 
 
 
 Execute a aplicação e faça alterações nas propriedades dos controles 
de barra para melhor compreendê-los. 
 
 
 
 
Módulo 5 
 
Criando Menus 
Personalizados 
 
 
 Neste módulo, aprenderemos a melhorar ainda mais a interface de nossa 
aplicação com usuário , desenvolvendo menus personalizados para a execução 
de tarefas 
Microsoft Visual Basic 4.0 101
 
 
 
 5.1 Incluindo Menus em nossa Aplicação 
 
 
 O Menu Editor 
 
 
 Criar menus de comandos no Visual Basic é bastante simples, pois o Menu 
Editor encarrega-se da parte gráfica, que sem dúvida alguma é a parte mais 
trabalhosa. 
 
 Você praticamente só irá definir os nomes dos menus, os comandos que 
cada um conterá e os procedimentos que serão executados quando o usuário 
selecionar uma das opções disponíveis no mesmo. 
 O Menu Editor não aparece na caixa de ferramentas junto com os demais 
controles, mas sim na barra de ferramentas do VB. 
 Selecione o ícone correspondente ou a opção Menu Editor no menu 
Tools. 
 
 
 5.2 Criando uma Barra de Menu 
 
 Da mesma forma que nunca devemos iniciar a criação de um aplicativo 
sem termos uma idéia bem-definida do que queremos que ele faça, também no 
caso dos menus é necessário ter em mente as opções que queremos que ele 
assuma, e os comandos que serão executados quando estas opções forem as 
escolhidas. 
 
 Também será necessário definirmos se determinadas opções do menu 
ficarão desabilitadas quando determinados comandos estiverem sendo 
executados pelo usuário. Tudo isso deverá estar definido antes de iniciarmos o 
trabalho de criação dos menus, a fim de evitarmos erros de concepção em 
nosso projeto. 
 
 O primeiro passo para criarmos urn menu é definirmos onde ele será 
incluído. Vamos abrir um novo projeto e deixar um formulário como a janela 
ativa do VB. 
 
 O próximo passo a ser dado é definir o nome que o nosso menu terá, ou 
seja, o nome que será exibido na barra de menu de nosso aplicativo. Em nosso 
exemplo, queremos que o primeiro menu a ser exibido tenha o nome de Arquivo. 
Este nome deverá ser incluído na caixa de texto Caption do Menu Editor. 
 
Microsoft Visual Basic 4.0 102
 Lembre-se de que sempre que você inclui o símbolo “&” antes de uma 
letra, ela é exibida no menu (ou controle) sublinhada, indicando que você pode 
acessá-la através da combinação de teclas ALT mais a letra destacada. 
 
 Em nosso caso, as tecias ALT+A abrirão o menu Arquivo que estamos 
criando. 
 
 Você também pode definir um nome para este menu. Da mesma forma 
como você faz com os controles de seu aplicativo, também é possível 
ajustarmos propriedades dos menus durante a execução de seu programa, 
habilitando e desabilitando opções, modificando nomes, etc. 
 
Este nome não aparece na tela, serve apenas para ser utilizado pelo seu 
código. Da mesma forma como já fizemos com vários controles de seu 
aplicativo, procure utilizar-se das letras mnu antes do nome do controle, a fim de 
facilitar o seu
trabalho de codificação. 
 Dê o nome de mnuArquivo para este controle e pronto, nosso menu já 
está criado, só que sem nenhum comando ainda. Por enquanto você só criou a 
palavra Arquivo no alto de sua tela. 
 
 Clique sobre o botão "OK" para fechar o Menu Editor e veja que o menu 
já foi incorporado ao seu formulário. 
 
 Coloque o seu aplicativo em execução e veja que o VB inclui o menu 
Arquivo, porém ele está vazio, isto é, não possui nenhum comando. 
 Pare a execução do aplicativo e abra novamente o Menu Editor. 
 
 
 
 5.3 Adicionando Itens em um Menu 
 
 
 Vamos incluir um ítem em nosso menu Arquivo. Clique sobre o botão 
“Next” (dentro da janela de Menu) e veja que o VB inclui uma nova linha em 
branco logo abaixo do menu existente, além de limpar os dados da janela. 
 
 Vamos incluir mais um ítem no menu Arquivo, desta vez o comando Sair, 
que encerrará a execução de nosso aplicativo. 
 Abra novamente o Editor de Menus e clique sobre a opção Abrir. A 
seguir, clique novamente sobre o botão "Next" para iniciar uma nova opção de 
menu e digite o comando &Sair. 
 Passe para a caixa de texto Name e dê o nome de MnuArquivoSair para 
este comando. Note que desta vez não é necessário dar um nível para a direita 
ao comando Sair, pois o VB assume que você está indo na seqüência de criação 
do menu Arquivo. 
Microsoft Visual Basic 4.0 103
 Feche a janela com o botão “OK” e dê uma olhada com está ficando o 
seu menu. Realmente está ficando muito bom! 
 
 Só para você ter uma idéia melhor de como funcionam os níveis, abra 
novamente o Editor de Menus e dê mais um nível para a direita no item Sair. 
 
 Feche a janela do Editor e veja que o VB criou um submenu dentro do 
menu Arquivo. 
 
 
 O VB permite que você crie até quatro níveis de submenus em seus 
aplicativos, que cá entre nós, é mais do que suficiente para a maioria das 
aplicações. 
 
 
 
 
 Apesar de termos citado no início deste módulo 
que os menus são importantes recursos para tornar 
 sua aplicação amigável, é bom evitar exageros. 
Nada é mais cansativo do que ter que abrir três 
ou quatro menus em cascata até encontrar o 
comando desejado. O ideal é utilizar menus 
 com no máximo dois níveis hierárquicos. 
 
 
 
 
 Utilize agora o botão com a seta para a esquerda para retomar a opção 
Sair à sua Posição original. 
 
 
 5.4 A Posição dos Itens no Menu 
 
 
 Você pode alterar facilmente a posição de um item no menu através das 
setas que apontam para cima e para baixo. 
 Basta destacar o comando a ser movido e escolher o botão adequado. 
 
 
 
 
 5.5 Incluindo novos Itens 
 
 
Microsoft Visual Basic 4.0 104
 Você pode incluir novos itens em um menu, simplesmente escolhendo o 
botão "lnsert". Basta selecionar um comando do menu e clicar sobre este botão. 
O VB deslocará o comando selecionado (e todos os abaixo deste) em uma linha, 
e você poderá incluir o novo comando em sua posição. Faça isso agora, 
selecionando o comando Sair com um clique e escolhendo o botão "Insert ". 
 
 Dê o Caption de &Imprime a este botão e o Name de 
MnuArquivoImprime. 
 Não se preocupe com este comando, pois vamos apagá-lo em seguida 
inclua mais um comando entre as opções Imprime e Sair, chamado de 
Ferramentas. Ajuste as suas propriedades conforme a seguir: 
 
 Caption: &Ferramentas 
 Name: MnuArquivoTools 
 
 
 
 5.6 Exibindo Separadores 
 
 
 Você já deve ter notado que determinados menus possuem linhas 
separando os seus diversos itens, tornando-os mais organizados. Aliás, quase 
todos os menus do VB possuem um separador de itens, que nada mais é do que 
uma linha que atravessa o menu de lado a lado. 
 
 Você também pode incluir este recurso em seus menus bastando para isso 
digitar na caixa de texto Caption um hífen (-). 
 
 Faça isso agora, selecionando o comando Sair com um clique e 
escolhendo a seguir o botão "lnsert", como você já sabe, será incluída uma nova 
opção entre os comandos lmprime e Sair. Digite o sinal - na caixa de texto 
Caption e dê o nome de MnuSeparador para este controle. 
 
 
 Feche o Menu Editor e veja o resultado obtido. 
 
 
 
Procure agrupar os comandos de 
seus menusdentro de uma determinada 
 lógica. Observe como os produtores de software 
organizam seus menus, separando as operações de acordo 
com a finalidade das mesmas. Isto ajuda muito o usuário 
 e até mesrno quem desenvolve, poistodos os comandos 
 relacionados a uma determinada tarefa ficam juntos, 
permitindo a sua rápida localização. 
Microsoft Visual Basic 4.0 105
 
 
 
 
 
 
 5.7 Eliminando Itens do Menu 
 
 
 Tão fácil quanto incluir é eliminar itens do menu. 
 Selecione o comando Imprime com um clique e em seguida escolha o 
botão "Delete". O item selecionado será eliminado do menu, e todos os itens 
serão reaiocados em suas novas posições. 
 
 
 
 5.8 Criando outro Menu 
 
 Bem, até agora criamos o menu Arquivo e alguns itens debaixo do 
mesmo. Mas, e como podemos criar um novo menu, como um menu Ajuda 
(Help), por exemplo? 
 
 Bem, o procedimento é o mesmo. Selecione o último comando do menu 
Arquivo (o comando Sair) e clique sobre o botão "Next". Como lhe dissemos, o 
VB assume que você pretende continuar criando comandos para o menu arquivo 
e obedece ao último nível existente. 
 
 Neste caso, você pode comunicar ao VB que está criando outro menu, 
simplesmente utilizando-se da tecla com a seta para a esquerda, aumentando o 
nível do menu. Então é só complementar as informações que você deseja. 
 
 Entre com os seguintes dados: 
 
 Caption: A&juda 
 Name: MnuAjuda 
 
 Inclua logo abaixo deste item (porém num nível inferior) o comando Sobre 
com as seguintes especificações: 
 
 Caption: S&obre 
 Name: MnuAjudaSobre 
 
 Pronto, já temos dois menus distintos criados. 
 
 Vamos Incrementá-los um pouco, utilizando mais alguns recursos 
existentes no Menu Editor. 
Microsoft Visual Basic 4.0 106
 
 
 
 
 
 
 
 
 5.9 Teclas de Atalho 
 
 Você já viu que basta utilizarmos o sinal “& antes de uma letra de um 
nome ou comando para criar uma tecla de atalho. Só que esta combinação de 
teclas que criamos refere-se somente ao acionamento da barra de menus. Você 
também pode utilizar o Menu Editor para definir teclas de atalho que executem 
tarefas, sem a necessidade de acionamento dos comandos via menu. 
 
 Um exemplo é o próprio Visual Basic., você pode abrir um projeto 
existente utilizando a combinação de teclas ALT+F (abre o menu File) e em 
seguida teclando “O” (de Open Project) ou sem ter que abrir nenhum menu 
através da combinação de teclas CTRL+O. 
 Note que por coincidência, as duas letras são iguais, mas isto não é uma 
regra obrigatória. Você pode observar isto no menu Tools, na Opção Menu 
Editor. Note que a combinação de teclas para este comando é CTRL+E, e não 
CTRL+M como pode parecer. 
 Repare ainda que a combinação de teclas de atalho é exibida no próprio 
menu ao lado do nome do comando. 
 Vamos fazer isto agora, atribuindo a combinação de teclas CTRL+A à 
tarefa de abrir um arquivo. 
 
 Selecione o comando Abrir no Menu Editor e clique sobre a caixa de 
listagem Shortcut (atalho). 
 Em nosso caso, vamos selecionar a combinação CTRL+A (de Abrir). 
 
 Note que não é necessário efetuar nenhum outro ajuste em seu aplicativo 
para que as teclas de atalho entrem em operação. Basta definir a procedure que 
está associada ao comando do seu menu e sempre que você acionar as teclas 
combinadas, o VB chamará automaticamente o procedimento correto. Perceba 
que a sua escolha passou a ser exibida no menu Arquivo, orientando o usuário 
sobre a nova possibilidade. 
 
 
 
 Uma boa regra para a definição de teclas de atalho é procurar 
associá-las com o nome da tarefa a ser executada. CTRL+A para Abrir um 
arquivo, CTRL+S para Salvar, CTRL+I para Imprimir,
e assim por diante. 
 
Microsoft Visual Basic 4.0 107
 
 
 
 
Outra sugestão é procurar definir as mesmas 
 letras tanto paras as teclas de atalho como para as 
opções dos menus. Note que é mais fácil associar Salvar 
com CRTL+S e Imprimir com CTRL+I, por exemplo, 
do que Imprimir com CTRL+P (de Print). 
 
 5.10 Marcando Opções de Menu 
 
 
 Outro recurso bastante interessante é a característica de acrescentarmos 
uma marca (ou check) em uma opção de menu, indicando a sua seleção ou não. 
 
 Este recurso é muito utilizado para indicar ao usuário as opções que 
estão ativadas ou não no momento, como por exemplo a opção Toolbar do 
menu View do Visual Basic. 
 Se você estiver visualizando a barra de ferramentas do software, a opção 
Toolbar estará marcada com o check, indicando a seleção. Se você clicar sobre 
este comando do menu novamente, apagará o check, e a barra de ferramentas 
deixará de ser exibida na tela. Para tornar a exibi-Ia basta repetir o 
procedimento, e a marca voltará a ser exibida ao lado do comando no menu. 
 
 No nosso aplicativo, o comando Ferramentas no menu Arquivo utilizará 
esta opção. Para isso destaque este comando na janela que mostra a 
hierarquia dos menus e clique sobre a caixa de verificação Checked. 
 Quando você observar o menu Arquivo da próxima vez, verá urna 
pequena marca do lado esquerdo do comando Ferramentas, indicando a sua 
seleção. 
 
 
 
Este recurso é muito interessante para ativar a 
exibição de janelas como caixas de Ferramentas, 
Paletas de Cores, exibir determinadas informaçõesa 
na tela, como a data e hora, por exemplo. 
 
 
 
 
 
 5.11 Desabilitando Opções de um Menu 
 
 
Microsoft Visual Basic 4.0 108
 Você pode criar menus em que determinadas opções estão desabilitadas 
inicialmente, e conforme o usuário vai realizando determinadas tarefas, estas 
opções de menu vão sendo habilitadas. 
 
 
 Este é um recurso super-importante para facilitar a vida dos usuários do seu 
sistema, pois se você deixar todas as opções dos menus habilitadas, pode haver 
casos (quase com certeza) que em determinadas situações, podem causar um 
erro ou pelo menos não executarem nada, deixando seu usuário perdido. 
 
 
 
 
 Um exemplo seria deixar a opção Imprime habilitada antes de o usuário ter 
aberto um arquivo qualquer. Neste caso, ao selecionar o comando Imprime, 
como reagiria o seu aplicativo? Por isso procure sempre ir habilitando as 
opções, conforme forem surgindo condições para a realização das tarefas 
disponíveis nos menus. 
 
 
 Para desabilitar uma opção de menu basta eliminar a marca da caixa de 
verificação Enabled do menu Editor. Mais tarde você poderá tornar esta opção 
ativa através de suas rotinas de código. Aliás, nós faremos o caminho inverso: 
desabilitaremos um comando quando ocorrerem determinadas condições em 
nosso aplicativo. 
 
 
 
 5.12 Ocultando Opções 
 
 
 Outro recurso disponível é a capacidade de ocultarmos comandos em 
nossos menus, ou seja, o comando existe, tem suas propriedades definidas, 
está associado a um evento, porém não aparece no menu. 
 
 Quando for o momento adequado, você altera a sua propriedade Visible e 
ele reaparece no menu, estando pronto para ser utilizado. 
 
 Isto é muito comum em aplicativos bem-planejados, como o Word, por 
exemplo. Se você fechar todas as janelas de documento abertas, o menu 
arquivo do Word exibirá quatro ou cinco opções de comandos. Se você abrir um 
arquivo qualquer, estas opções aumentam para doze comandos disponíveis! 
 
 
 
 
Microsoft Visual Basic 4.0 109
 
 
A grande vantagem deste tipo de recurso é que 
você exibe menus inteligentes, que apresentem 
somente opções aplicáveis à situação que o usuário 
se encontra no momento, tornando seu aplicativo 
mais fácil de ser usado pelos usuários. 
 
 
 
 
 
 
 
 
 
 5.13 Associando Eventos aos Comandos de Menu 
 
 
 Feche a janela do Menu Editor e selecione o menu Arquivo em seu 
formulário. Assim que ele for aberto, clique sobre a opção Sair. 
 O Visual Basic automaticamente abrirá a janela de códigos para que você 
crie os procedimentos que farão o seu aplicativo funcionar. 
 No caso específico da opção Sair do menu Arquivo, queremos que esta 
opção execute a tarefa de finalizar a aplicação. Desta forma vamos solicitar ao 
VB que execute o comando End quando este comando for selecionado no 
menu: 
 
 Private Sub MnuSair 
 End 
 End Sub 
 
 Execute o seu aplicativo e veja que o VB realmente obedece ao comando 
do menu. 
 
Microsoft Visual Basic 4.0 110
Módulo 6 
 
Quadros de Diálogo e 
Uso de Arquivos 
 
 
5.1 Criação de Quadros de Lista 
 
 
 Você usa quadros de lista quando tem uma série de escolhas para 
apresentar ao usuário e deseja limitar as escolhas. Ao contrário, um quadro 
combo é usado mais para escolhas sugeridas; ou seja, os usuários podem entrar 
com sua própria escolha no quadro de texto de um quadro combo, se quiserem. 
Digamos, por exemplo, que você tenha uma lista personalizada de 
aplicações do Windows, às quais o seu programa consegue iniciar; as escolhas 
poderão aparecer em um quadro de lista. Ou então, você pode apresentar as 
várias opções de atributo de arquivo (arquivo simples, leitura, escondido etc.) 
quando gravar em um arquivo. 
Em geral, os quadros de lista podem ser úteis em qualquer lugar onde 
existe uma série de escolhas. E como esses quadros de lista podem ter barras 
de paginação, o número dessas escolhas pode ser muito maior do que você 
pode apresentar em um menu (o que os torna usuais em quadros de diálogo). 
 
 Como exemplo, vamos reunir um programa de minibancos de dados. Os 
bancos de dados normalmente ordenam seus registros de dados de acordo com 
alguma chave. Você pode fazer isso aqui com um quadro de lista. Digamos que 
esse programa de bancos de dados deve acompanhar um inventário de estoque 
numa farmácia ou na sua gaveta de medicamentos. Você poderia querer 
acompanhar coisas como: 
 
 
 Nome do produto 
 
 Quantidade do produto 
 
 Comentários 
 
 
 Por exemplo, se tivéssemos sete vidros de aspirina, cada um com 100 
comprimidos, os dados poderiam ser estes: 
 
 Nome do produto: "Aspirina" 
 
 Quantidade do produto: "7" 
Microsoft Visual Basic 4.0 111
 
 Espaço adicional para comentários: "Vender até quinta-feira." 
 
 Cada um desses itens ("Aspirina", "7" e "Vender até quinta-feira.") é 
chamado campo em um banco de dados . Juntos, eles compõem um registro. 
Para preparar nossa aplicação, podemos incluir um menu à nossa janela 
principal, com um item chamado Find Record... [encontrar registro]; quando 
selecionado, um quadro de diálogo será aberto com um quadro de lista 
mostrando os nomes associados a cada registro - por exemplo, Aspirina, 
Bandagem, Creme para Mãos etc. 
 
 Dando um duplo clique em um desses nomes, o usuário pode fazer 
aparecer o registro correspondente (isto é, o quadro de diálogo desaparece e os 
dados do registro são colocados em quadros de texto na janela principal). Uma 
das propriedades dos quadros de lista que nos ajudará aqui é a propriedade 
Sorted; se for True, o Visual Basic manterá todos os itens no quadro de lista 
ordenados alfabeticamente. Em outras palavras, o Visual Basic cuidará 
automaticamente da ordenação dos nossos produtos. 
 
 Para projetar essa aplicação, inicie o Visual Basic, chame esse projeto de 
Database.vbp e dê ao formulário a legenda "Database". Precisaremos de três 
quadros de texto nesse formulário principal, que podemos chamar Name, 
Number e Comment, aos quais podemos dar os Names NameField, 
NumberField e CommentField. De fato, podemos tornar o quadro de comentário 
um quadro de texto multilinhas, de modo que possamos armazenar bastante 
texto nele. Em seguida, podemos incluir um menu chamado File, com os 
seguintes
itens:Add Item, Find Item..., Save File.... Load File... e Exit. 
 
 Para a primeira escolha de menu, Add Item, vamos usar o Name 
AddAnItem (Addltem é uma palavra reservada, como veremos); esse item está 
disponível para que o usuário possa preencher o banco de dados. 
 
Depois de editar os três quadros de texto, o usuário poderá selecionar 
Add Item para incluir esse dado a um novo registro no nosso banco de dados. 
Podemos usar o Name Findltem para a próxima escolha de menu, Find Item ... ; 
esse item é aquele que abrirá o quadro de diálogo (o quadro de diálogo conterá 
o quadro de lista que mantém os nomes do produto de cada registro, ordenados 
alfabeticamente). 
 
Quando o usuário der um duplo clique em um item na lista, o quadro de 
diálogo desaparecerá e o registro correto aparecerá na janela principal. Você 
aprenderá a incluir o código para os dois itens de menu seguintes, Save File... e 
Load File.... neste módulo sobre arquivos. Enquanto isso, dê-lhes os Names 
Saveltem e Loadltem. 
 
 Vamos escrever primeiro a procedure AddAnltem_Click( ). Acione a 
escolha de menu Add Item, abrindo este gabarito de procedure Sub: 
Microsoft Visual Basic 4.0 112
 
 Sub AddAnItem_Click( ) 
 
 End Sub 
 
 Quando o usuário acionar Add Item, ele desejará que o conteúdo ativo 
dos quadros de texto seja armazenado no banco de dados. Podemos fazer isso 
definindo algumas variáveis globais (observe que elas devem ser variáveis 
globais, e não em nível de formulário, pois nosso quadro de diálogo um 
formulário inteiramente separado - terá que alcançar todas elas) da seguinte 
forma em um módulo chamado Database.Bas (Selecione o ícone de inserção de 
módulos no toolbar): 
 
 Global Names(100) As String 
 Global Numbers(100) As String 
 Global Comments(100) As String 
 Global TotalRecords As Integer 
 
 
 Desse modo, estamos separando espaço suficiente para manter registros 
para 100 produtos. Observe também que estamos registrando o número total de 
registros em um inteiro global chamado TotalRecords. Agora estamos livres 
para preencher esses arrays com dados, pois o usuário colocou os dados de 
que precisamos nos quadros de texto da janela principal antes de acionar Add 
Item. Ou seja, podemos armazenar dados em nossos arrays de bancos de 
dados dessa forma em AddAnItem_Click( ). Observe que incrementamos 
TotalRecords primeiro, pois estamos incluindo um novo registro: 
 
 
 
 Sub AddAnItem_Click( ) 
 
 TotalRecords = TotalRecords + 1 
 Names(TotalRecords) = NameField.Text 
 Numbers(TotalRecords) = NumberField.Text 
 Comments(TotalRecords) = CommentField.Text 
 . 
 . 
 
 End Sub 
 
 
 
 Por exemplo, suponha que estamos para criar o primeiro registro, e estes 
são os dados nos quadros de texto da janela principal: 
 
Microsoft Visual Basic 4.0 113
 
 
 Nome do produto: "Aspirina" 
 
 Quantidade do produto: "7" 
 
 Espaço adicional para comentários: "Vidros com 100 comprimidos 
cada." 
 
 
 Você definiria Names(1) com "Aspirina", Numbers(1) com "7" e 
Comments(1) com "Vidros com 100 comprimidos cada.". Agora que 
armazenamos os dados, temos que incluir o nome desse produto (Aspirina) ao 
nosso quadro de lista organizado em ordem alfabética automaticamente, de 
modo que o usuário possa selecionar com facilidade os registros. Fazemos isso 
com o método AddItem. Observe que este é um método, o que significa que 
temos que conectá-lo ao nome do quadro de lista que queremos mudar. Por 
exemplo, podemos chamar de NameList o quadro de lista que mantém todos os 
nomes de produto, o que significa que incluiríamos essa linha em 
AddAnltem_Click( ): 
 
 
 Sub AddAnItem_Click( ) 
 
 TotalRecords = TotalRecords + 1 
 Names(TotalRecords) = NameField.Text 
 Numbers(TotalRecords) = NunmberField.Text 
 Comments(TotalRecords) = CommentField.Text 
 Form2.NameList.Addltem NameField.Text 
 
 End Sub 
 
 
 Form2 é o nome do segundo formulário, que aparecerá quando o usuário 
quiser selecionar um registro. Em geral, é assim que você usa AddItem no 
Visual Basic: 
 
 
 formulário.quadro_de_lista.Addltem string$ [índice] 
 
O argumento opcional chamado índice especifica a posição da nova 
entrada no quadro de lista, onde 0 (no alto do quadro de lista) é a primeira 
posição, a próxima é 1, e assim por diante. 
 
Microsoft Visual Basic 4.0 114
Como nosso quadro de lista será ordenado automaticamente, não 
especificaremos um índice para nossas entradas. Em contrapartida, para 
remover um item, você poderá usar o método Removeltem: 
 
 
 formuláno.quadro_de_lista.RemoveItem índice 
 
 Aqui, um índice não é opcional. Você deverá usá-lo para especificar qual 
item na lista deverá ser removido. E isso é tudo para a inclusão de um item. 
 
O passo seguinte é encontrar itens conforme a necessidade. Acione a 
escolha de menu Find Item... para fazer surgir este gabarito: 
 
 
 
 Sub FindItem_Click( ) 
 
 End Sub 
 
 
 O trabalho real de encontrar um registro será feito pelo segundo 
formulário, Form2. Agora podemos mostrá-lo na tela. 
 
 
 Sub FindItem_Click( ) 
 
 Form2.Show 
 
 End Sub 
 
 
 
 E isso é tudo para Findltem_ Click( ). Vamos projetar agora o quadro de 
diálogo chamado Form2. 
 
Crie Form2 acionando o item New Form do menu File do Visual Basic, 
dando-lhe uma legenda de Find Item.... Remova os botões Min e Max, dando ao 
formulário uma borda fixa por meio da seleção da propriedade Minbotton, 
Maxbotton e BorderStyle. Em seguida, crie um quadro de lista acionando a 
ferramenta de quadro de lista na caixa de ferramentas. Dê a esse quadro de 
lista o Name que já usamos, NameList. Defina a propriedade Sorted para True, 
de modo que as entradas nele apareçam em ordem alfabética. 
 
Observe que o Name, NameList, aparece no quadro de lista; ele 
desaparecerá em tempo de execução. Não existem barras de paginação nessa 
Microsoft Visual Basic 4.0 115
lista, mas elas aparecerão automaticamente se a lista for muito longa para o 
quadro. 
 
 Agora inclua os dois botões de controle normais para um quadro de 
diálogo, OK e Cancel, com os Names OKButton e CancelButton. É sempre bom 
tornar o botão OK o padrão (isto é, definir sua propriedade Default para True). 
Como antes, é fácil escrever a procedure CancelButton - tudo que precisamos 
fazer é esconder Form2 da seguinte forma: 
 
 
 Sub CancelButton_Click( ) 
 
 Form2.Hide 
 
 End Sub 
 
 
 Agora vamos trabalhar com a procedure OKButton_Click( ) do quadro de 
diálogo: 
 
 
 OKButton_Click( ) 
 
 End Sub 
 
 
 Quando o usuário acionar o botão OK - ou der duplos cliques em um item 
no quadro de lista, ele terá selecionado um item no quadro de lista, e deveremos 
mostrar o registro correspondente. 
 
 Então acionar em Aspirina preencherá os quadros de texto da janela 
principal com os dados que já armazenamos usando Add Item: 
 
 
 Nome do produto. "Aspirina" 
 Quantidade do produto: “7" 
 Espaço adicional para comentários: “Vidros com 100 comprimidos 
cada." 
 
 
 
 Em geral, podemos determinar qual o item selecionado em um quadro de 
lista (um item sempre está selecionado em quadros de lista) usando estas 
propriedades do quadro de lista: 
 
 
Microsoft Visual Basic 4.0 116
 
 Text O item atualmente selecionado 
 
 List Array de string contendo todos os itens 
 
 Listlndex O índice do item selecionado (base O) 
 
 ListCount Número total de itens na lista 
 
 
 
 A propriedade mais usada é Text, um string que mantém o item 
atualmente selecionado. No entanto, os outros também são muito úteis (e 
poderíamos notar que Text = List(Listlndex)). 
 
No nosso caso, teremos que encontrar o registro correspondente à 
seleção e exibi-lo. Podemos encontrar o registro correto com um loop, em 
OKButton_click(
), da seguinte forma: 
 
 
 Sub OKButton_click( ) 
 
 For loop_index = 1 To 100 
 
 If Names(loop_index) = NameList.Text Then Exit 
For 
 
 Next loop_index 
 . 
 . 
 
 Aqui estamos apenas comparando o nome do produto selecionado com 
os nomes de produto de cada registro. Quando encontrarmos o que queremos 
(ele deverá estar na lista, pois o quadro de lista simplesmente mostra esses 
nomes), saímos do loop com o comando Exit For do Visual Basic. Nesse ponto, 
podemos preencher os campos corretamente no formulário principal e esconder 
Form2 da seguinte forma: 
 
 
 Sub OKButton_click( ) 
 
 For loop_index = 1 To 100 
 If (Names(loop_index) = NameList.Text) Then Exit 
For 
 Next loop_index 
 
Microsoft Visual Basic 4.0 117
 Form1.NameField.Text = Names(loop_index) 
 Form1.NumberField.Text = Numbers(loop_index) 
 Form1l.CommentField.Text = Comments(loop_index) 
 
 Form2.Hide 
 
 End Sub 
 
 
 
 Devemos observar que os eventos importantes para quadros de lista são 
Click, quando o usuário faz uma seleção, e DblClick, quando o usuário faz uma 
escolha. Isso significa que dar um duplo clique em um item é o mesmo que 
acionar o botão OK, de modo que podemos incluir a mesma procedure: 
 
 
 Sub NameList_DblClick( ) 
 
 For loop_index = 1 To 100 
 If (Names(loop_index) = NameList.Text) Then Exit 
For 
 Next loop_index 
 
 Form1.NameField.Text = Names(loop_index) 
 Form1.NumberField.Text = Numbers(loop_index) 
 Form1.CommentField.Text = Comments(loop_index) 
 
 Form2.Hide 
 
 End Sub 
 
 A única coisa restante a fazer é tornar o item Exit ativo no menu da janela 
principal, o que fazemos pelo modo comum, com o comando End do Visual 
Basic: 
 
 
 Sub ExitItem ( ) 
 
 End 
 
 End Sub 
 
 
 Você irá utilizar o programa acima digitando dados nos quadros de texto 
da janela principal. Quando você quiser ler um registro, poderá selecionar Find 
Item... no menu File para gerar nosso quadro de diálogo na tela. Selecione o 
Microsoft Visual Basic 4.0 118
item no quadro de lista e acione o botão OK, ou então dê um duplo clique no 
item do quadro de lista, e os registros desse item aparecerão na janela principal. 
 
 Entretanto, poderíamos observar que tivemos que duplicar o mesmo 
código em NameList.DblClick( ) e OKButton_Click( ) - isto é, os dois mostram os 
registros do produto selecionado. Uma maneira de evitar isso é colocar esse 
código em um módulo, e chamá-lo a partir dessas duas procedures. 
 
Por exemplo, se criássemos uma procedure Sub contendo todo esse 
código, chamada GetItem( ), poderíamos mudar NameList.DbiClick( ) e 
OKButton_Click( ) para: 
 
 
 
 Sub NameList.DblClicko 
 GetItem 
 End Sub 
 
 
 Sub OKButton_Click( ) 
 Getltem 
 End Sub 
 
 
Com GetItem igual a: 
 
 
Sub Getltem( ) 
 
For loop_index% = 1 To 100 
 If (Names(loop_index%) = Form2.NameList.Text) Then 
Exit For 
Next Ioop_index% 
 
Form1.NameField.Text = Names(loop_index%) 
Form1.NumberField.Text = Numbers(loop_index%) 
Form1.CommentField.Text = Comments(loop_index%) 
Form2.Hide 
 
End Sub 
 
 
 
Os arrays globais Names( ), Numbers( ) e Comments( ), logicamente, não são 
ligados a formulário algum. Esse módulo é como qualquer outro arquivo 
associado ao projeto ativo; ou seja, ele é salvo e carregado junto com os outros. 
Microsoft Visual Basic 4.0 119
 
 
 5.2 Criação dos nossos próprios Tipos De Dados 
 
 
 Como o programa de bancos de dados se encontra, estamos 
mantendo três arrays de dados: 
 
 Global Names(100) As String 
 Global Numbers(100) As String 
 Global Comments(100) As String 
 
 
 Na verdade, campos como estes são normalmente reunidos no seu 
próprio tipo (e isso nos leva a um poderoso conceito no Visual Basic). Em geral, 
esse tipo de declaração (que ocorre sempre no módulo global) se parece com 
isto: 
 
 
 
 Type nometipo 
 nomeelemento As tipovariável 
 [nomeelemento As tipovariável] 
 [nomeelemento As tipovariável] 
 . 
 . 
 End Type 
 
 Por exemplo, podemos criar um tipo Record para nosso banco de 
dados da seguinte forma: 
 
 
 Type Record 
 Name As String * 50 
 Number As String * 20 
 Comment As String * 200 
 End Type 
 
 
 Esse código define um novo tipo de dados, Record, que contém os 
campos individuais, como mostramos acima. Observe que estamos dando a 
cada string um tamanho definido - isso é o que significam os caracteres * 50, *20 
e * 200. Name As String * 50 significa que o string chamado Name terá 
exatamente 50 caracteres de extensão. Podemos declarar um array desse tipo 
chamado, digamos, TheData( ), da seguinte forma: 
 
Microsoft Visual Basic 4.0 120
 
Type Record 
Name As Stririg * 50 
Number As String * 20 
Comment As String * 200 
End Type 
 
 Global TheData(100) As Record 
 
 
 
Podemos alcançar qualquer um deles usando o operador ponto (.) (assim 
como fazemos para alcançar uma propriedade do Visual Basic): 
 
 
TheData(3).Name = "Cenoura" 
TheData(3).Number = "287" 
TheData(3).Comment = "Preço muito alto?" 
 
 
Vamos usar esse novo array na nossa aplicação de bancos de dados 
para combinar todos os três arrays separados, Names( ), Numbers( ) e 
Comments( ), juntos em um array - Database( ). 
 
Depois de definir o tipo do novo registro, Record, e o array desse tipo, 
Database( ), temos que mudar as referências correspondentes no nosso 
programa. Por exemplo, Names(TotalRecords) torna-se 
TheBase(TotalRecords).Name. 
 
Existem apenas duas procedures Sub para mudar, a procedure em que 
armazenamos os dados e a procedure em que os recuperamos. Em Form1, a 
procedure para incluir um item deverá ser mudada disto: 
 
 
Sub AddAnItem_Click( ) 
 
TotalRecords = TotalRecords + 1 
Names(TotalRecords) = NameField.Text 
Numbers(TotalRecords) = NumberField.Text 
Comments(TotalRecords) = CommentField.Text 
Form2.NameList.AddItem NameField.Text 
 
End Sub 
 
 
para isto: 
Microsoft Visual Basic 4.0 121
 
Sub AddAnItem_Click( ) 
 
TotalRecords = TotalRecords + 1 
TheData(TotalRecords).Name = NameField.Text 
TheData(TotalRecords).Number = NumberField.Text 
TheData(TotalRecords).Comment = CommentField.Text 
 
Form2.NameList.AddItem NameField.Text 
 
End Sub 
 
Aqui, apenas mudamos Names(TotalRecords) para 
TheData(TotalRecords).Name, e assim por diante. 
 
Além disso, no nosso módulo, temos que mudar a procedure para 
pesquisar um item, Getltem( ), disto: 
 
 Sub GetItem( ) 
 
For loop_index = 1 To 100 
 If (Names(loop_index%) = Form2.NameList.Text) Then 
Exit For 
Next loop_index 
 
Form1.NameField.Text = Names(loop_index) 
Form1.NumberField.Text = Numbers(loop_index) 
Form1.CommentField.Text = Comments(loop_index) 
 
 Form2.Hide 
 
End Sub 
 
 
 
para isto: 
 
Sub GetItem( ) 
 
For loop_index = 1 To 100 
lf (Rtrim$(TheData(loop_index).Name) = 
 Rtrim$(Form2.NameList.Text)) Then Exit For 
Next loop_index 
 
Form1.NameField.Text = TheData(loop_index).Name 
Form1.NumberField.Text = TheData(loop_jndex).Number 
Microsoft Visual Basic 4.0 122
Form1.CommentField.Text = TheData(loop_jndex).Comment 
 
Form2.Hide 
 
End Sub 
 
 
Observe que estamos usando um string de tamanho fixo para todos os 
campos. Como o Visual Basic completa esses strings com espaços à direita, 
tivemos que remover esses espaços com a função Rtrim$( ) do Basic; seu 
correspondente para retirar espaços à esquerda é Ltrim$( ). A função Rtrim$( ) 
simplesmente retira quaisquer espaços do lado direito dos strings antes de 
compará-los com os itens no quadro de lista. 
 
 
 
 5.3 Criação de Quadros Combo 
 
A diferença entre quadros combo e quadros de lista é que os quadros 
combo combinam um quadro de lista com um quadro de texto
(motivo pelo 
qual eles são chamados quadros combo), de modo que os usuários possam 
digitar seu próprio texto se não quiserem selecionar urna das escolhas 
oferecidas. Existem três estilos diferentes de quadros combo. 
 
O primeiro deles (estilo 0) é o quadro combo padrão, onde a seta fica 
separada do quadro de texto. Quando o usuário acionar a seta, a lista de itens a 
escolher cairá. O segundo estilo (estilo 1) é o mesmo, exceto que o quadro de 
lista é sempre mostrado. O terceiro estilo (estilo 2), com a seta conectada, não 
é realmente um quadro combo: é um quadro de lista (chamado quadro de lista 
suspensa). Esse é o mesmo que o quadro de lista normal (ou seja, o usuário 
não pode editar as seleções conforme pode em um quadro combo), exceto que 
a lista fica escondida até que o usuário acione a seta. 
 
Como os quadros combo em estilo 2 são realmente quadros de lista, nós 
os veremos antes de trabalhar com os quadros combo reais. 
 
 É fácil adaptar nossa aplicação de bancos de dados para usar quadros de 
lista suspensa em vez de quadros de lista normais. Tudo que precisamos fazer 
é excluir o quadro de lista chamado NameList em Form2 e substituí-lo por um 
quadro combo, estilo 2, chamado NameList. Para fazer isso, acione o quadro de 
lista original e selecione Cut no menu Edit. Em seguida, acione na ferramenta 
de quadro combo na caixa de ferramentas (em seguida à ferramenta de quadro 
de lista), selecione o estilo 2 e posicione-o corretamente. 
 
 Como você pode ver, isso permite que o quadro de diálogo Find Item... seja 
muito mais compacto. Usar um quadro de lista suspensa é fácil. 
Microsoft Visual Basic 4.0 123
 
Agora vejamos os próprios quadros combo. Como o usuário pode mudar ou 
editar o item no quadro de texto que faz parte do quadro combo, os dois eventos 
importantes conectados aos quadros combo são Click e Change (o evento Change 
ocorre quando o texto no quadro é alterado). Além disso, um quadro combo simples 
(estilo 1, e não um quadro suspenso) reconhece o evento DblClick, mas o outro quadro 
combo (estilo 0), não. Aqui estão as propriedades associadas aos quadros combo: 
 
Text O item atualmente selecionado 
List Array de String contendo todos os itens 
 
Listlndex O índice do item selecionado (base 0; -1 se o usuário entrou 
com texto em vez de selecionar um item) 
 
ListCount Número total de itens na lista 
 
 
 
Na verdade, as propriedades de um quadro combo são muito parecidas com as 
propriedades de um quadro de lista, mas com uma diferença: se o usuário digitou a 
seleção ativa em vez de selecioná-la pela lista disponível (uma opção que não existe 
com quadros de lista), então a propriedade ListIndex é definida em -1. 
 
Quanto ao restante dos detalhes dos quadros combo - manter o texto 
selecionado, marcar o texto e assim por diante -, o Visual Basic cuida disso para você. 
 
Para ver como isso funciona, vamos alterar nosso programa de bancos 
de dados para mostrar seus nomes de produto em um quadro combo em vez de 
um quadro de lista. 
 
A vantagem é que o usuário poderá simplesmente digitar o nome do 
produto que está procurando em vez de pesquisar por uma lista que poderia ser 
muito longa. Infelizmente, há a possibilidade de a entrada selecionada não 
corresponder a registro algum (isto é, no caso de o usuário ter errado na 
digitação do nome do produto). 
 
Isso é algo que teremos que verificar quando o usuário acionar o botão 
OK. 
 
Enquanto isso, abra a aplicação de bancos de dados no Visual Basic e 
selecione o quadro de lista suspensa que acabamos de incluir nele. Como o 
Visual Basic o trata como um quadro combo de estilo 2, podemos mudá-lo para 
outro tipo de quadro combo sem substituí-lo. Vamos usar o estilo de quadro 
combo 0. Embora devamos renomeá-lo de NameList para NameCombo, é mais 
Microsoft Visual Basic 4.0 124
conveniente deixar o nome como NameList, pois o código já se refere a ele 
dessa forma. 
 
 
Agora temos que nos assegurar de que a seleção realmente corresponde 
a um dos registros. Para isso, podemos incluir este código em nossa procedure 
Sub Getltem( ): 
 
 
Sub GetItem( ) 
 
Matched = False 
For loop_index = 1 To 100 
lf (Rtrim$(TheData(loop_index).Name) = 
Rtrim$(Form2.NameList.Text)) Then 
Matched = True 
Exit For 
End If 
Next loop_index 
 
lf (Matched) Then 
Form1.NameField.Text = TheData(loop_index).Name 
Form1.NumberField.Text = TheData(loop_index).Number 
Form1.CommentField.Text = 
TheData(loop_index).Comment 
Form2.Hide 
 Else 
MegBox “Sorry, I cannot find the record.”, 48, 
“Database” 
End If 
 
End Sub 
 
 
Aqui, se não pudermos achar o registro que foi digitado, geramos um 
quadro de mensagem de erro e deixamos o usuário começar de novo. Depois 
dessa mudança, o programa funciona como antes, exceto que agora o usuário 
pode digitar o nome do registro que está procurando como um atalho. No 
entanto, se o usuário entrar com o nome de um registro que não combine com 
um dos registros existentes, aparecerá um quadro de erro. 
 
 
 
 5.4 Uso de Arquivos 
 
 
Microsoft Visual Basic 4.0 125
 Nesta seção você verá como trabalhar com arquivos no Visual Basic. O 
modo mais comum de manter seus dados após o término de um programa é 
armazená-los em arquivos. Esta seção discute essa importante habilidade, além 
dos seguintes tópicos: 
 
• Criação, abertura e fechamento de arquivos 
 
• Leitura e gravação de arquivos 
 
• As funções de fim de arquivo (EOF) e tamanho de arquivo (LOF) 
 
• Arquivos seqüenciais 
 
• Arquivos de acesso aleatório 
 
• Quadros de lista de diretório 
 
• Quadros de lista de arquivo 
 
• Quadros de lista de unidade 
 
• O comando Seek 
 
• Os comandos Get e Put 
 
• Como cuidar de erros de arquivo 
 
 
 
 Você também incluirá capacidades de manipulação de arquivos a alguns 
dos programas que já desenvolveu, sobretudo nos programas Editor e 
Database. 
 
 A maior parte dos programas do Windows usa arquivos de algum tipo, de 
modo que a capacidade de uso de arquivos será importante para todos os tipos 
de programas: programas gráficos, processadores de textos, programas de 
bancos de dados etc. 
 
 Você deve se lembrar de que nosso programa Editor tinha duas escolhas 
de menu que nunca foram usadas: Load File... e Save File.... Até agora, todos 
os dados que nossos programas usaram foram temporários. 
 
 Quando a aplicação terminava, eles desapareciam. Os arquivos, é claro, 
são o meio mais comum de armazenar dados no PC, de modo que são 
vitalmente importantes à maior parte das aplicações do computador. 
 
Microsoft Visual Basic 4.0 126
O sistema de comandos de manipulação de arquivos no Visual Basic é 
muito semelhante ao que existe em outros Basics; logo, se você estiver 
acostumado com Open, Close, lnput$ e Seek, já terá um bom ponto de partida. 
No entanto, como você já deve imaginar, as coisas são muito diferentes quando 
se trata da interação com o usuário. 
 
 Por exemplo, o usuário normalmente seleciona nomes de arquivo para 
carregar ou salvar dados por meio de quadros de diálogo em aplicações do 
Windows (o que, a propósito, é o motivo para vermos os quadros de diálogo 
antes dos arquivos), e veremos como fazer isso nesta seção, à medida que 
prepararmos nosso quadros de diálogo de arquivo. 
 
 Dois desses quadros de diálogo serão para os itens Save File... e Load 
File... da nossa aplicação Editor. Além disso, também veremos como trabalhar 
com arquivos estruturados, onde os dados são divididos em registros 
específicos, como a nossa aplicação de bancos de dados na seção anterior. De 
fato, poderemos modificar essa aplicação nesta seção de modo que ele possa 
salvar seus dados no disco. Com isso e outros tópicos que irão aparecer,
por 
que não começar imediatamente? 
 
 
 
 
 
 
 Gravação de dados em um Arquivo 
 
 
 Se quisermos incluir suporte para arquivo à nossa aplicação de editor, 
poderemos começar com o item Save File... (afinal, temos que criar e salvar 
arquivos antes de lê-los de volta). 
 
 Quando você selecionar o item Save File.... poderá gerar um quadro de 
diálogo na tela com um quadro de lista e dois botões: OK e Cancel. Você 
poderia então digitar o nome do arquivo em que deseja salvar seu documento, e 
o seu programa criaria o arquivo com esse nome (se necessário) e depois 
armazenaria lá o documento. 
 
Para colocar isso em prática, inicie o Visual Basic e abra o projeto Editor. 
Se você der uma olhada no menu File, verá que o item Save File... já existe. 
Acione-o com o mouse para gerar o seguinte gabarito: 
 
 
Sub SaveItem_Click( ) 
 
 
Microsoft Visual Basic 4.0 127
End Sub 
 
 
 Para salvar o documento ativo, você deverá colocar o quadro de diálogo 
Save File... na tela. Vamos nomear o quadro de diálogo com SaveForm. Para 
apresentá-lo, tudo o que precisamos fazer é isto: 
 
 
Sub SaveItem_Click ( ) 
 
 SaveForm.Show 
 
End Sub 
 
 
 
 Em seguida, devemos montar esse quadro de diálogo (ainda no projeto 
Editor), nomeando-lhe SaveForm, dando uma legenda Save File..., e salvar 
nosso trabalho como, digamos, SaveForm.Frm. Além disso, temos que incluir 
um quadro de texto a esse novo formulário; colocar um label acima do quadro de 
texto, com os dizeres Save File As... (de modo que o usuário saiba que deverá 
entrar com um nome de arquivo), incluir um botão OK com sua propriedade 
Default em True, e um botão Cancel. 
 
 Finalmente, como esse é um quadro de diálogo, podemos remover os 
botões Min e Max. 
 
 
 
 A procedure do botão Cancel é muito fácil, de modo que poderemos fazer 
isso primeiro. Tudo que precisamos fazer se o usuário decidir cancelar é ocultar 
novamente o formulário, e, para tanto, colocaremos isto em CancelButton_Click( 
): 
 
 
 
Sub CancelButton-Click ( ) 
 
 SaveForm.Hide 
 
End Sub 
 
 
 
 O serviço real é feito quando você aciona o botão OK. Acione esse botão 
para abrir a procedure click do botão OK, da seguinte maneira: 
 
Microsoft Visual Basic 4.0 128
 
 
Sub OKButton_Click ( ) 
End Sub 
 
 Quando atingirmos esse ponto no programa, poderemos supor que o 
texto em FilenameBox contém um nome de arquivo e que deveremos salvar o 
documento ativo - ou seja, o string chamado Form1.display.Text - a este arquivo. 
 
 Existem três passos nesse processo: abrir o arquivo (ou criá-lo, se ainda 
não existir), gravar os dados no arquivo e fechá-lo. Podemos dar uma olhada 
em cada um desses três passos em ordem enquanto montamos OKButton-
Click(); cada passo nos dirá algo sobre o sistema de arquivo do Visual Basic. 
 
 
 
 Abertura de Arquivos no Visual Basic 
 
 Para abrir ou criar um arquivo no Visual Basic, basta você usar o 
comando Open. No entanto, temos que considerar algo a respeito do 
modo como abrimos ou abrimos ou criamos esse arquivo. 
 
 
 
 
 
 
 
 
 Tipos de Arquivo no Visual Basic 
 
 
 Os três primeiros modos têm a ver com arquivos seqüenciais. Os 
arquivos seqüenciais normalmente são usados para arquivos de texto, onde 
você grava o arquivo do início ao fim e o lê da mesma maneira; ou seja, você 
não salta de um lugar para outro dentro do arquivo. Trabalhar com arquivos 
seqüenciais é como usar fitas cassete; se você quiser ouvir algo no final da fita, 
terá que passar primeiro por tudo que esteja na frente. Da mesma forma, se 
você quiser algo do texto no final de um arquivo aberto com acesso seqüencial, 
terá primeiro que ler todo o texto que vem antes dele. 
 
 Se os arquivos de acesso seqüencial são como fitas cassete, os arquivos 
de acesso aleatório são como discos de pickups. Ao contrário de uma fita, em 
um disco você pode movimentar à vontade, sem ter que passar por todas as 
Microsoft Visual Basic 4.0 129
faixas intermediárias. Da mesma forma, você pode movimentar-se à vontade 
em um arquivo de acesso aleatório, retirando dados de qualquer local onde 
desejar. O preço a ser pago é que os dados em um arquivo de acesso 
aleatório devem ser cuidadosamente seccionados em registros, de modo que 
você saiba exatamente onde estão os dados que deseja obter. 
 
 Por exemplo, se os registros que desenvolvemos na nossa aplicação de 
bancos de dados fossem todos do mesmo tamanho, eles funcionariam 
perfeitamente em um arquivo de acesso aleatório; quando quiséssemos o 
vigésimo registro, poderíamos simplesmente saltar sobre os 19 primeiros e 
então começar a leitura. No entanto, o texto - como armazenamos na 
aplicação Editor - não é seccionado corretamente em registros do mesmo 
tamanho, e por isso colocaremos o texto que estamos para salvar em um 
arquivo seqüencial. 
 
O terceiro tipo de arquivo são os arquivos binários; aqui o Visual Basic não 
interpreta o conteúdo do arquivo de forma alguma. Por exemplo, os arquivos 
executáveis (.Exe) são arquivos binários, e nós os tratamos numa base byte a 
byte no Visual Basic. Para copiar um arquivo desses, precisamos ler cada byte 
do arquivo original (o arquivo de origem) e depois enviá-los para um novo 
arquivo (o arquivo de destino). Embora possamos definir a quantidade de dados 
que queremos ler sob arquivos seqüenciais ou aleatórios, os arquivos binários 
são sempre tratados byte a byte. 
 
Cada um desses três tipos de acesso ao arquivo possui seu próprio conjunto 
de comandos no Visual Basic, como veremos neste capítulo. Como podemos 
nos confundir, você encontrará uma coleção dos comandos mais comuns de 
manipulação de arquivo do Visual Basic, organizados por tipo de arquivo, na 
tabela. 
 
 
 
 
 
 
 
Comandos de Arquivo do Visual Basic. 
 
Acesso Comandos Comuns do Visual Basic 
 
Seqüencial Open, Line lnput #, Print #, Write #, Input$, Close 
 
Aleatório Type... End Type, Open, Put #, Len, Close, Get # 
 
Binário Open, Get #, Put #, Close, Seek, lnput$ 
 
Microsoft Visual Basic 4.0 130
 
 
 Nossa tarefa aqui é salvar o documento ativo do Editor, e faremos isso 
abrindo um arquivo seqüencial (embora realmente pudesse ser tratado como 
arquivo binário). Existem três maneiras de abrir arquivos seqüenciais: para 
entrada (Input), saída (Output) e acréscimo (Append). 
 
 Abrimos um arquivo para entrada se queremos ler algo dele, para 
saída se queremos gravar nele, e para acréscimo se queremos incluir algo 
ao seu final. 
 
 Esses três modos são coerentes com a idéia de abrir o arquivo e depois 
trabalhar com os dados do início ao fim. Por exemplo, se abrimos um arquivo 
para saída seqüencial, gravamos nele um string, e depois o seguimos por um 
segundo string, este vai diretamente após o primeiro, e assim por diante para 
strings subseqüentes, um após o outro. Se quiséssemos lê-los novamente 
teríamos que fechar o arquivo e abri-lo para entrada, e depois poderíamos ler os 
dados de volta, do início ao fim. 
 
Os arquivos aleatórios, onde você poderá movimentar-se à vontade pelo 
arquivo, não possuem qualquer uma dessas restrições. Quando você abre um 
arquivo para acesso aleatório, ele está preparado para entrada e saída (por 
outro lado, lembre-se de que, nos arquivos aleatórios, você precisa seccionar os 
dados em registros). 
 
Nesse caso, quando estivermos gravando nosso documento do Editor no 
disco, abriremos nosso arquivo para saída seqüencial. Em geral, o comando 
Open do Visual Basic será este: 
 
 
 
Open fff$ [For mmm][Access aaa] [111] As [#] nnn% [Len = rrr%] 
 
 
 
 
 
 
 
 
 Onde os argumentos possuem este significado: 
 
 
fff$ O nome de arquivo (incluindo um caminho
opcional) 
 
 
Microsoft Visual Basic 4.0 131
mmm Modo: pode ser Append, Binary, lnput, Output ou 
Random 
 
 
aaa Acesso: pode ser Read, Write ou Read Write 
 
111 Lock: restringe o acesso de outras aplicações 
 
nnn% Número do arquivo (1-255): o número que usaremos 
para nos referir a esse arquivo daqui em diante, 
 
 
rrr% Tamanho do registro para arquivos aleatórios, ou 
tamanho do buffer que você quer que o Visual 
Basic use para arquivos seqüenciais 
 
 
 No nosso caso, o usuário deseja gravar no arquivo agora existente em 
FilenameBox.Text, de modo que poderemos usar este comando Open para abrir 
o arquivo: 
 
 Open FilenameBox.Text For Output As # 1 
 
 De fato, esse arquivo poderia nem mesmo existir; o usuário poderia 
querer que o criemos. Isso é feito automaticamente pelo comando Open: se o 
arquivo não existir e estivermos tentando abri-lo para algo diferente de lnput, o 
Visual Basic criará o arquivo para nós. Por outro lado, observe que quando 
abrimos um arquivo já existente para saída e depois gravamos algo nele, o 
conteúdo original do arquivo é destruido. (Se quiser incluir algo ao final de um 
arquivo seqüencial e manter o que já existe antes, abra o arquivo para 
Append.) Agora podemos iniciar o quadro de diálogo Save File... com esta linha 
na procedure click do botão OK: 
 
Sub OKButton_Click( ) 
 
Open FilnameBox.Text For Output As # 1 'Abre arquivo 
 . 
 . 
 
 End Sub 
 
 Assim como no Basic normal, poderemos nos referir a esse arquivo como 
arquivo # 1 quando quisermos gravar nele ou fechá-lo. No entanto, temos que 
notar que existe a possibilidade de erro quando abrirmos um arquivo dessa 
maneira: o usuário pode ter especificado um caminho inválido, por exemplo, ou 
Microsoft Visual Basic 4.0 132
errado na digitação do nome do arquivo. Para cuidar desses erros, podemos 
incluir um comando On Error GoTo, da seguinte forma: 
 
 
Sub OKButton_Click( ) 
 
On Error GoTo FileError 
Open FilenameBox.Text For Output As # 1 'Abre arquivo 
. 
. 
. 
 
 
 
 Isso funciona da seguinte maneira: se houver um erro, o programa saltará 
imediatamente para o label FileError, onde poderemos colocar um quadro de 
mensagem na tela e depois executar um comando Resume, que salta de volta à 
linha que causou o erro, permitindo que o usuário tente novamente. 
 
 
 
Sub OKButton-Click( ) 
 
On Error GoTo FileError 
Open FilenameBox.Text For Output As # 1 'Abre arquivo 
 . 
 . 
Exit Sub ‘ Sai da rotina e pula o tratamento de erro 
 
FileError: 
MsgBox “File Error", 48. "Editor" 'MsgBox para erro de 
arquivo 
 
End Sub 
 
 
Como tratar de erros “acusáveis" 
 
Se não tivéssemos colocado esse comando no código, não 
poderíamos apanhar esses erros - chamados erros "acusáveis". 
Nesse caso o próprio Visual Basic avisaria sobre o erro 
diretamente, com um quadro de mensagem, o que não 
 é desejado na maior parte das aplicações. 
 
Microsoft Visual Basic 4.0 133
 
 
 
 
 Em outras palavras, se o nome do arquivo for válido e o arquivo 
correspondente puder ser aberto ou criado, faremos isso. Se houver um 
problema, indicaremos o fato e permitiremos que o usuário mude a 
especificação de arquivo para outra tentativa. Nesse ponto, então, o arquivo 
estará aberto; o próximo passo é gravar nele o nosso documento. 
 
 
 
 Gravação em Arquivos no Visual Basic 
 
 O modo normal de gravar em um arquivo seqüencial é usar os comandos 
Print # ou Write #. Veja como podemos usá-los: 
 Print # nnn%, expressionlist 
 Write # =%, expressionlist 
 
 
 Aqui, nnn% é o número do arquivo (1 para o nosso caso), e expressionlist 
é uma lista das variáveis (incluindo strings) que você deseja gravar no arquivo. 
Os dois comandos, Print # e Write #, são diferentes; Write # insere vírgulas entre 
os itens separados na expressionlist, à medida que os grava no arquivo, coloca 
aspas ao redor dos strings e insere uma nova linha (em branco) ao final do 
arquivo. Como não queremos qualquer um desses caracteres adicionais, 
usaremos Print # em vez disso. De fato, só desejaremos enviar um único string 
ao arquivo: Form1.display.Text, de modo que nosso comando Print # estará 
como neste trecho: 
 
 
 
Sub OKButton_Click() 
 
On Error GoTo FileError 
 
Open FilenameBox.Text For Output As # 1 'Abre arquivo 
Print # 1, Form1.PadText.Text 'Grava documento 
 . 
 . 
 . 
Exit Sub 
 
Microsoft Visual Basic 4.0 134
FileError 
 
MsgBox "File Error", 48, "Editor" 'MsgBox para erro de 
arquivo 
 
End Sub 
 
 
 
 E isso é tudo para gravar o texto no arquivo. Fechar o arquivo não é 
muito mais dificil; use o comando Close, como vemos aqui: 
 
 
 
Sub OKButton_Click( ) 
 
On Error GoTo FileError 
 
Open FilenameBox.Text For Output As # 1 'Abre arquivo 
 
 
 
 Print # 1, Form1.PadText.Text 'Grava documento 
 Close #1 'Fecha o arquivo 
. 
. 
. 
Exit Sub 
 
File Error 
 
MsgBox "File Error", 48, "Editor" 'MsgBox para erro de 
arquivo 
 
End Sub 
 
 
 
Close # 1 fecha o arquivo número 1, que é o arquivo em que estamos 
trabalhando. Depois de fechar o arquivo, teremos terminado, de modo que 
saímos da procedure Sub com um comando Exit Sub. Nesse ponto, o arquivo 
foi gravado com sucesso no disco, ou, se não, alertamos o usuário para o 
fato.(Saltamos para o label FileError e geramos nosso quadro de mensagem na 
tela, como antes.) 
 
 
Microsoft Visual Basic 4.0 135
 
 
 
 
Fechando todos os arquivos ao mesmo tempo 
 
Se você usar o comando Close sem qualquer número 
de arquivo, então oVisual Basic fechará de uma 
só vez, todos os arquivos que a sua aplicação abriu. 
 
 
 
 
 
 O passo final, se a manipulação de arquivo tiver sido tranqüila, é 
esconder o quadro de diálogo Save File... (isto é, SaveForm) da seguinte forma: 
 
 
 
Sub OKButton-click( ) 
 
On Error GoTo FileError 
Open FilenameBox.Text For Output As # 1 'Abre arquivo 
 
 
 
Print # 1, Form1.display.Text 'Grava documento 
Close #1 'Fecha o arquivo 
SaveForm.Hide 
 
Exit Sub 
 
 
FileError: 
MsgBox "File Error", 48, "Editor" 'MsgBox para erro de 
arquivo 
 
End Sub 
 
 
Microsoft Visual Basic 4.0 136
 Para ver isso em ação, faça as mudanças acima e tente digitar algumas 
linhas de texto no Editor e depois salvá-las. Quando o fizer, verá que o texto é 
gravado no disco, no arquivo escolhido. 
 
 
Observe que o texto no arquivo é simplesmente armazenado como uma 
longa cadeia de texto sem carriage returns [ou Enter] - a menos que estejam 
presentes no documento original -, pois o próprio quadro de texto principal o 
armazena dessa maneira. E isso termina nosso item Save File.... Pudemos 
gravar um arquivo de texto seqüencial no disco, e nossa aplicação Editor tornou-
se ainda mais sofisticada. No entanto, o próximo passo correspondente é ler os 
arquivos de volta no item Load File... do Editor. Veremos esse processo em 
seguida. 
 
 
 
 
 
 
 
 Uso de Controles de Arquivos no Visual Basic 
 
 
 O primeiro passo na leitura do conteúdo de um arquivo é obter o nome 
desse arquivo. No entanto, isso não é uma simples questão de pedir ao usuário 
para digitar o nome em um quadro de texto. Temos que ter a capacidade de 
procurar no disco (assim como outras aplicações semelhantes Windows) e 
permitir que o usuário selecione a partir do que já existe lá. O Visual Basic 
oferece três controles especiais para fazer exatamente isso, e estes são quadros 
de lista de disco, quadros de lista de diretório e quadros de lista de arquivo. 
As ferramentas para criar esses controles de arquivo aparecem no final da 
caixa de ferramentas do Visual Basic. Acontece que esses controles
farão 
grande parte do trabalho para nós. A caixa de ferramentas pesquisará 
automaticamente unidades e diretórios, e poderemos trabalhar com as várias 
propriedades associadas com eles. 
 
 
 
 
Esta caixa de diálogo já foi criada em nosso curso, 
vamos agora utiliza-la para manipular nossos arquivos! 
Se você salvou o formulário que corresponde 
a essa caixa de diálogo, reaproveite-º 
Caso contrário, crie um novo. 
 
Microsoft Visual Basic 4.0 137
 
 
 
 
 Vamos iniciar esse processo projetando um quadro de diálogo para a 
opção Load File.... que poderemos chamar LoadForm e salvá-lo como 
Loadform.Frm. Primeiro, vamos conectá-la ao item de menu Load File... 
acionando esse item no menu File do Editor: 
 
 
 Para mostrar o quadro de diálogo Load File... (LoadForm), podemos 
simplesmente mostrá-lo da seguinte forma: 
 
 Sub LoadItem 
 
LoadForm.Show 
 
End Sub 
 
 
 Para projetar LoadForm, use o item New Form do menu File do Visual 
Basic. Para criar o formulário, dê a ele um Name de LoadForm; use, Load File... 
como legenda; remova os botões Min e Max; mude a propriedade de 
BorderStyle para dupla fixa; e inclua os botões OK e Cancel. 
 Em seguida, inclua um quadro de lista de unidade com um clique duplo na 
ferramenta de lista de unidade na caixa de ferramentas, que está próxima à 
ferramenta do temporizador. Observe que o quadro de lista de unidade é um 
quadro de lista suspensa, o que nos economizará algum espaço. Também 
precisamos de um quadro de lista de diretório e um quadro de lista de arquivo, e, 
portanto, acione com um clique duplo também essas ferramentas (que se 
encontram no final da caixa de ferramentas), e arrume-as como você desejar no 
quadro de diálogo. 
 
 
O usuário poderá carregar qualquer arquivo existente dessa maneira, por 
meio da combinação dos quadros de unidade, diretório e lista de arquivos. Ele 
pode usar o quadro de lista de unidade para especificar a unidade, o quadro de 
lista de diretório para especificar o diretório nessa unidade, e o quadro de lista 
de arquivos para indicar o arquivo real que deseja abrir. 
 
Esse arquivo pode ser aberto de duas maneiras: dando um duplo clique no 
nome do arquivo no quadro de lista de arquivo ou selecionando-o (destacando-
o) no quadro de lista de arquivo e acionando o botão OK. 
 
E, como sempre, ativar o botão Cancel é muito fácil. Basta esconder o 
quadro de diálogo quando esse botão for acionado: 
Microsoft Visual Basic 4.0 138
 
Sub CancelButton_Click( ) 
 
 LoadForm.Hide 
 
End Sub 
 
 Agora vamos passar aos controles de arquivo. Nesse ponto, os três 
quadros de lista (de unidade, diretório e arquivo) não estão se comunicando um 
com o outro; ou seja, eles estão apenas mostrando informações independentes 
para o diretório ativo no disco. Se tivéssemos que rodar esse programa e mudar 
o disco no quadro de lista de disco, os outros dois quadros não responderiam à 
mudança. Para que possam se comunicar, temos que saber um pouco mais 
sobre os eventos importantes para cada um deles, e veremos isso em seguida. 
 
 
 Quadros de Lista de Unidade 
 
 O quadro de lista de unidade é um quadro de lista suspensa. A unidade 
ativa é indicada nela. 
 Quando o usuário aciona a seta conectada, o quadro de lista desce, 
mostrando que outras unidades estavam disponíveis para escollia. Quando o 
usuário escolher uma, um evento Change ocorrerá no quadro de lista. Como 
não definimos o nome para nosso quadro de lista de unidade, ele ainda possui o 
nome original de Drive1 (a definição básica para os quadros de lista de unidade), 
de modo que a procedure de evento é Drive1_Change( ). A propriedade do 
nosso quadro Drive1 que mantém a unidade é simplesmente Drive1.Drive, e 
nossa próxima tarefa é passar essa nova unidade adiante para o quadro de lista 
de diretório, que ainda possui o nome original Dir1 (como é normal para quadros 
de lista de diretório). Para fazer isso, só precisamos passar a propriedade 
Drive1.Drive para a propriedade Dir1.Path: 
 
 
 Podemos fazer isso acionando o quadro de lista de unidade com o 
mouse, o que faz surgir a procedure Drive1_Change. Basta atribuir a 
propriedade Drive de Drive1 à propriedade Path de Dir1, da seguinte forma: 
 
 
Sub Drive1_Change( ) 
 
Dir1.Path = Drive1.Drive 
 
End Sub 
 
 
Microsoft Visual Basic 4.0 139
 E isso é tudo que precisamos fazer para conectar os quadros de unidade 
e diretório. De fato, podemos rodar o programa nesse ponto. Quando o 
fizermos, poderemos acionar o item Load File... do menu File do Editor. O 
quadro de diálogo que projetamos, LoadForm, aparece em seguida, mostrando 
a unidade ativa, diretório e arquivos nesse diretório. Se acionarmos o quadro de 
unidade, a lista suspensa de todas as unidades no sistema aparecerá. 
Acionando uma dessas unidades, passaremos para essa unidade, e a mudança 
também afeta o quadro de lista de diretório, que também muda para listar os 
diretórios nesse novo disco. O próximo passo no nosso programa é conectar o 
quadro de lista de diretório ao quadro de lista de arquivo, de modo que, quando 
o diretório for alterado, os arquivos mostrados sejam os arquivos nesse diretório. 
 
 
 
 Quadros de Lista de Diretório 
 
 
 O quadro de lista de diretório mostra os diretórios disponíveis em uma 
certa unidade. Ele é um quadro de lista simples - ou seja, é sempre mostrado, e 
não um quadro de lista suspensa. A unidade de trabalho é mostrada na linha 
superior, e os diretórios dessa unidade aparecem logo abaixo. Se houver mais 
diretórios do que o espaço permitido, uma barra de paginação vertical aparecerá 
à direita do quadro. O diretório ativo aparecerá como uma pasta aberta 
sombreada; seus subdiretórios aparecerão como pastas fechadas (sem sombra) 
logo abaixo dele. Quando o usuário mudar de diretório, acionando um novo 
diretório, um evento Dir1_Change será gerado, e o novo caminho será colocado 
em Dir1.Path. Além disso, pelo modo como preparamos as coisas, quando o 
usuário mudar de unidade, Drive1.Drive será carregado em Dir1.Path, que 
também gera um evento Dir1_Change. Em outras palavras, o único evento com 
que precisamos nos preocupar aqui é Dir1_Change, que agora cuida das 
mudanças de unidade e diretório. 
 Quando ocorrer esse evento, precisamos dar a notícia ao quadro de lista 
de arquivo, o que pode ser feito passando adiante a propriedade Dir1.Path à 
propriedade Path do quadro de lista de arquivo. Como essa lista ainda é 
chamada File1 (a definição original para quadros de lista de arquivo), podemos 
fazer isso. 
 
 
 
Sub Dir1_Change( ) 
 
 File1.Path = Dir1.Path 
 
End Sub 
 
Microsoft Visual Basic 4.0 140
 
 Desse modo, toda vez que houver uma mudança no diretório de trabalho 
- ou unidade de trabalho -, o quadro de lista de arquivo saberá disso. 
 
 Se fizermos essa mudança e depois iniciarmos o programa, poderemos 
ver que agora todos os quadros de lista estão conectados. Por exemplo, 
podemos acionar o quadro de lista de unidade para mudar a unidade, e a 
mudança automaticamente será comunicada ao quadro de lista de diretório, cuja 
lista de diretórios é alterada de acordo. Essa mudança, por sua vez, também é 
comunicada ao quadro de lista de arquivo, que mostra os arquivos no novo 
diretório de trabalho. 
 
 Por conseguinte, se mudarmos o diretório de trabalho no quadro de lista 
de diretório, essa mudança também será comunicada ao quadro de lista de 
arquivo, que mostrará os arquivos no novo diretório. Em outras palavras, os 
eventos importantes foram Drive1_Change e Dir1_Change, e as propriedades 
importantes que tiveram que ser transferidas foram Drive1.Drive → Dir1.Path, e 
Dir1.Path → File1.Path. Para realmente lermos o nome do arquivo que o usuário 
deseja carregar, teremos que verificar a propriedade FileName de
File1 - ou 
seja, File1.FileName - da, seguinte forma: 
 
 
 
 Unidade Diretório Arquivo 
 
 Drive1.Drive Dir.Path Arquivo1.Path Nome do 
 File1.FileName Arquivo 
 
 
 
Também poderíamos notar que, embora você possa selecionar uma nova 
unidade com um único clique do mouse, são necessários dois cliques para 
selecionar um novo diretório no quadro de lista de diretório. Essa diferença tem 
a ver com a diferença entre os arquivos de lista suspensa e simples. 
 
O motivo para precisar de dois cliques no quadro de listas de diretórios é 
para que os usuários possam se movimentar para cima e para baixo nas listas 
usando as teclas de direção sem mudar o diretório de trabalho para cada 
entrada destacada durante o percurso; ou seja, a mudança é feita apenas 
quando ele chegar ao diretório que deseja. 
 
 
 
 Leitura de Arquivos no Visual Basic 
 
 
Microsoft Visual Basic 4.0 141
 
 Os comandos-padrão de leitura de um arquivo seqüencial no Visual Basic 
são lnput #, Line lnput # e Input$. Você deverá usá-los da seguinte forma: 
 
 
 
lnput # nnn%, expressionlist 
 
Line lnput # nnn%, stringvariable 
 
Input$ (bbb%, [#] nnn%) 
 
 
 
 Aqui, nnn% é o número do arquivo (isto é, 1 para o nosso caso), bbb% é 
o número de bytes a ser lido, stringvariable é o nome de uma variável de string 
para colocar os dados, e expressionlist é uma lista de expressões onde os 
dados serão colocados. 
 
Por exemplo, se usarmos lnput # para preencher Form1.display.Text, o 
comando poderia ser este: lnput # 1 Form1.display.Text. No entanto, o problema 
com Input # é que ele espera que os itens no arquivo, sejam separados por 
vírgulas, espaços ou mais de uma linha (isto é, um carriage return). Para 
números, isso significa que quando lnput # encontrar a primeira vírgula, espaço 
ou final de linha, ele achará que o número ativo terminou; para strings, lnput # 
termina o string quando alcançar uma vírgula ou o fim de linha. Isso não pode 
ser aceito por nós, pois o texto de um documento que estamos lendo poderá 
conter muitas vírgulas. De fato, o usuário pode ter colocado carriage returns em 
vários pontos do documento (embora não sejam necessários, pois o quadro de 
texto multilinha do Editor possui uma quebra de linha automática), ou então 
podemos estar tentando ler um documento de outra aplicação, que já contenha 
carriage returns. 
 
De maneira semelhante, a função Line lnput# lê strings dos arquivos, até 
encontrar um carriage return, quando termina. Isso significa que teríamos que 
alcançar o final de cada linha do arquivo (se for dividido em linhas) 
separadamente. Uma forma de fazer isso seria a seguinte: 
 
 
 
Do Until EOF(1) 
 
Line Input # 1, Dummy$ 
 Form1.PadText.Text = Form1.PadText.Text + Dummy$ + 
Chr$(13) + Chr$(1O) 
 
Microsoft Visual Basic 4.0 142
Loop 
 
 
 
Os comandos nesse loop, se houver algum, serão executados 
repetidamente até que a condição seja verdadeira, quando a execução 
terminará. (Observe que se a condição for verdadeira no início, os comandos no 
corpo do loop não são executados uma única vez.) No nosso caso, estamos 
usando a função EOF( ) para compor a condição do nosso loop. Essa função 
apanha um número de arquivo como seu argumento (para nós, isso seria 
EOF(1)) e retorna um valor True quando atingirmos o final do arquivo. No loop 
do exemplo acima, então, continuaríamos lendo as linhas do arquivo até 
alcançarmos o final do arquivo. Além disso, toda vez que lemos uma linha, 
incluímos os caracteres carriage return e avanço de linha ao final da linha, da 
seguinte forma: 
 
 
Do Until EOF(1) 
 
Line Input # I, Dummy$ 
Form1.display.text = Form1.display.text + Dummy$ + Chr$(13) + 
Chr$(10) 
 
Loop 
 
 
 
 Aqui, estamos usando a função Chr$(), que retoma o caracter ANSI 
correspondente ao código ANSI passado a ela. Por exemplo, Chr$(13) retorna 
um carriage return. O motivo para incluirmos um par carriage return/avanço de 
linha ao final de cada linha é que Line lnput # trata esses dois caracteres 
simplesmente como delimitadores de string, excluindo-os do texto. Entretanto, 
como eles fazem realmente parte do arquivo, podemos simplesmente colocá-los 
de volta. 
 
 
 Uma opção melhor para nós do que lnput # ou Line lnput # é a função 
lnput$, que é feita especialmente para ler strings, e que não suprime carriage 
returns dos avanços de linha. Para usar essa função, no entanto, temos que 
indicar o número exato de bytes que queremos ler; quando o fizermos, lnput$ 
retomará um string (que podemos atribuir a Form1.display.Text). O número de 
bytes que queremos ler é simplesmente o tamanho do arquivo em bytes; 
podemos usar outra função de arquivo, LOF(), para obter isso para nós. Assim 
como EOF(), LOF() apanha um número de arquivo como argumento. LOF(), no 
entanto, retorna o tamanho do arquivo indicado em bytes (o arquivo deve estar 
Microsoft Visual Basic 4.0 143
aberto para LOF() funcionar), de modo que podemos ler tudo da seguinte forma, 
com a função Input$o: 
 
 
 
Form1.display.Text = Input$(LOF(1), # 1) 
 
 
 
 Limitações de lnput$() 
 
 A função lnput$() é limitada à leitura de arquivos de 32.767 bytes se você 
o abrir para acesso seqüencial ou binário. No entanto, se quiser usar arquivos 
maiores, poderá simplesmente verificar o tamanho do arquivo, LOF(), e depois 
ler o arquivo várias vezes em sucessão até obter todos os dados de que precisa. 
 
 
 
De fato, como você especifica o número de bytes a serem lidos, poderá 
também usar esse comando para ler dados de arquivos binários. Podemos 
incluir nosso comando lnput$ a OKButton_Click() da seguinte forma, onde 
colocamos o string lido (isto é, o conteúdo inteiro do arquivo) diretamente no 
quadro de texto do Editor (Form1.display.Text): 
 
 
 
Sub OKButton_Click () 
 
On Error GoTo FileError 
If (Right$(Dir1.Path,1) = "\") Then Filename = Dir1.Path + 
 File1.Filename 
Else 
 Filename = Dir1.Path + "\" + File1.Filename 
End If 
 
Open Filename For Input As # 1 
 
 
 
Form1.display.text = lnput$(LOF(1), # 1) 
close #1 
loadform.hide 
 
Microsoft Visual Basic 4.0 144
Exit Sub 
 
FileError: 
 
MsgBox "File Error", 48, "Editor" 'MsgBox para erro de 
arquivo 
 
End Sub 
 
 
 Agora o quadro de diálogo Load File... está completo. Para usá-lo, basta 
iniciar o programa e selecionar o item Load File... no menu File. 
 O quadro de diálogo Load File... é mostrado na tela. Como você pode ver, 
o quadro de lista de arquivo apresenta os nomes de arquivo em ordem 
alfabética. Para abrir um deles, basta dar um duplo clique no seu nome ou 
selecioná-lo e acionar o botão OK. Quando o fizer, a procedure 
OKButton_Click() será executada, o arquivo será aberto e lido para o Editor. 
Nesse ponto, você poderá editá-lo e depois gravá-lo no disco novamente com a 
opção Save File.... 
 
 
 
 
 
 Uso de Arquivos de Acesso Aleatório no Visual Basic 
 
 
 Estamos prontos para passar de arquivos de acesso seqüêncial para 
arquivos de acesso aleatório. Esses tipos de arquivos normalmente dividem 
seus dados em registros, todos eles contendo o mesmo formato, mas 
(normalmente) com dados diferentes. E, como você deve se lembrar, 
preparamos os dados no nosso programa de bancos de dados anteriormente 
exatamente para os tipos de registros, da seguinte forma: 
 
 
 
Type Record 
 
Name As String* 50 
Number As String * 20 
Comments As String * 200 
 
End Type 
 
 
Microsoft Visual Basic 4.0 145
 
 Global TheData(100) As Record 
 
 
 
 
 
 Gravação de Arquivos de Acesso Aleatório 
 
 
 Podemos começar gravando
o arquivo depois que o usuário selecionar o 
item Save File... no menu File. O Name desse item é Saveltem. Podemos abrir 
Saveltem_Click() acionando o item do menu. 
 
 
 Quando o usuário acionar esse item, ele poderá salvar o banco de dados 
em um arquivo particular, de modo que precisamos gerar um quadro de diálogo 
semelhante àquele que projetamos anteriormente para o nosso Editor. De fato, 
podemos usar aqui o mesmo quadro de diálogo. Para carregar esse 
formulário, basta abrir o menu File do Visual Basic, selecionar o item Add File... 
e dar o nome do formulário Save File... (usamos Saveform.Frm no exemplo 
anterior). Esse arquivo é automaticamente carregado - dessa forma, você 
poderá trocar formulários como quadros de diálogo entre projetos, 
economizando muito tempo durante o projeto, e fazendo com que suas 
aplicações se tornem mais uniformes. Agora podemos gerar esse quadro de 
diálogo na tela da seguinte forma em Saveltem_Click(): 
 
Sub Saveltem_Click() 
 
SaveForm.Show 
 
 End Sub 
 
 
 
 Em seguida, temos que fazer algumas mudanças no código de SaveForn, 
pois está preparado para armazenar arquivos seqüenciais. Basta passar para 
esse formulário usando a janela de projeto, e acionar na procedure 
OKButton_Cllck(), que atualmente contém o seguinte código: 
 
 
 
Sub OKButton_Click () 
 
On Error GoTo FileError 
Open Filenamebox.text For Output As#1 
Microsoft Visual Basic 4.0 146
 
Print # 1, Form1.display.text ‘Grava documento 
Close # 1 'Fecha o arquivo 
SaveForm.Hide 
Exit Sub 
 
 File error: 
 MsgBox “File Error”, 48, “Database” 
 
End Sub 
 
 Como estamos usando um arquivo de acesso aleatório com registros 
dessa 
vez, e não um arquivo seqüencial de texto, abrimos o arquivo como Random: 
 
 
 
Sub OKButton_Click( ) 
 
On Error GoTo FileError 
 
Open FilenameBox.Text For Random As #1 Len = 
Len(TheData(1)) 
Print # 1, Form1.display.Text 'Grava o documento 
Close # 1 'Fecha o arquivo 
SaveForm.Hide 
Exit Sub 
 
 
 
FileError: 
MsgBox "File Error", 48. "Database" 'MsgBox para erro no 
arquivo 
 
End Sub 
 
 
 
Aqui, estamos indicando que o tamanho de registro que iremos usar é 
Len(TheData(1)), que retorna o tamanho (em bytes) do nosso registro. Em 
seguida, queremos gravar o array de registros inteiro, Database(), nesse 
arquivo, de modo que deveremos ver as opções para gravação de arquivos de 
acesso aleatório. 
 
Microsoft Visual Basic 4.0 147
Os comandos comuns de I/0 para arquivos binários e de acesso aleatório 
são Get# e Put #; esses comandos podem obter ou colocar registros no arquivo. 
Nesse caso, usaremos Put #, cuja sintaxe é a seguinte: 
 
 
 
Put [#] nnn%, [rrr%], vvv% 
 
 
Aqui, nnn% é um número de arquivo, rrr% é o número de registro que você 
quer colocar no arquivo, e vvv% é a variável que queremos colocar lá. Se não 
especificarmos um número de registro, o Visual Basic simplesmente coloca um 
registro após o últirno no arquivo. O número total de registros é armazenado no 
inteiro global TotalRecords, de modo que possamos gravar esse número de 
registros da seguinte forma (observe que nenhum registro é gravado se 
TotalRecords for 0): 
 
 
 
Sub OKButton_Click ( ) 
 
On Error GoTo FileError 
Open FilenameBox.Text For Random As # 1 Len = Len(TheData(1)) 
 
For loop_index = 1 To TotalRecords 
Put # 1, TheData(loop_index) 
Next loop_index 
 
Close # 1 'Fecha o arquivo 
SaveForm.Hide 
Exit Sub 
 
 
 FileError: 
 
MsgBox "File Error", 48, “Database" 'MsgBox para erro no 
arquivo 
 
 
End Sub 
 
 
 
 E é isso aí. Agora podemos usar a opção Save File... do aplicativo 
Database. 
 
Microsoft Visual Basic 4.0 148
 
 
 Nesse ponto, o arquivo é gravado no disco. (Observe que também 
devemos mudar o quadro de mensagem de erro na seção FileError do código, 
dando-lhe o título "Database" em vez de "Editor".) Se quiséssemos, 
poderíamos ter gravado qualquer registro no lugar de todos eles especificando 
um número de registro em particular, da seguinte maneira: 
 
 
 Put # 1, 5, TheData(23) 
 
 
Isso grava no registro 5 do arquivo, preenchendo-o com o registro 
TheData(23). Desse modo, o acesso aleatório é verdadeiramente aleatório, 
pois ternos acesso a todos os registros do arquivo. Em outras palavras, 
podemos nos movimentar à vontade no arquivo, gravando registros em 
qualquer ordem. Isso funciona de forma semelhante com Get #, como 
veremos em seguida, ao lermos os registros do arquivo. 
 
 
 
 
 
 
 
 Leitura de Arquivos de Acesso Aleatório 
 
 
 Já copiamos o quadro de diálogo Save File da aplicação Editor para o 
nosso banco de dados, e podemos também copiar o quadro de diálogo Load 
File. Mais uma vez, selecione o item Add File no menu File do Visual Basic, 
 e depois inclua o arquivo Frm contendo o quadro de diálogo Load File... (nós 
o chamamos Loadform.Frm anteriormente). Em seguida, ative o item Load File 
no menu File do Database da seguinte forma: 
 
Sub Loadltem -ClickO 
 
Loadform.show 
 
End Sub 
 
 
 
 
 
Microsoft Visual Basic 4.0 149
 Agora acione o botão OK desse novo formulário, LoadForm, para mostrar 
a procedure mais importante, OKButton_Click(), que atualmente é a seguinte: 
 
 
 
Sub Okbotton_Click( ) 
 
On Error GoTo FileError 
 
If (Right$(Dir1.Path,1 ) = " \") Then 'Obtém nome do arquivo 
Filename = Dir1.Path + File1.FileName 
Else 
Filename = Dir1.Path + "\" + File1.Filename 
 
End if 
 
 
Open Filename For Input As # 1 
Form1.display.Text = Input$(LOF(1), # 1)'Lê o arquivo 
Close # 1 'Fecha o arquivo 
 
'Abre o arquivo 
 
 
 
Exit Sub 
 
 
FileError: 
MsgBox ”File Error",48,”Editor" 'MsgBox para erro 
 
 
End Sub 
 
 
 
 Mais uma vez, abrimos o arquivo como antes, para acesso aleatório: 
 
 
 
Sub OKButton_Click( ) 
 
On Error GoTo FileError 
. 
Microsoft Visual Basic 4.0 150
. 
. 
 
Open Filename For Random As # 1 Len = 
Len(TheData(1)) 
 
Form1.display.Text = Input$(LOF(1), # 1)'Lê o arquivo 
 
Close # 1 'Fecha o arquivo 
LoadForm.Hide 'Esconde o quadro de diálogo 
 
 
 
Exit Sub 
 
FileError: 
MsgBox "File Frror", 48. "DataBase" 
End Sub 
 
 Agora temos que obter os registros do arquivo usando Get #, que você 
usa para ler a partir de arquivos aleatórios e binários, e cuja sintaxe é a 
seguinte: 
 
 Get [#] nnn%, [rrr%], vvv% 
 
 
 
 Assim como em Put #, nnn% é o número do arquivo, rrr% é o número do 
registro que você quer obter do arquivo, e vvv% é a variável queremos colocar 
os dados. Se não especificarmos um número de registro o Visual Basic 
simplesmente apanhará o próximo registro da posição ativa no arquivo. Nossa 
primeira tarefa aqui é descobrir quantos registros existe no arquivo, e podemos 
fazer isso simplesmente dividindo o tamanho arquivo pelo tamanho de cada 
registro. Depois disso, podemos ler os dados da seguinte forma, registro por 
registro: 
 
 
 
Sub OKButton_Click ( ) 
 
On Error GoTo FileError 
 
Microsoft Visual Basic 4.0 151
Open Filename For Random As # 1 Len = 
Len(TheData(1)) 
NumberFileRecords = LOF(1)/ Len(TheData(1)) 
 
For loop_index =1 To NumberFileRecords 
 Get # 1, TheData(loop_index) 
Next loop_index 
 
 
 
Close # 1 'Fecha o arquivo 
LoadForm.hide 'Esconde o quadro de diálogo 
 
 
 
Exit sub 
 
FileError: 
MsgBox "File Error", 48, "Database" 'MsgBox para 
erro de arquivo 
 
End Sub 
 
 
 
(Observe que, mais uma vez, mudamos o nome do título do quadro na seção 
FileError do código de "Editor" para "Database"). 
 
 
 
No entanto, simplesmente carregar um arquivo não torna o banco de dados 
ativo. Além disso, temos que carregar os nomes de registro que lemos ao nosso 
quadro de lista ordenado
do banco de dados, onde podem ser selecionados pelo 
usuário. Esse quadro de lista é mantido no quadro de diálogo Find Item... do 
banco de dados. Para carregar os nomes de registro para esse quadro de lista, 
temos primeiro que apagar todas as entradas ativas (usando o método 
Removeltem do Visual Basic), e depois podemos recarregá-las de TheData(), 
usando o método Addltem: 
 
 
 
Sub OKButton_Click ( ) 
 
 
On Error GoTo FileError 
 
Microsoft Visual Basic 4.0 152
 
If (Right$(Dir1.Path, 1) = "\") Then 'Obtém nome do arquivo 
Filename = Dir1.Path + File1.FileName 
Else 
Filename = Dir1.Path + "\" + File1.FileName 
 
End If 
 
open Filename For Random As # 1 Len = Len(TheData(1)) 
NumberFileRecords = LOF(1) / Len(TheData(1)) 
 
For loop_index = 1 To NumberFileRecords 
 
 Get # 1, , TheData(loop_index) 
 
Next loop_index 
 
 
close # 1 'Fecha arquivo 
 
 
For loop_index = 1 TO TotalRecords 
 
 Form2.Namelist.Removeitem 0 
 
Next loop_index 
 
 
 
TotalRecords = NumberFileRecords ‘ Depois de ler o arquivo 
 com segurança 
 
For loop_index = 1 To TotalRecords 
Form2.NameList.AddItem TheData(loop_index).Narne 
Next loop_index 
 
 
Form1.NameField.Text = TheData(1).Name 
Form1.NumberField.Text = TheData(1).Number 
Forml.CommentField.Text = TheData(1).Comment 
 
 
Microsoft Visual Basic 4.0 153
 
LoadForm.Hide 'Esconde quadro de diálogo 
 
Exit sub 
 
FileError: 
 
MsgBox "File Error", 48, "Database" ‘MsgBox para erro 
 
 
End Sub 
 
 
 
 
 
 Uso do Comando Seek 
 
 
 Esse comando pode ser extremamente útil, pois nos permite especificar 
qual o registro que será lido ou gravado em seguida. Sua sintaxe é a seguinte: 
 
 
 Seek [#] nnn%, PPP& 
 
 Aqui, nnn% é o número do arquivo, e ppp& (um inteiro longo) é a nova 
posição no arquivo; para arquivos seqüenciais, ppp& é medido em bytes; para 
arquivos aleatórios, em números de registro. Em outras palavras, esta linha: 
 
 Get # 1, loop_index, TheData(loop_index) 
 
 é o mesmo que as linhas: 
 
 Seek # 1, loop_index 
 Get # 1, TheData(loop_index) 
Microsoft Visual Basic 4.0 154
 
 
 
 
 Crie um pequeno banco de dados para controlar as operações dos 
clientes de uma suposta Locadora de Vídeo. O registro de cada cliente deverá 
ser composto por 
 
 Nome 
 Endereço 
 Fitas alugadas 
 Observações 
 
 O mini-banco deverá conter um Menu principal com os Itens: Arquivo 
(Sub-itens Abrir, Salvar e Sair), Clientes (Sub-itens Adicionar e Remover). 
 
 No canto do formulário principal deverá aparecer o número de clientes 
cadastrados. 
 
 Dica: Utilize as caixas de diálogos (Save e Open) criadas nas aplicações 
anteriores. 
 
 
Prática

Teste o Premium para desbloquear

Aproveite todos os benefícios por 3 dias sem pagar! 😉
Já tem cadastro?