Microsoft Visual Basic
Escola Secundária de Emídio Navarro 2001/2002
Estruturas, Tratamento e Organização de Dados
Pág. 1 de 70
Microsoft Visual Basic
Escola Secundária de Emídio Navarro 2001/2002
Estruturas, Tratamento e Organização de Dados
No final da unidade, o aluno deve ser capaz de:
9
Dominar o ambiente de desenvolvimento do Visual Basic;
9
Conhecer os conceitos fundamentais inerentes ao Visual Basic e linguagens do mesmo tipo:
objecto, propriedade, evento e método;
9
Conhecer os conceitos específicos do Visual Basic: Projecto, Formulário (form) e Módulo;
9
Aplicar os conceitos anteriores no desenvolvimento de aplicações;
9
Identificar e utilizar as ferramentas/controlos utilizados no desenho do interface de uma aplicação
VB;
9
Reconhecer o objectivo das propriedades fundamentais dos controlos;
9
Conhecer, caracterizar e associar aos objectos respectivos os eventos mais comuns;
9
Dominar a sintaxe e estruturas básicas da linguagem utilizada neste ambiente;
9
Utilizar o conjunto limitado de ferramentas para desenho gráfico em run time;
9
Conhecer as instruções e respectiva "filosofia" associadas ao tratamento de erros;
9
Utilizar o Visual Basic em ligação a SGBDs por forma a manipular Bases de Dados.
Objectivos gerais
9
Conhecer uma linguagem / ambiente de desenvolvimento de aplicações com grandes capacidades,
nomeadamente gráficas;
9
Construir aplicações eficientes tirando o máximo partido dos recursos disponibilizados pelos novos
ambientes/sistemas operativos.
Para iniciar esta unidade, é imprescindível que o aluno:
9 Tenha os conhecimentos básicos de algoritmia;
9 Conheça o ambiente Windows;
9 Tenha experiência prévia de uma outra linguagem de programação, por exemplo, Pascal;
9 Tenha disponível um computador com uma versão de Visual Basic instalada;
9 Domine minimamente o ambiente de desenvolvimento, isto é, deve ser capaz de: abrir o Visual
Basic e reconhecer o modo de funcionamento e operações de edição.
Pág. 2 de 70
Microsoft Visual Basic
Escola Secundária de Emídio Navarro 2001/2002
Estruturas, Tratamento e Organização de Dados
Estratégias para a superação de dificuldades
9
No caso de não possuir os conhecimentos necessários de algoritmia, deve concentrar o seu estudo
na unidade respectiva, pois estes são determinantes no sucesso de toda aprendizagem da
programação de computadores;
9
Dominar o ambiente do Visual Basic não apresenta normalmente dificuldades no entanto, para
resolver problemas pontuais, pode recorrer ao manual que acompanha a linguagem ou às ajudas
"on-line" (Help);
9
Senão possuir experiência numa outra linguagem de programação, é aconselhável que comece o
seu estudo por uma linguagem mais simples, por exemplo, o Pascal.
Pág. 3 de 70
Microsoft Visual Basic
Escola Secundária de Emídio Navarro 2001/2002
Estruturas, Tratamento e Organização de Dados
CONTEÚDOS
1. Introdução ............................................................................................................................................
7
2. Ambiente de desenvolvimento .............................................................................................................
9
2.1. Janela de menus e barra de ferramentas
2.2. Caixa de ferramentas
3. Conceitos básicos do Visual Basic ....................................................................................................... 11
3.1. Projecto
3.2. Forms (Formulários)
3.3. Controlos
3.4. Propriedades
3.5. Eventos
3.6. Módulos
4. Fundamentos de programação ............................................................................................................. 15
4.1. Declaração de variáveis
4.2. Tipos de dados
4.2.1.
Tipo de dados string
4.2.2.
Tipo de dados lógico
4.2.3.
Tipo de dados object
4.2.4.
Funções de conversão entre tipos de dados
4.3. Arrays (vectores e matrizes)
4.3.1.
Arrays multidimensionais
4.3.2.
Arrays dinâmicos
4.3.2.1.
Manter o conteúdo de um array dinâmico
4.4. Declaração de constantes
4.5. Criação de tipos de dados definidos pelo utilizador
4.6. Âmbito das variáveis
4.6.1.
Variáveis usadas em procedimentos (subrotinas ou funções)
4.6.2.
Variáveis usadas em módulos
4.7. Operadores
4.7.1.
Operadores de atribuição
4.7.2.
Operadores aritméticos
4.7.3.
Operador de concatenação de strings
4.7.4.
Operador de comparação
Pág. 4 de 70
Microsoft Visual Basic
Escola Secundária de Emídio Navarro 2001/2002
Estruturas, Tratamento e Organização de Dados
4.7.5.
Operadores lógicos
4.7.6.
Precedência dos operadores aritméticos
4.8. Algumas instruções e funções nativas do Visual Basic
4.8.1.
Instruções
4.8.2.
Funções
4.8.3.
Métodos
4.9. Estruturas de controlo
4.9.1.
Estruturas de decisão
4.9.1.1.
If... Then...
4.9.1.2.
If... Then... Else...
4.9.1.3.
Select… Case…
4.9.2.
Ciclos (estruturas de controlo repetitivas)
4.9.2.1.
For... Next...
4.9.2.2.
Do... Loop...
4.10.
Procedimentos (subrotinas e funções)
4.10.1. Passagem de parâmetros por referencia
4.10.2. Passagem por valor
4.10.3. Procedimentos com variáveis declaradas com Static
4.10.4. Objectos como parâmetros
5. Introdução aos objectos ........................................................................................................................ 39
5.1. O que é um objecto
5.1.1.
Form
5.1.2.
Controlos
5.1.2.1.
PictureBox e Image
5.1.2.2.
Label
5.1.2.3.
TextBox
5.1.2.4.
CommandButton, CheckBox, OptionButton
5.1.2.5.
Frame
5.1.2.6.
ListBox
5.1.2.7.
ComboBox
5.1.2.8.
HScrolIBar e VscrollBar
5.1.2.9.
Timer
5.1.2.10.
Line e Shape
5.1.2.11.
DriveListBox, DirListBox e FileListBox
6. Menus ................................................................................................................................................... 54
6.1. Criação de um menu em tempo de desenvolvimento
Pág. 5 de 70
Microsoft Visual Basic
Escola Secundária de Emídio Navarro 2001/2002
Estruturas, Tratamento e Organização de Dados
6.2. Menus Pop-Up
7. Eventos do rato ....................................................................................................................................
57
7.1. MouseDown, MouseUp e MouseMove
7.2. Drag & Drop (arrastar e soltar)
8. Tratamento de erros ............................................................................................................................
58
9. Ficheiros ..............................................................................................................................................
60
9.1. Ficheiros sequenciais
9.1.1.
Abertura de um ficheiro sequencial
9.1.2.
Fechar um ficheiro
9.1.3.
Leitura em ficheiros sequenciais
9.1.4.
Escrita para um ficheiro sequencial
9.1.5.
Leitura de um ficheiro como uma sequência de bytes
10. Ficheiros de acesso aleatório ..............................................................................................................
10.1.
Abertura de um ficheiro aleatório
10.2.
Leitura e escrita para ficheiros de acesso aleatório
63
11. Métodos gráficos .................................................................................................................................. 65
11.1.
Evento Paint e propriedade AutoRedraw
11.2.
Coordenadas
11.3.
Método Scale
11.4.
Método Point
11.5.
Método Pset
11.6.
Método Line
12. Objecto Printer ....................................................................................................................................
67
13. Bases de dados ..................................................................................................................................
68
13.1.
Controlo Data
13.2.
Propriedades BOF e EOF
Pág. 6 de 70
Microsoft Visual Basic
Escola Secundária de Emídio Navarro 2001/2002
Estruturas, Tratamento e Organização de Dados
1. Introdução ao Visual Basic
O Visual Basic é uma linguagem de programação adequada aos sistemas operativos com elevadas
potencialidades gráficas da Microsoft (Windows 3.x, Windows 9x/ME e Windows NT/2000/XP), permitindo o
desenvolvimento de aplicações 16 bits e 32 bits, conforme a plataforma de desenvolvimento escolhida.
Estes
ambientes,
requerem
aplicações
estruturalmente
diferentes
das
desenvolvidas
"tradicionalmente" e que, consequentemente, apresentam diferenças a vários níveis.
Aplicações orientadas a eventos
Ao contrário das aplicações "procedurais" (tradicionais), em que o fluxo da aplicação segue por um
caminho definido, executando procedimentos de acordo com as necessidades, as aplicações orientadas a
eventos (aplicações do Visual Basic), executam porções de código de acordo com eventos produzidos pelo
utilizador ou pelo sistema. Logo, a ordem de execução do código depende dos eventos produzidos, que, por
sua vez, dependem do que o utilizador faz. Como não se pode prever o que o utilizador irá fazer, o código
deverá considerar todas as situações, ou quando não o fizer, deverá pelo menos indisponibilizar as
operações susceptíveis de colidirem com a normal execução do programa. Por exemplo, não permitir que o
utilizador entre numa determinada opção do menu ou pressione determinado botão, quando a execução
dessas tarefas não faz sentido ou provoca erro.
Janelas múltiplas
Uma aplicação com alguma complexidade em Visual Basic utiliza várias janelas interdependentes.
Ora, isto traz implicações ao nível do desenvolvimento (estruturação da aplicação) e posterior controle da
execução da aplicação
Construção do interface com recurso a ferramentas de elevadas potencialidades gráficas
A construção do interface de uma aplicação Visual Basic consiste em incorporar os controlos
gráficos disponibilizados e configurá-los de acordo com as nossas necessidades. Logo, a forma de
construção do interface com o utilizador é facilitada aumentando a qualidade e produtividade no
desenvolvimento da aplicação.
Para além do anteriormente exposto, as aplicações desenvolvidas em Visual Basic apresentam
outras características, como sejam:
9
utilizam os recursos do ambiente (impressoras, tipos de letra, etc.);
9
incluem potencialidades de interligação a SGBDs (Sistemas Gestores de Bases de Dados)
permitindo o acesso a dados em formatos específicos (por exemplo: Access, Dbase, FoxPro, etc.);
9
permitem a partilha de dados entre aplicações.
Pág. 7 de 70
Microsoft Visual Basic
Escola Secundária de Emídio Navarro 2001/2002
Estruturas, Tratamento e Organização de Dados
Resumindo: a utilização deste tipo linguagens trouxe um enorme acrescento em termos de produtividade e
qualidade do produto desenvolvido, provocando, simultaneamente, um corte radical com a
estrutura clássica de uma aplicação.
Pág. 8 de 70
Microsoft Visual Basic
Escola Secundária de Emídio Navarro 2001/2002
Estruturas, Tratamento e Organização de Dados
2. Ambiente de desenvolvimento
O ambiente de desenvolvimento do Visual Basic é constituído por várias janelas que, em
determinado momento, podem ou não ser visíveis. As janelas principais são: dos menus e da barra de
ferramentas, da caixa de ferramentas (ToolBox), do projecto corrente e das propriedades do objecto
corrente.
Caixa de
Ferramentas
Menu e barra de
ferramentas
Form
Projecto
Propriedades
Fig. 1 - Ambiente de desenvolvimento do Visual Basic
Pág. 9 de 70
Microsoft Visual Basic
Escola Secundária de Emídio Navarro 2001/2002
Estruturas, Tratamento e Organização de Dados
2.1. A janela dos menus e barra de ferramentas (ToolBar)
A janela dos menus e barra de ferramentas (Fig. 1) permite efectuar, entre outras, as seguintes
operações:
9
Criar/guardar ficheiros e impressão (File);
9
Editar (Edit);
9
Visualizar ou não componentes do ambiente de desenvolvimento (View);
9
Inserir componentes ao projecto (Project);
9
Compilar, depurar e executar (Run);
9
Seleccionar ferramentas, configurar opções e invocar o editor de menus (Tools);
9
Abrir programas externos, nomeadamente para gerir bases de dados e relatórios (Add-Ins);
9
Utilizar a ajuda (Help).
2.2. Caixa de ferramentas (ToolBox)
O Visual Basic contem ferramentas que são usadas para desenhar controlos nos forms. Cada
ferramenta da ToolBox representa um controlo:
Apontador do rato (Pointer)
Etiqueta (Label)
Moldura (Frame)
Caixa de Verificação (CheckBox)
Caixa Combinada (ComboBox)
Barra de Deslocamento Horizontal (HScrollBar)
Temporizador (Timer)
Caixa de Lista de Directorias (DirListBox)
Caixa de Imagem (PictureBox)
Caixa de Texto (TextBox)
Botão de Comando (CommandButton)
Botão de Opção (OptionButton)
Caixa de Lista (ListBox)
Barra de Deslocamento Vertical (VScrollBar)
Caixa de lista de unidades (DriveListBox)
Caixa de Lista de Ficheiros (FileListBox)
Formas (Shape)
Linha (Line)
Imagem (Image)
Ligação a Base de Dados (Data)
OLE
Fig. 2 – Barra de ferramentas (ToolBox)
Pág. 10 de 70
Microsoft Visual Basic
Escola Secundária de Emídio Navarro 2001/2002
Estruturas, Tratamento e Organização de Dados
3. Conceitos básicos do Visual Basic
A programação em Visual Basic assenta em alguns conceitos fundamentais, que devem ser
entendidos, para que se possa ter sucesso na utilização desta ferramenta de desenvolvimento. Os
conceitos fundamentais do VB são: projecto, form, controlo módulo, objecto, propriedade, evento e método.
3.1. Projecto (Project) - *.vbp
Um projecto é um conjunto de forms e módulos que constituem a aplicação. A janela do projecto
(ver Fig. 1) lista todos os ficheiros (forms e módulos) que constituem a aplicação.
Para além dos módulos standard, os projectos podem ainda incluir módulos do tipo class e ficheiros
do tipo resource. Dada a relativa complexidade e especificidade dos módulos do tipo class e dos ficheiros
do tipo resource, a sua utilização não será abordada neste manual.
De notar que: o ficheiro do projecto contêm apenas os nomes dos ficheiros dos diversos
componentes que constituem a aplicação, e não a aplicação propriamente dita.
3.2. Forms (Formulários) - *.frm
Durante o desenvolvimento de uma aplicação em Visual Basic, às várias janelas (windows) que
constituem a aplicação damos o nome de forms.
Nos forms (formulários), iremos incluir os controlos que vão permitir implementar as funcionalidades
requeridas. Por exemplo: etiqueta (controlo destinado a mostrar texto), caixa de texto (controlo destinado à
introdução de texto), botões de comando, etc.
Exemplo:
Form
Controlo do tipo TextBox
Controlos do tipo CommandButton
Pág. 11 de 70
Microsoft Visual Basic
Escola Secundária de Emídio Navarro 2001/2002
Estruturas, Tratamento e Organização de Dados
Fig. 3 - Form de uma aplicação Visual Basic para a implementação de uma calculadora
Um form inclui, para além das suas componentes visuais (controlos que permitem construir o
interface), o código que lhe está associado. É possível visualizar a programação escolhendo a opção View
Code na janela do projecto. (Existem outras formas de visualizar o código associado ao form sendo esta
apenas uma das possíveis.)
3.3. Controlos
Os controlos podem ser incorporados nos forms mediante a selecção das ferramentas respectivas,
disponíveis na barra de ferramentas (Fig. 2).
Os controlos para além de conferirem às aplicações desenvolvidas em Visual Basic um grande
apelo visual, aumentam também a produtividade, pois permitem um desenho simplificado do interface da
aplicação).
3.4. Propriedades
Todos os controlos e mesmo os forms possuem características, por exemplo, largura e altura,
nome, cor, etc. A estas características dá-se o nome de propriedades.
Em tempo de desenvolvimento (quando se procede ao desenho dos forms, elaboração dos
programas, etc.), definimos os valores iniciais das propriedades, quer como consequência das operações
de desenho (por exemplo, quando arrastamos uma caixa de texto para uma determinada posição com o
rato, alteramos as suas propriedades Left e Top), quer através da alteração directa dos valores das
propriedades na janela respectiva.
Em termos de execução, os valores iniciais das propriedades podem geralmente ser alterados
através de instruções. No entanto, existem propriedades cujo valor não pode ser alterado em tempo de
execução. Por exemplo, o nome de um form (propriedade Name) não pode ser alterado durante a execução
do programa.
Existem também propriedades cujo valor só pode ser alterado em tempo de execução.
A alteração do valor de uma propriedade, em tempo de execução, é feita utilizando a seguinte
sintaxe:
ob jec to.p rop riedade=valo r
em que:
9
ob jec to é o nome do controlo ou form respectivo;
Pág. 12 de 70
Microsoft Visual Basic
Escola Secundária de Emídio Navarro 2001/2002
Estruturas, Tratamento e Organização de Dados
9
p rop r ied a de é o nome da propriedade a alterar;
9
= é o operador de atribuição;
9
v alo r é o valor a atribuir à propriedade.
3.5. Eventos
O interface com o utilizador numa aplicação Visual Basic é constituída por objectos: forms e
controlos que são usados para os utilizadores visualizarem e introduzirem informação. Cada um destes
objectos, dependendo do seu tipo, reconhece acções desencadeadas pelo utilizador ou pelo decurso da
própria aplicação. Por exemplo, acções do utilizador como: clicar num botão, abrir um form, digitar o
conteúdo de um campo, são reconhecidas pelos objectos respectivos. A estas acções dá-se o nome de
eventos.
Quando um evento ocorre, é executado o código escrito pelo programador na subrotina associada a
esse evento. Por exemplo: quando o botão de comando (Command1) recebe um clique do rato é executado
o código incluído na subrotina que lhe está associada (Private Sub Command1 Click()). A este tipo de
subrotinas, dá-se o nome de event procedures.
Exemplo:
Private Sub Command1_Click ()
P r in t “O lá M un do ”
En d Sub
Quando o botão de comando Command1 é “clicado”, é executado o código da subrotina
Command1_Click () que está associado a este evento.
O nome de uma event procedure é constituído pelo nome do objecto (nome do form ou do controlo),
seguido de _ e do nome do evento. Alguns eventos passam parâmetros para a procedure.
Todas as vezes que um dado evento é desencadeado, o código que lhe está associado é
executado. Por exemplo, o código associado ao evento Click de um botão, é executado sempre que o
objecto sofre esse evento.
Só é necessário escrever código para os eventos que desejamos controlar.
Pág. 13 de 70
Microsoft Visual Basic
Escola Secundária de Emídio Navarro 2001/2002
Estruturas, Tratamento e Organização de Dados
3.6. Módulos - *.bas
Os módulos são conjuntos de procedimentos. Os procedimentos servem para dividir tarefas
complexas, em tarefas mais simples, por forma a que o código fique claro e eficiente.
Um procedimento (subrotina ou função) pode ser invocada para executar uma tarefa específica, a
partir de um form ou de outro procedimento (do mesmo módulo ou de módulos diferentes).
A separação dos procedimentos de uma aplicação por módulos distintos destina-se, normalmente,
a agrupar os procedimentos por função. Por exemplo: agrupar os procedimentos de desenho num módulo,
os procedimentos de validação de dados noutro, etc.
Resumindo: O desenvolvimento de uma aplicação em Visual Basic consiste pois: no desenho dos forms,
ajuste das propriedades dos forms e dos controlos neles incluídos e na elaboração do código
(de acordo com as acções que a aplicação terá que tomar, mediante os eventos a controlar).
Para que a programação seja clara, eficiente e estruturada convém que se utilizem
subrotinas e funções, sempre que tal se justifique. As subrotinas e funções devem ser incluídas
em módulos
Pág. 14 de 70
Microsoft Visual Basic
Escola Secundária de Emídio Navarro 2001/2002
Estruturas, Tratamento e Organização de Dados
4. Fundamentos de Programação
4.1. Declaração de variáveis
O Visual Basic, ao contrário de outras linguagens (por exemplo, o Pascal), não obriga à declaração
prévia e explicita das variáveis usadas. No entanto, e dependendo da situação essa declaração é mais ou
menos importante, para além de ser boa prática de programação.
A instruçao adequada à declaração de uma variável é a instrução Dim, seguindo-se o nome da
variável e o tipo de dados que a variável irá conter:
Dim <nome> [A s <tipo>]
O nome da variável tem de obrigatoriamente:
9
começar por uma letra;
9
não pode ter pontos ou caracter de declaração de tipo de dados ($,%,etc.);
9
não exceder os 255 caracteres;
9
tem de ser único.
O caracter de declaração de tipo de dados aparece nas versões recentes do Visual Basic, como forma
de assegurar a compatibilidade com versões anteriores.
Embora seja possível utilizar caracteres acentuados no nome de variáveis, tal não se recomenda, pois
existem situações em que a utilização desses caracteres levanta problemas.
9
nome da variável tem de ser único para variáveis diferentes com o mesmo âmbito. Se as variáveis
tiverem âmbitos diferentes, podem existir variáveis diferentes com o mesmo nome.
Pág. 15 de 70
Microsoft Visual Basic
Escola Secundária de Emídio Navarro 2001/2002
Estruturas, Tratamento e Organização de Dados
4.2. Tipos de Dados
Nome do Tipo
Espaço de Armazenamento
Gama de Valores
Integer (inteiro)
2 bytes
-32 768 a 32 767
Long (inteiro longo)
4 bytes
-2 147 483 648 a 2 147 483 647
Single (vírgula flutuante
precisão simples)
4 bytes
-3,402823E38 a –1,401298E-45 (negativos) e
1,401298E-45 a 3,402823E38 (positivos)
Double (vírgula flutuante
precisão dupla)
8 bytes
-1,79769313486232E308 a
–4,94065645841247E-324 (negativos) e
4,94065645841247E-324 a
1,79769313486232E308 (positivos)
Currency (moeda)
8 bytes
-922 337 203 658 477,5808 a
922 337 203 658 477,5807
String (cadeia de caracteres)
1 byte por caracter
0 a aproximadamente 65 400 caracteres
(0 a 2E32, em sistemas de 32 bits)
Byte
1 byte
0 a 255
Boolean (lógico)
2 bytes
True e False
Date (data)
8 bytes
1/Jan/100 a 31/Dez/1999 ????
Object (objecto)
4 bytes
Qualquer referência a um objecto
Variant (variante)
16 bytes + 1 byte por cada caracter
Null, Error, qualquer valor numérico até à gama de
um Double, qualquer caracter de texto, objecto, ou
array
Exemplo:
Dim num As Integer
Declara a variável num do tipo inteiro.
Pág. 16 de 70
Microsoft Visual Basic
Escola Secundária de Emídio Navarro 2001/2002
Estruturas, Tratamento e Organização de Dados
Para variáveis numéricas, a escolha do tipo de dados adequado à variável deve ter em conta o
intervalo de valores que o tipo suporta. Se for atribuído à variável um valor fora da gama de valores
permitida para o tipo escolhido, podemos obter resultados inesperados.
Como já se disse, a declaração das variáveis e do respectivo tipo não é obrigatória. No entanto, se
a declaração não for explicita podemos obter igualmente resultados inesperados.
Para obrigar a que num determinado form ou módulo as declarações de variáveis tenham de ser
feitas de uma forma explicita, coloca-se a instrução Option Explicit na secção de declarações respectiva.
4.2.1. Tipo de dados String
Para o tipo de dados String podemos ainda definir um comprimento fixo, da forma:
S t r in g* < t am a n ho >
Exemplo:
D i m n o m e A s S tr i n g* 4 0
Declara a string de comprimento fixo nome com 40 caracteres.
Esta forma de declaração de strings assume particular importância para a declaração de campos de
texto, em ficheiros.
Como as strings de comprimento fixo são preenchidas com espaços até ao seu comprimento
máximo, é útil a utilização das funções Trim e RTrim que permitem retirar esses espaços.
4.2.2. Tipo de dados lógico (Boolean)
O tipo de dados Boolean é adequado a valores lógicos: True (verdadeiro) ou False (falso).
Exemplo:
Dim flag As Boolean
…
I f k >1 0 Th en f la g =T r ue E ls e f la g =Fa l se
…
Pág. 17 de 70
Microsoft Visual Basic
Escola Secundária de Emídio Navarro 2001/2002
Estruturas, Tratamento e Organização de Dados
4.2.3. Tipo de dados Object
Uma variável do tipo Object usa 4 bytes e refere-se a objectos da própria aplicação ou doutra (por
exemplo: o clipboard). Para fazer atribuições a variáveis declaradas como objecto usa-se a instrução Set.
4.2.4. Funções de conversão entre tipos de dados
Função de Conversão
Converte uma
expressão para o tipo
CBool
Boolean
CByte
Byte
CCur
Currency
CDate
Date
CDbl
Double
CInt
Integer
CLng
Long
CSng
Single
CStr
String
CVar
Variant
CVErr
Error
Pág. 18 de 70
Microsoft Visual Basic
Escola Secundária de Emídio Navarro 2001/2002
Estruturas, Tratamento e Organização de Dados
4.3. Arrays (vectores e matrizes)
Os arrays, também conhecidos por vectores e matrizes, são um conjunto de variáveis do mesmo
tipo de dados referenciadas por um índice, ou por vários, conforme tenham uma ou mais dimensões.
Aos arrays unidimensionais dá-se normalmente o nome de vectores e aos bidimensionais dá-se o
nome de matrizes.
Exemplo:
Dim v (10 ) As Integer
... declara o vector v de inteiros com 10 elementos.
A referência a cada elemento do vector é feita da forma: v(0) ,v(1) ,v(2),..., v(9).
No Visual Basic, por defeito, o primeiro elemento do vector tem o índice 0 (zero). No entanto,
podemos alterar o valor de defeito para 1, definindo Option Base 1 na secção de declarações de um
módulo.
Outra forma de especificar o intervalo de índices dos elementos de um vector é declara-los da
forma:
Dim v (1 To 10 ) As Integer
Dim v1 (100 To 200 ) As Boolean
... declara o vector de inteiros v com índices entre 1 e 10, e o vector v1 com índices entre 100 e 200.
4.3.1. Arrays multidimensionais
No Visual Basic, podemos criar arrays de múltiplas dimensões. Por exemplo:
Dim m(10,15 ) As Doub le
... declara a matriz m com 10 linhas por 15 colunas.
Dim multi(3,10,5 ) As Integer
... declara o array tridimensional multi com 3x10x5 elementos.
Pág. 19 de 70
Microsoft Visual Basic
Escola Secundária de Emídio Navarro 2001/2002
Estruturas, Tratamento e Organização de Dados
As variáveis e arrays podem ser declarados usando alternativamente à instrução Dim, as instruções
Public e Private. Iremos analisar quais as diferenças decorrentes da utilização de Dim, Private e Public mais
para a frente neste manual.
4.3.2. Arrays dinâmicos
Algumas vezes, pode não se conhecer com exactidão a dimensão de um array. Assim, é importante
que exista a possibilidade de alterar a dimensão do array durante a execução da aplicação. Para esse
efeito, existe a instrução Redim que, para além de resolver o problema de arrays cuja dimensão não se
conhece à partida, torna a gestão de memória mais eficiente. Caso contrário, teríamos que declarar um
array do tamanho máximo possível, desperdiçando memória.
Um array de dimensão dinâmica declara-se da forma:
Dim v ()
... e, quando for conveniente num procedimento, dimensiona-se o vector para o número de elementos
pretendidos.
Exemplo:
R e D i m v (x )
... redimensiona o vector v para o número de elementos x.
Atenção: ao contrário da instrução Dim, a instrução ReDim é uma instrução executável em run time, não
podendo ser incluída numa das secções de declarações (nem tal faria sentido).
4.3.2.1. Manter o conteúdo de um array dinâmico
Quando se altera a dimensão de um array dinâmico o seu conteúdo é perdido. Para que tal não
aconteça e necessário incluir a palavra Preserve na instrução ReDim.
Exemplo:
R e D i m P r ese r v e v (x )
Pág. 20 de 70
Microsoft Visual Basic
Escola Secundária de Emídio Navarro 2001/2002
Estruturas, Tratamento e Organização de Dados
... desta forma, o vector não é inicializado sendo o seu conteúdo perdido.
Nos arrays multidimensionais, somente a última dimensão pode ser alterada quando se usa a
palavra Preserve.
R eD im P r eser ve m (10,UB ou nd (m,2 )+1 )
... o número de colunas (ultima dimensão) da matriz m foi alterada para mais um elemento.
As funções LBound e UBound fornecem, respectivamente, o limite inferior e superior dos índices
das dimensões fornecidas como parâmetros.
4.4. Declaração de constantes
Para que a programação seja clara, devem ser utilizadas constantes. As constantes são usadas
quando pretendemos usar um nome significativo que represente um determinado valor constante.
Uma constante, como o nome indica, não pode alterar o seu valor no decurso do programa. A
utilização de constantes não desperdiça memória, visto que é utilizado pelo compilador um método
semelhante ao de busca e substituição, substituindo as constantes pelos seus valores literais.
A sintaxe da declaração de constantes é a seguinte:
C ons t <no me > [A s < t ipo > ]= <expres s ão >
Por exemplo:
C on s t N L inh a s=4 0
... declara a constante NLinhas com o valor 40.
O tipo de dados da constante pode ser incluído na respectiva declaração.
4.5. Criação de tipos de dados definidos pelo utilizador
O Visual Basic permite criar novos tipos de dados recorrendo aos tipos de dados existentes.
A declaração de tipos de dados definidos pelo utilizador só pode ser feita na secção de declarações
de um módulo.
Pág. 21 de 70
Microsoft Visual Basic
Escola Secundária de Emídio Navarro 2001/2002
Estruturas, Tratamento e Organização de Dados
Exemplo:
Typ e f ic ha al un o
n u m A s In teg e r
nome As String*40
idade As Integer
En d Typ e
A declaração de variáveis usando tipos definidos pelo utilizador segue o mesmo formato das
declarações de variáveis de tipos intrínsecos.
Exemplo:
D i m a lu n o A s f ic h a al un o
... declara a variável aluno como sendo do tipo fichaaluno.
A referência a cada um dos elementos individuais que constituem a variável é feita da forma:
v ar iáv el. el emen to
Exemplo:
aluno. num=101
Podem ser declarados igualmente arrays tendo por base tipos de dados definidos pelo utilizador, da
forma:
D i m v a lu n o s ( 1 0 ) A s f ic h a al un o
A referência a cada elemento do vector, e à componente da estrutura, é feita da forma:
v al uno s (10 ).n u m
Pág. 22 de 70
Microsoft Visual Basic
Escola Secundária de Emídio Navarro 2001/2002
Estruturas, Tratamento e Organização de Dados
4.6. Âmbito das variáveis
Como já se disse, a forma usual de declarar variáveis é utilizando a instrução Dim. No entanto, para
fins específicos, usamos as instruções Private, Public e Static.
4.6.1. Variáveis usadas em procedimentos (subrotinas ou funções)
As variáveis declaradas em procedimentos são locais aos procedimentos em que são declaradas.
Logo, são apenas "reconhecidas" dentro do procedimento em que foram declaradas.
A declaração de variáveis dentro de procedimentos é feita utilizando as instruções Dim e Static. Por
exemplo:
Dim x As Integer
ou
S t a t ic x A s I n t e g e r
A diferença entre estas duas formas de declaração reside no tempo de vida da variável, isto é,
enquanto que da primeira forma a variável desaparece da memória após a execução do procedimento (ou
dito de outra forma, só existe em memória enquanto o procedimento está a ser executado); da segunda
forma, embora continue a ser visível apenas dentro do procedimento, reside na memória enquanto a
aplicação estiver em execução. A vantagem desta última situação reside no facto da variável manter o
último valor entre execuções do procedimento.
4.6.2. Variáveis usadas em módulos
Por defeito, uma variável declarada ao nível do módulo é "visível" em todos os procedimentos
desse módulo, mas não nos outros módulos da aplicação. Para declarar variáveis de nível de módulo
podem devem ser usadas as instruções Public ou Private, na secção de declarações (topo do módulo). Por
exemplo:
P ub l ic x As I n t eg e r
ou...
Pág. 23 de 70
Microsoft Visual Basic
Escola Secundária de Emídio Navarro 2001/2002
Estruturas, Tratamento e Organização de Dados
P r iva t e y As In t e g e r
Ao declaramos uma variável como pública (Public) num dos módulos, esta torna-se disponível em
todos os procedimentos da aplicação (incluindo procedimentos em forms ou módulos distintos).
Num módulo, as instruções Dim e Private podem ser usadas alternativamente, permitindo declarar
variáveis privadas ao módulo em questão. Não é possível declarar variáveis públicas em procedimentos.
Considere a seguinte aplicação com 2 forms (form1 e form2), 2 módulos (Module1 e Module2) e 12
variáveis X1, X2, ... , X12, do tipo inteiro, declaradas em diferentes forms, módulos e procedimentos da
aplicação.
Form1:
( D ec la r a t io n s – D ec l a ra ç õ es )
Dim X1 As Integer
...
Private Sub A()
Dim X2 as Doub le
…
En d Sub
P r iva t e S ub B ( )
Dim X3 As Integer
...
En d Sub
Form2:
( D ec l a r a t io n s - D ec l a raçõ e s )
P ublic X4 As In teger
P r iva t e X5 A s I n teg e r
...
Private Sub C()
Dim X6 As Boolean
…
En d Sub
Pág. 24 de 70
Microsoft Visual Basic
Escola Secundária de Emídio Navarro 2001/2002
Estruturas, Tratamento e Organização de Dados
Module1:
( D ec l a r a t io n s - D ec l a raçõ e s )
Dim X7 As Integer
P r iva t e X8 A s I n teg e r
P ublic X9 As In teger
...
Sub D()
Dim X10 As Integer
S t a t ic X 1 1 A s I n teg e r
…
En d Sub
Module2:
( D ec l a r a t io n s - D ec l a raçõ e s )
...
S ub E ( )
Static X12 A s B oolean
…
En d Sub
Qual as zonas da aplicação em que cada uma das variáveis é "visível"?
Variável
Procedimentos em que é visível
X1
Em todos os procedimentos do Form1
X2
No procedimento A, do Form1
X3
No procedimento B, do Form1
X4
Em todos os procedimentos da aplicação
X5
Em todos os procedimentos do Form2
X6
No procedimento C do Form2
X7
Em todos os procedimentos do Module1
X8
Em todos os procedimentos do Module1
X9
Em todos os procedimentos da aplicação
X10
No procedimento D, do Module1
X11
No procedimento D, do Module1, sendo estática
Pág. 25 de 70
Microsoft Visual Basic
Escola Secundária de Emídio Navarro 2001/2002
Estruturas, Tratamento e Organização de Dados
X12
No procedimento E, do Module2, sendo estática
Como se pode verificar através do exemplo anterior, a instrução Private pode em algumas
circunstâncias ser alternativa à instrução Dim. Nestes casos, é aconselhável a utilização da instrução
Private pelo contraste evidente com a instrução Public.
4.7. Operadores
4.7.1. Operador de atribuição
O operador de atribuição é o sinal de igual (=).
Exemplos:
n u m=10
nome=”Luis Campos Santos”
... atribui o valor 10 à variável numérica num e “Luis Campos Santos” à variável do tipo string nome.
4.7.2. Operadores aritméticos
Operador
Significado
+
Adição
-
Subtracção
*
Multiplicação
^
Exponenciação
\
Divisão de inteiros
/
Divisão
Mod
Resto da divisão
Exemplos:
9
Divisão de inteiros (\):
N1=3\2
‘ N1 fica com o valor 1
Pág. 26 de 70
Microsoft Visual Basic
Escola Secundária de Emídio Navarro 2001/2002
Estruturas, Tratamento e Organização de Dados
‘ N2 fica com o valor 2
N2=5\2
9
Resto da divisão (Mod)
N3=3 Mod 2
‘ N3 fica com o valor 1
4.7.3. Operador de concatenação de strings
O operador de concatenação de strings é &.
Exemplos:
9
Concatenação de uma variável do tipo string com uma literal do mesmo tipo:
S1 =”L isbo a”
S2 =S1 & “, 10 de Fev ereiro de 1997 ”
9
Concatenação de uma variável do tipo string com uma string, um número e uma variável numérica:
S1 =”L isbo a”
Ano=1997
S2 =S1 & “, “ & 10 & “ de Fev er eiro d e “ & Ano
Para a concatenação de strings (variáveis ou literais) com outras strings, pode ser usado
alternativamente o operador +.
4.7.4. Operadores de comparação
Operador
Significado
=
Igual
<>
Diferente
<
Menor
Pág. 27 de 70
Microsoft Visual Basic
Escola Secundária de Emídio Navarro 2001/2002
Estruturas, Tratamento e Organização de Dados
>
Maior
<=
Menor ou igual
>=
Maior ou igual
Like
Compara strings usando padrões
Is
Compara duas variáveis que referenciam objectos
Exemplo (utilizando o operador Like):
V er if ica = ”aBBB a" L ik e " a* a"
‘ True
V e r i f ica = ”ABC DE F” L ik e “AB C* ”
‘ True
V er if ica =”AZ CDE F” L ik e “A ?C* ”
‘ True
4.7.5. Operadores Lógicos
Operador
Significado
Not
Negação
And
E lógico
Or
Ou lógico
Xor
Ou lógico exclusivo
Eqv
Equivalência
Imp
Implicação
4.7.6. Precedência dos operadores aritméticos
A precedência dos operadores determina quais as operações que, numa expressão, serão
executadas em primeiro lugar. A não observância das regras de precedência dos operadores aquando da
construção de expressões, pode conduzir a resultados inesperados.
Operadores por ordem de precedência:
9
^
9
*e/
9
\
9
Mod
Pág. 28 de 70
Microsoft Visual Basic
Escola Secundária de Emídio Navarro 2001/2002
Estruturas, Tratamento e Organização de Dados
9
+e–
O sinal de parêntesis altera a precedência dos operadores, sendo realizadas em primeiro lugar as
operações entre parêntesis.
4.8. Algumas instruções e funções nativas do Visual Basic
O Visual Basic, como a generalidade das linguagens de programação, dispõe de um conjunto de
instruções, funções e métodos (característica das linguagens deste tipo) que permitem realizar as
operações de programação comuns.
As instruções (statements), funções (functions) e os métodos (methods) têm objectivos distintos.
Enquanto que as instruções permitem dar comandos (instruções imperativas), as funções devolvem
(retornam) valores e os métodos permitem desencadear acções sobre objectos.
4.8.1. Instruções
Nome da Instrução
Descrição
Beep
Emite um aviso sonoro
ChDir
Muda de directório
End
Termina a aplicação
MsgBox
Mostra uma mensagem numa caixa de diálago
4.8.2. Funções
Nome da Função
Descrição
Abs
Asc
Chr
Cos
CurDir
Date
Format
InputBox
Len
Valor absoluto de um número
Código de um caracter
Caracter correspondente a um código
Co-seno de um ângulo
Nome do directório de trabalho actual
Data actual no formato string
Formata um número ou uma data, para uma string
Introduzir texto pelo utilizador numa caixa de diálogo
Número de caracteres de uma string
Pág. 29 de 70
Microsoft Visual Basic
Escola Secundária de Emídio Navarro 2001/2002
Estruturas, Tratamento e Organização de Dados
Mid
Now
Rnd
Sin
Sqr
Str
Time
Val
Extrair parte de uma string
Data e hora actual
Número aleatório
Seno de um ângulo
Raiz quadrada de um número
Converter um número numa string
Hora actual numa string
Converter uma string num número
4.8.3. Métodos
Nome do Método
Descrição
Cls
Apaga os gráficos criados em tempo de execução
Print
Imprime
Refresh
Actualiza o objecto
4.9. Estruturas de controlo
As estruturas de controlo determinam o fluxo da aplicação durante a sua execução. Nas estruturas
de controlo incluem-se as estruturas de decisão e ciclos (estruturas de repetição).
4.9.1. Estruturas de decisão
As estruturas de decisão, mediante o valor de uma ou mais condições lógicas determinam o
"caminho" a seguir durante a execução do programa.
4.9.1.1. If...Then…
Sintaxe:
I f <co n d iç ã o > T h en < i n s tr uç ã o >
ou
I f <con d iç ão > Th en
< i n s tr uçõ e s >
En d I f
Pág. 30 de 70
Microsoft Visual Basic
Escola Secundária de Emídio Navarro 2001/2002
Estruturas, Tratamento e Organização de Dados
A condição é normalmente uma comparação, que após ser avaliada assume o valor True ou False
conforme a condição seja verdadeira ou falsa, respectivamente. Pode também ser um valor numérico que,
se for igual a 0 (zero), a condição é considerada falsa; para outro qualquer valor, a condição é considerada
verdadeira.
Exemplos:
I f i da d e >1 8 t h en a d u l to= T r ue
... se a variável numérica idade for maior do que 18, à variável lógica adulto é atribuído o valor True.
I f idade>18 Then
a d u l t o =T rue
ms gb ox “É u m a d ul to”
En d I f
... se a variável numérica idade for maior do que 18, à variável lógica adulto é atribuído o valor True e é
mostrada uma caixa de diálogo com a mensagem “É um adulto”.
4.9.1.2. If... Then... Else…
Sintaxe:
I f <con d iç ão1 > Th en <in s truç ão1 > E l se < ins tru çã o2>
... se a condição1 for verdadeira executa a instrução1; se for falsa, executa a instrução2.
I f <con diç ão1 > Then
[<b loc o_de_ in s truç ões_1 ]
[ E l s el f <co n d iç ão 2 > T h e n
[bloco _ d e_instruç ões_2 ]]...
[ El s e
[ b l o c o _ d e_i n s t ruç õ e s_ n ] ]
En d I f
... neste caso, as condição1, condição2, ... são avaliadas até ser encontrada uma condição verdadeira,
sendo executado o bloco de instruções respectivo. Se nenhuma das condição é verdadeira, é executado o
Pág. 31 de 70
Microsoft Visual Basic
Escola Secundária de Emídio Navarro 2001/2002
Estruturas, Tratamento e Organização de Dados
bloco de instruções correspondentes à clausula Else.
Exemplo:
I f idade>18 Then
a d u l t o =T rue
E lseif idade> 13 then
a d o l e sc en t e= T r ue
E ls e
C r ianca = Tru e
En d I f
... se a idade for maior do que 18, à variável adulto é atribuído o valor True; se for maior do que 13, à
variável adolescente é atribuído o valor True; nos outros casos, é atribuído o valor True à variável criança.
4.9.1.3. Select... Case...
A instrução Select... Case... é uma alternativa à instrução If... Then... ElseIf..., para a execução
selectiva de um bloco de instruções a partir de blocos de instruções múltiplos, tomando a selecção mais
eficiente e legível.
Sintaxe:
S e l ec t C a s e < e x p r e s sã o _ t es t e >
[ C a s e < l is ta _ d e_v al o r es_ 1 >
[ <b l o c o _ d e_ in s t ruç õ e s_1 >] ]
[ C a s e < l is ta _ d e_v al o r es_ 2 >
[ <b l o c o _ d e_ in s t ruç õ e s_2 >] ]
. . .
[ C as e El s e
[<b loc o_de_ in s truç ões_n > ]]
En d Selec t
Se a lista_de_valores tiver mais que um valor, os valores devem ser separados por vírgulas. Cada
bloco_de_instruções pode ter zero ou mais instruções, e só será executado o primeiro deles, quando
existirem vários Cases que satisfaçam a expressão_teste. A cláusula Case Else é opcional, e só será
executado o bloco de instruções que lhe está associado, quando nenhum dos Cases satisfizer a
Pág. 32 de 70
Microsoft Visual Basic
Escola Secundária de Emídio Navarro 2001/2002
Estruturas, Tratamento e Organização de Dados
expressão_teste.
Exemplo:
S e l ec t C a s e e s t a do_ c iv i l
C a se 1
M s gBox “Solteiro ”
C a se 2
M s gBo x “ C a s a do ”
C a se E l s e
M s gBox “ Ou t r o es t a do c iv i l”
En d Selec t
... com base na variável estado_civil mostra-se o estado civil correspondente. Se o estado civil for diferente
de 1 ou de 2, emite a mensagem “Outro estado civil”.
4.9.2. Ciclos (estruturas de controlo repetitivas)
Os ciclos, como o nome indica, permitem executar repetitivamente uma ou mais linhas de código.
4.9.2.1. For... Next...
A estrutura For... Next... executa (repetitivamente) um bloco de instruções, incrementando ou
decrementando uma variável contadora.
Sintaxe:
F o r <co n t a d o r > = < iníc io> T o < fim> [S tep <inc r em ento > ]
< i n s tr uçõ e s >
N e x t [< c o n t a d o r > ]
Os argumentos início, fim e incremento são numéricos, tendo que ser o início inferior ou igual ao fim,
se o incremento for positivo. Se o incremento for negativo, o início tem que ser superior ou igual ao fim. Nos
restantes casos, o ciclo nunca é executado.
Por defeito, o incremento é 1.
Pág. 33 de 70
Microsoft Visual Basic
Escola Secundária de Emídio Navarro 2001/2002
Estruturas, Tratamento e Organização de Dados
Exemplo:
For i=1 to 10
P r in t “O v al or da v a r iáv el i é”; i
Next
... imprime os 10 valores assumidos pela variável i.
Embora não seja normalmente recomendável, pode-se interromper precocemente a execução de
um ciclo For... Next..., através da instrução Exit For.
4.9.2.2. Do... Loop
Os ciclos do tipo Do... Loop têm múltiplas variantes.
A sintaxe para a execução repetitiva das instruções enquanto a condição for verdadeira (True) é:
D o Wh i le <co nd iç ão >
< i n s tr uçõ e s >
Lo op
Testa antes
(Enquanto)
Se a condição for falsa quando o ciclo é executado pela primeira vez, as instruções que lhe estão
associadas nunca são executadas. Se a condição for verdadeira, as instruções são executadas seguindose, novamente, o teste à condição. O processo repete-se sucessivamente até à condição ser falsa, que
termina a execução do ciclo.
A sintaxe para a execução repetitiva de um bloco de instruções, enquanto a condição for verdadeira
(True), com teste da condição no fim, é:
Do
< i n s tr uçõ e s >
Lo op While <co ndiç ão>
Testa depois
(Enquanto)
As instruções são executadas sendo, de seguida, avaliada a condição. Se a condição for
verdadeira, as instruções voltam a ser executadas; caso contrário, o ciclo acaba. O processo repete-se
sucessivamente. Logo, o modo de funcionamento é semelhante ao do ciclo anterior, distingindo-se somente
na ordem de teste à condição. Isto garante que as instruções associadas ao ciclo são executados pelo
menos uma vez.
De forma análoga funcionam os dois tipos seguintes de ciclos Do... Loop, distingindo-se apenas na
Pág. 34 de 70
Microsoft Visual Basic
Escola Secundária de Emídio Navarro 2001/2002
Estruturas, Tratamento e Organização de Dados
forma como se testa a condição. Isto é, enquanto que nos dois casos anteriores, a execução do ciclo
terminava quando a condição fosse falsa (executar enquanto condição verdadeira), os 2 tipos que se
seguem, terminam a sua execução quando a condição for verdadeira (executar até condição verdadeira).
Sintaxe:
Executar zero ou mais vezes
Testa antes
D o U n t il <co n d iç ão >
(Até que ...)
<instruçõ es>
Lo op
Executar pelo menos uma vez
Do
Testa depois
<instruçõ es>
(Até que ...)
Lo op Un til <con diç ão >
De notar que Until <condição> é equivalente a While Not <condição>.
Para sair de um ciclo Do... Loop... pode-se utilizar a instrução Exit Do.
4.10. Procedimentos (subrotinas e funções)
Os procedimentos nas aplicações Visual Basic são usualmente criadas nos módulos, mas também
podem ser criadas nos forms. Um procedimento é constituído por um cabeçalho e pelo código respectivo.
Sintaxe para a criação de subrotinas:
[ P ubl ic I P r iv a te ] [ S ta t ic ] S ub < n o m e > [ ( < l is ta _ d e_ ar g u men to s > )]
[ < i n s t r uç õ es > ]
[ E x i t S ub ]
[ < i n s t r uç õ es > ]
En d Sub
Sintaxe para a criação de funções:
[PublicIPrivate][Static] Function <nome>[(<lista_de_argumentos>)] [As <tipo>]
[ < i n s t r uç õ es > ]
[<nome>=<expressão>]
[ Ex it Func tio n]
[ < i n s t r uç õ es > ]
[<nome>=<expressão>]
En d Func tion
Pág. 35 de 70
Microsoft Visual Basic
Escola Secundária de Emídio Navarro 2001/2002
Estruturas, Tratamento e Organização de Dados
A única diferença entre as subrotinas e as funções é que as funções devolvem, obrigatoriamente,
um valor.
Parte
Descrição
Public
Indica que o procedimento/função é acessível de todos os procedimentos
Private
Indica que o procedimento/função é acessível apenas no módulo/form onde está
declarado
Static
Indica que as variáveis são preservadas entre chamadas
<nome>
Nome do procedimento/função
<lista_de_argumentos
>
Lista de variáveis, separadas por vírgulas, que representa os argumentos que são
passados quando o procedimento/função é invocado
<tipo>
Tipo de dados de retorno da função (não aplicável a procedimentos)
<instruções>
Conjunto de instruções executadas no procedimento/função
<expressão>
Valor de retorno da função (não aplicável a procedimentos)
Por defeito, e se nada for declarado explicitamente, as subrotinas são públicas (Public).
Exemplo de uma subrotina:
Sub MsgCoord(x As Integer, y As Integer)
M s gbox “ As c oo rd en a das sã o “ & x & “, “ & y
En d Sub
... imprime as coordenadas x e y, passadas como parâmetro para a subrotina.
Exemplo de uma função:
F u nc t ion Ma x in t (x As In t e g er , y As In teger) As In teger
I f x >y Th en Ma x in t= x E l se M ax int= y
En d Func tion
... determina o máximo de dois inteiros, retomando esse valor.
4.10.1. Passagem de parâmetros por referência
Pág. 36 de 70
Microsoft Visual Basic
Escola Secundária de Emídio Navarro 2001/2002
Estruturas, Tratamento e Organização de Dados
Consideremos o exemplo:
Dim num As Integer
...
n u m =3
Inc r emen to (n um)
P r in t nu m
Sub Inc r emen to(x As In teger)
x=x +1
En d Sub
Qual o resultado da impressão da variável num?
O resultado da impressão da variável num será 4, porque o parâmetro x foi passado por referencia.
Isto é, não foi copiado o valor de num para uma nova variável x, mas sim foi passada referencia relativa ao
endereço de memória de num, sendo todas as modificações do valor de x operadas sobre num.
Por defeito, o Visual Basic efectua passagem de argumentos por referência.
4.11.2. Passagem por valor
Alternativamente à passagem por referencia podemos indicar que a passagem de um determinado
parâmetro é feita por valor, através da clausula ByVal. Desta forma, uma cópia da variável original é
passada ao parâmetro, não sofrendo o valor original alterações por eventuais operações realizadas no
procedimento.
Exemplo (alterando a forma de passagem do parâmetro x, para passagem por valor):
Dim num As Integer
...
n u m =3
Inc r emen to (n um)
P r in t nu m
S ub Inc r emen to (By V al x As In teger )
x=x +1
En d Sub
Pág. 37 de 70
Microsoft Visual Basic
Escola Secundária de Emídio Navarro 2001/2002
Estruturas, Tratamento e Organização de Dados
O resultado da impressão da variável num será 3.
4.10.3. Procedimentos com variáveis declaradas como Static
Quando se inicia um programa o Visual Basic reserva memória para as variáveis globais e, à
medida que os procedimentos vão sendo chamados, as variáveis locais vão sendo criadas e destruídas
quando termina a execução do procedimento. Se um procedimento for chamado novamente, as variáveis
são recriadas.
Em algumas situações é útil que o valor armazenado numa variável local não seja perdido, quando
a execução do procedimento termina.
A declaração de variáveis do tipo Static resolve este problema.
Exemplo:
Private Sub Command1_Click ()
S t a t ic c o n t ad o r A s I n teg e r
contador=contador+1
M s gbox “O bo tão fo i pressionado “ & con tador & “ vez es! ”
En d Sub
... como a variável contador está declarada como Static, esta é incrementada sempre que o procedimento é
invocado, não perdendo o valor entre execuções.
4.10.4. Objectos como parâmetros
Os objectos podem ser também passados como parâmetros.
Esta característica permite código totalmente genérico. Por exemplo: imagine-se que pretendemos
escrever uma subrotina, que permita alterar a propriedade FontItalic, comum a vários tipos de controlos. A
subrotina adequada seria a seguinte:
Sub Tipo ltalico (ob jec to As Con tro l)
ob jec to. FontI talic =True
En d Sub
Pág. 38 de 70
Microsoft Visual Basic
Escola Secundária de Emídio Navarro 2001/2002
Estruturas, Tratamento e Organização de Dados
5. Introdução aos objectos
Uma aplicação em Visual Basic é constituída por objectos. Os objectos podem ser do Visual Basic
(por exemplo: controlos, forms, objectos de acesso a dados, etc.) ou objectos de aplicações externas. Podese inclusive criar e adicionar objectos com propriedades e métodos próprios. Existem também fabricantes
que fornecem objectos que podem ser incorporados em aplicações Visual Basic para complementar as
funcionalidades disponíveis de base.
5.1. O que é um objecto?
Um objecto é uma combinação de código e dados que é tratada como uma unidade e que constitui
uma peça da aplicação. A aplicação em si também é considerada pelo Visual Basic como sendo um
objecto.
Um objecto tem, como já se disse, associadas propriedades, eventos e métodos.
Existem objectos com propriedades comuns. Por exemplo: os objectos Label e CommandButton
têm em comum a propriedade Caption, cuja função é idêntica.
Iremos de seguida analisar os objectos, propriedades e métodos mais utilizados. Nos casos em que
existem propriedades comuns, será apenas abordado o objectivo dessa propriedade num deles.
5.1.1. Form
Um Form é uma janela ou caixa de diálogo que faz parte do interface de uma aplicação.
Propriedades
AutoRedraw - Se o seu valor for True, redesenha a form sempre que a ele se volta, após ter sido
sobreposto por outra janela. Se for False, a aplicação deve chamar um procedimento para
efectuar essa operação.
BackColor - Retoma ou define a cor de fundo. Esta cor pode ser especificada utilizando a paleta de cores ou
as funções QBCoIor ou RGBColor.
A função QBCoIor tem a sintaxe:
QB Color(<co r >)
Pág. 39 de 70
Microsoft Visual Basic
Escola Secundária de Emídio Navarro 2001/2002
Estruturas, Tratamento e Organização de Dados
A <cor> pode ter um dos seguintes valores:
Número
Cor
Nome da cor
0
Preto
1
Azul
2
Verde
3
Ciam
4
Vermelho
5
Magenta
6
Amarelo
7
Branco
8
Cinzento
9
Azul Claro
10
Verde Claro
11
Ciam Claro
12
Vermelho Claro
13
Magenta Claro
14
Amarelo Claro
15
Branco Brilhante
Exemplo:
Form1. B a c k C o l o r =Q b C o l o r (1 )
... a cor de fundo do form passa a azul.
A função RGBColor tem a sintaxe:
R GBCo lo r (< v er m e lho> , <v er d e >, < az ul > )
Os argumentos <vermelho>, <verde> e <azul>, cujo valor varia entre 0 e 255, representam a
componente da cor em cada uma das cores básicas.
Exemplo:
Form1.BackColor=RGBColor(255,0,0 )
... a cor de fundo do form passa a vermelho.
Pág. 40 de 70
Microsoft Visual Basic
Escola Secundária de Emídio Navarro 2001/2002
Estruturas, Tratamento e Organização de Dados
BorderStyle - Configura a linha de contorno do form. O tipo de linha de contorno pode ser um dos seguintes:
Valor
Tipo de linha de contorno
0 – None
Sem linha de contorno
1- Fixed Single
Contorno de linha simples e janela de tamanho fixo
(especificado em tempo de desenvolvimento)
2 – Sizable
Contorno de linha dupla que permite redimensionar o form
3 – Fixed Dialogue
Contorno de linha dupla e janela de tamanho fixo
(especificado em tempo de desenvolvimento)
4 – Fixed ToolWindow
Janela de ferramentas de tamanho fixo
(especificado em tempo de desenvolvimento)
5 – Sizable ToolWindow
Janela de ferramentas que permite redimensionar o form
Caption - Define o texto da barra de titulo da janela de form.
ControlBox - Activa ou desactiva os comandos de controlo da janela conforme seja True ou False,
respectivamente.
Enabled - Num form, quando False, provoca que os eventos de teclado e de rato não tenham efeito.
Font - Tipo de letra do texto apresentado no form.
Height, Width - Determinam a altura e a largura do form. Por defeito, estão em Twips uma unidade que é
1/20 de ponto ou 1/1440 de polegada.
Icon - Nome do ficheiro com a extensão .ico (ícone) que representa o form quando este está minimizado.
Quando se cria um executável para a aplicação, o ícone do form inicial é utilizado por defeito, para o
executável.
MaxButton, MinButton - Activa/desactiva os botões de maximização/minimização do form, conforme
assumam os valores True ou False, respectivamente.
Name - Nome do form no código do programa. Não pode ser alterado em tempo de execução (run time).
Picture - Nome do ficheiro da figura do fundo do form.
Pág. 41 de 70
Microsoft Visual Basic
Escola Secundária de Emídio Navarro 2001/2002
Estruturas, Tratamento e Organização de Dados
Top, Left - Posição do canto superior esquerdo do form, relativamente ao canto do monitor.
Visible - Toma o form visível ou invisível, conforme o seu valor seja True ou False, respectivamente.
WindowState - Determina se a janela é exibida no estado normal (valor 0), minimizada (valor 1) ou
maximizada (valor 2).
Eventos
Click - Ocorre quando o utilizador dá um dique em cima do form.
DbIClick - Ocorre quando o utilizador dá um clique duplo no form.
Load - Ocorre sempre que o form é carregado.
Procedimentos e métodos
Cls – Apaga o texto e gráficos de um form.
Exemplo:
F o r m1 . C l s
LoadPicture – Permite carregar uma imagem para a propriedade Picture de um form em tempo de
desenvolvimento. Sintaxe:
LoadPic ture(<imagem>)
A <imagem> é o nome de um ficheiro dos tipos reconhecidos pelo Visual Basic.
Exemplo:
F o r m1 .P ic tu r e =Lo a dP ic t ur e ( “C:\W IN DOW S\C AR ROS.BMP ” )
Não sendo especificado uma imagem (LoadPicture ()) a função devolve uma imagem em branco.
Pág. 42 de 70
Microsoft Visual Basic
Escola Secundária de Emídio Navarro 2001/2002
Estruturas, Tratamento e Organização de Dados
Print - Escreve um texto num form.
Exemplo:
Form1.Print “Olá Mundo!”
5.1.2. Controlos
Os controlos são objectos que servem para construir o interface com o utilizador e que podem ser
encontrados na ToolBox. A configuração dos controlos disponíveis na ToolBox é feita na opção do menu
Tools; Custom Controls.
5.1.2.1. PictureBox e lmage
Propriedades
As propriedades mais significativas deste objecto são comuns ao objecto form.
Eventos
Os eventos Click e DbIClick são os mais usados.
Métodos e procedimentos
À semelhança do objecto form, a função LoadPicture é usada para configurar, em run time, a
propriedade Picture.
5.1.2.2. Label
Propriedades
Alignment - Alinhamento do texto: 0 – esquerda, 1 – direita e 2 – centrado.
AutoSize – Quando é True, Label é automaticamente dimensionada de acordo com o espaço necessário
para conter o texto especificado pela propriedade Caption.
Pág. 43 de 70
Microsoft Visual Basic
Escola Secundária de Emídio Navarro 2001/2002
Estruturas, Tratamento e Organização de Dados
BorderStyle - 0 (zero) para que não tenha linha de contorno ou 1 para linha de contorno simples.
Caption - Contém o texto a ser exibido na Label.
Enabled - É usualmente True. Se for False, a Label não reconhece qualquer evento.
Eventos
Os eventos associados aos controlos Label são normalmente Click e DblClick.
5.1.2.3. TextBox
Propriedades
MaxLength - Se for 0 (zero) indica que a TextBox poderá ter tantos caracteres quantos o utilizador desejar.
Caso contrário, o número especificado será o número de caracteres permitido.
MuItiLine - Normalmente esta propriedade assume o valor False permitindo que o utilizador introduza
apenas uma só linha de texto. Caso seja True, o utilizador poderá introduzir mais do que na
linha texto (dando Enter para mudar de linha).
PasswordChar - Quando se pretende que os caracteres introduzidos na TextBox não fiquem visíveis,
podemos incluir nesta propriedade um caracter que será exibido tantas vezes quantos os
caracteres entrados pelo utilizador. Obviamente que os caracteres entrados não são
substituídos pelo PasswordChar para efeitos de processamento, destinando-se apenas a
visualização.
ScrollBars - Pode ser configurada para: 0 (sem barras de deslocamento), 1 (apenas barra de deslocamento
horizontal), 2 (barra de deslocamento vertical) ou 3 (barras de deslocamento horizontal e
vertical).
Text - Contém o texto digitado pelo utilizador. Permite, também, alterar o texto exibido.
Pág. 44 de 70
Microsoft Visual Basic
Escola Secundária de Emídio Navarro 2001/2002
Estruturas, Tratamento e Organização de Dados
Eventos
Change - É desencadeado pela alteração do texto pelo utilizador, ou pelo processamento efectuado.
LostFocus - É desencadeado quando se muda de objecto corrente, ou seja, quando se passa, por exemplo,
de Text1 para Text2.
Métodos
SetFocus - Muda o focus para um determinado objecto tomando esse o objecto corrente (não é apenas
utilizado nas TextBoxes). Sintaxe:
Ob jec to. SetFoc us
Exemplo:
T e x t1 . S e t Fo c u s
... atribui o focus ao objecto Text1.
5.1.2.4. CommandButton, CheckBox, OptionBox
Propriedades
Cancel - Esta propriedade é suportada apenas pelos botões de comando. Quando a propriedade Cancel é
True, ao pressionar a tecla Esc, obtém-se o mesmo efeito que clicar no botão. No mesmo form,
apenas um botão de comando pode ter esta propriedade com o valor True.
Default - Esta propriedade, à semelhança da propriedade Cancel, é apenas suportada por botões de
comando. Quando True, ao pressionar a tecla Enter, obtém-se o mesmo efeito que clicar no
botão. No mesmo form, apenas um botão de comando poderá ter esta propriedade com o valor
True.
Pág. 45 de 70
Microsoft Visual Basic
Escola Secundária de Emídio Navarro 2001/2002
Estruturas, Tratamento e Organização de Dados
Value - Indica o estado de uma caixa de verificação ou botão de opção. Num OptionButton, indica se está
accionado ou não. Numa CheckBox pode assumir o valor 0, 1 ou 2. O valor 0 (zero) indica que a
caixa de verificação não está assinalada; 1 indica que está assinalada e 2 que a caixa está
desactivada.
Eventos
Tanto os botões de comando, como as caixas de verificação e os botões de opção, detectam o
evento Click. No entanto, no primeiro tipo é normalmente codificado esse evento, enquanto nos outros dois
tipos não é necessário qualquer codificação.
Procedimento e métodos
Com a excepção do método SetFocus, nenhum do métodos até agora apresentados se aplica a
este tipo de objectos.
5.1.2.5. Frame
As Frames (molduras) permitem o agrupamento de objectos. No caso dos OptionButtons as
molduras afectam o seu comportamento. Para outros objectos, as Frames podem ser usadas como
separação visual ou como possibilidade de activação/desactivação simultânea.
Propriedades
A propriedade Name identifica a Frame na aplicação, Caption define o titulo e Enabled quando é
False desactiva todos os objectos nela incluídos.
Eventos
Não responde a eventos produzidos pelo rato ou teclado.
5.1.2.6. ListBox
Pág. 46 de 70
Microsoft Visual Basic
Escola Secundária de Emídio Navarro 2001/2002
Estruturas, Tratamento e Organização de Dados
As ListBoxes permitem a selecção de um item a partir de uma lista fornecida. Embora seja possível
definir a lista em tempo de desenvolvimento é mais usual a utilização do método AddItem para adicionar
itens a uma ListBox.
Propriedades
Columns - Quando o seu valor é 0 (zero), os itens são exibidos numa única coluna. Caso o valor seja outro,
os itens da lista serão dispostos em múltiplas colunas.
List - Contem todos os itens armazenados na lista. Pode-se aceder a um elemento individual na lista,
utilizando a sintaxe:
ob jec to. L ist(<in dic e>)
... em que objecto é uma ListBox e <índice> é o índice do item a que se pretende aceder. Por exemplo:
L i s t1 .L i s t (2)
... acede ao terceiro item da ListBox List1. É o terceiro elemento porque os índices das ListBoxes começam
em 0 (zero).
ListCount - Número de itens da lista.
ListIndex - Fornece o índice do último elemento seleccionado. O valor 0 (zero) corresponde ao primeiro
elemento e -1 corresponde a nenhum elemento seleccionado.
MultiSelect - Controla quantos itens podem ser seleccionados em simultâneo.
Valor
Descrição
0
Um item de cada vez
1
Mais do que um item
2
O utilizador poderá seleccionar uma faixa de itens,
Utilizando a tecla SHIFT, teclas do cursor e rato.
Pág. 47 de 70
Microsoft Visual Basic
Escola Secundária de Emídio Navarro 2001/2002
Estruturas, Tratamento e Organização de Dados
Selected - Verifica o estado de um determinado item. Sintaxe:
Ob j ec to. S elec ted (< índ ic e > )
Devolve True se o item relativo ao <índice> estiver seleccionado, e False, no caso contrário.
Sorted - Quando True, coloca os itens por ordem.
Text – Contém o texto do último item seleccionado.
Métodos
AddItem - Adiciona um item a uma lista. Sintaxe:
ob jec to. A ddI tem item[, <ín d ic e>]
Adiciona ao objecto o item no <índice>. O <índice> é opcional e normalmente não é utilizado, pois
para adicionar no fim da lista, não é necessário incluír o <índice>.
Clear - Remove todos o itens de uma lista. Sintaxe:
ob jec to. Clear
RemoveItem – Remove um item de uma lista. Sintaxe:
ob jec to. Remov eI tem <ín d ic e>
O <índice> fornece a posição do item a remover
5.1.2.7. ComboBox
Uma ComboBox (caixa combinada) é a mistura de uma TextBox (caixa de texto) com uma ListBox
Pág. 48 de 70
Microsoft Visual Basic
Escola Secundária de Emídio Navarro 2001/2002
Estruturas, Tratamento e Organização de Dados
(caixa de lista).
Propriedades
Style - Determina o tipo da caixa combinada e o comportamento da sua parte de lista, podendo assumir os
valores 0, 1, ou 2.
Valor
Descrição
0
Dropdown Combo
Inclui uma lista “que cai” e uma caixa de texto.
O utilizador pode seleccionar um valor da lista ou escreve-lo na
caixa de texto.
1
Simple Combo
Inclui uma lista “fixa” e uma caixa de texto.
O utilizador pode seleccionar um valor da lista ou escreve-lo na
caixa de texto.
2
Dropdown List
Inclui somente uma lista “que cai”.
O utilizador pode apenas seleccionar um valor da lista.
Métodos
Os métodos descritos para as ListBoxes podem ser utilizados, igualmente, nas ComboBoxes.
5.1.2.8. HScrollBar e VScroIlBar
Estes controlos permitem criar barras de deslocamento horizontais e verticais, respectivamente.
Propriedades
LargeChange - Esta propriedade contém o incremento ou decremento do valor da propriedade Value,
quando o utilizador clica na área da barra de deslocamento entre o elevador e as setas de
deslocamento.
Max - Esta propriedade pode ser configurada para um valor inteiro (entre –32768 e 32767) que determina,
quando o elevador está no extremo direito (barra de deslocamento horizontal) ou na posição inferior
(barra de deslocamento vertical), o valor máximo da propriedade Value.
Pág. 49 de 70
Microsoft Visual Basic
Escola Secundária de Emídio Navarro 2001/2002
Estruturas, Tratamento e Organização de Dados
Min - Semelhante à propriedade anterior, só que fornece o valor mínimo da propriedade Value (extremo
esquerdo para a barra de deslocamento horizontal ou posição inferior para a barra de deslocamento
vertical).
SmallChange – Contém o valor incrementado ou decrementado ao valor da propriedade Value, quando o
utilizador clica numa das setas localizadas nos extremos da barra de deslocamento.
Value - Esta propriedade contém um número representando a posição actual do elevador na barra de
deslocamento. Se através de uma instrução, em tempo de execução, alterarmos o valor da
propriedade Value, o elevador tomará a posição que corresponde ao valor atribuído a esta
propriedade.
5.1.2.9. Timer
Um Timer (temporizador) é um objecto que pode disparar eventos em intervalos regulares de
tempo.
Propriedades
Interval – A propriedade Interval determina o intervalo de tempo em milissegundos, entre os eventos a
serem disparados.
Enabled - A propriedade Enabled activa/desactiva o Timer.
Eventos
Timer - O evento Timer é gerado em intervalos regulares de tempo definidos pela propriedade Interval.
5.1.2.10. Line e Shape
Os objectos Line (linha) e Shape (forma) são, como o nome indica, uma das maneiras de incluir
linhas e formas no interface da aplicação.
Pág. 50 de 70
Microsoft Visual Basic
Escola Secundária de Emídio Navarro 2001/2002
Estruturas, Tratamento e Organização de Dados
Propriedades
BorderColor – Esta propriedade determina a cor de contorno do objecto (ou no caso do objecto Line, a cor
da linha).
BorderStyle – Controla como a linha ou o contorno da forma é traçado. Pode assumir uma das seguintes
configurações:
Valor
Descrição
0
Transparente
1
Sólido
2
Tracejado
3
Ponteado
4
Traço – Ponto
5
Traço – Ponto – Ponto
6
Interior Sólido
BorderWidth - Esta propriedade permite especificar a largura da linha de contorno.
FilICoIor - Permite definir a cor interior da forma.
FilIStyle - Determina o padrão interno da forma. Pode ser um dos seguintes:
Valor
Descrição
0
Sólido
1
Transparente
2
Linhas horizontais
3
Linhas verticais
4
Diagonal para cima
5
Diagonal para baixo
6
Cruzado
7
Cruzado diagonal
5.1.2.11. DriveListBox, DirListBox e FileListBox
Os controlos DriveListBox, DirListBox e FileListBox permitem criar caixas de lista de unidades,
Pág. 51 de 70
Microsoft Visual Basic
Escola Secundária de Emídio Navarro 2001/2002
Estruturas, Tratamento e Organização de Dados
caixas de lista de directórios e caixas de lista de arquivos.
Propriedades
Drive - Aplica-se apenas a caixas de lista de unidades e contém o drive actualmente seleccionado.
FileName - Aplica-se apenas a caixas de lista de arquivos e contém o nome do arquivo actualmente
seleccionado.
List, ListIndex - Aplicam-se somente às caixas de lista de arquivos e comportam-se de forma semelhante à
descrita para as ListBoxes.
Path - Nas caixas de lista de arquivos e de directórios, esta propriedade contém o caminho actual. Não se
aplica às caixas de lista de unidades.
Pattern - Contém uma string que determina quais os arquivos exibidos. Suporta caracteres * e ?.
Eventos
Change - É reconhecido somente pelas caixas de lista de unidades e de directórios, e é disparado quando o
utilizador ou uma instrução modificam a selecção na caixa.
PathChange – Aplica-se apenas à caixa de lista de arquivos. Este evento ocorre quando o caminho ou uma
instrução modificam as propriedades Path ou FileName. Este evento permite-nos actualizar
o conteúdo da caixa.
5.1.3. Vector de objectos
Quando fazemos a cópia do controlo, o Visual Basic pergunta se desejamos criar um vector de
objectos. Se a resposta for afirmativa, será criado um vector de controlos, por exemplo: Label1(0),
Label1(1), etc. Desta forma, os objectos criados serão referenciados por um nome, no caso, Label1 e um
índice (0,1,...).
Esta forma de criar objectos, destina-se a simplificar o código associado a um conjunto de objectos
que, para os mesmos eventos, têm comportamentos análogos.
No seguinte exemplo as Labels, ao sofrerem o evento Click, tornam-se invisíveis.
Pág. 52 de 70
Microsoft Visual Basic
Escola Secundária de Emídio Navarro 2001/2002
Estruturas, Tratamento e Organização de Dados
P r iva t e S ub L ab el1_ Cl ick ( in d ex As I n t eg e r )
Lab el1 (index ). Visible=False
En d Sub
Pág. 53 de 70
Microsoft Visual Basic
Escola Secundária de Emídio Navarro 2001/2002
Estruturas, Tratamento e Organização de Dados
6. Menus
Os menus são usualmente um dos componentes de uma aplicação desenvolvida em Visual Basic.
Os menus podem ser criados em tempo de desenvolvimento utilizando o editor que o Visual Basic dispõe
para o efeito, ou em tempo de execução.
6.1. Criação de menus em tempo de desenvolvimento
Nos menus do Visual Basic pode-se encontrar o editor de menus em Tools; Menu Editor, ou no
botão Menu Editor (
), na barra de ferramentas.
Fig. 4 – Editor de menus do Visual Basic
No campo Caption, digitamos o titulo de cada uma das opções. Para que uma letra da palavra fique
disponível para acesso via teclado, digitamos o caracter & antes dessa letra. O caracter “-“ permite criar
uma linha de separação entre as opções do menu.
No campo Name digitamos o nome interno das opções. Utiliza-se o campo Index quando se
pretende que a opção seja um elemento de um vector.
No exemplo (fig. 4), utilizou-se principal(0) e principal(1) para referenciar as opções Ficheiro e
Editar, respectivamente. Para as opções encadeadas sob Ficheiro utilizou-se ficheiro(0), ficheiro(1), ...,
ficheiro(4), e para as opções encadeadas sob Editar utilizou-se editar(0), editar(1), etc..
Pág. 54 de 70
Microsoft Visual Basic
Escola Secundária de Emídio Navarro 2001/2002
Estruturas, Tratamento e Organização de Dados
A utilização de vectores de nomes para as opções reduz a complexidade do código do programa,
pois reduz o número de subrotinas associadas às opções do menu. Nestas subrotinas incluímos uma
estrutura Select Case que, com base no valor do parâmetro index, permite controlar qual a opção
seleccionada.
Para o exemplo da Fig.4, ficaríamos apenas com duas subrotinas. Exemplo:
Private Sub ficheiro_ Click (index As Integer)
S el ec t Ca s e i nd ex
C a se 0
‘ Opç ão n ov o
...
C a se 1
‘ Opç ão abr ir
...
C a se 2
...
En d Sub
e
P r iva t e S ub e d i ta r _ c l ic k ( in d ex A s I n t e g e r )
S e l ec t C a s e i n d ex
C a se 0
‘ Opç ão c or ta r
...
...
En d Sub
Caso contrário, teríamos uma subrotina por opção aumentando a complexidade do código da
aplicação.
Checked, Enabled e Visible permitem, respectivamente, que a opção fique marcada com um visto,
disponível/indisponível e visível/invisível.
Shortcut permite definir um atalho para a opção (conjunto de teclas para aceder à opção de uma
forma rápida via teclado).
,
permitem o encadeamento do menu em níveis múltiplos.
,
permitem a movimentação
entre as opções do menu.
Next, Insert e Delete executam as operações correspondentes, ou seja, próxima opção, inserir uma
nova opção (antes da opção corrente) e apagar a opção corrente.
Pág. 55 de 70
Microsoft Visual Basic
Escola Secundária de Emídio Navarro 2001/2002
Estruturas, Tratamento e Organização de Dados
6.2. Menus Pop-up
Os menus pop-up são menus de contexto que aparecem normalmente em cima do form quando
pressionamos o botão direito do rato sobre um objecto. Para invocar um menu pop-up, utiliza-se a sintaxe:
[ ob j ec to. ]Pop upM en u < no me> [,fl a gs [,x [,y [, <co man do_n egr ito >] ]] ]
Exemplo:
Private Sub Form_MouseUp (Button As Integer, Shift As Integer, x As Single, y As Single)
If Button=2 Then 'Verific a se o bo tão p r essio nado fo i o direito
Pop upMen u ficheiro 'Chama o menu ficheiro como menu pop -up
En d I f
En d Sub
... quando o utilizador clica sobre o form utilizando o botão direito do rato surge como pop-up menu o menu
ficheiro. Alternativamente ao evento MouseUp, poderia ter sido usado o evento MouseDown obtendo-se o
mesmo efeito.
Muitas vezes pretende-se aceder a um menu pop-up que não se quer disponível na menu bar. Para
esse efeito, elabora-se o menu usando o editor e torna-se invisível a sua opção de topo.
Pág. 56 de 70
Microsoft Visual Basic
Escola Secundária de Emídio Navarro 2001/2002
Estruturas, Tratamento e Organização de Dados
7. Eventos do rato
7.1. MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
MouseUp(Button as Integer, Shift as Integer, X As Single, Y As Single)
MouseMove(Button As Integer, Shift as Integer, X As Single, Y As Single)
Button - Indica qual o botão do rato foi pressionado: 1 - esquerdo, 2 - direito e 4 - meio. Se o rato estiver
configurado para 2 botões, obviamente que o botão do meio não poderá ser testado.
Shift - Este parâmetro representa o estado das teclas SHIFT, CTRL e ALT: 1 - SHIFT está a ser
pressionado, 2 - CTRL está a ser pressionado e 4 - ALT está a ser pressionado.
X, Y - Coordenadas do rato na escala especificada pelas propriedades respectivas.
7.2. Drag & Drop (arrastar e soltar)
As aplicações desenvolvidas em Visual Basic suportam uma funcionalidade conhecida por Drag &
Drop, comum nas aplicações Windows. Esta funcionalidade consiste em pegar num objecto e deslocá-lo
para outro sitio, com recurso ao rato.
Para que esta funcionalidade fique disponível é necessário que a propriedade DropMode
(normalmente uma PictureBox ou Image) do objecto de origem esteja configurada para 1.
Quando o DropMode é 1 o controlo não recebe os eventos Click e MouseDown, acompanhando a
posição do rato até o utilizador o soltar. Quando o utilizador solta o objecto de origem, o objecto de destino
recebe o evento DragDrop. Adicionalmente, são enviados para quaisquer objectos sobre os quais passa o
objecto origem o evento DragOver.
A propriedade DragIcon contém o ícone visível quando se arrasta o objecto de origem.
Pág. 57 de 70
Microsoft Visual Basic
Escola Secundária de Emídio Navarro 2001/2002
Estruturas, Tratamento e Organização de Dados
8. Tratamento de erros
Quando ocorre um erro durante a execução, o Visual Basic exibe uma caixa de diálogo com a
mensagem correspondente ao erro, abortando a execução do programa. Alternativamente, podemos
capturar e efectuar o tratamento do erro fazendo com que a que a aplicação retome a sua execução de uma
forma controlada.
Para a captura e tratamento de erros, incluem-se as instruções respectivas da seguinte forma:
S ub <n o m e>
[ < i n s t r uç õ es > ]
...
On Er ro r Go to E rr os
‘ In ib e a c ap tur a d e erro s p a ss an do o
[<instruções >]
‘ contro lo para a etiqueta Erro s
...
On Er ro r Go to 0
‘ D esac tiv a a c ap tu ra de er ros
Ex itSub
E rr os:
’ Codificaç ão para o tratamen to de erros
[ < i n s t r uç õ es > ]
...
En d Sub
On Error Goto Erros - Se ocorrer um erro nas instruções seguintes a esta instrução o controlo será
transferido para o código de tratamento de erros (etiqueta Erros).
On Error Goto 0 – Desactiva a captura de erros a partir desse ponto.
Err - Devolve um inteiro indicando o tipo de erro. Os erros estão devidamente tabelados no Help do Visual
Basic.
Error erro - Devolve o erro para ser tratado pelo Visual Basic. Devemos incluir a instrução Error Err para os
erros não testados, por forma a que o Visual Basic os trate.
Resume - Retoma a execução do programa, executando a instrução que causou o erro.
Resume Next – Retorna a execução do programa, executando a instrução imediatamente seguinte à que
causou o erro.
Pág. 58 de 70
Microsoft Visual Basic
Escola Secundária de Emídio Navarro 2001/2002
Estruturas, Tratamento e Organização de Dados
Resume etiqueta - Retoma a execução do programa no ponto indicado por etiqueta.
Pág. 59 de 70
Microsoft Visual Basic
Escola Secundária de Emídio Navarro 2001/2002
Estruturas, Tratamento e Organização de Dados
9. Ficheiros
Os ficheiros são uma forma de guardar dados em disco, disquete, etc. O Visual Basic permite a
utilização de ficheiros de várias formas, conforme a natureza do ficheiro e o objectivo da sua utilização.
9.1. Ficheiros sequenciais
Um ficheiro de acesso sequencial não é mais que uma sequência de bytes (cada byte corresponde
a um caracter), em que são utilizados os caracteres CR (carriage return) e LF (linefeed) para separar as
várias linhas que o constituem.
Exemplo:
...
O Carriage Return (CR) corresponde ao caracter 13, e o Line Feed (LF) ao caracter 10.
9.1.2. Abertura de um ficheiro sequencial
Sintaxe:
Open <caminho_ficheiro> For {InputIOutput|Append} As [#]<número_ficheiro>
<caminho_ficheiro>- O caminho do ficheiro identifica a unidade, caminho e nome do ficheiro.
{InputIOutput|Append} - Abre o ficheiro para leitura (Input), escrita (Output) ou acrescentar informação
(Append).
<número_ficheiro> - Um número que identifica o ficheiro entre 1 e 511. Pode-se utilizar a função FreeFile
para obter o próximo número disponível.
Exemplo:
Op en “C:\AUTOEXEC.BAT” For Inp u t As #1
… abre o ficheiro “autoexec.bat” para leitura.
Pág. 60 de 70
Microsoft Visual Basic
Escola Secundária de Emídio Navarro 2001/2002
Estruturas, Tratamento e Organização de Dados
Utiliza-se a função Dir para verificar se o ficheiro existe. Exemplo:
I f D i r ( “C: \ A UTOE X E C . B A T ” ) <>” ” T he n M sg Bo x “O f ic h e i ro ex is t e! ”
9.1.3. Fechar um ficheiro
Sintaxe:
Close [#]<número_ficheiro>
9.1.4. Leitura em ficheiros sequenciais
Sintaxe:
L in e I n p u t [ # ] <n ú m ero_ f icheiro>, <v ariáv el>
Lê uma linha de um ficheiro sequencial para a variável do tipo String <variável>.
A função EOF (End-Of-File), que requer como único argumento o <número_ficheiro> devolve True
quando o fim do ficheiro foi atingido.
Exemplo:
Op en "TE STE " Fo r I np u t A s #1
D o Wh i le No t E O F (1 )
L in e Inp u t # 1 , l inh a
D eb u g.P r int l in ha
Lo op
C lo s e #1
… abre o ficheiro “TESTE” para leitura e imprime, uma a uma, todas as suas linhas na janela Debug.
9.1.5. Escrita para um ficheiro sequencial
Sintaxe:
P r in t [ #] <n ú m er o _ f ich e iro>[, <variáv el>]
Pág. 61 de 70
Microsoft Visual Basic
Escola Secundária de Emídio Navarro 2001/2002
Estruturas, Tratamento e Organização de Dados
Guarda a expressão de saída no ficheiro identificado por <número_ficheiro>.
Os caracteres <CR> e <LF> são anexados automaticamente à <variável> a menos que o seu último
caracter da instrução Print # seja virgula (,) ou ponto e vírgula (;).
Exemplo:
Op en “TESTE ” For Outp ut A s #1
P r in t #1, ”Is t o é u m t e ste d e e sc r i ta ”
P r in t #1, ”pa r a u m f ic h e i r o s eq u en c i al . ”
C lo s e #1
... escreve (em duas linhas) no ficheiro “TESTE”: “Isto é um teste de escrita para um ficheiro sequencial”.
9.1.6. Leitura de um ficheiro como uma sequência de bytes
Sintaxe:
Inp u t(<n ú mer o >,[ # ] <nú mero_ f ic heir o > )
Lê para uma string o <número> de caracteres especificado, incluindo os caracteres de fim de Iinha,
a partir do ficheiro identificado por <número_ficheiro>.
Exemplo:
Op en “TESTE ” For Inp u t A s #1
D o Wh i le No t E O F (1 )
c ar ac ter =I np u t(1, #1 )
D eb u g.P r int c a rac te r
Lo op
C lo s e #1
... abre o ficheiro “TESTE” para leitura e imprime, um a um, todos os seus caracteres na janela Debug
(incluindo CR e LF).
A função LOF(<número_ficheiro>) retorna o número de bytes que o ficheiro contém.
Pág. 62 de 70
Microsoft Visual Basic
Escola Secundária de Emídio Navarro 2001/2002
Estruturas, Tratamento e Organização de Dados
10. Ficheiros de acesso aleatório
Ao contrário dos ficheiros sequenciais, os ficheiros de acesso aleatório permitem o acesso directo
(aleatório, sem ordem predeterminada) a cada um dos registos que o constituem. Isto é possível porque são
constituídos por registos de comprimento fixo.
10.1. Abertura de um ficheiro aleatório
Sintaxe:
Open <caminho_arquivo> For Random As [#]<número_ficheiro> Len=<tamanho_registo>
A cláusula Random indica que o ficheiro é de acesso aleatório. O <tamanho_registo> indica o
tamanho, em bytes, de cada um dos registos do ficheiro.
Exemplo:
Typ e r e g i s to al un o
n u m A s In teg e r
nome As String*40
En d Typ e
Dim aluno As registoaluno
...
Op en “A LUNOS. DA T” Fo r Ran dom A s #1 L en =L en (aluno )
... abre o ficheiro de alunos “ALUNOS.DAT”. Cada registo é constituído pelo número do aluno (campo num)
e nome, num total de 42 bytes (2 para o campo inteiro num e 40 para o campo nome). O objectivo da função
Len é, precisamente, determinar o comprimento em bytes do registo.
Pág. 63 de 70
Microsoft Visual Basic
Escola Secundária de Emídio Navarro 2001/2002
Estruturas, Tratamento e Organização de Dados
10.2. Leitura e escrita para ficheiros de acesso aleatório
As instruções Get e Put são usadas, respectivamente, para a leitura e escrita em ficheiros de
acesso aleatório.
Sintaxe:
G et # <n ú mer o_f ic h eiro> , [ <n úmero_ r egis to> ], <v ar iáv el>
P u t # <n úmer o_f ic h eiro> , [ <n úmero_ r egis to> ], <v ar iáv el>
A instrução Get lê, a partir do ficheiro identificado por <número_ficheiro>, o registo <número_registo>
para <variável>.
A instrução Put faz a operação inversa.
Em ambos os casos, quando não é especificado o número de registo, é assumido o próximo.
Exemplo:
Type registoaluno
num As Integer
nome As String*40
End Type
Dim aluno As registoaluno
...
Open “ALUNOS.DAT” For Random As #1 Len=Len(aluno)
For numregisto=1 To 5
aluno.num=numregisto
aluno.nome=”Nome “ & numregisto
Put #1, numregisto, aluno
Next numregisto
Close #1
... escreve no ficheiro “ALUNOS.DAT” 5 registos com os números 1, 2, ...,5 e nomes “Nome 1”, “Nome 2”,
..., “Nome 5”.
Pág. 64 de 70
Microsoft Visual Basic
Escola Secundária de Emídio Navarro 2001/2002
Estruturas, Tratamento e Organização de Dados
11. Métodos gráficos
Embora em Visual Basic o interface seja normalmente construído com recurso a controlos, também
são suportados métodos gráficos que, em tempo de execução, permitem tarefas como impressão de texto,
desenho de linhas e círculos, modificação de cores, etc.
11.1. Evento Paint e Propriedade AutoRedraw
Quando um form é sobreposto, o Windows gera um evento Paint para que o interface do form seja
recriado. O mesmo processo ocorre quando se minimiza uma janela e, posteriormente, se procede à sua
restauração.
Quando a propriedade AutoRedraw é True, o Visual Basic trata da recomposição da imagem. Como
o Visual Basic faz uma cópia do form para recompor a imagem, esta facilidade obriga ao dispêndio de
grandes quantidades de memória.
11.2. Coordenadas
O Visual Basic oferece um sistema de coordenadas por defeito que especifica as localizações dos
objectos num Form, PictureBox ou Printer. Nesse sistema, o canto superior esquerdo do form (ou de outro
dos objectos possíveis) tem as coordenadas (0,0), e os valores crescem à medida que se movimenta para a
direita ao longo do eixo horizontal, e para baixo ao longo do eixo vertical. As propriedades Top e Left de um
objecto indicam o seu deslocamento a partir do ponto de origem (0,0).
As propriedades Top e Left, assim como as propriedades Width (largura) e Height (altura), estão em
Twips.
Caso seja mais confortável trabalhar com outras unidades de medida, pode-se modificar a
propriedade ScaIeMode do form, para que este adopte outra unidade para o sistema de coordenadas.
Para além das escalas dos eixos horizontal e vertical, podemos também definir um ponto de origem
diferente do canto superior esquerdo. Essa posição é definida pelas propriedades ScaleLeft e ScaleTop,
que por defeito são 0 (zero).
11.3. Método Scale
O método Scale é usado para configurar as escalas (alternativamente à configuração das
propriedades anteriores). Sintaxe:
ob jec to. Sc ale (x1 , y1 ) - (x2, y2 )
Pág. 65 de 70
Microsoft Visual Basic
Escola Secundária de Emídio Navarro 2001/2002
Estruturas, Tratamento e Organização de Dados
Configura as coordenadas do canto superior esquerdo (x1, y1) e do canto inferior direito (x2, y2) do
objecto.
O método Scale sem parâmetros faz com que a escala de medida seja configurada para Twips, e
reconfigura a origem das coordenadas para o canto superior esquerdo do objecto, com coordenadas (0,0).
11.4. Método Point
Sintaxe:
[ ob j ec to ].Po int(x,y )
Retorna o código da cor RGB para o pixel localizado nas coordenadas (x, y).
11.5. Método Pset
Sintaxe:
[ ob j ec to ].Ps et [S tep ] (x, y ), <co r >
Configura um ponto com uma dada <cor>. A palavra Step é opcional, e permite especificar coordenadas
relativamente à última posição gráfica dada pelas propriedades CurrentX e CurrentY.
11.6. Método Line
Sintaxe:
ob jec to. Line [Step ] (x1, y1 ) – [Step ] (x2, y2 ), <cor>, [B][F]
Permite traçar linhas ou rectângulos entre as coordenadas (x1, y1) e (x2, y2). A palavra Step é
opcional e permite utilizar coordenadas relativas. O parâmetro B é opcional e permite, quando incluído,
desenhar uma caixa (Box). O parâmetro F, permite preencher a caixa.
Pág. 66 de 70
Microsoft Visual Basic
Escola Secundária de Emídio Navarro 2001/2002
Estruturas, Tratamento e Organização de Dados
12. Objecto Printer
Um programa de Visual Basic pode escrever directamente para a impressora (objecto Printer),
usando os métodos Print, Line, Circle, etc.
O método Scale pode ser usado para configurar a escala utilizada.
O método NewPage permite iniciar uma nova página e o método EndDoc para encerrar a tarefa de
impressão.
Pode-se consultar a propriedade Page do objecto Printer para recuperar o número de pagina actual.
Pág. 67 de 70
Microsoft Visual Basic
Escola Secundária de Emídio Navarro 2001/2002
Estruturas, Tratamento e Organização de Dados
13. Bases de dados
O Visual Basic permite aceder a diversos tipos de Bases de Dados, nomeadamente: Access,
FoxPro, DBase e Paradox. O acesso a B.D. pode ser efectuado de duas formas: através do controlo Data
ou por programação. Embora o acesso por programação ofereça mais potencialidades, será abordado
neste manual apenas o acesso através do controlo Data, dada a sua simplicidade.
13.1. Data
Propriedades
Connect - Identifica o formato da Base de Dados.
DatabaseName - Identifica o ficheiro da Base de Dados.
RecordSource - Selecciona a fonte dos dados (normalmente uma tabela ou query).
Os controlos CheckBox, PictureBox, Label, TextBox e outros, podem ser associados a campos da
tabela ou query usando o controlo Data respectivo.
Os campos lógicos podem ser exibidos em CheckBoxes, os campos com imagens podem ser
exibidos em PictureBoxes e ImageBoxes, e os campos alfanuméricos podem ser exibidos em TextBoxes.
A propriedade DataSource de cada controlo liga-o ao controlo Data respectivo.
A propriedade, DataField identifica o nome do campo (da tabela ou query) ao qual o controlo está
associado.
As alterações efectuadas (nos controlos associados aos campos) modificam automaticamente os
dados na tabela ou query.
Métodos
Refresh - A Base de Dados é aberta para uso ou fechada e reaberta (se já estiver aberta).
MoveFirst - Move o registo actual para o primeiro registo.
MoveNext - Move o registo actual para o próximo registo.
MovePrevious - Move o registo actual para o registo anterior.
Pág. 68 de 70
Microsoft Visual Basic
Escola Secundária de Emídio Navarro 2001/2002
Estruturas, Tratamento e Organização de Dados
MoveLast - Move o registo actual para o último registo.
AddNew - Acrescenta um novo registo.
Update - Actualiza a Base de Dados com as alterações efectuadas nos campos.
Delete - O registo actual é eliminado. Este método deve ser seguido de um dos métodos Move, pois o
registo actual desaparece.
13.2. Propriedades BOF e EOF
A propriedade BOF (Begining-Of-File) é True quando o registo actual está posicionado antes do
inicio dos dados. Isto costuma acontecer quando o primeiro registo é excluído.
A propriedade EOF (End-Of-File) é True quando o registo actual está posicionado além do final dos
dados.
Se qualquer uma das propriedades anteriores for True, o registo actual será inválido.
Se as duas forem True, não existe qualquer registo no conjunto de registos.
Pág. 69 de 70
Microsoft Visual Basic
Escola Secundária de Emídio Navarro 2001/2002
Estruturas, Tratamento e Organização de Dados
Pág. 70 de 70
Download

Microsoft Visual Basic Escola Secundária de Emídio