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