1. INICIANDO O VISUAL BASIC ELEMENTOS PRINCIPAIS O Visual

Transcrição

1. INICIANDO O VISUAL BASIC ELEMENTOS PRINCIPAIS O Visual
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 (subrotinas) 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
formulário
Caixa de Texto
Botão de Comando 1
Botão de Comando 1
PROPRIEDADE
Caption (Legenda)
Text (Texto)
Caption (Legenda)
Caption (Legenda)
DEFINIÇÃO
“Bom Dia !”
(Vazio)
OK
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
formulário
Timer1
Image1
Image2
PROPRIEDA
DE
Caption
WindowState
BackColor
ScaleMode
Interval
Name
Picture
Visible
Name
Picture
Visible
Image3
Name
Picture
Visible
Command Name
1
Caption
DEFINIÇÃO
Borboleta
2-Maximized
White
3-Pixel
500 (ms)
imgAbreAsas
BFLY1.BMP
False
imgFechaAsa
s
BFLY2.BMP
False
imgPrincipal
BFLY1.BMP
True
cmdSair
&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
Form
Check Box
Combo Box
Command Button
Data
Directory List Box
Nome em Português
formulário
Caixa de Verificação
Caixa “Combo”
Botão de Comando
Dados
Caixa de Diretório
Prefixo
frm
chk
cbo
cmd
dat
dir
Exemplo
frmAbrir
chkLeitura
cboPortuguês
cmdCancelar
datLivros
dirFontes
Drive List Box
File List Box
Frame
Grid
Horizontal
scroll
bar
Image
Label
Line
List Box
Menu
OLE
Option Button
Picture Box
Shape
Text Box
Timer
Vertical Scroll Bar
Caixa de Drives
Caixa de Arquivos
Quadro
Grade
Barra
de
Rolagem
Horizontal
Imagem
Rótulo
Linha
Caixa de Lista
Menu
OLE
Botão de Opções
Caixa de Figuras
Forma (geométrica)
Caixa de Texto
Temporizador
Barra de Rolagem Vertical
drv
fil
fra
grd
hsb
drvAlvo
filArquivos
fraLíngua
grdPreços
hsbVolume
img
lbl
lin
lst
mnu
ole
opt
pic
sha
txt
tmr
vsb
imgÍcone
lblMensagem
linVertical
lstCEP
mnuSalvar
oleObjeto
optFrancês
picDesenho
shaCírculo
txtEntrada
tmrAlarme
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
formulário
Caixa de Texto
Botão de Comando 1
PROPRIEDADE
WindowState
Name
Text
Multiline
ScrollBars
Name
Caption
DEFINIÇÃO
Maximized
txtBloco
(Vazio)
True
Vertical
cmdCortar
&Cortar
Botão de Comando 2
Botão de Comando 3
Botão de Comando 4
Name
Caption
Name
Caption
Name
Caption
cmdColar
Co&lar
cmdApagar
&Apagar
cmdSair
&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
1
2
4
Significado
“Shift” pressionado
“Ctrl” pressionado
“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
E
Nome
Nome
Legenda
Fonte
formulário
Rótulo
Caixa de Texto
Nome
DEFINIÇÃO
frmAlarme
lblDisplay
(vazio)
MS Sans
negrito
txtAjuste
Tabela 6 (contiuação)
OBJETO
Botão
Opção(0)
Botão
Opção(1)
Timer
PROPRIEDAD
E
de Nome
Índice
de Nome
Índice
Intervalo
DEFINIÇÃO
optOpção
0
optOpção
1
1000
Serif,
24,
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 “dropdown”, 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
Arquivo
--- Abrir
--- Salvar
--- --- Sair
Nome
mnuArquivo
mnuArquivoItem
mnuArquivoItem
mnuArquivoItem
mnuArquivoItem
Índice
0
1
2
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
Arquivo
--- Abrir
mnuArquivo
mnuArquivoIte
m
mnuArquivoIte
m
mnuArquivoIte
m
mnuArquivoIte
m
mnuEditar
--- Salvar
--- --- Sair
Editar
0
Tecla de
Atalho
Ctrl + F12
1
Shitf + F12
2
-
3
Ctrl + Z
-
-
Índice
--- Cortar
--- Colar
--- Apagar
Fontes
--- Courier
--Helvética
--- Roman
--- Modern
--- Script
--- Symbol
--- System
--Terminal
mnuEditarItem
mnuEditarItem
mnuEditarItem
mnuFontes
mnuFontesIte
m
mnuFontesIte
m
mnuFontesIte
m
mnuFontesIte
m
mnuFontesIte
m
mnuFontesIte
m
mnuFontesIte
m
mnuFontesIte
m
0
1
2
0
Ctrl + X
Ctrl + V
Ctrl + P
-
1
-
2
-
3
-
4
-
5
-
6
-
7
-
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
Path
File1
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
selecionado para o "ClipBoard.
txtEditor.SelText = "" ' Apaga o texto selecionado.
Case 1 ' Copiar
Clipboard.Clear
o
texto
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
numérica válida em radianos.
qualquer
expressão
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
nome_da_variável [([índices])] [As [New]] ...
Comentários
O comando Dim tem as seguintes partes:
[New]
tipo][,
Parte
Descrição
Nome_da_variáv Nome da variável a ser declarada.
Índices
As tipo
New
Exemplo
Dimensões de variáveis do tipo array, quando
for o caso.
Palavra reservada para indicar o tipo de
variável a ser declarada: Integer, Long,
Single, Double. Currency, String ou Variant.
Cria um novo “instance” de um objeto. Somente
aplicável a variáveis-objeto.
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
r
0
Arquivos normais
2
Arquivos
escondidos
4
Arquivos
de
sistema
8
Rótulo do volume
16
Diretório
Constante
Simbólica
ATTR_NORMAL
ATTR_HIDDEN
ATTR_SYSTEM
ATTR_VOLUME
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
“D:\VBJUNK.BAK”
“C:\FOBOS\VBJUNK.DOC”,
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
[(lista_de_argumentos)] [As tipo]
nome_da_função
[bloco de comandos]
[nome_da_função=expressão]
End Function
Comentários
O comando Function tem as seguintes partes:
Parte
Static
Descrição
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
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.
do
Sintaxe
Get
[#]
número_do_arquivo,[número_do_registro],
nome_da_variável
Comentários
O comando Get tem as seguintes partes:
Parte
Número_do_arqui
vo
Número_do_regist
ro
Descrição
Número usado no comando Open para abrir o
arquivo.
Para arquivos abertos no modo Random, este
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
1
LBound (M, 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
Sintaxe do Comando
Comentários
MsgBox(msg[,[tipo][título]])
MsgBox msg[,[tipo][,título]]
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
MB_OK
MB_OKCANCEL
MB_ABORTRETRYIGN
ORE
MB_YESNOCANCEL
MB_YESNO
MB_RETRYCANCEL
MB_ICONSTOP
MB_ICONQUESTION
MB_ICONEXCLAMATIO
N
MB_ICONINFORMATIO
N
MB_DEFBUTTON1
MB_DEFBUTTON2
r
0
1
2
4
5
16
32
48
Mostra apenas o botão OK.
Mostra os botões OK e Cancel.
Mostra os botões Abort, Retry e
Ignore.
Mostra os botões Yes, No e
Cancel.
Mostra os botões Yes e No.
Mostra os botões Retry e Cancel.
Mostra o ícone “Stop”.
Mostra o ícone “Interrogação” (?).
Mostra o Ícone “Exclamação” (!).
64
Mostra o ícone “Informação” (i).
3
Botões default
0
O primeiro botão é o default.
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
simbólica
IDOK
IDCANCEL
IDABORT
IDRETRY
IDYES
IDNO
Exemplo
Valo
r
1
2
3
4
6
7
Significado
OK foi pressionado
Cancel foi pressionado
Abort foi pressionado
Retry foi pressionado
Yes foi pressionado
No foi pressionado
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”
\DEIMOS\VBJUNK.DOC”
As
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
[#]nº_do_arquivo [Len= comprimento]
acesso][lock]
As
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
Arquivo
Modo
Descrição
Nome do arquivo.
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
registro. Para arquivos sequenciais, significa o
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
Random
Binary
Input
Output
Append
Descrição
Arquivos de acesso aleatório (default)
Arquivos binários
Arquivos sequenciais para entrada
(leitura)
Arquivos sequenciais para saída
(gravação)
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)
Tab(n)
Lista_de_express
Parte
{;|,}
Função do Visual Basic usada
opcionalmemente para inserir n espaços. O
uso múltiplo é permitido.
Função
do
Visual
Basic
usada
opcionalmemente para deslocar para a coluna
n antes da saída ser gravada. O uso múltiplo
é permitido.
Expressões numéricas ou string, separadas
por vírgulas, a serem escritas no arquivo.
Descrição
Caractere que determina a posição do
próximo caractere a ser gravado. Ponto-eví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
Sintaxe
Comentários
Grava uma variável em um arquivo em disco.
Put[#]número_do_arquivo,[número_do_registro],nome_da_
variável.
O comando Put tem as seguintes partes:
Parte
Número_do_arqui
vo
Número_do_regist
ro
Descrição
Número usado no comando Open para abrir o
arquivo.
Para arquivos abertos como Random, é o
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áveisl
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
o
0
1
2
3
4
5
6
7
Cor
Preto
Azul
Verde
Ciano
Vermelh
o
Magenta
Amarelo
Branco
Número Cor
8
9
10
11
12
13
14
15
Cinza
Azul Claro
Verde Claro
Ciano Claro
Vermelho
Claro
Magenta Claro
Amarelo Claro
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
Preserve
Descrição
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
tratamento de erros.
Sintaxe
Resume {[0]|Next|linha}
após o término de uma rotina de
As várias formas do comando Resume estão descritas na
tabela a seguir.
Comentários
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
Vermelh
o
Verde
Azul
Descrição
Inteiro na faixa 0 a 255, inclusive, que representa a
componente vermelha da cor.
Inteiro na faixa 0 a 255, inclusive, que representa a
componente verde da cor.
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
Preto
Azul
Verde
Ciano
Valor
Vermelh Verde
RGB
o
&H00
0
0
&HFF0000
0
0
&HFF00
0
255
&HFFFF0
0
255
Azul
0
255
0
255
0
Vermelh &HFF
o
Magenta &HFF00F
F
Amarelo &HFFFF
Branco
&HFFFFF
F
255
0
0
255
0
255
255
255
255
255
0
255
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
Figura
Descrição
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
“C:\FIGURA.BMP”
frmFigura.picFig.Picture,
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
Número_do_arq
Descrição
Número usado no comando Open para abrir o
uivo
Posição
arquivo.
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
Select Case
Expressão_teste
Case
Lista_de_express
ões
Bloco_de_coman
dos
Case Else
Descrição
Começo da estrutura de decisões (obrigatório)
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á executado. 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.
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ões separadas por vírgulas em
uma das seguintes formas:
Expressão
Expressão To Expressão
Is operador-de-comparação Expressão
Lista de comandos em Visual Basic.
Palavra-chave que indica o bloco de comandos
End Select
Exemplo
que será executado quando Expressão_teste
não se adequar a nenhuma das cláusulas
Case.
Finalização do bloco Select Case (obrigatório)
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
de um arquivo, podendo incluir informações
ivo
adicionais sobre o drive e o caminho.
Atributos
A soma de qualquer um dos seguintes valores
que caracterizam os atributos de um arquivo:
Const
Simbólica
ATTR_NORMAL
ATTR_READON
LY
ATTR_HIDDEN
ATTR_SYSTEM
ATTR_ARCHIVE
Valor
0
1
2
4
32
Significado
Arquivo normal
Arquivo somente para
leitura
Arquivo escondido
Arquivo do sistema
Arquivo foi modificado
desde o último backup
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
1, 5, 9
2
3
4, 8
6, 7
Tipo da Janela
Normal com foco
Minimizada
com
foco
(default)
Maximizada com foco
Normal sem foco
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
As tipo
New
Exemplo
Dimensões de variáveis do tipo array, quando
for o caso.
Palavra reservada para indicar o tipo de
variável a ser declarada: Integer, Long,
Single, Double. Currency, String ou Variant.
Cria um novo “instance” de um objeto. Somente
aplicável a variáveis-objeto.
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
[(lista_de_argumentos)] [As tipo]
[bloco de comandos]
[Exit Sub]
[bloco de comandos]
End Sub
Comentários
O comando Sub tem as seguintes partes:
nome_da_procedure
Parte
Static
Descrição
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:
tipo]...
[ByVal]variável[()][As
A
tabela
a
seguir
Lista_de_argumentos:
tipo][,
descreve
[ByVal]variável[()][As
as
partes
de
Parte
ByVal
Variável
As tipo
Descrição
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.
Nome da variável que é passada como
parâmetro.
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
numérica válida.
Time, Time$. (Funções)
Descrição
Retorna a hora atual do sistema.
Sintaxe
Time[$][()]
qualquer
expressão
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
hh
Descrição
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
Nome_do_tipo
End Type
Dimensões de elementos de arrays, quando for
o caso.
Um dos seguintes tipos: Integer, Long, Single,
Double, Currency, String ou Variant.
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
4
UBound (M, 3)
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
While
Condição
Bloco_de_coman
Wend
Descrição
Marca o começo do laço While...Wend
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.
Qualque número de comandos em Visual
Basic.
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
Número_do_aqrq
Descrição
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 tornase 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
KeyCode
Shift
Identifica um controle quando este for parte de um
array de controles.
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.
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
KeyAscii
Identifica um controle quando este for parte de um
array de controles.
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
6
7
8
O outro aplicativo requisitou dados em um formato
errado.
O aplicativo de destino tentou continuar uma operação
DDE após a propriedade LinkMode do formulário
source ter sido igualado a zero.
Todas as source links estão sendo usadas.
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
Cancel
String de comando enviado pelo aplicativo destino.
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
Cancel
Unicamente identifica um controle se este faz parte de
um array de controles.
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
Button
Shift
X, Y
Unicamente identifica um controle se este faz parte de
um array de controles.
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.
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.
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
Button
Unicamente identifica um controle se este faz parte de
um array de controles.
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.
Shift
X, Y
Diferentemente do argumento Button para MouseUp
e MouseDown. Aqui, são permitidos valores múltiplos.
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.
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
UnLoadMode As Integer)
(Cancel
Sub MDIForm_QueryUnLoad
UnLoadMode As Integer)
Comentários
(Cancel
As
As
Integer,
Integer,
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.
Indica o motivo de ocorrência do eventos
QueryUnLoad, de acordo com a tabela abaixo.
UnLoadMo
Valo Descrição
0
1
2
3
4
O usuário escolheu o comando Close no menu de controle
(Control-box) do formulário
O método UnLoad foi usado no código.
A seção do Windows está sendo finaliizada.
O Gerenciador de Tarefas do Windows está encerrando o
aplicativo.
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.