Você está na página 1de 79

UNIVERSIDADE FEDERAL DO RIO GRANDE DO SUL

Centro Interdisciplinar de Novas Tecnologias na Educação

1. INICIANDO O VISUAL BASIC


ELEMENTOS PRINCIPAIS

O Visual Basic 4.0 permite a instalação para 16 Bits (Windows 3.1 e 3.11) e para
32 Bits (Windows 95 e NT). Apresentaremos, inicialmente, os objetos e rotinas para
16 Bits, que são comuns às duas instalações.

O ambiente de trabalho do Visual Basic é formado por um conjunto de janelas que


podem ser abertas e fechadas individualmente. A janela principal é aquela que
contém a Barra de Menus (Menu Bar) e a Barra de Ferramentas (Tool Bar),
conforme mostrado na figura 1 abaixo

Figura 1 - Barra de Menus e de Ferramentas

Como pode ser visto, esta janela contém os controles usuais de qualquer
aplicativo Windows, tais como Abrir Arquivo, Salvar Arquivo, Editar, etc.

A figura 2 mostra a Caixa de Ferramentas (Tool Box), que contém todos os


controles personalizados (objetos) do Visual Basic. A figura 3 mostra a Janela de
Propriedades (Properties Window) que permite o acesso a todas as propriedades do
controle selecionado.

Fig. 2 Fig. 3 Fig. 4

A figura 4 mostra a Janela do


Projeto (Project Window), que
permite o acesso a todos os
arquivos do projeto em questão.
Para abrir cada uma destas janelas você pode usar o menu View, ou, então,
digitar F4 para abrir a Janela de Propriedades e Ctrl+R para abrir a Janela do Projeto.
A Caixa de Ferramentas não tem tecla de atalho associada.
O ambiente de desenvolvimento integrado do VB 5.0 é um pouco diferente.
As diversas janelas não são mais flutuantes e não se pode mais ver o
aplicativo rodando no fundo. Embora as janelas possam ser movidas e
dimensionadas, elas não são mais independentes entre si. A Janela de
Projeto também mudou, sendo capaz de identificar claramente formulários
e módulos de programação por meio de uma árvore. Mudanças menores dizem
respeito à aparência das janelas, especialmente da Caixa de Ferramentas. Talvez o
melhor seja remover a Janela de Projetos, utilizando-a somente quando estritamente
necessária. Você também pode configurar o ambiente de trabalho do VB 5.0 de modo
a ficar parecido com o do VB 4.0. Basta entrar no menu Tools|Options|, escolher a
opção Advanced e verificar a janela SDI Development Environment.

A Caixa de Ferramentas é usada para desenhar controles no formulário. Ela


contém todos os controles padronizados do Visual Basic e mais aqueles controles
que tiverem sido inseridos por meio da janela Custom Controls (menu Tools).

O formulário (form) é uma janela do Windows, inicialmente em branco, usada para


configurar a interface gráfica do projeto em VB. Cada projeto pode ter um ou mais
formulários, cada um deles associado a uma janela (por exemplo, podemos ter uma
janela para salvar arquivos, uma para abrir arquivos, etc.).

ALGUMA TERMINOLOGIA

Um objeto, em Visual Basic, é uma conjunto de códigos de programação (sub-


rotinas) e propriedades. Na verdade, cada elemento que você vê em um programa
Windows é um objeto individual, dotado de propriedades características..

Exemplo: Objeto Avião:

Propriedades: velocidade, altitude, inclinação, etc.;


Rotinas: decolar, aterrissar, taxiar, etc.

Mudando as propriedades de um objeto, podemos mudar a forma como ele


interage com o ambiente. Na programação em VB não é necessário ter um
conhecimento muito grande de programação orientada a objetos, como é necessário
em outras linguagens. Os objetos estão prontos para serem usados e o Visual Basic
cuida de quase tudo. A programação em VB não é um exemplo de “Programação
Orientada a Objetos” (POO), como é o caso do C++ ou do Object Pascal. O termo
“objeto”, em VB, é usado de uma maneira um pouco diferente, mas isto não significa
que a abordagem seja deficiente. É apenas diferente da POO clássica.

Projeto é o nome dado a um aplicativo desenvolvido em Visual Basic. O arquivo


do projeto (.vpb) é apenas uma lista de todos os outros arquivos que fazem parte do
aplicativo, tais como:

• formulários (.FRM);
• módulos de programação (.bas);
• controles de 16 bits (.VBX);
• controles de 32 bits (.OCX);
• bancos de dados (.mdb).

Quando se gera o programa executável, o VB cria um arquivo .EXE que tem todas
as características do arquivo .VBP, mas que pode ser executado fora do ambiente do
VB.

Os formulários são janelas onde se desenha controles e se escreve procedures


de eventos. Os módulos são arquivos que contém declarações de variáveis,
declarações de constantes e procedures internas.

Para inserir um novo módulo, use o menu Insert, opção Module. Para remover
módulos e formulários do projeto (mas não do disco rígido), use o menu File, opção
Remove File. Esta opção remove do projeto o arquivo selecionado na Janela de
Projetos. Os arquivos de projeto do Visual Basic (.VBP) são, na verdade, descrições
de quais arquivos .FRM e .bas estão associados ao projeto, qual é o modo de
associação e onde encontrá-los no disco rígido. Quando for gerado o arquivo
executável *.exe, este substituirá as funções do arquivo .VBP. Este último continuará
presente no disco, naturalmente.

ALTERANDO PROPRIEDADES

As propriedades de qualquer controle em VB podem ser alteradas em tempo de


projeto ou em tempo de execução.

Em tempo de projeto, quando não estamos rodando o programa, devemos usar a


Janela de Propriedades. Por exemplo, clique sobre um formulário vazio e pressione
F4 para abrir a janela de propriedades. Este formulário já é um programa em VB, o
que pode parecer um choque para os programadores convencionais. Entretanto, não
é um programa capaz de fazer muita coisa. Na janela de propriedades, mude a
propriedade “caption”1 para “Minha Janela”. Você verá que a legenda (caption) do
formulário mudará de “Form1” para “Minha Janela”. Você pode, agora, pressionar F5
para rodar o programa. Em menos de um minuto você foi capaz de criar um programa
que apresenta uma janela com um título personalizado. Não é fácil ?

As propriedades dos controles também pode ser alteradas em tempo de execução


(quando o programa estiver rodando). Para tanto, devemos usar a seguinte sintaxe:
Objeto. Propriedade = Novo Valor. Por exemplo, para mudar a propriedade caption
do formulário Form1 para “Minha Janela”, escreveríamos:

1
Até a data de impressão desta apostila, o Visual Basic era disponível nas seguintes línguas: inglês, francês, alemão,
italiano, espanhol, japonês e chinês (não sei se mandarim ou cantonês). Como, visto, nossa querida língua lusa ficou
de fora e o melhor que temos a fazer é nos virarmos com o inglês. Como diria Vicente Mateus, “Se você quiser fazer
um omelete, terá que chutar os ovos...”.
Form1.Caption = “Minha Janela”

Note que Minha Janela é um string (cadeia de caracteres) e deve estar sempre
entre aspas. O único problema é onde escrever esta frase. Todo trecho de código em
VB deve ser escrito dentro da Janela de Código. Por exemplo, em tempo de projeto,
dê dois cliques no formulário para abrir a janela de código. Deve aparecer o seguinte
trecho2:

Private Sub Form_Load()

End Sub
Este é o “esqueleto” de um procedimento de eventos em VB, que será executado
toda vez que ocorrer o evento Carregar (Load) do formulário Form1. Agora, complete
o procedimento como a seguir e pressione F5 para rodar o programa.

Private Sub Form_Load()


Form1.Caption = “Outra Janela”
End Sub

Você verá que o formulário é carregado com o título “Outra Janela”. Entretanto,
em tempo de projeto ele continua com o título “Minha Janela” (ou seja lá o que for).

Uma correta compreensão da diferença entre “tempo de projeto” e “tempo de


execução” é vital para o programador em VB. Existem propriedades que só podem
ser alteradas em tempo de execução.

CRIANDO UM APLICATIVO SIMPLES

Nosso formulário personalizado da seção anterior já é um programa VB, mas


ainda não é alguma coisa que você possa mostrar para os amigos (embora, se feita
em C++, devesse ter mais de duzentas linhas de código e um suspiro no final...). O
VB dispõe de recursos suficientes para começarmos a trabalhar com coisas mais
complicadas.

Os passo na construção de qualquer programa VB são os seguintes:

• Criação da interface gráfica;


• Definição das propriedades dos controles;
• Escrita do código de programação.

a) Criando a Interface com o usuário

2
Para maior clareza, indicaremos os delimitadores de uma procedure ou função em negrito. O VB, naturalmente,
insere estas palavras automaticamente sem o negrito. Da mesma forma, faremos a docuentação do programa
(comentários) em itálico. No VB, basta que você coloque um apóstrofo na frente de uma linha para ela ser
interpretada como comentário.
A revolução criada pelo aparecimento das interfaces gráficas com o usuário
ainda não acabou, mas algumas pessoas ainda não se deram conta de que ela
tenha começado. Programadores antigos - e tenho ouvido vários - dizem que
interfaces gráficas não são coisas de
programadores sérios. Talvez estes sisudos
senhores prefiram realmente aqueles
monitores pavorosamente verdes da época
do DOS, mas a humanidade toda está contra
eles. Os seres humanos são seres
essencialmente visuais, e não é possível
exagerar a importância da visão no
desenvolvimento da inteligência humana.
Reconhecemos figuras muito mais depressa
do que reconhecemos letras, tanto que uma
das técnicas da chamada “Leitura Dinâmica” tenta ensinar as pessoas a visualizar
palavras ou frases inteiras como se fossem figuras. Neste aspecto os chineses e
outros povos asiáticos estão literalmente milênios à nossa frente. Talvez sejam eles
os verdadeiros inventores da interface gráfica !

Figura 5 - A Interface
Muito bem, se você não se sente bem com interfaces gráficas, tenho a dizer que
talvez você esteja estudando a linguagem errada. Por outro lado, se você pertence
aos 99,9% da humanidade que saliva frente à figura de uma lasanha, mas sente
apenas uma comichão lendo a frase “Coma uma Lasanha !”, bem, então você está
no lugar certo. O VB dispõe de recursos fantásticos para o projeto de interfaces
gráficas.

Para iniciar a interface, desenhe, com auxílio da Caixa de Ferramentas, uma


Caixa de Texto e dois Botões de Comando, posicionando-os como na figura ao
lado.

Redimensione o formulário de modo que ele fique do tamanho indicado na


figura. Note que você pode trabalhar com estes objetos da mesma maneira que
trabalha com objetos de desenho do Word ou do Excel.

A explicação das funções deste controles é dada a seguir.

Botão de Comando: é provavelmente o controle mais simples e mais utilizado


no VB. Trata-se, basicamente de um botão que, quando clicado, comandará a
execução de um trecho de código. O evento “default” associado ao botão de
comando é o evento click. Este botão, ao contrário do botão 3D (SSCommand,
edições Profissional e Enterprise apenas), não suporta bitmaps e não pode ter a
aparência 3D configurada.

Caixa de Texto: também denominado de Caixa de Edição, este controle


permite apresentar textos editáveis pelo usuário. Para apresentar textos
que não possam ser editáveis pelo usuário, use o controle Label
(Rótulo). A Caixa de Texto convencional não suporta máscaras de digitação. Se
isto for necessário, é melhor usar o controle MaskEdit (edições Profissional e
Enterprise apenas).

b) Definindo as propriedades dos controles

Com auxílio da Janela de Propriedades, redefina algumas propriedades dos


controles criados, conforme mostrado na tabela 1 a seguir.

Tabela 1

OBJETO PROPRIEDADE DEFINIÇÃO


formulário Caption (Legenda) “Bom Dia !”
Caixa de Texto Text (Texto) (Vazio)
Botão de Comando 1 Caption (Legenda) OK
Botão de Comando 1 Caption (Legenda) Sair

c) Escrevendo o código

Cada objeto do VB, que denominamos aqui de “controle”, tem vários eventos
associados. A cada um destes eventos podemos associar um “procedimento de
eventos”, que será executado a cada vez que o evento correspondente ocorrer.

Para associar um procedimento de eventos ao Botão de Comando 1 clique duas


vezes sobre este controle, de modo a abrir a Janela de Código a ele associada.
Escreva a linha central do procedimento a seguir.

Private Sub Command1_Click()


Text1.Text = "Até mais tarde !"
End Sub

Clicando duas vezes sobre o Botão de Comando 2, abra a janela de código


associada a ele e escreva a palavra “End”.

Private Sub Command2_Click()


End
End Sub

Isto é tudo. Cada botão de comando tem, agora, um código associado, que não
será executado até que os botões sejam acionados. O primeiro botão escreverá o
texto “Até mais tarde!” na caixa de texto, enquanto o segundo encerrará a execução
do programa.

Procedimentos são também denominados “procedures” (pronuncia-se “procídiur”)


e é comum que se use este termo em inglês, mesmo quando se escreve ou se fala
em português (um “procedimento” que nossos amigos lusos abominam).

UM PROGRAMA DE ANIMAÇÃO
Em Visual Basic, Método é um procedimento reservado que atua sobre um objeto
específico. Um método especialmente concebido para realizar efeitos de animação é
o método Move, cuja função é mover suavemente um objeto pela tela. A sintaxe é a
seguinte:

[Objeto.]Move Left[,Top[,Width[,Height]]],

onde Left é a distância medida a partir da esquerda do formulário até o lado esquerdo
do objeto, Top é a distância medida do topo do formulário até o topo do objeto, Width
é a largura do objeto e Height a altura (veja a figura 6). Colchetes indicam
parâmetros opcionais. Por exemplo, se Objeto for omitido, o VB moverá o objeto que
tem o “foco” no momento, isto é, o objeto que está presentemente selecionado.

A escala padrão de medidas gráficas no Windows é o twip. Existem 1440 twips


por polegada ou aproximadamente 567 twips por centímetro. A escala de medição
pode ser alterada para pixels, centímetros e outras (ver propriedade ScaleMode).

a) Criando a interface de Borbolet.vbp

A finalidade de nosso aplicativo é mover uma borboleta pela tela, enquanto ela
bate as asas. Inicie um Novo Projeto, através do menu File|New Project e, com
auxílio da Caixa de Ferramentas, posicione os seguintes controles no formulário: um
Botão de Comando, três Caixas de Imagem, e um Timer.

Imagem: é um controle capaz de conter imagens do tipo bitmap, metafile e


outros. O VB dispõe também do controle PictureBox, que tem mais recursos do
que o Imagem. Contudo, o controle de Imagem ocupa menos memória e
redesenha figuras complexas mais rapidamente.

Timer: é um controle de cronômetro. O timer simplesmente gera um evento de


timer a cada intervalo de tempo pré-definido. Interval é uma propriedade que
pode ser definida em tempo de projeto ou de execução.

Figura 6 - Coordenadas de um objeto

b) Definindo as Propriedades
Com auxílio da Janela de Propriedades, defina as seguintes propriedades para
os controles inseridos:
Tabela 2

OBJETO PROPRIEDA DEFINIÇÃO


DE
formulário Caption Borboleta
WindowState 2-Maximized
BackColor White
ScaleMode 3-Pixel
Timer1 Interval 500 (ms)
Image1 Name imgAbreAsas
Picture BFLY1.BMP
Visible False
Image2 Name imgFechaAsa
s
Picture BFLY2.BMP
Visible False
Image3 Name imgPrincipal
Picture BFLY1.BMP
Visible True
Command Name cmdSair
1
Caption &Sair

Com as propriedades acima definidas, o formulário deve ficar com o aspecto


indicado na figura 7.

c) Escrevendo o código de Borbolet.vbp

Anexe os seguintes trechos de código aos controles cmdSair e Timer1:

Private Sub Timer1_Timer()


Static CarregaBmp As Boolean
imgPrincipal.Move imgPrincipal.Left + 20, imgPrincipal.Top - 5
If CarregaBmp Then
imgPrincipal.Picture = imgAbreAsas.Picture ' Mostra a
borboleta com as asas abertas
Else
imgPrincipal.Picture = imgFechaAsas.Picture ' Mostra a
borboleta com as asas fecha’das
End If
CarregaBmp = Not CarregaBmp ' Inverte o valor de CarregaBmp
End Sub

Private Sub Command1_Click()


End
End Sub
Figura 7 - O aplicativo Borbolet.vbp

Isto é tudo. Quando o programa for executado (menu Run ou F5), a borboleta se
moverá ao longo da tela, abrindo e fechando as asas.

Como funciona ?

A mágica toda é feita com o método Move, mas alguns adereços são necessários.
O efeito de animação das asas é conseguido com a alternação de duas imagens,
como se faz em desenho animado. Em vez de buscarmos tais imagens no disco
rígido, o que seria muito lento, optamos por armazená-las em controles de imagem. A
cada evento Timer a outra figura é carregada no controle imgPrincipal (que é quem se
move). Os controles de imagens imgAbreAsas e imgFechaAsas são mantidos
invisíveis durante toda a execução. Note, ainda, que CarregaBmp é uma variável
booleana que atua como “flag”, definindo qual imagem deve ser carregada em
imgPrincipal. Não se preocupe, por enquanto, com a palavra usada para declarar esta
variável (“Static”). Isto significa simplesmente que o valor da variável é preservado
entre eventos Timer consecutivos.

Nossa borboleta tem um problema: quando ela vai voando e atinge a borda direita
do monitor, não há como voltar. Você pode pensar em maneiras de fazer a borboleta
voltar ou, melhor ainda, aprisioná-la dentro da janela ? Como dica, você pode usar as
seguintes propriedades do formulário:

• ScaleWidth: especifica a largura da parte interna do formulário;


• ScaleHeight: especifica a altura da parte interna do formulário.

Basta verificar o valor destas propriedades e alterar a posição de imgPrincipal.


d) Salvando o projeto

Para salvar o projeto, vá até o menu File e escolha a opção Save Project. Você
pode alterar o nome do formulário para frmBorb.frm e o nome do projeto para
Borbolet.vbp. Estes serão os nomes dos arquivos em disco.

e) Associando um ícone ao projeto

Para criar um ícone para o aplicativo, proceda da seguinte maneira:

• Defina a propriedade Ícone do formulário principal;


• Gere o programa executável (menu File, opção Make EXE file): Borbolet.exe;
• No Windows 3.1 ou 3.11, crie um novo grupo e um novo item de programas;
• No Windows 95, crie um atalho para Borbolet.exe e arraste-o para a janela
principal. Renomeie o atalho como preferir.

Agora você poderá executar o programa clicando duas vezes sobre o ícone, sem
que seja necessário abrir o Visual Basic antes. Isto ocorre por que o programa
executável (.EXE) é independente do VB e pode ser executado em qualquer
máquina, desde que você forneça todos os controles. No nosso caso, tais controles
seriam:

• O arquivo de formulário: frmBorb.frm;


• O arquivo executável: Borbolet.exe;
• O arquivo vb40016.dll, se você estiver usando a versão de 16 bits;
• O arquivo vb40032.dll, se você estiver usando a versão de 32 bits.

Os arquivos do tipo vb.dll são “Bibliotecas de Vínculo Dinâmico” (Dynamic Link


Libraries), necessárias para que o seu programa VB possa se comunicar com o
Windows e devem ser fornecidos sempre que o computador onde for instalado o
programa não tiver o VB instalado. Estes arquivos podem ser encontrados no
diretório C:\Windows\System.
DIFERENÇAS ENTRE AS VERSÕES DE 16 E 32 BITS

O Windows 95 e o Windows NT acessam totalmente todos os 32 bits do


computador, enquanto o Windows 3.1 e o Windows 3.11 trabalham somente com 16
bits (por causa da “ditadura” do DOS). Por razões de compatibilidade, é possível
escolher por instalar somente a versão de 16 Bits do VB. Adicionalmente, é possível
instalar a versão de 32 Bits e gerar programas executáveis de 16 Bits, que podem ser
executados no Windows 3.1 ou 3.11. Entretanto, se você instalar a versão de 16 Bits,
não terá acesso aos novos controles .OCX do VB 4.0, mas somente aos controles
.VBX do VB 3.0 .A Microsoft afirma que estes controles .VBX são suportados
completamente somente pelo VB 3.0. Minha visão particular é que é melhor esquecer
logo essa estória de 16 Bits e partir logo para os 32, a não ser naqueles casos em
que seja imperativo que o programa vá rodar sob o Windows 3.1. Além disso,
problemas de instalação têm sido detectados na versão de 16 Bits do VB 4.0.

DIFERENÇAS ENTRE AS EDIÇÕES DO VISUAL BASIC 4.0


A Edição mais básica e barata do VB é a Standard (fique longe dela !). A Edição
Professional do VB 4.0 apresenta, entre outras, as seguintes melhorias em relação à
Standard:

• Controles Profissionais: Controles 3D, Animated Button, Gauge, Graph, Key


State, BitMap Clipping, MAPI, Multimedia, Communications, Outline, Masked Edit e,
Spin Button;
• Suporte para ODBC (Open Database Connectivity);
• Suporte para SQL (Structured Query Language);
• Crystal Reports: aplicativo para gerar relatórios de bancos de dados;
• Bitmaps ìcones e Metafiles : mais de 250 arquivos com bitmaps, ícones e figuras
prontas para o uso;
• Compilador de Help: aplicativo para produzir arquivos de help on-line
personalizados.

A Edição Enterprise, em adição à Professional, apresenta ainda as seguintes


características:

• Controles Remote Data Objects (RDO) e Remote Data (RDC): controles para
criação de aplicativos cliente-servidor;
• Visual SourceSafe: sistema de controle integrado de código-fonte. Ferramenta útil
quando um programa é desenvolvido por um equipe, com computadores em rede;
• Automação Remota: extensão do OLE (Object Linking and Embedding) para
redes.

Recomenda-se adquirir, ao menos, a Edição Professional. Esta edição contém


tantos controles a mais que a diferença no preço vale a pena. A Edição Enterprise
provavelmente só será útil em ambientes empresariais dedicados ao desenvolvimento
de software, mas ela provê alguns controles que não estão na Edição Professional,
tais como a Barra de Ferramentas e Lista de Imagens.

2. USANDO CONTROLES
CONVENÇÕES DE NOMES PARA CONTROLES

É sempre bom estabelecer convenções de nomes para objetos do Visual


Basic, sob risco de não se saber, no meio de um projeto mais complicado, qual
o tipo de um objeto cujo nome é, por exemplo, “dados”. A tabela 3 a seguir
apresenta alguns exemplos para os controles mais comuns.

Tabela 3

Controle Nome em Português Prefixo Exemplo


Form formulário frm frmAbrir
Check Box Caixa de Verificação chk chkLeitura
Combo Box Caixa “Combo” cbo cboPortuguês
Command Button Botão de Comando cmd cmdCancelar
Data Dados dat datLivros
Directory List Box Caixa de Diretório dir dirFontes
Drive List Box Caixa de Drives drv drvAlvo
File List Box Caixa de Arquivos fil filArquivos
Frame Quadro fra fraLíngua
Grid Grade grd grdPreços
Horizontal scroll Barra de Rolagem hsb hsbVolume
bar Horizontal
Image Imagem img imgÍcone
Label Rótulo lbl lblMensagem
Line Linha lin linVertical
List Box Caixa de Lista lst lstCEP
Menu Menu mnu mnuSalvar
OLE OLE ole oleObjeto
Option Button Botão de Opções opt optFrancês
Picture Box Caixa de Figuras pic picDesenho
Shape Forma (geométrica) sha shaCírculo
Text Box Caixa de Texto txt txtEntrada
Timer Temporizador tmr tmrAlarme
Vertical Scroll Bar Barra de Rolagem Vertical vsb vsbTaxa

O BLOCO DE NOTAS BLOCO.VBP

Processamento de texto é uma das funções básicas dos computadores


e o VB oferece algumas ferramentas poderosas relacionadas a texto. Nosso
objetivo inicial é projetar um Bloco de Notas simplificado que funcione a partir
da caixa de textos do Visual Basic e que disponha dos seguintes recursos:

• Edição básica: inserção e exclusão de texto, movimentação do


cursor, etc.;
• Seleção de texto;
• Cortar, copiar e colar textos.

Futuramente, nosso Bloco de Notas se transformará em um editor mais


poderoso, capaz de abrir e salvar arquivos do tipo texto e de funcionar também
a partir de menus.

O Bloco de Notas usará as seguintes propriedades de controles do


Visual Basic:

• Text: string que contém o texto em uma Caixa de Texto. O


tamanho máximo é 64 kBytes.
• Enabled: se for true, o controle é disponível;
• Default: se for true, o controle recebe o foco quando o formulário
for ativado.
• SelText: string que contém o texto selecionado em uma Caixa de
Texto.

Além disso, vamos precisar do método SetFocus, cuja sintaxe é a


seguinte:

Objeto. Setfocus
O “Foco” é uma propriedade comum a todos os controles do VB. Apenas
um objeto pode ter o foco de cada vez e apenas objetos visíveis podem
receber o foco. Geralmente, o objeto que tem o foco é diferenciado dos outros
por uma legenda ou título realçado. Em tempo de execução, o usuário define o
foco clicando sobre os objetos ou usando a tecla TAB. O método Setfocus
também define o foco para um objeto em tempo de execução, mas de maneira
automática. Se ocorrer uma tentativa de definir o foco em um objeto invisível,
um erro de execução será gerado.

a) Criando a interface de BLOCO.VBP

Inicie um novo projeto e desenhe, no formulário, uma Caixa de Texto e


quatro botões de comando, conforme ilustrado na figura 8 a seguir.

Figura 8 - Objetos de BLOCO.VBP


b) Definindo as propriedades

Defina as propriedades dos controles de acordo com a tabela a seguir.

Tabela 4

OBJETO PROPRIEDADE DEFINIÇÃO


formulário WindowState Maximized
Caixa de Texto Name txtBloco
Text (Vazio)
Multiline True
ScrollBars Vertical
Botão de Comando 1 Name cmdCortar
Caption &Cortar
Botão de Comando 2 Name cmdColar
Caption Co&lar
Botão de Comando 3 Name cmdApagar
Caption &Apagar
Botão de Comando 4 Name cmdSair
Caption &Sair

Note que a caixa de textos suporta textos com várias linhas, por causa
da propriedade “Multiline” e tem uma barra de paginação vertical. Esta barra de
paginação não é um objeto adicional, mas faz parte da caixa de textos. O VB
cuida de toda a automação necessária para a rolagem do texto. A
característica de edição em linhas múltiplas seria perdida caso definíssemos
também uma barra de paginação horizontal para a caixa. É por esta razão que
estamos usando apenas uma barra de paginação vertical.

c) Escrevendo o código

Neste aplicativo iremos precisar de uma variável Public3, ou seja, uma


variável que seja “vista” por todas os procedimentos de todos os objetos do
aplicativo. Estas variáveis só podem ser declaradas dentro de módulos.
Portanto, a primeira coisa que devemos fazer é inserir um módulo, o que pode
ser feito no menu Insert|Module. A seguir, escreva a seguinte linha dentro da
seção “General - Declarations”:

Public CortaTexto As String

O primeiro botão a ser implementado é o “Apagar”. Este botão apagará


todo o texto da caixa de texto, indiscriminadamente. Tudo o que temos a fazer
é “anular” a propriedade text da caixa de textos. Para tanto, dê dois cliques
sobre o botão apagar e escreva o seguinte código:

Private Sub cmdApagar_Click()


txtBloco.Text = ""
txtBloco.SetFocus
End Sub

Após apagar o texto, o que é feito na primeira linha, devemos jogar o


foco novamente na caixa de textos, pois após clicar o botão “Apagar” o foco
ficou com ele. Seria desagradável se o usuário tivesse que clicar na caixa de
textos toda vez que usasse o botão “Apagar”. O computador não se importa de
prestar este pequeno favor.

O botão “Sair” também é fácil e o código é idêntico ao do aplicativo


Borbolet.vbp, ou seja:

Private Sub cmdSair_Click()

3
Variáveis “Public”, até a versão 3.0, eram denominadas “Globals”. Esta última palavra ainda é aceita
nas declarações, mas está definitivamente fora de moda.
End
End Sub

Os procedimentos para os botões “Cortar” e “Colar” requerem um


raciocínio adicional. O que desejamos fazer é cortar um trecho de texto,
provavelmente, mas não necessariamente, para ser colado em algum outro
lugar. Logo, será necessário armazenar o texto recortado em alguma variável
temporária, o que será conseguido com a variável CortaTexto. Clique sobre o
botão “Cortar” e escreva o seguinte trecho:

Private Sub cmdCortar_Click()


CortaTexto = txtBloco.SelText
txtBloco.SelText = ""
txtBloco.SetFocus
End Sub

A primeira linha armazena o conteúdo do texto selecionado na variável


CortaTexto. A segunda apaga o texto selecionado, dando um efeito de que o
texto foi recortado. Finalmente, a última linha joga o foco novamente na caixa
de textos. A prodecure para o botão “Colar” atua de modo inverso a “Cortar”, ou
seja, devemos recuperar o texto armazenado em CortaTexto e atribuí-lo à
propriedade SelText da caixa de textos, conforme descrito a seguir.

Private Sub cmdColar_Click()


txtBloco.SelText = CortaTexto
txtBloco.SetFocus
End Sub

O nosso “mini-editor” já funciona bem, mas algumas melhorias são


necessárias. Primeiro, caso o usuário queira redimensionar o formulário, os
botões e a caixa de texto não o acompanharão. Este problema pode ser
contornado por meio do evento Resize do formulário. Este evento ocorre
sempre que o formulário é redimensionado, seja por meio do mouse, seja por
meio dos ícones de maximizar e minimizar. Resize também ocorre quando o
formulário é exibido pela primeira vez, na entrada do programa. O que
devemos fazer é ajustar a caixa de texto automaticamente no formulário cada
vez que este for redimensionado, o que pode ser conseguido com alguns
cálculos (estes cálculos são comuns em procedures de dimensionamento).

Clique o formulário duas vezes, em tempo de projeto, e procure o evento


Resize na caixa “Drop-Down” com o nome “Proc:”. Nesta procedure, escreva o
código abaixo.

Private Sub Form_Resize()


If frmBloco.Width > 50 then
txtBloco.Top = 0
txtBloco.Left = 0
txtBloco.Width = ScaleWidth
txtBloco.Height = ScaleHeight - cmdCortar.Height
cmdCortar.Left = 0
cmdColar.Left = cmdCortar.Width
cmdApagar.Left = 2 * cmdCortar.Width
cmdSair.Left = ScaleWidth - cmdSair.Width
cmdCortar.Top = ScaleHeight - cmdCortar.Height
cmdColar.Top = ScaleHeight - cmdColar.Height
cmdApagar.Top = ScaleHeight - cmdApagar.Height
cmdSair.Top = ScaleHeight - cmdSair.Height
End If
End Sub

Estudando a procedure de Resize com cuidado você verá que estamos


simplesmente alterando valores de propriedades dos controles (em VB isto é
feito com muito mais freqüência do que você pode imaginar). As primeiras
quatro linhas ajustam a caixa de textos propriamente dita, de forma que sobre
espaço em baixo para os botões (é por isso que a altura do botão Cortar -
cmdCortar.Height - é descontada). As linhas seguintes ajustam a posição de
todos os botões, atuando sobre as propriedades Left e Top.

Como exercício, fica a tarefa de descobrir qual a finalidade do comando


If ... Then.

EVENTOS DE TECLA E UM RELÓGIO DESPERTADOR

O VB 4.0 suporta diversas funções e eventos para manipulação do


teclado. O reconhecimento de teclas pressionadas pode ser feito por meio dos
seguintes eventos:

• KeyDown - ocorre quando uma tecla é pressionada;


• KeyUp - ocorre quando uma tecla é liberada;
• KeyPress - ocorre quando uma tecla é pressionada.

Os eventos KeyDown e KeyUp passam o código ANSI da tecla


acionada, enquanto KeyPress passa o código ASCII. KeyDown e KeyUp são
mais sofisticados do que KeyPress e detectam teclas que KeyPress não
detecta, tais como: combinações das teclas Shift, Ctrl e Alt; teclas de setas;
teclas de funções; PageUp e PageDown. A sintaxe para uma procedure do
evento KeyPress é mostrada abaixo:

Private Sub controle_KeyPress (KeyAscii As Integer)


[Bloco de código]
End Sub

KeyAscii é o código ASCII da tecla pressionada. Controle é o controle do


Visual Basic que usamos para capturar o evento KeyPress.

Os eventos KeyDown e KeyUp têm a mesma sintaxe, mostrada abaixo.


Private Sub controle_KeyDown(KeyCode As Integer, Shift As
Integer)
[Bloco de código]
End Sub

KeyCode é o código ANSI da tecla acionada. Shift é um campo de bits


que corresponde ao estado das teclas Shift, Ctrl e Alt no momento do evento,
de acordo com a tabela 5 a seguir.

Tabela 5

Valor de Shift Significado


1 “Shift” pressionado
2 “Ctrl” pressionado
4 “Alt” pressionado

Dentro de uma procedure do evento KeyPress, quando fazemos


KeyAscii = 0 o evento será anulado e a procedure será encerrada. O mesmo
ocorre para os eventos KeyDown e KeyUp no que diz respeito ao parâmetro
KeyCode.

O parâmetro Shift também admite combinações. Por exemplo, Shift = 6


corresponde às teclas Ctrl e Alt pressionadas simultaneamente.

O programa de relógio-despertador utiliza, ainda, algumas funções do


Visual Basic, descritas abaixo.

• Time$: retorna a hora do sistema.;


• Chr$(): converte um código ASCII para um string;
• Asc():retorna o código ASCII do primeiro caractere de um string.

Para iniciar o projeto do Relógio Despertador, posicione os seguintes


controles em um formulário, conforme a figura 9:

• Dois Rótulos;
• Dois Botões de Opção;
• Um Timer.

Um rótulo, ou label, é basicamente um controle não editável para saída de


dados. Deve ser usado em substituição à caixa de texto sempre que não for
necessário que o usuário edite o texto. Estaremos usando dois rótulos neste
projeto: um deles servirá de “display” para mostrar as horas. Este controle deve
ser um rótulo, pois não queremos, evidentemente, que o usuário edite a hora
atual !; o outro rótulo terá uma finalidade mais prosaica, servindo apenas para
indicar a função da caixa de textos. Rótulos constituem, portanto, um maneira
fácil de se imprimir textos no formulário. Para modificar o texto em tempo de
execução, mude a propriedade “caption” (rótulos não têm a propriedade “text”).

Os botões de opção, algumas vezes denominados “botões de rádio”, são


semelhantes àqueles botões push-button encontrados em vários tipos de
aparelhos de som. A finalidade é convidar o usuário a escolher apenas uma
opção dentre várias. É uma boa prática de programação usar botões de opção
dentro de uma estrutura denominada “array de controles”, isto é, os controles
tem o mesmo nome, mas índices diferentes. Para criar um array de controles
proceda da seguinte forma: insira o primeiro controle e mude o nome. A seguir,
clique sobre o controle e use os comandos do menu Editar para copiar o
controle e colá-lo novamente no formulário. Uma mensagem será gerada pelo
VB, avisando que já existe um controle com o mesmo nome e perguntando se
você quer criar um array. Responda que sim e repita a operação tantas vezes
quantas forem necessárias.

O controle de timer tem a propriedade Interval ajustada para 1000 ms,


ou 1 s, pois desejamos que a hora seja mostrada no display a intervalos de 1
segundo.

A tabela a seguir mostra as definições dos objetos de Alarme.vbp.

Tabela 6

OBJETO PROPRIEDAD DEFINIÇÃO


E
formulário Nome frmAlarme
Rótulo Nome lblDisplay
Legenda (vazio)
Fonte MS Sans Serif, 24,
negrito
Caixa de Texto Nome txtAjuste

Tabela 6 (contiuação)

OBJETO PROPRIEDAD DEFINIÇÃO


E
Botão de Nome optOpção
Opção(0) Índice 0
Botão de Nome optOpção
Opção(1) Índice 1
Timer Intervalo 1000
Figura 9 - O formulário frmAlarme

Para começar a inserção do código de optOpção, clique duas vezes em


um dos botões de opção e digite o seguinte trecho:

Private Sub optOpção_Click(Index As Integer)


If (Index = 1) Then
AlarmOn = True
Else
AlarmOn = False
End If
End Sub

AlarmOn é uma variável Public booleana que definirá se o som de


alarme deve estar ligado ou desligado. Para declarar esta variável, insira um
módulo de programação (menu Insert|Module) e digite a seguinte linha na
seção General-Declarations:

Public AlarmOn As Integer

A seguir, salve o módulo com o nome Alarme.bas. A procedure


optOpções_Click é chamada cada vez que o usuário clica em qualquer um dos
botões de opção. Index é um parâmetro passado para a procedure,
correspondendo ao índice do botão que foi acionado (é assim que o VB fica
sabendo qual controle foi acionado dentro de um array). Assim, se o usuário
tiver clicado no segundo botão (On, índice 1), o valor da variável AlarmOn será
verdadeiro (true). Caso contrário (Else), o valor será falso.

O próximo passo é escrever o código de validação de entrada da caixa


de texto txtAjuste. Não queremos que o usuário escreva qualquer coisa nesta
caixa. Somente números no formato de data devem ser permitidos. Para
realizar a validação, capturamos o evento KeyPress da caixa de texto e
verificamos se o caractere digitado é aceitável. Por exemplo, apenas números
entre zero e nove podem ser aceitos, assim como o sinal de dois pontos para
separar horas de minutos. Clicando duas vezes sobre txtAjuste, escreva o
seguinte trecho de código:

Private Sub txtAjuste_KeyPress(KeyAscii As Integer)


Key$ = Chr$(KeyAscii)
If ((Key$ < "0" Or Key$ > "9") And Key$ <> ":") Then
Beep
KeyAscii = 0
End If
End Sub

A primeira linha transforma o parâmetro KeyAscii de inteiro para string. A


cláusula de verificação If ... Then verfica se o caractere digitado é aceitável. Se
for, a procedure é encerrada e a caixa de texto conterá, deste modo o novo
caractere. Caso contrário, o evento KeyAscii é desabitado e um bip soa. Tudo
se passa como se o usuário não tivesse digitado caractere algum. Esta rotina
de validação é simples e exclui teclas como “del” e “backspace”, que podem
ser incluídas desde que saibamos o código ASCII de cada uma delas.

O próximo código pertence ao objeto Timer. Devemos simplesmente


mostrar a hora atual, com auxílio da função Time$. Além disso, caso a variável
AlarmOn seja verdadeira, devemos soar um bip, mostrando que o alarme está
ativado. Naturalmente, esta última condição só deve ocorrer se a hora ajustada
em txtAjuste for maior do que a hora atual, conforme mostra a rotina abaixo.

Private Sub Timer1_Timer()


If (Time$ > txtAjuste.Text And AlarmOn) Then
Beep
End If
lblDisplay.Caption = Time$
End Sub

Resumindo, o funcionamento do alarme é simples. A cada segundo é


gerado um evento de Timer e, capturando este evento, verificamos se o tempo
ajustado em txtAjuste é maior ou menor do que o tempo do display lblDisplay.
Se for maior, e se o botão de opção estiver na posição “Ligado”, fazemos o
alto-falante emitir um “bip” a cada segundo. Cada vez que ocorre um evento
Timer a função Time$ é usada para atualizar a hora em lblDisplay.

O som gerado pelo alarme não é muito emocionante e poderíamos


pensar em tocar uma música de qualquer espécie (que tal aquela musiquinha
do gás ?). Linguagens convencionais escritas para DOS resolviam este
problema fornecendo funções que faziam soar uma nota musical de freqüência
escolhida pelo programador. Trabalhando com a freqüência e duração de cada
nota era possível compor trechos de musicas (nada de acordes, portanto). O
VB trata o assunto de maneira muito mais eficiente e moderna, executando
arquivos .wav, desde que se tenha uma placa de som instalada. Entretanto
arquivos .wav são assunto da ferramenta multimídia do VB e ficarão para
mais tarde. Por enquanto ficamos apenas com o bip, por mais monótono que
seja.
NOTA SOBRE OS CÓDIGOS ASCII, ANSI E UNICODE

O ASCII é um código de caracteres de 8 bits (1 byte) desenvolvido na


época em que só o DOS existia. Com estes 8 bits não é possível representar
mais do que 256 caracteres, mas no início as coisas eram mais simples e
memórias de computador mais caras (é por estas questões econômicas, entre
outras coisas, que alguém teve a fantástica idéia de usar apenas dois dígitos
para representar anos, sem se lembrar do que aconteceria quando
chegássemos ao ano 2000). O ANSI também é um código de 8 bits, mas inclui
alguns caracteres não suportados pelo ASCII. O Windows 3.1 usava o ANSI
como padrão, suportando também o ASCII.

O Unicode é um código de 16 bits desenvolvido pela International


Standards Organization (ISO), com possibilidade para 65.536 caracteres
diferentes. Este espaço é suficiente para acomodar todos os caracteres usados
no Usinas atualmente, incluindo línguas antigas como sânscrito e hieroglifos
egípcios. Também existe espaço vago suficiente para que não se precise
preocupar com isto durante mais algumas centenas de anos. O Unicode é
totalmente suportado pelo Windows 95 e pelo Windows NT, convertendo-se
caracteres do ANSI para o Unicode e vice-versa. Os caracteres são
armazenados em ANSI pelo sistema operacional e manipulados em Unicode
pelo Visual Basic.

ERROS COMUNS EM PROGRAMAÇÃO

FORMULÁRIOS MUITO CARREGADOS

O Visual Basic disponibiliza uma quantidade fantástica de controles e é


grande a tentação de usar todos em um só formulário. Esta estória é
semelhante à de um grande jornal brasileiro que, certa vez, completou a
instalação de um parque gráfico super-moderno. No dia seguinte, a primeira
página do jornal continha reportagens escritas em todas as cores e fontes
disponíveis nos equipamentos, como se os jornalistas não tivessem resistido à
tentação de fazer todas as experiências possíveis de um só vez.

O Visual Basic oferece mais de uma solução para este problema da


“densidade gráfica”, tais como controles giratórios (spin buttons), caixas “drop-
down”, páginas “tab-strip” e outros. A melhor ferramenta, contudo, é uma boa
programação gráfica dos formulários.

Outra maneira de evitar o carregamento dos formulários é usar controles


carregados dinamicamente, isto é, à medida que o programa vai sendo
executado.
Lembre-se, o uso excessivo de controles não será visto como um sinal
de que o programador conhece profundamente a linguagem, mas sim como um
sinal de amadorismo.

FALTA DE IDENTAÇÃO E ESPAÇAMENTO

O Visual Basic não exige que você idente o código e compilará trechos
de código identados ou não exatamente da mesma maneira. Ainda assim, você
descobrirá que a identação é uma ferramenta poderosa na documentação de
programas. Por exemplo, compare os seguintes trechos.

Public Sub FileName()


If (Right$(frmSave.Dir1.Path, 1) = "\") Then
frmSave.txtFileName.Text = frmSave.Dir1.Path +
frmSave.File1.FileName
Else
frmSave.txtFileName.Text = frmSave.Dir1.Path + "\" +
frmSave.File1.FileName
End If
End Sub

Public Sub FileName()


If (Right$(frmSave.Dir1.Path, 1) = "\") Then
frmSave.txtFileName.Text = frmSave.Dir1.Path +
frmSave.File1.FileName
Else
frmSave.txtFileName.Text = frmSave.Dir1.Path + "\" +
frmSave.File1.FileName
End If
End Sub

É evidente que o primeiro trecho, embora contenha as mesmas


instruções do segundo é muito mais fácil de ser lido. Facilidade de leitura não é
um preciosismo, mas sim um instrumento de depuração muito usado.
Infelizmente, linguagens mais antigas, especialmente linguagens para
MainFrame4, não permitiam a identação nem a presença de linhas em branco.
Pior para elas !

USAR NOMES LONGOS

Outra prática desaconselhável é usar nomes longos para variáveis e


constantes. Alguns desenvolvedores, em vez de chamar um simples botão de
cmdOK, preferem escrever cmdOKformulárioFechaArquivoSemSalvar. Esta
prática é totalmente desnecessária e dificulta enormemente a leitura (se bem
4
Se você é um “micreiro”, talvez fique espantado em saber que os mainframes ainda existem e que, mais incrível
ainda, ainda existem programadores que só programam para mainframes. Eles estão tendo muito trabalho atualmente
para minimizar os estragos futuros do “bug milênio”, quando todos os computadores, na virada do século, mudarão as
datas de 99 para 00 (2000).
que eu tenha a impressão que a intenção destes programadores é justamente
esta.).

PROCEDIMENTOS LONGOS

Sempre é possível quebrar um procedimento longo em outros menores,


aumentando a reusabilidade do código e facilitando o entendimento. Além
disso, procedimentos muito longos tornarão o programa susceptível a estouro
de memória.

3. MENUS

UM EDITOR DE TEXTOS GERENCIADO POR MENUS

O Visual Basic disponibiliza uma excelente ferramenta para projeto de


menus: o “Menu Design Window”, ou Janela de Projeto de Menus, que pode
ser acessada com Ctrl-E ou por meio do botão direito do mouse. Projetar um
menu em VB não é mais difícil do que trabalhar com outros controles.
Entretanto, alguns cuidados são necessários para evitar conflitos entre itens de
menu. A Janela de Projeto de Menus é mostrada na Figura 10 a seguir.

Figura 10 - A Janela de Projeto de Menus

As propriedades de itens de menus são as seguintes:


• Checked: se for true, uma marca de verificação aparecerá ao lado do
item de menu;
• Enabled: se for true, o item de menu estará disponível;
• Visible: se for true, o item estará visível.

Estas propriedades podem ser alteradas em tempo de execução ou de


projeto. É, ainda, possível anexar teclas de atalho a cada item de menu.

A maneira mais fácil de trabalhar com menus é construir “Arrays de


Menus”, ou seja, os diferentes sub-itens de um mesmo menu serão
diferenciados apenas por um índice, tendo o mesmo nome. A tabela 7 abaixo
exemplifica esta construção para o caso de um menu chamado “Arquivo”.

Tabela 7

Legenda Nome Índice


Arquivo mnuArquivo -
--- Abrir mnuArquivoItem 0
--- Salvar mnuArquivoItem 1
--- - mnuArquivoItem 2
--- Sair mnuArquivoItem 3

O item principal do menu não tem índice. Os sub-itens são diferenciados


por índices, tendo o mesmo nome e sendo “indentados” em relação ao item
principal. O Visual Basic admite até cinco sub-itens, mas este limite raramente
é usado. A identação dois itens é feita por meio das setas da Janela de Projeto
de Menus. A barra de separação é criada com um hífen e não admite código
associado. O índice, entretanto, é obrigatório.

Podemos usar menus para implementar uma versão aperfeiçoada do


nosso bloco de notas. Em vez de usarmos botões de comando, usaremos itens
de menus para realizar as operações. Inicie um novo projeto, pressione Ctrl-E
para entrar na Janela de Projeto de Menus e adicione os itens de menu
conforme a tabela abaixo.

Tabela 8

Legenda Nome Índice Tecla de


Atalho
Arquivo mnuArquivo - -
--- Abrir mnuArquivoIte 0 Ctrl + F12
m
--- Salvar mnuArquivoIte 1 Shitf + F12
m
--- - mnuArquivoIte 2 -
m
--- Sair mnuArquivoIte 3 Ctrl + Z
m
Editar mnuEditar - -
--- Cortar mnuEditarItem 0 Ctrl + X
--- Colar mnuEditarItem 1 Ctrl + V
--- Apagar mnuEditarItem 2 Ctrl + P
Fontes mnuFontes - -
--- Courier mnuFontesIte 0 -
m
--- mnuFontesIte 1 -
Helvética m
--- Roman mnuFontesIte 2 -
m
--- Modern mnuFontesIte 3 -
m
--- Script mnuFontesIte 4 -
m
--- Symbol mnuFontesIte 5 -
m
--- System mnuFontesIte 6 -
m
--- mnuFontesIte 7 -
Terminal m

Após terminar o menu, mude a legenda do formulário para “Editor”. O


resultado final deve ser semelhante ao da Figura 11.

Figura 11 - Um editor de textos baseado em menus

O menu Editar contém basicamente o mesmo código que, antes, estava


nos botões do bloco de notas. Quando um menu é construído a partir de
arrays, a maneira mais fácil de escrever o código é usando o comando “Select
...Case”. Para iniciar a programação, insira uma caixa de texto do formulário,
renomeando-a para txtEditor e abra a janela de código do menu
mnuEditarItem, escrevendo as seguintes linhas:
Private Sub mnuEditarItem_Click(index As Integer)
Select Case index
Case 0 'Cortar
CortaTexto = txtEditor.SelText
txtEditor.SelText = ""
txtEditor.SetFocus
Case 1 'Colar
txtEditor.SelText = CortaTexto
Case 2 'Apagar
txtEditor.Text = ""
txtEditor.SetFocus
End Select
End Sub

Note que o núcleo do código é idêntico ao utilizado no Bloco de Notas. A


utilização do comando Select ... Case certamente facilita as coisas e funciona
da seguinte maneira: quando um item do menu mnuEditar é selecionado, o
evento clique passa o parâmetro Index, que corresponde ao item selecionado.
A estrutura de decisão Select ... Case verifica o valor de Index e executa
imediatamente o bloco de comandos associado, pulando a seguir para a linha
End Select. O comando Select ... Case não verifica todos os possíveis valores
de Index, sendo muito mais rápido do que uma estrutura correspondente
construída com comandos If ... Then ... Else.

O código do menu Fontes pode ser implementado rapidamente. A


diferença é que estaremos usando a propriedade Checked dos menus, para
identificar qual a fonte atualmente selecionada.

Private Sub mnuFontesItem_Click(index As Integer)


Select Case index
Case 0
txtEditor.FontName = "Courier"
Case 1
txtEditor.FontName = "Helv"
Case 2
txtEditor.FontName = "Roman"
Case 3
txtEditor.FontName = "Modern"
Case 4
txtEditor.FontName = "Script"
Case 5
txtEditor.FontName = "Symbol"
Case 6
txtEditor.FontName = "System"
Case 7
txtEditor.FontName = "Terminal"
End Select

For Contador = 0 To 7
mnuFontesItem(Contador).Checked = False
Next loop_index

mnuFontesItem(Contador).Checked = True
End Sub

Inicialmente, o comando Select ... Case é usado para atribuir à


propriedade “FontName” da caixa de textos a fonte escolhida pelo usuário.
Depois, um pequeno laço For ... Next remove as marcas de verificação de
todos os sete itens de menu (porque não sabemos qual delas está ativa).
Finalmente, colocamos uma marca de verificação no item de menu escolhido
atualmente. Está não é a única maneira de trabalhar com marcas de
verificação e alguém poderia argumentar que não é a mais rápida (por causa
do laço For .. Next). Sinceramente, para computadores superiores a um
Pentium 90 isto não faz diferença ... .Entretanto, é verdade que poderíamos
memorizar o item escolhido anteriormente, fazendo uso de uma variável do tipo
Integer, e então remover a barra de verificação somente deste item. Esta
pequena modificação fica como lição de casa.

Os comandos para o menu mnuArquivoItem são mais complicados e


exigem que trabalhemos com arquivos e janelas de diálogo, o que será visto
nas próximas seções.

CONSTRUINDO UMA CAIXA DE DIÁLOGO

Uma das maneiras de se abrir ou salvar um arquivo é mostrar uma caixa


de diálogo onde o usuário escolhe o nome do arquivo e o caminho desejado.
Uma caixa de diálogo personalizada em Visual Basic é basicamente um
formulário adicional, inserido através do menu Insert...Form. Um aplicativo em
Visual Basic pode ter até 264 formulários, mas é raro que se precise de tantos.

Caixas de diálogo podem ser modais ou não modais:

• Modal: a janela deve ser fechada (escondida ou descarregada) antes


que o aplicativo possa continuar a execução.
• Não Modal: a execução do aplicativo continua, mesmo com a janela
aberta.

Janelas modais são bastante comuns em situações em que devemos


evitar que o usuário faça qualquer coisa em outras janelas enquanto uma
operação importante está sendo realizada. Por exemplo, quando você escolhe
o menu File | Save File As..., no VB 4.0, a caixa de diálogo é aberta
modalmente na tela. Se o usuário tentar dar um clique fora da caixa de diálogo,
um som de erro será emitido. Embora caixas de diálogo modais tenham suas
vantagens, algumas vezes você não poderá usá-las, pois existem situações em
que devemos ter mais de uma janela aberta ao mesmo tempo. O ambiente de
trabalho do VB é um exemplo de várias janelas não modais abertas ao mesmo
tempo, possibilitando que o usuário alterne entre elas sem ter de fechá-las
antes.
Os métodos e comandos a seguir podem ser usados para carregar e
descarregar caixas de diálogo.

• Método Show: Carrega formulários na memória e os mostra na tela.


Para carregar formulários modais, escreva: Nome_do_Form.Show 1.
Para carregar formulários não modais, escreva Nome_do_Form.Show
.

• Método Hide: esconde (apaga da tela) uma janela, mas não a


descarrega da memória. Sintaxe: Nome_do_Form.Hide.

• Comando Load: carrega um formulário na memória, mas não o mostra


na tela. Sintaxe: Load Nome_do_Form.

• Comando UnLoad: descarrega um formulário da memória e da tela.


Sintaxe: UnLoad Nome_do_Form.

Janelas previamente carregadas na memória podem ser mostradas


fazendo-se a propriedade Visible ser verdadeira. Da mesma forma, janelas
carregadas na memória podem ser escondidas fazendo-se Visible falsa.
Quando uma janela é descarregada da memória todos os seus controles,
variáveis locais e procedures tornam-se inacessíveis.

Vale salientar que formulários que tenham sido apenas escondidos, mas
não descarregados, continuarão presentes, ocupando memória. Entretanto,
poderão ser acessados muito mais rapidamente da próxima vez em que forem
necessários, haja vista que não precisarão ser recuperados do disco.

A figura 12 mostra algumas propriedades de formulários que podem ser


úteis na personalização, bem como para evitar que o usuário “faça coisas que
não deve”, tais como maximizar ou minimizar o formulário ou acessar a Control
Box.

• ControlBox: Se for false, eliminará a caixinha com o menu


ControlBox, que contém comandos como Restaurar, Mover,
Maximizar, Minimizar e Fechar. A tecla de atalho Alt-F4, usada para
fechar janelas, também ficará indisponível;
• MaxButton: Se for false, eliminará o botão de maximização de janela;
• MinButton: Se for false, eliminará o botão de minimização de janela;
• BorderStyle: Permite as seguintes definições para a borda do
formulário: Fixed Single, Fixed Double e Sizable.

Control Box Caption (Legenda) MinButton MaxButton


BorderSt
yle

Figura 12 - Propriedades de formulários

Estas propriedades são úteis na personalização de formulários, mas


devem ser usadas com cuidado. O usuário deve ter ao menos uma opção de
fechar a janela antes de recorrer às derradeiras teclas Ctrl + Alt + Del ... Uma
recomendação útil é que você pense, antes de mais nada, em opções de saída
do formulário, pois é muito fácil esquecer delas depois.

Botões de comando também têm algumas propriedades que ajudam na


personalização de caixas de diálogo.

• Default: O botão que tiver Default = true será acionado quando o


usuário pressionar Enter;
• Cancel: O botão que tiver Cancel = true será acionado quando o
usuário pressionar Esc.

A JANELA ABRIR ARQUIVO

O menu mnuArquivoItem apresenta dois sub-itens que requerem caixas


de diálogos. Veremos mais tarde que o VB oferece recursos para implementar
rapidamente caixas de diálogo do tipo Abrir Arquivo, Salvar Arquivo, Imprimir,
etc., mas é interessante saber como funcionam alguns controles relacionados a
arquivos. Além disso, este tipo de procedimento é tão geral que podemos
construir caixas e deixá-las prontas para serem usadas em vários projetos
diferentes, mudando apenas o código associado.

Para iniciar uma nova janela, escolha o menu Insert | Form, renomeando
o formulário para frmAbrir. Desenhe no formulário os seguintes controle: dois
Botões de Comando, três Rótulos, uma Caixa de Lista de Arquivos
(FileListBox), uma Caixa de Lista de Diretórios (DirListBox) e uma Caixa de
Lista de Unidades (DriveListBox). As funções destes três últimos controles são
descritas a seguir:

Caixa de Lista de Arquivos: este controle localiza e lista, em tempo de


execução, os arquivos do diretório especificado pela propriedade Path. O
evento padrão deste controle é “Click”;
Caixa de Lista de Diretórios: lista os caminhos e diretórios da unidade
selecionada em tempo de execução. O evento padrão é “Change”, que ocorre
sempre que o usuário alterar o caminho com o mouse ou a teclas de direção;

Caixa de Lista de Unidades: possibilita que o usuário selecione uma unidade


(drive) em tempo de execução. O evento padrão é “Change”.

Estes três controles, uma vez posicionados no formulário, são


inicialmente independentes. Para torná-los interconectados devemos escrever
algumas linhas de código, baseadas na troca de informações que deve haver
entre eles, conforme a figura 13 a seguir.

Drive1 Dir1 File1


Path Path

Figura 13

Tudo começa quando o usuário seleciona uma unidade em Drive1,


gerando um evento change. Devemos capturar este evento e atribuir o caminho
(Path) selecionado à propriedade Path da caixa de lista de diretórios (Dir1). A
atribuição desta propriedade gerará um evento change em Dir1. Novamente,
este evento será capturado para repassar o caminho correto para File1.

Para implementar esta automação na janela Abrir Arquivo, escreva os


seguintes trechos de código nos objetos correspondentes:

Private Sub Drive1_Change()


Dir1.Path = Drive1.Drive
End Sub

Private Sub Dir1_Change()


File1.Path = Dir1.Path
End Sub

Nada muito complicado, não é mesmo ! O formulário frmAbrir,


finalmente, pode ser configurado de modo a ficar como na figura 14. Falta
apenas escrever os códigos para os botões cmdOK e cmdCancelar. O mais
simples deles é o botão cmdCancelar, cuja procedure para o evento clique
deve apenas descarregar o formulário sem realizar ação alguma, conforme
mostrado abaixo.

Private Sub cmdCancelar_Click()


Unload frmAbrir
End Sub

Figura 14 - O formulári frmAbrir

A procedure para o botão cmdOk é um pouco mais complicada, mas de


utlização geral. Antes de mais nada, devemos compor o nome do arquivo a ser
aberto a partir das informações de Dir1.Path e File1.FileName. Depois,
devemos abrir este arquivo com o comando Open. A procedure completa é
mostrada a seguir.

Private Sub cmdOK_Click()


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
frmEditor.txtPad.Text = Input$(LOF(1), #1)
Close #1
Unload frmLoad
End Sub

A primeira linha verifica se o diretório é o raiz. Se for, o caminho


completo deve ser formado com a concatenação direta dos strings Dir1.Path e
File1.FileName. Caso contrário, devemos inserir uma barra invertida (\) para
compor o caminho corretamente. A última linha descarrega o formulário da
memória. A sintaxe completa do comando Open será vista na próxima seção.

A JANELA SALVAR COMO


A janela Salvar Como não é muito diferente da janela Abrir Arquivo. A
única diferença é que devemos inserir uma caixa de texto onde o usuário pode
escrever o nome do arquivo diretamente ou formá-lo a partir dos controles de
unidade, drive e arquivo. Insira um novo formulário e desenhe os objetos
mostrados na figura 15, renomeando a caixa de textos para txtFileName. A
implementação do código será um pouco diferente, mostrando que existe,
frequentemente, mais de uma maneira de fazer as coisas.

A principal diferença é que não iremos compor o nome do arquivo


somente quando o usuário clicar o botão OK, mas sim a cada evento gerado
pelos controles de arquivos. Entretanto, seria desnecessário escrever o mesmo
trecho de código em três procedures diferentes, nos controles Drive1, Dir1 e
File1. O melhor é criar uma procedure interna, que não depende de eventos,
e chamá-la quando necessário. Para criar esta procedure, insira um módulo de
programação, por meio do menu Insert | Module. A seguir, clique no menu
Insert | Procedure e chame-a de FileName. Esta será uma procedure do tipo
Public Sub, o que significa que ela será acessível por todos os formulários e
módulos do projeto. Dentro do corpo de FileName escreva o seguinte código:

Public Sub FileName()


If (Right$(frmSave.Dir1.Path, 1) = "\") Then
frmSave.txtFileName.Text = frmSave.Dir1.Path +
frmSave.File1.FileName
Else
frmSave.txtFileName.Text = frmSave.Dir1.Path + "\" +
frmSave.File1.FileName
End If
End Sub

O que precisamos fazer, agora, é chamar a procedure FileName sempre


que o usuário mudar um dos controles do caminho final. Escreva os seguintes
trechos de código nos objetos correspondentes:

Private Sub Drive1_Change()


Dir1.Path = Drive1.Drive
Call FileName
End Sub

Private Sub Dir1_Change()


File1.Path = Dir1.Path
Call FileName
End Sub

Private Sub File1_Click()


Call FileName
End Sub

Note que o comando “Call” serve para chamar a procedure FileName.


Poderíamos escrever simplesmente “FileName”, mas é sempre melhor, por
questões de documentação de programa, usar o comando Call. Veremos mais
sobre procedures internas na seção seguinte.

Figura 15 - o formulário frmSalvar

Agora, tudo que falta é escrever o código para carregar os formulários


frmAbrir e frmSalvar, quando requerido pelo usuário. Isto é feito na procedure
associada ao menu mnuArquivoItem, conforme abaixo.

Private Sub mnuArquivoItem_Click(index As Integer)


Select Case index
Case 0 'Abrir
frmAbrir.Show
Case 1 'Salvar
frmSalvar.Show
Case 2 'Separador
Case 3 'Sair
End
End Select
End Sub

Como anteriormente, estamos usando o comando Select Case para


estruturar a chamada de comandos. O método Show está sendo usado para
abrir os formulários frmAbrir e frmSlvar modalmente. O índice 2 corresponde à
barra separadora do menu e não admite código, pois esta barra não executa o
evento clique.
O editor está quase pronto. Você pode implementar, no evento Resize
do formulário frmEditor, o mesmo código do Bloco de Notas. Melhorias
adicionais envolvem o desenvolvimento de um menu flutuante e o uso do
“ClipBoard”.

MENUS FLUTUANTES (POP-UP)

Menus flutuantes são aqueles que aparecem quando clicamos o botão


direito do mouse sobre um objeto. O Windows 95 é repleto destes menus (em
qualquer lugar que você clicar com o botão direito, alguma coisa aparece !) e o
VB, desde a versão 2.0, fornece recursos para a implementação destes menus.
Por exemplo, para fazer o menu Editar aparecer como flutuante quando o
botão direito do mouse for pressionado sobre a caixa de texto txtEdit, devemos
fazer,

Private Sub txtEdit_MouseUp (Button As Integer, Shift As


Integer, X As Single, Y As Single)
If Button = 2 Then ‘Botão direito foi pressionado
PopUpMenu mnuEditar
End If
End Sub

O OBJETO CLIPBOARD

O ClipBoard (Área de Transferência) é uma área da memória, comum a


todos os programas Windows, usada para armazenar temporariamente texto
e figuras. Podemos usar o ClipBoard para substituir as funções da variável
CortaTexto do menu Editar do nosso editor de textos.

Por exemplo, para armazenar o texto selecionado em txtEditor no


ClipBoard, usamos a função SetText,

ClipBoard.SetText txtEditor.SelText

Para recuperar o texto do ClipBoard, usamos o método GetText,

txtEditor, SelText = ClipBoard.GetText()

O código completo do menu Editar fica da seguinte forma:

Private Sub mnuEditarItem_Click(Index As Integer)


Select Case Index
Case 0 'Cortar
Clipboard.Clear
Clipboard.SetText txtEditor.SelText ' Copia o texto
selecionado para o "ClipBoard.
txtEditor.SelText = "" ' Apaga o texto selecionado.
Case 1 ' Copiar
Clipboard.Clear
Clipboard.SetText txtEditor.SelText 'Copia o texto
selecionado para o "ClipBoard.
Case 2 ' Colar
txtEditor.SelText = Clipboard.GetText() ' Cola o texto
presente no "Clipboard"
End Select
End Sub

10. PRINCIPAIS FUNÇÕES E COMANDOS DO VB


A relação abaixo apresenta as principais funções e comandos do Visual Basic
3.0. Funções financeiras e do Controle de Dados (DataControl) não estão mostradas.

Abs (Função)

Descrição Retorna o valor absoluto de um número.


Sintaxe Abs(número)
Comentários O argumento número pode ser qualquer expressão
numérica válida. O valor absoluto de um número
corresponde à sua magnitude, sem o sinal. O tipo de dado
retornado é o mesmo do argumento número.
Exemplo Abs(-1) e Abs(1) retornam, ambos, o valor 1.

Asc (Função)

Descrição Retorna o valor numérico correspondente ao código ANSI


para o primeiro caractere de uma expressão string.
Sintaxe Asc(expressão_string)
Comentários Se expressão_string tiver comprimento zero ocorrerá um
erro em tempo de execução.

Atn (Função)

Descrição Retorna o arco-tangente de um número.


Sintaxe Atn(número)
Comentários O argumento número pode ser qualquer expressão
numérica válida. O resultado é expresso em radianos e está
na faixa -π/2 e +π/2.

Beep (Comando)

Descrição Gera um tom sonoro no alto-falante do computador.


Sintaxe Beep
Comentários A freqüência e a duração do som dependem do hardware e
das configurações da placa de som.
ChDir (Comando)

Descrição Muda o diretório atual de um drive especificado.


Sintaxe ChDir caminho
Comentários O argumento caminho é um string que especifica qual
diretório deve se tornar o default. Este argumento deve
conter menos de 128 caracteres e deve ter a seguinte
sintaxe:
[drive:] [ \ ]diretório [ \diretório] ...
O comando ChDir opera de maneira semelhante ao
comando CHDIR do DOS. Da mesma forma que CHDIR,
ChDir (que não pode ser abreviado para CD) muda o
diretório default, mas não o drive default.
Exemplo Se o drive default for o C, o comando a seguir muda o
diretório default do drive D, mas o drive default continua
sendo o C.

ChDir “D:\WINDOWS”

ChDrive (Comando)

Descrição Muda o drive default.


Sintaxe ChDrive drive
Comentários O argumento drive é um string que especifica o novo drive
default e deve corresponder a um drive existente no
computador.
Exemplo ChDrive “D:” - muda para o drive D, que passa a ser o novo
default.

Chr, Chr$ (Funções)

Descrição Retorna um string de um caractere cujo código ANSI é o


argumento.
Sintaxe Chr[$] (código_do_caractere)
Comentários Chr retorna Variant; Chr[$] retorna String. O argumento
código_do_caractere é um inteiro entre 0 e 255, inclusive.
Aplicativos WINDOWS usam o código ANSI e não o código
ASCII. Os caracteres correspondentes aos números 0 e 31,
inclusive, são os mesmos para estes dois códigos. Por
exemplo, Chr(10) retorna o caractere “mudança de linha”
(linefeed).

Close (Comando)
Descrição Conclui uma operação I/O (input/output) para um arquivo,
ou seja, fecha um arquivo anteriormente aberto.
Sintaxe Close [[#]número_do_arquivo] [,[#]número_do_arquivo]...
Comentários O argumento número_do_arquivo deve ser o mesmo usado
no comando Open para abrir o arquivo. O comando Close,
usado sem argumento, fecha todos os arquivos abertos.

Cos (Função)

Descrição Retorna o co-seno de um ângulo.


Sintaxe Cos (ângulo)
Comentários O argumento ângulo pode ser qualquer expressão
numérica válida em radianos.

CurDir, CurDir$ (Funções)

Descrição Retorna o caminho atual para o drive especificado.


Sintaxe CurDir[$] [(drive)]
Comentários CurDir retorna um Variant; CurDir$ retorna String. O
argumento drive deve corresponder a um drive existente no
computador. Se nenhum drive for especificado, CurDir[$]
retornará o caminho do drive atual.
Exemplo Se o diretório atual for C:\VB\ o comando CurDir$ retornará
o string “C:\VB”.

Date, Date$ (Funções)

Descrição Retorna a data atual do sistema.


Sintaxe Date [$]
Comentários Date retorna Variant; Date$ retorna String de comprimento
10 formatado como mm-dd-aaaa.

Date, Date$ (Comandos)

Descrição Define a data do sistema.


Sintaxe Date[$] = expressão
Comentários Para Date, o argumento expressão deve ser um String ou
Variant. Para Date$, expressão deve ser um String com
um dos seguintes formatos: mm-dd-aa; mm-dd-aaaa;
mm/dd/aa; mm/dd/aaaa.
Dim (Comando)

Descrição Declara variáveis e aloca espaço na memória para


armazená-las. Quando usada na seção de Declarações de
um formulário ou módulo, as variáveis declaradas com Dim
tornam-se acessíveis a todas os procedimentos do
formulário ou módulo. Quando usada dentro de uma
procedure, as variáveis estarão disponíveis apenas para a
procedure em questão.
Sintaxe Dim nome_da_variável [([índices])] [As [New] tipo][,
nome_da_variável [([índices])] [As [New]] ...
Comentários O comando Dim tem as seguintes partes:

Parte Descrição
Nome_da_variáv Nome da variável a ser declarada.

Índices Dimensões de variáveis do tipo array, quando


for o caso.
As tipo Palavra reservada para indicar o tipo de
variável a ser declarada: Integer, Long,
Single, Double. Currency, String ou Variant.
New Cria um novo “instance” de um objeto. Somente
aplicável a variáveis-objeto.

Exemplo Dim Volume As Single

Dir, Dir$ (Funções)

Descrição Retorna o nome de um arquivo ou diretório que se adeque


aos Editorrões especificados.
Sintaxe Dir[$] [(arquivo_espec[,atributos])]
Comentários Dir retorna Variant; Dir$ retorna um String. O argumento
arquivo_espec é um string que especifica o caminho e
nome do arquivo. O argumento atributos especifica os
atributos do arquivo, de acordo com a seguinte tabela:

Valo Significado Constante


r Simbólica
0 Arquivos normais ATTR_NORMAL
2 Arquivos ATTR_HIDDEN
escondidos
4 Arquivos de ATTR_SYSTEM
sistema
8 Rótulo do volume ATTR_VOLUME
16 Diretório ATTR_DIRECTOR
Y

Do...Loop (Comando)

Descrição Repete um bloco de comandos enquanto (“While”) uma


condição for verdadeira ou até que (“Until”) a condição se
torne verdadeira.
Sintaxe 1 Do[{While|Until} condição]
[bloco de comandos]
Loop
Sintaxe 2 Do
[bloco de comandos]
Loop [{While|Until} condição]

End (Comando)

Descrição Finaliza uma procedure em Visual Basic.


Sintaxe End
Comentários O comando End por si só pode ser colocado em qualquer
lugar de uma procedure e equivale a selecionar End no
menu Run do Visual Basic. A execução é encerrada
imediatamente.

EOF (Função)

Descrição Retorna um valor que indica se o fim de um arquivo foi


atingido.
Sintaxe EOF(número_do_arquivo)
Comentários O argumento nome_do_arquivo deve ser o mesmo usado
no comando Open. EOF retorna True (verdadeiro) se o fim
do arquivo foi atingido e False (falso) em caso contrário.

Err, Erl (Funções)

Descrição Retorna o estado do erro ocorrido.


Sintaxe Err
Erl
Comentários Depois de ocorrido um erro, a função Err retorna uma
variável Integer correspondente ao código do erro. A
função Erl retorna uma variável Long correspondente ao
número da linha onde o erro ocorreu. Estas funções devem
ser usadas em rotinas de tratamentos de erros. Ver On
Error e Resume.
Error, Error$ (Funções)

Descrição Retorna a mensagem de erro (em inglês) que corresponde


a um dado código de erro.
Sintaxe Error[$](código_do_erro)
Comentários Error retorna Variant; Erro$ retorna String. O argumento
código_do_erro é um inteiro e deve estar entre 1 e 32.767.
A função Err pode ser usada para determinar o código do
erro ocorrido. Se a função Error[$] for usada sem
argumento, será retornada a mensagem de erro do erro
ocorrido mais recentemente.

Exp (Função)

Descrição Retorna o número “e” (base dos logaritmos nepperianos)


elevado a uma dada potência.
Sintaxe Exp(número)
Comentários Se o valor de número exceder 709,782712893, ocorrerá um
erro de Overflow. A constante e é aproximadamente igual a
2,718282.

FileCopy (Comando)

Descrição Copia um arquivo.


Sintaxe FileCopy arq_origem, arq_destino
Comentários Arq_origem é um string contendo uma especificação não
ambígua do arquivo a ser copiado. Este argumento pode
incluir informações sobre o drive e o caminho.
Arq_destino é um string contendo uma especificação não
ambígua do arquivo para onde Arq_origem deve ser
copiado. Este argumento pode incluir informações sobre o
drive e o caminho. O arquivo a ser copiado não pode estar
aberto por qualquer aplicativo, seja DOS ou Windows.
Exemplo O comando a seguir copia o arquivo “VBJUNK.DOC” do
diretório “C:\FOBOS” para o diretório “D:\DEIMOS” e o
renomeia para “VBJUNK.BAK”:
FileCopy “C:\FOBOS\VBJUNK.DOC”,
“D:\VBJUNK.BAK”

FileLen (Funções)

Descrição Retorna uma variável Long que expressa o comprimento


(length) de um arquivo, em bytes.
Sintaxe FileLen (nome_do_arquivo)
Comentários O argumento nome_do_arquivo é um string que contém
uma referência não ambígua a um arquivo, podendo conter
informações sobre drives e caminhos.
Exemplo O comando a seguir mostra, na caixa de texto Text1, o
tamanho do arquivo “VBJUNK.DOC” contido no caminho
“C:\FOBOS\”
Text1.Text = FileLen("C:\FOBOS\VBJUNK.DOC")

For...Next (Comando)

Descrição Repete um grupo de instruções um determinado número de


vezes.
Sintaxe For contador = começo To fim [Step incremento]
[bloco de comandos]
Next [contador]

Format, Format$ (Funções)

Descrição Formata números, datas, tempos ou strings de acordo com


instruções específicas.
Sintaxe Format[$](expressão[,fmt])
Comentários Format retorna Variant; Format$ retorna String. O
argumento expressão é o string ou expressão numérica a
ser formatada. O argumento fmt é a expressão de formato.
Para maiores informações, consultar o manual “Language
Reference” ou o Help on-line do Visual Basic.

FreeFile (Função)

Descrição Retorna o próximo número de arquivo disponível (não


aberto).
Sintaxe FreeFile [()]
Comentários FreeFile pode ser usada quando se deseja abrir um arquivo
com a certeza de que não existe um arquivo já aberto com
este número.

Function (Comando)

Descrição Declara o nome, argumento e código que formam o corpo


de uma procedure do tipo Function.
Sintaxe [Static] [Private] Function nome_da_função
[(lista_de_argumentos)] [As tipo]
[bloco de comandos]
[nome_da_função=expressão]
End Function
Comentários O comando Function tem as seguintes partes:

Parte Descrição
Static Indica que as variáveis locais da procedure
Function em questão são preservadas entre
duas chamadas.
Private Indica que a procedure Function em questão
é acessível somente a outros procedimentos
do módulo em que ela está declarada.
Lista_de_argumen Lista de variáveis passadas pela Function
tos como parâmetros.
As tipo Indica o tipo da procedure Function (Integer,
Long, Single, Double, Currency, String ou
Variant).
Bloco de comandos Expressões a serem executadas pela
procedure Function.
Expressão Valor de retorno da procedure Function

Precaução: Procedures do tipo Function podem ser


recursivas, isto é, podem chamar a si mesmas. Entretanto,
este procedimento pode causar overflow da área da
memória conhecida como stack, por onde os parâmetros
são passados. Quando a recursividade for necessária,
aconselha-se a não declarar a Function como Static.
Exemplo A seguinte função pode ser usada para calcular a raiz
quadrada de um número.

Function SquareRoot (X As Double) As Double


Select Case Sgn(X) ' Determina o sinal do
argumento.
Case 1 ' OK se for positivo.
SquareRoot = Sqr(X)
Exit Function
Case 0 ' Alertar usuário se for zero.
SquareRoot = 0
Case -1 ' Alertar usuário se for negativo.
SquareRoot = -1
End Select
End Function

Get (Comando)

Descrição Lê uma variável a partir de um arquivo em disco.


Sintaxe Get [#] número_do_arquivo,[número_do_registro],
nome_da_variável
Comentários O comando Get tem as seguintes partes:

Parte Descrição
Número_do_arqui Número usado no comando Open para abrir o
vo arquivo.
Número_do_registPara arquivos abertos no modo Random, este
ro argumento é o número do registro a ser lido.
Para arquivos abertos no modo Binary, este
argumento corresponde ao byte onde a leitura
deve começar.
Nome_da_variáve Nome da variável usada para receber o
l conteúdo do arquivo.

Exemplo O seguinte comando lê o décimo registro do arquivo


número 1 e o armazena na variável Cliente.

Get #1, 10, Cliente

Public (Comando)

Descrição Usado na seção de Declarações de um módulo para


declarar variáveis Públicas e alocar espaço de memória
para armazená-las. Variáveis Públicas são disponíveis para
todas os procedimentos de todos os formulários e módulos,
Sintaxe Public nome_da_variável [([índices])] [As [New] tipo][,
nome_da_variável [([índices])] [As [New]tipo]] ...
Comentários O comando Public tem as seguintes partes:

Parte Descrição
Nome_da_variá Nome da variável a ser declarada.
vel
Índices Dimensões de variáveis do tipo array, quando for o
caso.
As tipo Palavra reservada para indicar o tipo de variável a
ser declarada: Integer, Long, Single, Double.
Currency, String ou Variant.
New Cria um novo “instance” de um objeto. Somente
aplicável a variáveis-objeto.

Exemplo Public Número As Integer

Hex, Hex$ (Funções)

Descrição Retorna um string que representa o valor hexadecimal de


um argumento decimal.
Sintaxe Hex[$](número)
Comentários Hex retorna Variant; Hex[$] retorna String.
Exemplo O argumento número pode ser qualquer expressão
numérica válida e será arredondada para o número inteiro
mais próximo antes da conversão.

If...Then...Else (Comando)

Descrição Permite execução condicional de um bloco de comandos,


baseado em uma expressão.
Sintaxe If condição 1 Then
[bloco de comandos 1]
[ElseIf condição 2 Then
[bloco de comandos 2]]
[Else
[bloco de comandos n]]
End if

Input# (Comando)

Descrição Lê dados de um arquivo sequencial e os armazena em


variáveis.
Sintaxe Input # número_do_arquivo, lista_de_variáveis
Comentários O comando Input# tem as seguintes partes:

Parte Descrição
Número_do_arqui Número usado no comando Open para abrir o
vo arquivo. O sinal (#) que precede o número do
arquivo é obrigatório.
Lista_de_variávei Lista, separada por vírgulas, que descreve as
s variáveis usadas para armazenar os dados lidos
dos arquivos. Lista_de_variáveis não pode ser
um array, mas pode ser uma variável que
descreve um elemento de um array.
Lista_de_variáveis também não pode ser um
tipo de dado definido pelo usuário (user-defined
type), mas pode ser um elemento deste tipo de
dado

Exemplo O seguinte comando lê o primeiro registro do arquivo


número 1 e o armazena na variável Dados: Input #1,
Dados

InputBox, InputBox$ (Funções)


Descrição Mostra um pedido de entrada (“prompt”) em uma caixa de
diálogo, para que o usuário entre com um texto.
Sintaxe InputBox[$](prompt[,título][,default][,xpos, ypos]]])
Comentários InputBox retorna Variant; InputBox$ retorna String.

A função InputBox[$] tem as seguintes partes:

Parte Descrição
Prompt String mostrado como mensagem na caixa de diálogo.
Título String a ser mostrado na barra de título da caixa de
diálogo.
Default String mostrado na caixa de diálogo como resposta
default, caso o usuário não entre com uma expressão.
xpos Expressão numérica que especifica, em twips, a distância
horizontal da borda esquerda da caixa até a borda
esquerda da tela.
ypos Expressão numérica que especifica, em twips, a distância
vertical da borda superior da caixa até a borda superior da
tela.

Exemplo InputBox(“Entre com um valor de 0 a 15”, “Demonstração”,


“1”)

Int (Função)

Descrição Retorna a porção inteira de um número.


Sintaxe Int(número)
Comentários O argumento número pode ser qualquer expressão
numérica válida.

Kill (Comando)

Descrição Deleta arquivos de um disco.


Sintaxe Kill arquivo
Comentários O comando Kill é similar aos comandos ERASE e DEL do
DOS e deleta apenas arquivos. Para remover diretórios,
deve-se usar o comando RmDir. O arquivo a ser removido
deve existir previamente. Caso contrário, um erro em tempo
de execução ocorrerá.
Exemplo Kill “C:\VBJUNK.DOC”
LBound (Função)

Descrição Retorna o menor índice disponível para a dimensão


indicada de um array.
Sintaxe LBound(array[,dimensão])
Comentários A função LBound pode ser usada em conjunto com a
função UBound para se determinar o tamanho de um array.
LBound pode ser necessária pois, em Visual Basic, os
arrays não precisam começar necessariamente no índice
um.
Exemplo Seja M um array tridimensional declarado da seguinte
maneira:

Dim M(1 To 100, 0 To 3, -3 To 4).

A função LBound retornará os seguintes valores:

Declaração Valor
Retornado
LBound (M, 1) 1
LBound (M, 2) 0
LBound (M, 3) -3

LCase, LCase$ (Funções)

Descrição Retorna um string no qual todas as letras de um argumento


estão convertidas para minúsculas (“lowercase”).
Sintaxe LCase[$](string)
Comentários LCase retorna Variant; LCase$ retorna String.

Left,Left$ (Funções)

Descrição Retorna os n caracteres mais à esquerda de um argumento


string.
Sintaxe Left[$](string, n)
Comentários Left retorna Variant; Left$ retorna String. O argumento n
deve ser um inteiro longo (Long).

Len (Função)

Descrição Retorna o número de caracteres em um string ou o número


de bytes requerido para armazenar uma variável.
Sintaxe 1 Len(string)
Sintaxe 2 Len(minha_variável)
Comentários Na primeira sintaxe, Len retorna o número de caracteres na
expressão string. Na segunda, Len retorna o número de
bytes requeridos para armazenar a variável minha_variável.

Load (Comando)

Descrição Carrega um formulário ou controle na memória.


Sintaxe Load objeto
Comentários O argumento objeto deve ser um formulário comum,
formulário MDI ou um elemento de um “array de controles”.
O comando Load carrega o formulário ou controle na
memória, disponibilizando todas as suas propriedades, mas
não os exibe na tela. Para exibir um controle, deve-se fazer
a propriedade “Visible” verdadeira (True) ou usar o
comando Show.

LoadPicture (Função)

Descrição Carrega uma figura em um formulário, caixa de figuras ou


controle de imagens.
Sintaxe LoadPicture([expressão_string])
Comentários O argumento expressão_string é o nome do arquivo que
contém a figura a ser carregada. Usada sem argumento,
LoadPicture apaga o conteúdo de formulários, caixas de
figuras ou controle de imagens.
Os arquivos de figuras reconhecidos pelo Visual Basic 3.0
incluem bitmaps (.BMP), ícones (.ICO), arquivos
codificados em modo run-length (.RLE), e arquivos metafile
(.WMF).
Para carregar figuras a serem mostradas em caixas de
figuras, controle de imagens ou como fundo de formulários,
deve-se carregar o valor LoadPicture na propriedade
Picture do objeto em questão. Por exemplo:
Picture = LoadPicture(“C:\VBGRBG.BMP”)
Picture1. Picture = LoadPicture(“C:\VBGRBG.BMP”)
Para carregar uma figura na área de transferência deve-se
usar a função SetData:
ClipBoard.SetData LoadPicture (“C:\VBGRBG.BMP”)

LOF (Função)

Descrição Retorna o tamanho, em bytes, de um arquivo aberto.


Sintaxe LOF (número_do_arquivo)
Comentários O argumento número_do_arquivo é o número usado no
comando Open para a abertura do arquivo. Para obter o
tamanho de arquivos não abertos deve-se usar a função
FileLen.

Log (Função)

Descrição Retorna o logaritmo natural (nepperiano) de um número


especificado.
Sintaxe Log(número)
Comentários O argumento número pode ser qualquer expressão
numérica válida. A constante “e” é aproximadamente
2,718282.

MkDir (Comando)

Descrição Cria um novo diretório.


Sintaxe MkDir(nome_do_caminho)
Comentários O argumento caminho é um string que especifica qual
diretório deve ser criado. Este argumento deve conter
menos de 128 caracteres e deve ter a seguinte sintaxe:
[drive:] [ \ ]diretório [ \diretório] ...
O comando MkDir opera de maneira semelhante ao
comando MKDIR do DOS, exceto que não pode ser
abreviado para MD.

MsgBox (Comando e Função)

Descrição Mostra uma mensagem em uma caixa de diálogo


Editorronizada e espera que o usuário escolha um botão. A
função MsgBox retorna um valor indicando qual botão foi
escolhido; o comando MsgBox não retorna valor.
Sintaxe da Função MsgBox(msg[,[tipo][título]])
Sintaxe do Comando MsgBox msg[,[tipo][,título]]
Comentários O comando e a função MsgBox têm as seguintes partes:

Msg: String a ser mostrado como mensagem da caixa de


diálogo;
Tipo: Expressão numérica opcional que é a soma de
valores especificando quais botões devem aparecer, qual
ícone a ser usado e qual o botão default. A tabela a seguir
mostra os valores possíveis e os respectivos significados.

Constante simbólica Valo Significado


r
MB_OK 0 Mostra apenas o botão OK.
MB_OKCANCEL 1 Mostra os botões OK e Cancel.
MB_ABORTRETRYIGN 2 Mostra os botões Abort, Retry e
ORE Ignore.
MB_YESNOCANCEL 3 Mostra os botões Yes, No e
Cancel.
MB_YESNO 4 Mostra os botões Yes e No.
MB_RETRYCANCEL 5 Mostra os botões Retry e Cancel.
MB_ICONSTOP 16 Mostra o ícone “Stop”.
MB_ICONQUESTION 32 Mostra o ícone “Interrogação” (?).
MB_ICONEXCLAMATIO 48 Mostra o Ícone “Exclamação” (!).
N
MB_ICONINFORMATIO 64 Mostra o ícone “Informação” (i).
N
Botões default
MB_DEFBUTTON1 0 O primeiro botão é o default.
MB_DEFBUTTON2 256 O segundo botão é o default.

Título: String a ser usado como título na barra de títulos da


caixa de diálogo. Se omitido, a expressão “Microsoft Visual
Basic” será mostrada.
Os valores retornados pela função MsgBox indicam qual
botão foi pressionado, conforme a tabela abaixo.

Constante Valo Significado


simbólica r
IDOK 1 OK foi pressionado
IDCANCEL 2 Cancel foi pressionado
IDABORT 3 Abort foi pressionado
IDRETRY 4 Retry foi pressionado
IDYES 6 Yes foi pressionado
IDNO 7 No foi pressionado

Exemplo A função a seguir mostra uma caixa de diálogo com o título


“DEMO” e com a mensagem “Esta é uma demonstração”.
Somente o botão OK é mostrado.

RetVal=MsgBox(“Esta é uma demonstração”, 64, “DEMO”)

Name (Comando)

Descrição Altera o nome de um arquivo em disco ou diretório.


Sintaxe Name arq_antigo As arq_novo
Comentários O comando Name é similar ao comando RENAME do DOS,
mas pode ser usado também para renomear diretórios.
Usando Name, pode-se mover arquivos de um diretório
para outro, mas não se pode mover diretórios. Os
argumentos arq_antigo e arq_novo são strings que
especificam os arquivos antigo e novo, respectivamente,
incluindo caminhos. O arquivo especificado em arq_antigo
deve existir e o caminho especificado em arq_novo não
pode existir ainda. Se Name for usado para renomear
arquivos abertos ocorrerá um erro em tempo de execução.
Exemplo A declaração a seguir muda o arquivo VBJUNK.DOC do
diretório C:\FOBOS para o diretório C:\DEIMOS:

Name “C:\FOBOS\VBJUNK.DOC” As
\DEIMOS\VBJUNK.DOC”

On Error (Comando)

Descrição Habilita rotinas de tratamento de erros e especifica a


localização desta rotina dentro de uma procedure.
Sintaxe On Error {GoTo linha|Resume Next|GoTo 0}
Comentários Se o comando On Error não for usado qualquer erro em
tempo de execução será fatal, isto é, o Visual Basic acusa o
erro e gera a mensagem correspondente, mas aborta a
execução.
O comando On Error tem as seguintes partes:

Partes Descrição
GoTo linha Habilita a rotina de tratamento de erros que começa na
linha rotulada com linha. A rotina de tratamento de
erros deve estar dentro da mesma procedure onde o
erro ocorreu.
Resume Especifica que, quando um erro ocorrer, o controle
Next será dirigido para o comando imediatamente a seguir
àquele onde o erro ocorreu. Em outras palavras, o
programa continua a execução normal.
GoTo 0 Desabilita o tratamento de erros na procedure atual.

Para evitar que a rotina de tratamento de erros seja inadvertidamente


executada quando a procedure for finalizada sem erros, basta inserir os
comandos Exit Sub ou Exit Function imediatamente antes da rotina de
tratamento de erros.

Open (Comando)

Descrição Habilita operações de entrada/saída (I/O) em um arquivo,


ou seja, “abre” um arquivo.
Sintaxe Open arquivo [For modo][Access acesso][lock] As
[#]nº_do_arquivo [Len= comprimento]
Comentários Todo arquivo deve ser aberto antes que qualquer operação
de entrada/saída possa ser executada. o comando Open
aloca um buffer para o arquivo e determina o modo de
acesso a ser empregado. O comando Open tem as
seguintes partes:

Partes Descrição
Arquivo Nome do arquivo.
Modo Palavra reservada que especifica o tipo de arquivo:
Append, Binary, Input, Output, Random.
Access Palavra reservada que especifica quais operações
são permitidas para o arquivo: Read, Write, Read
Write. Disponível somente para ambiente em rede.
Partes Descrição
Lock Palavra reservada que especifica quais operações
são permitidas para o arquivo por outros processos:
Shared, Lock Read, Lock Write, Lock Read Write.
Disponível somente para ambiente em rede.
Nº_do_arqui Número inteiro com valor entre 1 e 255, inclusive.
vo Quando um arquivo for aberto, esta variável estará
associada ao arquivo enquanto ele estiver aberto.
Compriment Para arquivos Random, siginifica o comprimento do
o registro. Para arquivos sequenciais, significa o
número de caracteres.

Se o arquivo não existir, será criado quando da execução


do comando Open.

O argumento Modo divide-se nos seguintes casos:

Modo Descrição
Random Arquivos de acesso aleatório (default)
Binary Arquivos binários
Input Arquivos sequenciais para entrada
(leitura)
Output Arquivos sequenciais para saída
(gravação)
Append Arquivos sequenciais para saída
(gravação). O ponteiro é colocado no
fim do arquivo.

Option Explicit (Comando)

Descrição Força que todas as variáveis sejam explicitamente


declaradas.
Sintaxe Option Explicit
Comentários O comando Option Explicit é usado na seção de
Declarações de um formulário ou módulo para forçar a
declaração explícita de variáveis, isto é, todas as variáveis
deverão ser declaradas antes de serem usadas. Caso o
comando Option Explicit esteja sendo usado e alguma
variável usada não for declarada, ocorrerá um erro de
compilação.

Quando o comando Option Explicit não for usado, todas


as variáveis usadas e não declaradas serão do tipo
Variant, o que pode ocupar mais memória do que o
necessário.

Print# (Comando)

Descrição Escreve dados em um arquivo sequencial.


Sintaxe Print#
número_do_arquivo,[[{Spc(n)|Tab(n)}][lista_de_expressões]
[{;|,}]]
Comentários O comando Print# tem as seguintes partes:

Parte Descrição
Número_do_arqui Número usado no comando Open para abrir o
arquivo.

Spc(n) Função do Visual Basic usada


opcionalmemente para inserir n espaços. O
uso múltiplo é permitido.
Tab(n) Função do Visual Basic usada
opcionalmemente para deslocar para a coluna
n antes da saída ser gravada. O uso múltiplo
é permitido.
Lista_de_express Expressões numéricas ou string, separadas
por vírgulas, a serem escritas no arquivo.

Parte Descrição
{;|,} Caractere que determina a posição do
próximo caractere a ser gravado. Ponto-e-
vírgula siginifica que o próximo caractere é
gravado imediatamente após o anterior;
vírgula siginifica que o próximo caractere é
impresso no começo da próxima “zona de
impressão”. Cada zona de impressão tem 14
colunas. Se nenhum caractere for
especificado, a gravação será feita na
próxima linha.
Put (Comando)

Descrição Grava uma variável em um arquivo em disco.


Sintaxe
Put[#]número_do_arquivo,[número_do_registro],nome_da_
variável.
Comentários O comando Put tem as seguintes partes:

Parte Descrição
Número_do_arqui Número usado no comando Open para abrir o
vo arquivo.
Número_do_registPara arquivos abertos como Random, é o
ro número do registro onde se deseja gravar a
variável. Para arquivos abertos como Binary, é
o byte onde a gravação deve começar.
Nome_da_variáve Nome da variável a ser gravada. Variáveis-
l objeto e arrays não podem ser usados.
Entretanto, elementos de arrays podem ser
gravados individualmente.

QBColor (Função)

Descrição Retorna a cor RGB (Vermelho, Verde, Azul) correspondente


a um número.
Sintaxe QBColor(número_da_cor)
Comentários O argumento número_da_cor é um inteiro entre 0 e 15 que
corresponde a cores usadas em outras versões do BASIC.
A tabela abaixo descreve tais cores.

Númer Cor Número Cor


o
0 Preto 8 Cinza
1 Azul 9 Azul Claro
2 Verde 10 Verde Claro
3 Ciano 11 Ciano Claro
4 Vermelh 12 Vermelho
o Claro
5 Magenta 13 Magenta Claro
6 Amarelo 14 Amarelo Claro
7 Branco 15 Branco
Brilhante

Em alguns monitores, a cor QBColor(7) pode fornecer um


cinza claro. O branco usual é a cor QBColor(15).
Randomize (Comando)

Descrição Inicializa o gerador de números aleatórios.


Sintaxe Randomize[número]
Comentários O argumento número é qualquer expressão numérica válida
e é usado para inicializar o gerador de números aleatórios,
fornecendo uma nova semente. Se este argumento for
omitido, será usado o valor retornado pela função Timer.

Se o comando Randomize não for usado, a função Rnd


retornará a mesma sequência de números aleatórios cada
vez que o programa for executado.

ReDim (Comando)

Descrição Usado dentro de procedures para declarar arrays dinâmicos


e alocar ou desalocar espaço de armazenagem.
Sintaxe ReDim[Preserve] nome_do_array(índices)[As tipo]
Comentários O comando ReDim tem as seguintes partes:

Parte Descrição
Preserve Preserva os dados em um array existente quando a
última dimensão é redimensionada.
Nome_do_arr Nome da variável.
ay
Índices Dimensões do array.
As tipo Tipo do array (Integer, Long, Single, Double,
Currency, String, Variant)

Reset (Comando)

Descrição Fecha todos os arquivos em disco.


Sintaxe Reset
Comentários O comando Reset fecha todos os arquivos em disco
abertos e grava o conteúdo de todos os buffers do DOS em
disco.

Resume (Comando)

Descrição Continua a execução após o término de uma rotina de


tratamento de erros.
Sintaxe Resume {[0]|Next|linha}
Comentários As várias formas do comando Resume estão descritas na
tabela a seguir.

Comando Descrição
Resume [0] A execução continua a partir do comando que causou o
erro, ou a partir da procedure mais recentemente
chamada que contenha uma rotina de tratamento de
erro.
Resume A execução continua a partir do comando
Next imediatamente a seguir àquele que causou o erro, ou
imediatamente a seguir da procedure mais
recentemente chamada que contenha uma rotina de
tratamento de erro.
Resume A execução continua em linha, que é um rótulo ou
linha número de linha e deve estar na mesma procedure da
rotina de tratamento de erros.

Se o comando Resume for usado em qualquer lugar exceto


em uma rotina de tratamento de erros, um erro ocorrerá.

RGB (Função)

Descrição Retorna um inteiro longo (Long) representativo de um valor


de cor RGB.
Sintaxe RGB(vermelho, verde, azul)
Comentários A função RGB tem as seguintes partes:

Parte Descrição
Vermelh Inteiro na faixa 0 a 255, inclusive, que representa a
o componente vermelha da cor.
Verde Inteiro na faixa 0 a 255, inclusive, que representa a
componente verde da cor.
Azul Inteiro na faixa 0 a 255, inclusive, que representa a
componente azul da cor.

A tabela a seguir mostra a representação hexadecimal de


algumas cores Editorronizadas, bem como as intensidades
das respectivas controles.

Cor Valor Vermelh Verde Azul


RGB o
Preto &H00 0 0 0
Azul &HFF0000 0 0 255
Verde &HFF00 0 255 0
Ciano &HFFFF0 0 255 255
0
Vermelh &HFF 255 0 0
o
Magenta &HFF00F 255 0 255
F
Amarelo &HFFFF 255 255 0
Branco &HFFFFF 255 255 255
F
RmDir (Comando)

Descrição Remove um diretório existente.


Sintaxe RmDir caminho
Comentários O argumento caminho é um string que especifica o nome
do diretório a ser removido e deve ter a seguinte sintaxe:

[drive:] [ \ ]diretório [ \diretório] ...

O comando RmDir é semelhante ao comando RMDIR do


DOS, mas não pode ser abreviado para RD. Se o diretório
a ser removido contiver qualquer informação além do
diretório de trabalho (´.´) e do diretório (´..´), ocorrerá um
erro.

Rnd (Função)

Descrição Retorna um número aleatório.


Sintaxe Rnd[(número)]
Comentários O argumento número pode ser qualquer expressão
numérica válida. A função Rnd retorna uma variável Single
menor do que 1 e maior ou igual a zero. O valor de número
determina o modo de geração do número aleatório, de
acordo com a tabela a seguir.

Número Número retornado


<0 Sempre o mesmo número, conforme determinado por
número.
>0 O próximo número aleatório da sequência.
=0 O número mais recentemente gerado.
Omitido O próximo número aleatório da sequência.

A mesma sequência de números aleatórios é gerada cada


vez que o programa é executado porque chamadas
sucessivas da função Rnd usam o número aleatório
anterior como semente para o próximo número. Para evitar
que isto aconteça, deve-se usar o comando Randomize
para inicializar o gerador de números aleatórios antes de
executar a função Rnd.

SavePicture (Comando)

Descrição Grava uma figura de um formulário, caixa de figuras ou


controle de imagens em um arquivo.
Sintaxe SavePicture figura, arquivo
Comentários O comando SavePicture tem as seguintes partes:

Parte Descrição
Figura Propriedade “Picture” ou “Image” do controle a partir da
qual a figura deve ser criada.
Arquivo Nome do arquivo, incluindo caminhos opcionais.

Se a figura foi carregada de um arquivo, seja em tempo de


projeto ou execução, ela será salva com o mesmo formato.
Figuras com a propriedade imagem são sempre salvas
como bitmaps (.BMP). Figuras geradas em tempo de
execução somente serão salvas em disco se a propriedade
AutoRedraw do controle-suporte for verdadeira.

Exemplo A declaração a seguir salva a figura contida na caixa de


figura picFig, formulário frmFigura, no arquivo
“C:\FIGURA.BMP”:

SavePicture frmFigura.picFig.Picture,
“C:\FIGURA.BMP”

Seek (Função)

Descrição Retorna a posição atual de um arquivo


Sintaxe Seek(número_do_arquivo)
Comentários O argumento número_do_arquivo é o número usado no
comando Open para abrir o arquivo. O comando Seek
retorna um valor entre 1 e 2.147.483.647 (equivalente a
2^31-1), inclusive. Para arquivos abertos no modo
Random, Seek retorna o número do próximo arquivo lido
ou escrito. Para arquivos abertos nos modos Binary,
Output, Append ou Input, Seek retorna a posição do byte
onde a próxima operação será executada. O primeiro byte
de um arquivo está na posição 1, o segundo na posição 2 e
assim por diante.

Seek (Comando)

Descrição Define a posição, em um arquivo, para a próxima operação


de entrada ou saída.
Sintaxe Seek[#]número_do_arquivo, posição
Comentários O comando Seek tem as seguintes partes:

Parte Descrição
Número_do_arq Número usado no comando Open para abrir o
uivo arquivo.
Posição Expressão numérica que indica onde a próxima
operação I/O deve ocorrer. O valor de posição
deve estar entre 1 e 2.147.483.647 (equivalente
a 2^31-1).

Para arquivos Random, posição é um número de registro


do arquivo.
Para arquivos Binary, Output, Append ou Input,posição é
a posição do byte relativamente ao começo do arquivo
(posição 1).

Select Case (Comando)

Descrição Executa um dentre vários comandos dependendo do valor


de uma expressão.
Sintaxe Select Case expressão_teste
[Case lista_de_expressões-1
[bloco_de_comandos-1]]
[Case lista_de_expressões-2
[bloco_de_comandos-2]]
[Case Else
[bloco_de_comandos-n]]
End Select
Comentários O comando Select Case tem as seguintes partes:

Parte Descrição
Select Case Começo da estrutura de decisões (obrigatório)
Expressão_teste Qualquer expressão numérica ou string. Se
Expressão_teste for igual à
lista_de_expressões de uma cláusula Case, o
bloco_de_comandos associado será execu-
tado. O controle então passa para End Select.
Se Expressão_teste prencher os requisitos de
mais de uma cláusula Case, apenas a primeira
será executada.
Case Palavra reservada que divide os comandos a
serem executados quando uma expressão em
Lista_de_expressões for igual a
Expressão_teste.
Lista_de_express Lista de expressões separadas por vírgulas em
ões uma das seguintes formas:
Expressão
Expressão To Expressão
Is operador-de-comparação Expressão
Bloco_de_coman Lista de comandos em Visual Basic.
dos
Case Else Palavra-chave que indica o bloco de comandos
que será executado quando Expressão_teste
não se adequar a nenhuma das cláusulas
Case.
End Select Finalização do bloco Select Case (obrigatório)

Exemplo Select Case Número


Case 1 To 20
Msg = “O número está entre 1 e 20 !”
Case 21 To 50
Msg = “O número está entre 21 e 50 !”
Case 51 To 100
Msg = “O número está entre 51 e 100 !”
Case Else
Msg = “O número e maior do que 100 !”
End Select
MsgBox Msg

SetAttr (Comando)

Descrição Define os atributos para um arquivo.


Sintaxe SetAttr nome_do_arquivo, atributos
Comentários O comando SetAttr tem as seguintes partes:

Parte Descrição
Nome_do_arqu String que contém uma identificaçõa não ambígua
ivo de um arquivo, podendo incluir informações
adicionais sobre o drive e o caminho.
Atributos A soma de qualquer um dos seguintes valores
que caracterizam os atributos de um arquivo:
Const Valor Significado
Simbólica
ATTR_NORMAL 0 Arquivo normal
ATTR_READON 1 Arquivo somente para
LY leitura
ATTR_HIDDEN 2 Arquivo escondido
ATTR_SYSTEM 4 Arquivo do sistema
ATTR_ARCHIVE 32 Arquivo foi modificado
desde o último back-
up

Se o comando SetAttr for empregado quando o arquivo


especificado em nome_do_arquivo estiver aberto, ocorrerá
um erro em tempo de execução.

Sgn (Função)

Descrição Retorna um inteiro indicando o sinal de um número.


Sintaxe Sgn(número)
Comentários O argumento número pode ser qualquer expressão
numérica válida.
Se número>0, então Sgn(número) retorna 1;
Se número=0, então Sgn(número) retorna 0;
Se número<0, então Sgn(número) retorna -1;

Shell (Função)

Descrição Roda um programa executável.


Sintaxe Shell(string_de_comando[,tipo_de_janela])
Comentários A função Shell tem as seguintes partes:

Parte Descrição
String_de_coma Nome do programa a ser executado, incluindo
ndo caminhos e linhas de comando. As extensões
podem ser .COM, .EXE, .BAT ou .PIF. O default
é .EXE.
Tipo_de_janela Número correspondente ao estilo da janela na
qual o programa será executado. Se este
argumento for omitido, o programa é aberto
minimizado com foco.

A tabela a seguir mostra todos os possíveis valores da


variável Tipo_de_janela.

Valor Tipo da Janela


1, 5, 9 Normal com foco
2 Minimizada com foco
(default)
3 Maximizada com foco
4, 8 Normal sem foco
6, 7 Minimizada sem foco

A função Shell executa aplicativos assincronamente. Isto


significa que o código em Visual Basic poderá continuar sua
execução antes do encerramento do programa iniciado com
Shell. Para monitorar o estado de um programa Shell, a
função GetModuleUsage do Windows API (Aplications
Program Interface) poderá ser usada.

Sin (Função)

Descrição Retorna o seno de um ângulo.


Sintaxe Sin(ângulo)
Comentários O argumento ângulo pode ser qualquer expressão
numérica válida, medida em radianos. O resultado estará
na faixa entre -1 e +1.

Sqr (Função)

Descrição Retorna a raiz quadrada de um número.


Sintaxe Sqr(número)
Comentários O argumento número pode ser qualquer expressão
numérica válida maior ou igual a zero.

Static (Comando)

Descrição Usado dentro de uma procedure para declarar variáveis e


alocar espaço para armazená-las. Variáveis declaradas
com Static retêm o valor enquanto o programa estiver
rodando.
Sintaxe Static nome_da_variável [([índices])] [As [New] tipo][,
nome_da_variável [([índices])] [As [New]] ...
Comentários O comando Static tem as seguintes partes:

Parte Descrição
Nome_da_variáv Nome da variável a ser declarada.

Índices Dimensões de variáveis do tipo array, quando


for o caso.
As tipo Palavra reservada para indicar o tipo de
variável a ser declarada: Integer, Long,
Single, Double. Currency, String ou Variant.
New Cria um novo “instance” de um objeto. Somente
aplicável a variáveis-objeto.

Exemplo Static Ârea As Single

Stop (Comando)

Descrição Suspende a execução de um programa em Visual Basic.


Sintaxe Stop
Comentários O comando Stop encerra a execução de programas mas,
ao contrário de End, não fecha arquivos e não zera
variáveis. Um programa encerrado com Stop pode ter sua
execução retomada escolhendo-se o comando Continue
do menu Run.
Str, Str$ (Funções)

Descrição Retorna um string representativo do valor de uma


expressão numérica.
Sintaxe Str[$](número)
Comentários Str retorna Variant; Str$ retorna String.

Sub (Comando)

Descrição Declara o nome, argumento e código que formam o corpo


de uma procedure do tipo Sub.
Sintaxe [Static] [Private] Sub nome_da_procedure
[(lista_de_argumentos)] [As tipo]
[bloco de comandos]
[Exit Sub]
[bloco de comandos]
End Sub
Comentários O comando Sub tem as seguintes partes:

Parte Descrição
Static Indica que as variáveis locais da procedure
Sub em questão são preservadas entre duas
chamadas.
Private Indica que a procedure Sub em questão é
acessível somente a outros procedimentos do
módulo em que ela está declarada.
Lista_de_argument Lista de variáveis passadas pela Sub como
os parâmetros.
As tipo Indica o tipo da procedure Function (Integer,
Long, Single, Double, Currency, String ou
Variant).
Bloco de comandos Expressões a serem executadas pela
procedure Function.
Exit Sub Causa o encerramento imediato da procedure
Sub.
End Sub Marca o fim de uma procedure Sub.

O argumento Lista_de_argumentos tem a seguinte sintaxe:

[ByVal]variável[()][As tipo][, [ByVal]variável[()][As


tipo]...

A tabela a seguir descreve as partes de


Lista_de_argumentos:
Parte Descrição
ByVal Indica que o parâmetro é passado “por valor” e
não “por referência”. A palavra reservada
ByVal não pode ser usada para variáveis de
tipos definidos pelo usuário.
Variável Nome da variável que é passada como
parâmetro.
As tipo Declara o tipo da variável.

O valor de uma variável pode ser alterado por um


procedure quando ela é passada para esta procedure “por
referência”. Por outro lado, apenas uma cópia da variável é
passada quando se usa ByVal. Se a procedure alterar o
valor, apenas a cópia da variável será alterada, e não a
variável em si.
Precaução: Procedures do tipo Sub podem ser
recursivas, isto é, podem chamar a si mesmas. Entretanto,
este procedimento pode causar overflow da área da
memória conhecida como stack, por onde os parâmetros
são passados. Quando a recursividade for necessária,
aconselha-se a não declarar a Sub como Static.

Tab (Função)

Descrição Usada com o comando Print# ou com o método Print para


mover a posição na qual o próximo caractere será
impresso.
Sintaxe Tab(coluna)
Comentários O argumento coluna é um inteiro que especifica a coluna da
nova posição de impressão. A posição de impressão mais à
esquerda é sempre a número 1. A posição mais à direita é
a largura do arquivo de saída, que pode ser definida com o
comando Width#.

Tan (Função)

Descrição Retorna a tangente de um ângulo.


Sintaxe Tan(ângulo)
Comentários O argumento ângulo pode ser qualquer expressão
numérica válida.

Time, Time$. (Funções)

Descrição Retorna a hora atual do sistema.


Sintaxe Time[$][()]
Comentários Time retorna Variant contendo uma hora armazenada
internamente como a parte fracionária de um número de
precisão dupla.
Time$ retorna um string de oito caracteres da forma
hh:mm:ss, onde hh é a hora (00-23), mm é o minuto (00-59)
e ss é o segundo (00-59).

Time, Time$.(Comandos)

Descrição Especifica a hora do sistema.


Sintaxe Time[$] = expressão.
Comentários Para Time, o argumento expressão deve ser um String
formatado como time ou uma Variant do tipo VarType 7
(Date) ou VarType 8 (String).
Para Time$, o argumento expressão deve ter uma das
seguintes formas, onde hh é a hora (00-23), mm é o minuto
(00-59) e ss é o segundo (00-59):

Parte Descrição
hh Especifica a hora; minutos e segundos são definidos
em 00.
hh:mm Especifica hora e minutos; segundos são definidos em
00.
hh:mm:s Especifica hora, minutos e segundos.

Exemplo Time$ = “11:20:30”

Type (Comando)

Descrição Declara um tipo de dados definido pelo usuário.


Sintaxe Type variável_do_usuário
nome_do_elemento [(índices)] As nome_do_tipo
[nome_do_elemento [(índices)] As nome_do_tipo]
End Type
Comentários O comando Type tem as seguintes partes:

Parte Descrição
Type Marca o começo da declaração
Variável_do_usu Nome do tipo de dados definido pelo usuário.

Nome_do_eleme Nome de um elemento do tipo de dados


definido pelo usuário.
Índices Dimensões de elementos de arrays, quando for
o caso.
Nome_do_tipo Um dos seguintes tipos: Integer, Long, Single,
Double, Currency, String ou Variant.
End Type Marca o fim da declaração.

O comando Type somente pode ser usado na seção de


Declarações de um módulo. Uma vez tendo-se declarado
um tipo de dados definido pelo usuário, variáveis deste tipo
poderão ser declaradas em qualquer procedure do
aplicativo, usando-se os comandos Dim, Public, ReDim ou
Static.
Tipos de dados definidos pelo usuário são análogos às
varíáveis Record do Pascal. Este tipo de dados geralmente
é usado quando se desejar um registro de dados que
contenham diferentes tipos de variáveis. O exemplo a
seguir ilustra um caso simples de variável usada para
armazenar dados de vendas.
Exemplo Type Vendas
Índice As Long
Cliente As String*38
Produto As String*24
End Type

Um variável do tipo “Vendas” pode ser declarada da


seguinte forma:

Dim Vendas_do_Mês As Vendas

Os elementos desta nova variável serão então referidos da


forma a seguir:

Vendas_do_Mês.Índice
Vendas_do_Mês.Cliente
Vendas_do_Mês.Produto

Cada valor de Vendas_do_Mês, com seus três elementos,


pode ser então gravado em um arquivo Random, por
exemplo.

UBound (Função)

Descrição Retorna o maior índice disponível para a dimensão indicada


de um array.
Sintaxe UBound(array[,dimensão])
Comentários A função UBound pode ser usada em conjunto com a
função LBound para se determinar o tamanho de um array.
Exemplo Seja M um array tridimensional declarado da seguinte
maneira:

Dim M(1 To 100, 0 To 3, -3 To 4).

A função UBound retornará os seguintes valores:

Declaração Valor
Retornado
UBound (M, 1) 100
UBound (M, 2) 3
UBound (M, 3) 4

UCase, Ucase$ (Funções)

Descrição Retorna um string no qual todas as letras de um argumento


estão convertidas para maiúsculas (“uppercase”).
Sintaxe UCase[$](string)
Comentários UCase retorna Variant; UCase$ retorna String.

UnLoad (Comando)

Descrição Descarrega um formulário ou controle da memória.


Sintaxe UnLoad objeto
Comentários O argumento objeto é o formulário ou array de controles a
ser descarregado. Antes de um formulário ser
descarregado, um evento Query_Unload ocorre, seguido
por um evento Form_Unload. Quando um formulário é
descarregado da memória, todos os controles nele
localizados tornam-se inacessíveis. Entretanto, todos os
códigos associados com o formulário permanecem na
memória.

Val (Função)

Descrição Retorna o valor numérico de um string.


Sintaxe Val(expressão_string)
Comentários O argumento expressão_string é uma sequência de
caracteres que pode ser interpretada numericamente. A
função Val para de ler o primeiro caractere que não puder
ser reconhecido como parte de um número.
A função Val retorna sempre Double. Entretanto, se o
resultado for associado a uma variável, o tipo Double é
convertido para o tipo de dados desta variável.

While...Wend (Comandos)

Descrição Executa uma série de comandos dentro de um laço


enquanto (“While”) uma dada condição for verdadeira.
Sintaxe While condição
[bloco_de_comandos]
Wend
Comentários O comando While...Wend tem as seguintes partes:

Parte Descrição
While Marca o começo do laço While...Wend
Condição Qualquer expressão numérica ou string que
dê como resultado “true” (não zero) ou “false”
(zero). Se Condição for verdadeira, os
comandos de Bloco_de_comandos serão
executados. Caso contrário, a execução salta
para o comando seguinte a While...Wend.
Bloco_de_coman Qualque número de comandos em Visual
Basic.

Wend Marca o fim do laço While...Wend

Width# (Comando)

Descrição Define uma largura (“Width”) para um arquivo.


Sintaxe Width# número_do_arquivo, largura
Comentários O comando Width# tem as seguintes partes:

Parte Descrição
Número_do_aqrq Número usado no comando Open para abrir o
arquivo.

Largura Expressão numérica entre 0 e 255, inclusive,


que indica quantos caracteres devem
aparecer em uma linha do arquivo. Se for
igual a zero, não haverá limite para o
comprimento da linha. O valor default é zero.
Write# (Comando)

Descrição Escreve dados em um arquivo sequencial.


Sintaxe Write# número_do_arquivo[,lista_de_expressões]
Comentários O comando Write# tem as seguintes partes:

Parte Descrição
Número_do_arquiv Número usado no comando Open para abrir
o o arquivo.
Lista_de_expressõ Expressões numéricas ou string, separadas
e por vírgulas, a serem escritas no arquivo.
s

O arquivo identificado por Número_do_arquivo deve ter


sido aberto nos modos Append ou Output.
Diferentemente do comando Print#, Write# insere vírgulas
entre itens e aspas no começo e no fim de strings. Write#
também insere um caractere de linha nova quando o último
caractere de Lista_de_expressões tiver sido escrito.

11. PRINCIPAIS EVENTOS DO VB

Activate, Deactivate

Aplicação Form, MDI Form.


Descrição Activate ocorre quando um formulário torna-se a janela
ativa. Deactivate ocorre quando um outro formulário torna-
se a janela ativa.
Sintaxe Sub From_Activate()
Sub MDIForm_Activate()
Sub From_Deactivate()
Sub MDIFrom_Deactivate()
Comentários Um formulário pode tornar-se ativo por ações do usuário,
tais como clicar um formulário ou controle, ou por se usar
os métodos Show e SetFocus no código. O evento
Activate ocorre somente após o formulário ter se tornado
visível. O evento Deactivate não ocorre quando o formulário
é descarregado sem que outro formulário tenha se tornado
ativo, isto é, tenha recebido o foco.

Change
Aplicação Combo box, directory list box, drive list box, horizontal scroll
bar, label, picture box, text box, vertical scroll box.
Descrição Indica quando o conteúdo de um controle sofreu alterações.
Sintaxe Sub controle_Change (Index As Integer)
Comentários O argumento Index identifica um controle unicamente se
este for parte de um array de controles.

Click

Aplicação Form (não MDI), check box, combo box, command button,
directory list box, file list box, frame, grid, image, list box,
menu, OLE, option button, picture box, text box.
Descrição Ocorre quando o usuário pressiona o botão do mouse.
Sintaxe Sub Form_Click
Sub controle_Click (Index As Integer)
Comentários O argumento Index identifica um controle unicamente se
este for parte de um array de controles.

DblClick

Aplicação Form (não MDI), check box, combo box, command button,
directory list box, file list box, frame, grid, image, list box,
menu, OLE, option button, picture box, text box.
Descrição Ocorre quando o usuário pressiona o botão do mouse duas
vezes.
Sintaxe Sub Form_DblClick
Sub controle_DblClick (Index As Integer)
Comentários O argumento Index identifica um controle unicamente se
este for parte de um array de controles.

GotFocus

Aplicação Form (não MDI), check box, combo box, command button,
directory list box, drive list box, file list box, grid, horizontal
scroll bar, list box, OLE, option button, picture box, text box,
vertical scroll bar.
Descrição Ocorre quando um objeto recebe o foco, seja pela ação do
usuário ou usando-se o método SetFocus no código. Um
formulário (form) só recebe o foco quando todos os
controles visíveis estão desabilitados.
Sintaxe Sub Form_GotFocus()
Sub controle_ GotFocus(Índex As Integer)
Comentários O argumento Index identifica um controle unicamente se
este for parte de um array de controles.
Um objeto só pode receber o foco se estiver visível
(Visible=True) e habilitado (Enabled=True). Objetos podem
receber foco também através da tecla de tabulação. Neste
caso, a ordem de tabulação será ditada pela propriedade
Tab order.

KeyDown, KeyUp

Aplicação Form (não MDI), check box, combo box, command button,
directory list box, drive list box, file list box, grid, horizontal
scroll bar, list box, OLE, option button, picture box, text box,
vertical scroll bar.
Descrição Ocorre quando o usuário pressiona (KeyDown) ou libera
(KeyUp) uma tecla enquanto um objeto tem o foco (para
interpretar caracteres ANSI, usar o evento KeyPress).
Sintaxe Sub Form_KeyDown(KeyCode As Integer, Shift As
Integer)
Sub controle_KeyDown([Index As Integer,]KeyCode As
Integer, Shift As Integer)
Sub Form_KeyUp(KeyCode As Integer, Shift As Integer)
Sub controle_KeyUp([Index As Integer,]KeyCode As
Integer, Shift As Integer)
Comentários Os eventos KeyDown e KeyUp têm os seguintes
argumentos:

Argument Descrição

Índex Identifica um controle quando este for parte de um


array de controles.
KeyCode Um código de tecla, tal como KEY_F1 (a tecla F1).
Para especificar códigos de teclas, usar as contantes
do arquivo CONSTANT.TXT.
Shift Estado das teclas Shift (1), Ctrl(2) e Alt(4) durante a
ocorrência do evento. Por exemplo, se Ctrl e Alt
estiverem pressionadas, o valor de Shift será 2+4=6.

KeyPress

Aplicação Form (não MDI), check box, combo box, command button,
directory list box, drive list box, file list box, grid, horizontal
scroll bar, list box, OLE, option button, picture box, text box,
vertical scroll bar.
Descrição Ocorre quando o usuário pressiona e libera uma tecla
ANSI.
Sintaxe Sub Form_KeyPress(KeyAscii As Integer)
Sub controle_KeyPress([Index As Integer,]KeyAscii As
Integer)
Comentários O eventos KeyPress tem os seguintes argumentos:

Argument Descrição

Índex Identifica um controle quando este for parte de um


array de controles.
KeyAscii Retorna o código ANSI associado `a tecla
pressionada. KeyAscii é passado por referência;
mudá-lo mudará também o caractere enviado ao
objeto.

O objeto que recebe o evento KeyPress é aquele com o


foco.
O argumento KeyAscii pode ser convertido para um
caractere usando-se a expressão Chr(KeyAscii).

LinkClose

Aplicação Form, MDI Form, label, picture box, text box.


Descrição Ocorre quando uma conversação DDE termina.
Sintaxe Sub {Form|MDIForm}_LinkClose()
Sub controle_LinkClose(Index As Integer)
Comentários O argumento Index identifica um controle unicamente se
este for parte de um array de controles.

LinkError

Aplicação Form, MDI Form, label, picture box, text box.


Descrição Ocorre quando há um erro durante uma conversação DDE.
O código do erro é passado como um argumento.
Sintaxe Sub {Form|MDIForm}_LinkError(LinkErr As Integer)
Sub controle_LinkError ([Index As Integer,]LinkErr As
Integer)
Comentários O argumento Index identifica um controle unicamente se
este for parte de um array de controles. LinkErr é o número
do erro, de acordo com a tabela abaixo.

Nº do Descrição
1 O outro aplicativo requisitou dados em um formato
errado.
6 O aplicativo de destino tentou continuar uma operação
DDE após a propriedade LinkMode do formulário
source ter sido igualado a zero.
7 Todas as source links estão sendo usadas.
8 O método LinkRequest falhou em atualizar os dados no
controle.

LinkError

Aplicação Form, MDI Form.


Descrição Ocorre quando um string de comando é enviado pelo
aplicativo destino em uma conversação DDE. O aplicativo
destino espera que o aplicativo fonte execute a operação
especificada pelo string.
Sintaxe Sub {Form|MDIForm}_LinkExecute(StringCmd As String,
Cancel As Integer)
Comentários O evento LikExecute utiliza os seguintes argumentos:

Argument Descrição

StringCmd String de comando enviado pelo aplicativo destino.


Cancel Este argumento informa se o string de comando foi
aceito ou recusado. Cancel = 0 significa aceitação,
enquanto Cancel = 1 significa rejeição.

LinkNotify

Aplicação Label, picture box, text box.


Descrição Ocorre quando a fonte mudou os dados definidos em um
laço DDE, se a propriedade LinkMode do controle destino
for igual a 3 (Notify).
Sintaxe Sub controle_LinkNotify (Index As Integer)
Comentários O argumento Index identifica um controle unicamente se
este for parte de um array de controles.

LinkOpen

Aplicação Form, MDI Form, label, picture box, text box.


Descrição Ocorre quando um conversação DDE está sendo iniciada.
Sintaxe Sub {Form|MDIForm}_LinkOpen(Cancel As Integer)
Sub controle_LinkOpen ([Index As Integer,]Cancel As
Integer)
Comentários O evento LinkOpen utiliza os seguintes argumentos:

Argument Descrição

Index Unicamente identifica um controle se este faz parte de


um array de controles.
Cancel Quando o evento LinkOpen acaba, o valor deste
argumento determina se a conversação DDE foi
estabelecida ou não. Deixando Cancel = 0 a
conversação é estabelecida.

Load

Aplicação Form, MDI Form.


Descrição Ocorre quando um formulário é carregado.
Sintaxe Sub Form_Load()
Sub MDIForm_Load()

LostFocus

Aplicação Form, check box, combo box, command button, directory


list box, drive list box, file list box, grid, horizontal scroll bar,
list box, OLE, option button, picture box, text box, vertical
scroll bar.
Descrição Ocorre quando um objeto perde o foco, seja pela ação do
usuário ou usando-se o método SetFocus no código.
Sintaxe Sub Form_LostFocus()
Sub controle_ LostFocus([Índex As Integer])
Comentários O argumento Index identifica um controle unicamente se
este for parte de um array de controles.

MouseDown, MouseUp

Aplicação Form (não MDI), check box, command button, data control,
directory list box, file list box, frame, grid, image, label, list
box, option box, OLE, picture box, text box.
Descrição Ocorre quando o usuário pressiona (MouseDown) ou libera
(MouseUp) um botão de mouse.
Sintaxe
Sub Form_MouseDown (Button As Integer, Shift As
Integer, X As Single, Y As Single)
Sub controle_MouseDown ([Index As Integer,]Button As
Integer, Shift As Integer, X As Single, Y As Single)
Sub Form_MouseUp (Button As Integer, Shift As Integer,
X As Single, Y As Single)
Sub controle_MouseUp ([Index As Integer,]Button As
Integer, Shift As Integer, X As Single, Y As Single)
Comentários Os eventos MouseUp e MouseDown utilizam os seguintes
argumentos.

Argument Descrição

Index Unicamente identifica um controle se este faz parte de


um array de controles.
Button Argumento que identifica qual botão foi pressionado.
Para o botão esquerdo, Button = 1; para o direito,
Button = 2 e para o do meio, Button = 4. Somente um
valor é possível de cada vez.
Shift Estado das teclas Shift (1), Ctrl(2) e Alt(4) durante a
ocorrência do evento. Por exemplo, se Ctrl e Alt
estiverem pressionadas, o valor de Shift será 2+4=6.
X, Y Localização do ponteiro do mouse no momento da
ocorrência do evento. X e Y são expressos em termos
das coordenadas do sistema definidas pelas
propriedades ScaleHeight, ScaleWidth, ScaleLeft e
ScaleTop.

Diferentemente dos eventos Click e DblClick, os eventos


MouseUp e MouseDown identificam os botões que foram
pressionados.

MouseMove

Aplicação Form (não MDI), check box, command button, data control,
directory list box, file list box, frame, grid, image, label, list
box, option box, OLE, picture box, text box.
Descrição Ocorre quando o usuário move o mouse através do objeto.
Sintaxe
Sub Form_MouseMove(Button As Integer, Shift As Integer, X As
Single, Y As Single)
Sub controle_MouseMove ([Index As Integer,]Button As Integer,
Shift As Integer, X As Single, Y As Single)
Comentários O evento MouseMove utiliza os seguintes argumentos:

Argument Descrição

Index Unicamente identifica um controle se este faz parte de


um array de controles.
Button Argumento que identifica qual botão foi pressionado.
Para o botão esquerdo, Button = 1; para o direito,
Button = 2 e para o do meio, Button = 4.
Diferentemente do argumento Button para MouseUp
e MouseDown. Aqui, são permitidos valores múlti-
plos.
Shift Estado das teclas Shift (1), Ctrl(2) e Alt(4) durante a
ocorrência do evento. Por exemplo, se Ctrl e Alt
estiverem pressionadas, o valor de Shift será 2+4=6.
X, Y Localização do ponteiro do mouse no momento da
ocorrência do evento. X e Y são expressos em termos
das coordenadas do sistema definidas pelas
propriedades ScaleHeight, ScaleWidth, ScaleLeft e
ScaleTop.

O evento MouseMove é gerado continuamente enquanto o


ponteiro do mouse se move sobre o objeto.

Paint

Aplicação Form, picture box.


Descrição Ocorre quando uma parte ou o todo de um formuário ou
picture box sofre qualquer modificação de conteúdo.
Sintaxe Sub Form_Paint()
Sub controle_Paint([Index As Integer])
Comentários O argumento Index identifica um controle unicamente se
este for parte de um array de controles.
O evento Paint pode ser utilizado juntamente com métodos
gráficos em aplicativos. Com este evento, porções de
código podem ser escritas para determinar se determinadas
saídas gráficas necessitam ser repintadas.

PathChange

Aplicação File list box.


Descrição Ocorre quando o caminho (path) é alterado quando se
define as propriedades FileName e Path a partir do código.
Sintaxe Sub controle_PathChange([Index As Integer])
Comentários O argumento Index identifica um controle unicamente se
este for parte de um array de controles.

PatternChange

Aplicação File list box.


Descrição Ocorre quando o padrão de arquivos (por exemplo, *.*) é
alterado quando se define as propriedades FileName e
Pattern a partir do código.
Sintaxe Sub controle_PatternChange([Index As Integer])
Comentários O argumento Index identifica um controle unicamente se
este for parte de um array de controles.

QueryUnLoad

Aplicação Form, MDI Form.


Descrição Ocorre antes de um formulário ser descarregada..
Sintaxe Sub Form_QueryUnLoad (Cancel As Integer,
UnLoadMode As Integer)
Sub MDIForm_QueryUnLoad (Cancel As Integer,
UnLoadMode As Integer)
Comentários O evento QueryUnLoad utiliza ose seguintes argumentos:

Argument Descrição

Cancel Definindo este argumento em qualquer valor


diferente de zero evita-se que o evento
QueryUnLoad seja finalizado.
UnLoadMo Indica o motivo de ocorrência do eventos
QueryUnLoad, de acordo com a tabela abaixo.

Valo Descrição

0 O usuário escolheu o comando Close no menu de controle


(Control-box) do formulário
1 O método UnLoad foi usado no código.
2 A seção do Windows está sendo finaliizada.
3 O Gerenciador de Tarefas do Windows está encerrando o
aplicativo.
4 Um formulário, filho de um MDI, está fechando porque o
MDI está fechando.

Utiliza-se o evento QueryUnLoad para verificar se alguma


tarefa foi deixada por finalizar antes do aplicativo ser
fechado.

Resize

Aplicação Form, MDIForm, OLE, picture box.


Descrição Ocorre quando um formuário aparece pela primeira vez ou
quando um controle é redimensionado.
Sintaxe Sub {Form|MDIForm|picturebox}_Resize()
Sub OLE_Resize(nova_altura As Single, nova_largura As
Single)
Comentários O evento Resize pode ser utilizado para redimensionar
controles quando o formulário que os contém for
redimensionado.

Scroll

Aplicação Horizontal scroll bar, vertical scroll bar


Descrição Ocorre quando o usuário aciona barras de rolagem
horizontal ou vertical.
Sintaxe controle_Scroll()

Timer

Aplicação Timer.
Descrição Ocorre quando transcorreu o intervalo de tempo definido
para o Timer.
Sintaxe Sub controle_Timer([Index As Integer])
Comentários O argumento Index identifica um controle unicamente se
este for parte de um array de controles.

Você também pode gostar