fig Barra de Menu

Tamanho: px
Começar a partir da página:

Download "fig Barra de Menu"

Transcrição

1 CAPÍTULO I 1 - CRIAÇÃO DE UM PROGRAMA Um programa de computador é um conjunto de instruções que informam à máquina o que deve ser feito, para que determinado objetivo seja alcançado. Para se criar um programa, utilizamos uma linguagem de programação. Como exemplo de linguagens temos Pascal, Cobol, C. Após o advento do Windows, o computador passou a apresentar um ambiente gráfico, enquanto que na época do DOS tínhamos um ambiente texto. No Windows as coisas ocorrem disparadas por eventos: clicar o cursor do mouse sobre um botão, apertar um conjunto de teclas, etc. Como a linguagem Visual Basic foi desenvolvida para criar programas para o Windows, dizemos que ela é orientada a eventos. Esse conceito será facilmente compreendido quando começarmos a programar efetivamente em VB. 2 - AS PARTES DE UM PROGRAMA Um programa pode ser dividido em duas partes: a interface visual e o processamento da informação. Nas linguagens antigas, para se criar a interface era necessário escrever linhas de código, e só era possível ver o resultado quando o programa estivesse realmente sendo executado. No VB, a interface é criada visualmente, sem que nenhuma linha de código precise ser escrita, e o resultado é visto no mesmo instante em que ela está sendo criada. 3 - AMBIENTE DE PROGRAMAÇÃO VB O ambiente de programação de uma linguagem é o conjunto de facilidades colocadas à disposição do programador, para que a tarefa de escrever um programa seja facilitada. O ambiente de programação do VB é composto dos seguintes elementos: 3.1) Barra de menu Como todos os aplicativos for Windows, a barra de menu do VB apresenta as opções de menu clássicas (File, Edit,...), além das específicas (View, Run, Debug,...). Durante o curso será visto a utilização das diversas opções. fig Barra de Menu 3.2) Barra de ferramentas (atalho para as opções de menu) Caixa com diversos botões que representam atalhos para as ações de menu. Também serão utilizadas durante o curso. Assim como a barra de menus, a barra de Ferramentas também é um objeto comum nos programas que rodam no Windows. fig Barra de Ferramentas 3.3) Caixa de ferramentas (ToolBox) A Caixa de Ferramenta mostra os controles que você pode adicionar ao seu projeto. Imagine um aplicativo que execute no Windows, ele certamente contém muitos objetos, como botões de comando, gráficos, grades, quadros textos, etc. Pois um programa desenvolvido em VB também pode possuir vários objetos. Esses objetos são colocados no programa sem que seja necessário digitar uma linha de código sequer. Basta selecioná-los na ToolBox. Um controle pode ser adicionado ao projeto de duas formas: dando-se um duplo clique sobre ele na ToolBox, ou clicando sobre ele uma só vez, e desenhando-o sobre o formulário, com o auxílio do mouse. Para se visualizar a Caixa de Ferramentas, seleciona-se a opção de menu View - Toolbox. 3.4) Janela de projeto A janela de projeto mostra a lista de todos os arquivos de Formulários e de Módulos do projeto em andamento. Esses arquivos podem ser adicionados ou retirados do projeto, conforme a necessidade. Para que voce tenha uma idéia, cada documento do Word é um formulário diferente, que deve ser adicionado ao programa. 1

2 Para adicionar um arquivo, usa-se a opção de menu Project - Add Form..., Project - Add Module..., etc, e para se retirar um arquivo, a opção Project - Remove File. Para se visualizar a janela de projeto, seleciona-se a opção View - Project Explorer. fig Caixa de Ferramentas fig Janela de Projeto 3.5) Janela de propriedades A janela de propriedades contém uma lista com as propriedades do controle ou formulário selecionado. As propriedades mostradas são as que podem ser alteradas durante o projeto. Quando mais de um controle é selecionado, a janela de propriedades mostra as propriedades comuns. fig Janela de Propriedades Para se visualizar a janela de propriedades, seleciona-se a opção de menu Window - Properties, ou a tecla de atalho F4. 2

3 4 - PROJETO 4.1) O que é um projeto Toda vez qual o VB é iniciado, um novo projeto é aberto. Um projeto é a denominação que se dá ao conjunto de formulários, controles e módulos que são utilizados na criação de um programa. Quando um projeto é salvo, são salvos no diretório escolhido pelo programador, os seguintes arquivos: um arquivo de projeto (.VBP), e tantos arquivos de formulários (.FRM) e de módulos (.BAS) quantos forem os formulários e os módulos existentes neste projeto em particular. Os arquivos de controle (.OCX), devem estar disponíveis, normalmente no diretório c:\windows\system. Esses arquivos possibilitam que um ou mais controles estejam disponíveis na caixa de ferramentas. 4.2) Componentes de um projeto São os seguintes, os componentes de um projeto: * Formulários * Controles * Módulos Os formulários são as janelas que estamos acostumados a ver no ambiente Windows. Toda vez que um projeto é iniciado, um formulário é automaticamente adicionado ao projeto. Não pode haver um projeto sem pelo menos um formulário ou um módulo. Os controles são os objetos que povoam as janelas (formulários). Os controles são colocados nos formulários, clicando-se sobre o ícone correspondente na caixa de ferramentas. São exemplos de controles: botões de comando, botões de opção e quadro textos. Os módulos são os locais onde são declaradas as funções, os procedimentos e as variáveis de alcance global. Associado a cada objeto (controles ou formulários) existem as propriedades, os eventos e os métodos. As propriedades, em geral, dizem respeito à aparência de um objeto. Existem propriedades que tratam de aspectos não relacionado à aparência, e serão apresentadas a medida que o curso se desenvolva. Como exemplo de propriedades temos: a cor de um formulário, o tipo de letra de um quadro texto, a legenda de um botão de controle. Existem propriedades que só podem ser alteradas durante o projeto (como o nome de um controle), outras que só podem ser alteradas durante a execução (como a propriedade recordset de um controle de dados), e por fim, as que podem ser alteradas tanto durante o projeto quanto durante a execução (como a legenda de um botão de comando). Os eventos são as ações que ocorrem em relação a algum controle. Por exemplo, temos o evento click de um botão (ocorre quando usamos o mouse e clicamos sobre o botão) e o evento change de um quadro texto (ocorre quando o texto de um quadro texto é mudado). Usamos os eventos para escrever algum código que será executado toda vez que o evento ocorra. Os métodos são procedimentos ou funções previamente definidos, que operam sobre os objetos. Por exemplo, temos o método circle, que desenha um círculo sobre um objeto especificado, e o método Move, que movimenta o objeto para uma localização em particular. 4.3) Salvando um projeto Utilizando a opção de menu File - Save Project, todos os arquivos do projeto são salvos no diretório previamente especificado, ou a janela de diálogo Salvar Como aparece, caso seja a primeira vez que o projeto esteja sendo salvo. 4.4) Gerando um executável Um arquivo executável é gerado através da opção de menu File - Make EXE File... Uma vez gerado esse arquivo (.EXE), o programa pode ser executado sem que o VB esteja presente na máquina hospedeira. 5 - O PROGRAMA INAUGURAL Neste primeiro programa serão apresentados os seguintes objetos: formulário, botões de comando (Command Button), quadro texto (Text Box) e label (Label). Serão vistas também as propriedades Name, Caption, BackColor, ForeColor, FontSize, FontName e FontItalic, além do evento Click. Veremos também como alterar o valor de uma propriedade em tempo de projeto, em tempo de execução, e como incluir linha de código em um evento. O formulário com o programa em execução, é mostrado na figura 1.6. Para se alterar uma propriedade de algum objeto, em tempo de projeto, deve-se escrever o novo valor dessa propriedade na janela de propriedades, na linha referente à propriedade. Obviamente o objeto escolhido deve estar selecionado, o que pode ser feito de duas formas: antes de visualizar a janela de ferramentas, clicar uma vez sobre o objeto; ou após a janela estar acionada, escolher o objeto na lista de objetos que aparece na janela de propriedades. 3

4 Para se colocar um controle em um formulário, dar um clique sobre o botão correspondente (na caixa de ferramentas), e desenhar o controle sobre o formulário (com o botão esquerdo do mouse pressionado). Pode-se também, dar dois cliques sobre o botão correspondente (na caixa de ferramentas), o que fará com que o controle apareça no meio do formulário. Para acessar a janela que permite incluir código nos eventos, dar um duplo clique no objeto escolhido, usar a opção de menu View - Code, ou usar a tecla de atalho F7. fig O formulário do primeiro programa Após iniciar uma sessão do VB, realizar as seguintes ações: - Alterar a propriedade Name do formulário para FRMproj1- Este será o nome interno do formulário. - Alterar a propriedade caption do formulário para Aula Inaugural. - Salvar o projeto no diretório c:\aulavb\aula1\proj1 com o nome proj1.vbp. - Salvar o formulário como proj1.frm - Este será o nome do arquivo de formulário, deste formulário. 5.1) Botões de Comando, Quadro Texto e Label - Colocar três Botões de Comando no formulário. Observe que os botões tem os nomes Command1, Command2 e Command3, e que a propriedade Caption dos três controles é igual à propriedade Name de cada um deles. Toda vez que um controle é adicionado a um formulário, o VB lhe dá um nome padrão (um valor para a propriedade Name). É importante que os nomes dos objetos sejam significativos para o programador, por isso sempre alteraremos a propriedade Name de todos os controles. - Alterar as propriedades Name e Caption para as seguintes: name: BTNecoar, BTNlimpar, BTNsair caption: &Ecoar, &Limpar, Sai&r, respectivamente. OBS: Quando o símbolo & é colocado antes de alguma letra, no valor da propriedade Caption, a legenda do controle apresentará a letra sublinhada. Isto significa que o evento Click deste controle pode ser acionado digitando-se <Alt + a_tecla_sublinhada>. - Colocar um quadro texto (Text Box) no formulário, e alterar as seguintes propriedades: name: TXTentrada text: - Colocar um Label no formulário, e alterar as seguintes propriedades: name: LBLeco caption: - Observe a figura 1.6 para dispor os controles adequadamente no formulário. 4

5 Label Quadro Texto fig Botão de Comando, Quadro Texto e Label 5.2) Evento Click - Adicionar no evento BTNsair_click: End O evento BTNsair_click ocorre sempre que o usuário der um clique com o mouse sobre o botão BTNsair. Quando isso ocorre, o Windows captura esse evento, e o código que estiver associado ocorrerá. A palavra End, é uma instrução do VB que finaliza um programa. - Executar o programa. Verificar que ao se clicar sobre os botões Limpar e Ecoar, nada acontece (não há código associado ao evento Click desses botões), mas que ao clicar sobre o botão Sair, o programa é encerrado. - Adicionar no evento BTNecoar_click: LBLeco.Caption = TXTentrada.Text Para referenciar uma propriedade de um controle durante a execução do programa, escreve-se o nome do controle (propriedade Name), seguido de um ponto e do nome da propriedade que se quer acessar. A linha de código inserida no evento BTNecoar_click copia o valor da propriedade Text do quadro de texto TXTentrada, para a propriedade Caption do label LBLeco. - Executar o programa. Verificar o que ocorre ao se clicar no botão Ecoar. - Adicionar no evento BTNlimpar_click: TXTentrada.Text = "" LBLeco.Caption = "" Este código limpa os valores das propriedades Text e Caption, dos controles TXTentrada e LBLeco, respectivamente. - Executar o programa. Verificar o que ocorre quando se clica nos botões. - Salvar o projeto. - Gerar o executável. Usar a opção de menu File - Make EXE File... Escolher o diretório C:\aulavb\aula1\proj1. - Executar o programa a partir do gerenciador de arquivos. - Executar o programa a partir do gerenciador de programas. - Voltar ao projeto, e para todos os objetos, modificar as seguintes propriedades: * BackColor * ForeColor * FontSize * FontName * FontItalic 5

6 Essas propriedades dizem respeito a aparência dos objetos, como a cor de fundo e das letras, e o nome, o tamanho e se a fonte deve ou não ficar itálico. Verificar que nem todas as propriedades são comuns a todos os objetos, e que se comportam de forma diferente, de acordo com o objeto. 6 - OUTRO PROGRAMA Apresentação do controle barra de rolagem, com as suas principais propriedades, apresentação dos eventos Form_Load e Change, além das propriedades Tab, Top, Left, Width e Height. - Iniciar um novo projeto. - Salvar o projeto no diretório c:\aulavb\aula1\proj2 com o nome proj2. 6.1) Propriedades Top, Left, Width, Height e ScaleMode - Alterar as propriedades do formulário: *Name = FRMproj2 *Caption = Velocidade *Top = 1170 *Left = 1080 *Width = 4125 *Height = 4545 As propriedades Top e Left são as coordenadas de um objeto. O valor 1170 da propriedade Top significa que o formulário dista 1170 unidades da parte superior da tela, enquanto que a propriedade Left determina a distância do formulário em relação à borda esquerda da tela. A unidade utilizada é definida pela propriedade de formulário Scale Mode, que por default é o Twip. Para os controles, essas propriedades determinam as coordenadas em relação ao formulário que os contém. As propriedades Width e Height definem as dimensões de um objeto (largura e altura), e também dependem da propriedade Scale Mode. Todas essas propriedade podem ser alteradas tanto durante o projeto quanto durante a execução. Observe que alterando a posição ou o tamanho de um objeto, via mouse, as propriedades são automaticamente atualizadas. fig O segundo programa 6.2) Propriedades Alignment e MultiLine - Incluir um quadro texto, com as propriedades: *Name = TXTvelocidade *Text = *BackColor = vermelho *ForeColor = branco *Alignment = centro *MultiLine = True *Top = 240 *Left = 1320 *Width = 1215 *Height = 495 A propriedade Alignment determina como o texto (propriedade Text) de um quadro texto será alinhado dentro do controle. Essa propriedade só é reconhecida, se a propriedade MultiLine do mesmo controle tiver o valor True. Essa propriedade habilita várias linhas em um quadro texto. 6

7 - Incluir um botão de comando *Name = BTNsair *Caption = Sai&r *Top = 3000 *Left = 1440 *Width = 1215 *Height = ) Barra de Rolagem Horizontal (HScrollBar) - Incluir uma barra de rolagem horizontal (HScrollBar), com as seguintes propriedades: *Name = HSBvelocidade *Top = 1440 *Left = 600 *Width = 2775 *Height = No evento BTNsair_click End - Executar o programa. Verificar que não ocorre nada ao se clicar na Barra de Rolagem. 6.4) Propriedades Min, Max, Value, SmallChange e LargChange - Na barra de rolagem horizontal, alterar as seguintes propriedades: *Min = 0 *Max = 100 *Value = 50 *SmallChange = 10 *LargChange = 50 Para uma barra de rolagem funcionar, essas propriedades devem ser configuradas. A propriedade Value indica o valor atual da barra (a posição do marcador), e pode variar entre os valores das propriedades Min e Max. A propriedade SmallChange define de quanto será a variação do valor de Value, quando umas das setas das extremidades do controle for clicada, enquanto que LargChange define a mesma variação quando a parte interna da barra de rolagem for clicada. Barras de Rolagem fig Barra de Rolagem 6.5) Foco do Teclado - Propriedade TabIndex - Executar o programa. Verificar o que ocorre com a barra de rolagem. Verificar que a medida que se pressiona a tecla <Tab>, o foco do teclado passa de um controle para o outro. Quando um controle detém o foco, ele pode ser acessado também pelo teclado, e não apenas pelo mouse. Por exemplo, quando um quadro texto tem o foco, é possível escrever nele; quando um botão tem o foco, é possível clicálo teclando-se <Enter>. A propriedade que determina a ordem em que os controles receberão o foco, é a propriedade TabIndex. 6.6) Evento Change -Escrever na janela de código do evento HSBvelocidade_Change. TXTvelocidade.Text = HSBvelocidade.Value O evento Change ocorre sempre que o conteúdo de um controle é alterado ( o texto de um quadro texto, a legenda de um label, o valor de uma barra de rolagem, etc). 7

8 Esta linha de código copia o conteúdo da propriedade Value do controle HSBvelocidade para a propriedade Text do quadro texto TXTvelocidade. Este evento ocorre toda vez que as setas da extremidade da barra de rolagem forem clicadas. - Executar o programa. Verificar o que ocorre quando se clica nas extremidades da barra de rolagem. 6.7) Evento Load - Escrever no evento Form_load do formulário: TXTvelocidade.Text = BRHvelocidade.Value + Km\h O evento Form_load ocorre sempre que um formulário é carregado na memória. Como só existe um formulário neste projeto, quando iniciamos a execução, automaticamente o formulário é carregado, e o evento Form_load ocorre. O comando copia para a propriedade Text do controle TXTvelocidade, o valor da propriedade Value da barra de rolagem, concatenando-a com a string Km\h. - Executar o programa. Verificar que agora o quadro texto já apresenta o valor da barra, ao iniciar o programa. 6.8) Propriedade Enabled - No controle TXTvelocidade. *Enabled = False A propriedade Enabled habilita (True) ou desabilita (False) um controle - permitindo ou não que o controle receba o foco do teclado. No caso de um quadro texto, Enabled = False impede que o usuário digite algo no quadro texto. 6.9) Evento Scroll - No evento HSBvelocidade_Scroll. TXTvelocidade.Text = BRHvelocidade.Value + Km\h O evento Scroll de uma barra de rolagem ocorre quando se arrasta o marcador do controle. - Executar o programa. 8

9 CAPÍTULO II 1 - TIPOS DE DADOS Os tipos de dados suportados pelo VB são os seguintes: TIPO DE DADO SUFIXO TAMANHO FAIXA Integer % 2 bytes Long(long integer) & 4 bytes Single! 4 bytes Double # 8 bytes 8 bytes String $ 1 byte por caracter Variant Nenhum Object Nenhum 4 bytes 2 - DECLARAÇÃO DE VARIÁVEIS Ao se declarar uma variável, deve-se especificar qual é seu tipo. Quando o tipo não é especificado, ela é considerada como sendo Variant. 2.1) Dim A declaração de variáveis é feita usando-se a palavra chave Dim, seguida do nome da variável, com a indicação do tipo vindo em seguida: 2.2) Public Dim i as Integer ou Dim i% Dim x as Double ou Dim x# Uma variável declarada como Public, é visível em qualquer parte do projeto, e não apenas no módulo onde ela for declarada. Essa declaração só pode ser feita em um módulo. Ex.: 2.3) Private Public Numerodeempregados As Integer Declara variáveis que são privativas do módulo em que foi feita a declaração. Essas variáveis não são visíveis fora do módulo. Essa declaração só pode ser feita em um módulo.por exemplo: 2.4) Static Private Numero As Integer As variáveis Static são declaradas em funções, e retém seu valor entre as chamadas. São variáveis locais, que não são destruídas após a função ter sido encerrada, porém só são visíveis de dentro da função. Por exemplo: Function Total(numero) ' Somente a variável acumulo retem seu valor entre as chamadas. Static acumulo acumulo = acumulo + numero Total = acumulo End Function 9

10 2.5) Matrizes As variáveis matrizes são declaradas usando a seguinte sintaxe: dim <nome_da_variável> (<limite_inferior> to <limite_superior>) as tipo Onde nome_da_variável é um identificador definido pelo programador, e limite_inferior e limite_superior são os valores inteiros que limitam a dimensão da matriz. Para criar uma matriz com mais de uma dimensão (no máximo 60 dimensões), basta acrescentar outros <limite_inferior> to <limite_superior> à declaração, conforme o exemplo: Dim X(1 To 8) As Integer Dim Y(1 To 8, 5 To 9) As Single No primeiro caso temos a declaração da variável vetor X de elementos Integer, de uma dimensão e com índices variando de 1 a 8,. No segundo caso é declarada a variável Y, um vetor de valores Single, com duas dimensões, tendo a primeira índices variando de 1 a 8 e a segunda de 5 a 9. O acesso a um elemento da matriz é feito escrevendo-se o nome da variável seguida de parênteses, que contém a posição do elemento dentro das dimensões da matriz. Observe o exemplo: X (2) = 6 Y (3,6) = 8.9 No primeiro caso, é colocado o valor 6 no segundo elemento da variável X, enquanto que no segundo caso, é colocado o valor 8.9 no elemento de índice 3 na primeira dimensão e 6 na segunda. Se imaginarmos a variável Y como uma tabela, teríamos o seguinte: 2.6) Redim A instrução ReDim é utilizada para dimensionar ou redimensionar uma matriz dinâmica que já tenha sido declarada formalmente utilizando-se uma instrução Private, Public ou Dim com os parênteses vazios (sem subscritos de dimensão). É possível utilizar a instrução ReDim várias vezes para alterar o número de elementos e dimensões em uma matriz. Observe o exemplo: Dim vetor() As Integer 'declara a matriz com os parênteses vazios ReDim vetor(10) 'redeclara a matriz com 10 elementos 3 - INSTRUÇÕES DE CONTROLE DE FLUXO DE PROGRAMAS 3.1) If <expressão> Then <comando> O comando If condiciona a execução de um comando (ou bloco de comandos) à verificação de uma expressão. O comando só é executado se a expressão for verdadeira. If A = 1 Then <cmdo ou bloco executado somente se A for igual a 1> Existe também a possibilidade da utilização do Else, como no exemplo abaixo If A = 1 Then <cmdo ou bloco executado somente se A for igual a 1> Else <cmdo ou bloco executado somente se A for diferente de 1> 10

11 Também é possível o uso de If's aninhados, sendo executado o grupo de comandos associados à condição verdadeira. Observe o exemplo: If x > 4 then <comandos> ElseIf x = 4 then <comandos> Else <comandos> 3.2) A instrução Select Case Essa instrução tem funcionamento parecido com a anterior, normalmente sendo utilizada quando há a necessidade de uma escolha que envolva várias opções. É testado o valor de uma expressão numérica ou string, contra vários valores, cada um associado a um case. Serão executados os comandos que estiverem relacionados ao case que contiver a condição verdadeira. Select Case x Case 0 End Select Case 1 Case 2 <comandos que serão executados caso x = 0> <comandos que serão executados caso x = 1> <comandos que serão executados caso x = 2> Select Case x Case 0 Beep Case Is > 1 < 5 Text1.Text = x Case 2 x = x * x Text1.Text = x Case Else Text1.Text = 2*x End Select Voce também pode usar múltiplas expressões ou faixas em cada cláusula case. Por exemplo, a seguinte linha é válida: Case 1 To 4, 7 To 9, 11, 13, Is > X 3.3) A instrução Do While... Loop Esta instrução é utilizada para executar instruções enquanto uma determinada condição for verdadeira. x = 1 Do While X < 1000 x = x + 1 Loop O pedaço de código acima inicializa a variável x, e executa o comando x = x + 1 enquanto x for menor que 3.4) A instrução Do... Loop While No exemplo anterior, se x fosse inicializado com 1000, o loop nunca seria executado. Pode ser conveniente que um determinado loop seja executado pelo menos uma vez, independente da variável de controle. Isto é possível com Do... Loop While. x = <qualquer_valor> Do x = x + 1 Loop While x < 1000 Neste fragmento de código, o comando x = x + 1 é executado pelo menos uma vez, sendo executado novamente enquanto x for menor do que

12 OBS: É possível a substituição da palavra While pela palavra Until nas instruções vistas anteriormente. Neste caso, o loop será executado até que a condição se torne verdadeira, e não enquanto ela for verdadeira. 3.5) A instrução For... Next É uma outra forma de se criar loops no VB. Sempre que for possível, deve ser utilizado no lugar das outras instruções de repetição, por ser mais rápida. For x = 1 to 100 Step 2 y = y + 1 Next Este comando realiza o loop contando x de 1 até 100, de 2 em 2. Step informa de quanto será o incremento da variável de controle. Se for omitida, o valor do incremento será 1. Observe que o valor inicial da variável de controle (no caso x), é definido no próprio comando, não importando qual valor a variável possuia antes. 3.6) A instrução Exit For Esta instrução determina a saída do loop contido da instrução For... Next mais interna, mesmo que a condição de término do loop não tenha sido alcançada. For x = 1 to 100 Step 2 y = y + 1 if y = 30 then Exit For Next Se y tiver o valor 30 durante a execução do loop, o comando For é encerrado. 3.7) A instrução Exit Do Esta instrução determina a saída do loop da instrução Do... mais interna, mesmo que a condição de término do loop não tenha sido alcançada. É semelhante à instrução Exit For. x = <qualquer_valor> Do x = x + 1 if x = 30 then Exit Do Loop While x < SELECIONANDO OPÇÕES O próximo programa nos mostrará como permitir que o usuário selecione uma opção. Para isto serão vistos os controles Option Button (botão de opção) e Check Box (caixa de verificação). - Iniciar um projeto. - Alterar as propriedades do formulário: Name = FRMopcao Caption = Programa Opção formulário : opcao.frm - Salvar o projeto no diretório c:\aulavb\aula02\proj1: - Inserir um botão de comando: Name = BTNsair Caption = Sa&ir - Inserir um label: Name = LBLescolha Caption = <vazio> O formulário deve ficar conforme a figura

13 4.1) Option Button e Check Box Um Botão de opção (Option Button) e um Caixa de verificação (Check Box) permitem que o usuário faça uma escolha. Quando ocorre um clique sobre o controle, em tempo de execução, a propriedade Value muda de True para False, e vice e versa. Quando essa propriedade for True, o botão se apresentará marcado. O funcionamento dos dois controles é similar, com a diferença de que em um formulário, vários Check Box podem estar selecionados, mas somente um Option Button pode ter Value como True. Outra diferença é que os valores possíveis de Value são True e False para um Option Button, e 0, 1 e 2 (não marcado, marcado e não disponível) para um Check Box. - Inserir 3 (três) botões de opção: Name = OPTverde Name = OPTvermelho Name = OPTbranco Caption = Ve&rde Caption = Ver&melho Caption = &Branco Value = False Value = False Value = True - Inserir 3 (três) botões de verificação: Name = CHKcor Name = CHKsom Name = CHKmouse Caption = &Cor Caption = &Som Caption = &Mouse Value = 0 Value = 0 Value = 0 - Inserir o seguinte código nos eventos Click dos botões de opção: atualiza_cor fig 2.1 fig Option Button e Check Box 5 - ESCREVENDO E CHAMANDO FUNÇÕES E PROCEDIMENTOS 5.1) Procedimentos (Sub) A linha de código acima significa que o procedimento atualiza_cor será executado toda vez que qualquer um dos botões de opção for clicado. Obviamente devemos escrever o código deste procedimento. Na seção General do formulário, escreva Sub atualiza_cor, e tecle <Enter>. Automaticamente o VB apresenta uma janela de código para o procedimento em questão. Uma outra maneira de criar um procedimento ou função é através do item de menu Tools Add Procedure, conforme figura 2.3. A janela de diálogo da figura 2.4 será exibida. 13

14 fig 2.3 Criar procedimento A diferença entre um procedimento e uma função é que a função retorna um valor. No procedimento atualiza_cor, escrever então o seguinte código: Sub atualiza_cor If OPTvermelho Then FRMopcao.BackColor = &HFF& OPTvermelho.BackColor = &HFF& OPTverde.BackColor = &HFF& OPTbranco.BackColor = &HFF& CHKcor.BackColor = &HFF& CHKsom.BackColor = &HFF& CHKmouse.BackColor = &HFF& LBLescolha.BackColor = &HFF& ElseIf OPTverde Then FRMopcao.BackColor = &HFF00& OPTvermelho.BackColor = &HFF00& OPTverde.BackColor = &HFF00& OPTbranco.BackColor = &HFF00& CHKcor.BackColor = &HFF00& CHKsom.BackColor = &HFF00& CHKmouse.BackColor = &HFF00& LBLescolha.BackColor = &HFF00& ElseIf OPTbranco Then FRMopcao.BackColor = &HFFFFFF OPTvermelho.BackColor = &HFFFFFF OPTverde.BackColor = &HFFFFFF OPTbranco.BackColor = &HFFFFFF CHKcor.BackColor = &HFFFFFF CHKsom.BackColor = &HFFFFFF CHKmouse.BackColor = &HFFFFFF LBLescolha.BackColor = &HFFFFFF Este procedimento troca o valor da propriedade BackColor de todos os controles do formulário (exceto do botão), de acordo com o botão de opção escolhido. fig 2.4 janela de diálogo Add Procedure - Inserir o seguinte código nos eventos Click das caixas de verificação: atualiza_label 14

15 A linha de código acima significa que o procedimento atualiza_label será executado toda vez que qualquer um dos botões de check for clicado. Obviamente devemos escrever o código deste procedimento. Escrever o procedimento atualiza_label: Sub atualiza_label Dim pl, info As String pl = Chr(10) + Chr(13) If CHKcor Then info = "Cor ON" Else info = "Cor OFF" If CHKsom Then info = info + pl + "Som ON" Else info = info + pl + "Som OFF" If CHKmouse Then info = info + pl + "Mouse ON" Else info = info + pl + "Mouse OFF" LBLescolha.Caption = info end sub As duas variáveis (pl e info) são do tipo string. A variável pl recebe o valor Chr(10) + Chr(13). A função chr() devolve o símbolo cujo código Ascii é o número passado como parâmetro, sendo 10 o código de avanço de linha e 13 o de retorno de carro. Na prática, o uso dessa função com esses parâmetros, faz com que uma linha seja avançada. A variável info recebe o seu valor de acordo com as caixas de verificação que estiverem selecionadas. 5.2) Funções Este outro programa mostrará como uma função deve ser codificada e chamada. O formulário deve Ter a aparência mostrada na figura Iniciar um novo projeto, com as seguintes propriedades do formulário: Name = FRMcalcular Caption = Calculadora Simples BackColor = &H00C0C0C0& (cinza) - Salvar o projeto no diretório c:\aulavb\aula02\proj2, com o nome calcular.mak, e o formulário como calcular.frm. - Colocar dois quadros textos: Name = TXTop1 Name = TXTop2 BorderStyle = 1 BorderStyle = 1 15

16 fig 2.5 Outro projeto - Colocar dois labels, de forma que o label LBLoperacao fique entre os dois quadros textos, e o label LBLigual fique depois do quadro texto TXTop2: Name =LBLoperacao Name = LBLigual BorderStyle = 0 BorderStyle = 0 Caption = = - Colocar quatro botões de opção, um em cima do outro, do lado esquerdo do formulário, conforme a figura 2.5: Name = OPTsoma Caption = &Soma Name = OPTsubtracao Caption = Su&btracao Name = OPTmultiplicacao Caption = &Multiplicacao Name = OPTdivisao Caption = &Divisao - Colocar dois botões de comando: Name = BTNcalcular Caption = &Calcular Name = BTNSair Caption = Sai&r - Escrever no evento click do botão BTNsair: End - Escrever no evento click de cada botão de opção: LBLoperacao.caption = + (OPTsoma_clicK) LBLoperacao.caption = - (OPTsubtracao_click) LBLoperacao.caption = x (OPTmultiplicacao_click) LBLoperacao.caption = / (OPTdivisao_click) Dessa forma, sempre que um botão de opção for selecionado (clicado), o controle LBLoperacao terá a propriedade Caption configurada adequadamente. - Configurar as propriedades FontSize para obter um melhor efeito, aumentando o tamanho da fonte usada. - No evento form_load: optsoma_click optsoma.value = 1 Isto faz com que o evento click do botão de opção seja executado, colocando + no caption do label LBLresultado (1ª linha) e faz com que o OPTsoma fique selecionado (2ª linha), assim que o programa inicie. - Executar o programa. - No evento BTNcalcular_click: LBLresultado.caption = calcular(val(txtop1.text), Val(TXTop2.Text)) Como já dito anteriormente, a diferença entre uma função e um procedimento é que uma função retorna um valor. Portanto, ao chamar uma função, o valor de retorno deve ser atribuído a alguma coisa (variável, propriedade de algum controle,etc.). A linha de código vista acima coloca o valor de retorno da função calcular na propriedade Caption do controle LBLresultado. 16

17 Tanto uma função como um procedimento podem receber argumentos. Argumentos são como variáveis locais, internas à função ou procedimento. Para chamar uma função com argumentos, eles devem vir entre parênteses; no caso de uma sub (procedimento), não se usa parênteses. Obviamente a função ou procedimento deve especificar os seus parâmetros na definição, indicando também de que tipo eles são. - Na seção General do formulário, escrever Function calcular(op1, op2). - Inserir o seguinte código na janela de edição da função calcular: Function calcular (op1 As Single, op2 As Single) Select Case LBLoperacao.Caption Case "+" calcular = op1 + op2 Case "_" calcular = op1 - op2 Case "x" calcular = op1 * op2 Case "/" If op1 = 0 Then MsgBox "Impossível dividir por zero!",, "Aviso" Exit Function calcular = op1 / op2 End Select End Function - Executar o programa. 5.3) Função Val() A função predefinida Val() recebe como argumento uma string que pode ser interpretada como um número,e retorna este número como um double. Ela lê o argumento até que apareça um caracter que não represente um número. Caso o primeiro caracter não seja numérico, a função retorna o valor zero. 5.4) Propriedade AutoSize - Alterar a propriedade do controle LBLresultado: LBLresultado.AutoSize = True A propriedade AutoSize é aplicada a um Label e a uma Picture (um controle ainda não visto), e determina se o controle se ajustará ao seu conteúdo (o valor da propriedade Caption no caso do Label). 17

18 CAPÍTULO III 1- CONTROLANDO O TEMPO O próximo programa nos mostrará como permitir que o usuário controle a execução de ações em função do tempo. Para isto será visto o controle Timer. Controle fig Controle Timer - Iniciar um projeto. - Alterar as propriedades do formulário: Name = FRMtimer Caption = Timer - Salvar o projeto no diretório c:\aulavb\aula03\proj1: formulário : timer.frm projeto : timer.mak - Inserir um botão de comando: Name = BTNhabilita Caption = Desabilitar - Inserir um quadro texto: Name = TXT1 Caption = <vazio> - Inserir uma barra de rolagem vertical: Name = BRVintervalo Max = 1000 Min = 1 LargeChange = 1 SmallChange = 50 Value = 500 O formulário do programa deve ficar com a aparência da figura ) Timer Control Um Timer é um controle que permite a execução de um código, em intervalos de tempo regulares, através do seu único evento Timer. Esse controle sempre fica invisível durante a execução do programa. - Inserir 1 (um) controle Timer: Name = Timer1 Interval = ) Propriedade Interval e o evento Timer A propriedade Interval define qual o intervalo de tempo (em milésimos de segundo) decorrerá entre duas ocorrências do evento Timer. Como o valor inicial foi de 500 (definido na Caixa de Propriedades), a cada 500 milisegundos o código relacionado ao evento Timer será executado. - Executar o programa. Note que nada acontece, pois o evento Timer não tem qualquer código associado. 18

19 fig O formulário desse programa - Inserir o seguinte código nos eventos Change e Scroll da barra de rolagem vertical: timer1.interval = BRVintervalo.Value Isso fará com que o usuário possa controlar o intervalo de tempo que decorrerá entre uma chamada e outra ao evento Timer. - Inserir no evento Timer1.Timer a linha de código: TXT1.Text = TXT1.Text + 1 Beep Toda vez que o evento Timer ocorrer, o valor mostrado no quadro texto será incrementado em uma unidade, e um sinal sonoro será emitido. - Executar o programa. - Incluir no evento BTNhabilita.Click o seguinte código: Sub BTNhabilita_Click () If VRGhabilita = 1 Then timer1.enabled = True VRGhabilita = 0 BTNhabilita.Caption = "Desabilitar" Else timer1.enabled = False VRGhabilita = 1 BTNhabilita.Caption = "Habilitar" - Execute o programa e veja o que ocorre. - Inclua um controle no programa, de forma que o intervalo seja informado ao usuário. 2 - USANDO O MOUSE Neste outro programa começaremos a entender o funcionamento e a usar o mouse. Veremos inicialmente dois eventos de mouse (MouseDown e MouseMove), e nos próximos projetos discutiremos os demais. Veremos também novos controles e novos métodos: a caixa de figura (Picture Box), o quadro combo (Combo Box), o Frame e a caixa de listagem (List Box); e os métodos Circle e Move. - Iniciar um projeto. - Alterar as propriedades do formulário: Name = FRMmouse Caption = Mouse 19

20 fig o formulário desse projeto - Salvar o projeto no diretório c:\aulavb\aula03\proj2: formulário : mouse.frm projeto : mouse.mak - Inserir um Frame: Caption = Cursor - Declarar uma variável de formulário, seguindo a sintaxe abaixo: Dim VFcor As Integer Picture Box Frame Comb obox List Box fig Controles ComboBox, ListBox, Frame e PictureBox 2.1) List Box Control Esse controle mostra uma lista de itens, a partir da qual o usuário pode selecionar um ou mais itens. Se o nº de itens exceder o nº que pode ser mostrado, uma barra de rolagem automaticamente é adicionada ao controle. As duas propriedades mais importantes são a ListIndex e a ListCount. ListIndex informa o índice do item selecionado (o primeiro item tem índice 0, e assim por diante), e ListCount o nº de itens que estão no controle. A propriedade Text informa o valor do item selecionado. Se nenhum item estiver selecionado, ListIndex tem o valor zero. 2.2) Métodos AddItem e RemoveItem Para adicionar e remover itens de uma List Box, usamos os métodos AddItem e RemoveItem, respectivamente. Esses métodos são usados por vários controles do VB, sendo que o funcionamento é semelhante. - Inserir uma List Box: - No evento Form Load inserir o seguinte código: List1.AddItem "Preto" List1.AddItem "Azul" List1.AddItem "Verde" List1.AddItem "Vermelho" List1.AddItem "Amarelo" List1.AddItem "Branco" List1.ListIndex = 0 Este código fará com que, ao ser carregado o formulário, os itens especificados sejam adicionados ao controle, ficando o primeiro item selecionado ("Preto"). Mais a frente veremos onde utilizar esses itens. - No evento List1_Click, inserir o seguinte código: 20

21 Private Sub List1_Click() Select Case List1.Text Case "Preto" VFcor = 0 Case "Azul" VFcor = 9 Case "Verde" VFcor = 10 Case "Vermelho" VFcor = 12 Case "Amarelo" VFcor = 14 Case "Branco" VFcor = 15 End Select Este código ocorre toda vez que for selecionado um novo item no controle, através do evento click do Mouse sobre o controle List1. Observe que de acordo com o valor do item selecionado, a variável de formulário VFcor recebe um valor numérico. A utilização dessa variável será vista mais adiante, no evento Mouse Move. 2.3) Combo Box Control Um Combo Box combina a utilização de um Text Box com uma List Box - o usuário pode digitar texto na parte de texto do controle, ou selecionar um item da parte de lista do controle. As propriedades ListCount e ListIndex, e os métodos AddItem e RemoveItem, têm o mesmo funcionamento que no controle List Box. - Inserir um quadro combo: - No evento Form Load, adicionar as seguintes linhas de código, antes ou depois das linhas que adicionam itens ao controle List Box: Combo1.AddItem "Figura1" Combo1.AddItem "Figura2" Combo1.AddItem "Figura3" Combo1.ListIndex = 0 Este código adicionará ao controle os itens relacionados, e mostrará como selecionado o primeiro item. Mais a frente veremos onde utilizar esses itens. 2.4) Picture Box Control Um controle Picture Box é uma caixa que pode mostrar uma figura a partir de um arquivo gráfico (bitmap, icon, metafile), e a partir da versão 5.0 do VB, arquivos JPEG e GIF. A figura mostrada é definida pela propriedade Picture. - Inserir três caixas de figura, não alterando a propriedade Name, e definir a propriedade picture de cada uma delas, escolhendo uma figura do diretório C:\windows. (Essa escolha é feita clicando-se duas vezes sobre a propriedade Picture do controle. Uma janela se abrirá, permitindo a escolha de um arquivo de figura.) 2.5) O Evento MouseDown - No evento MouseDown do formulário, incluir o seguinte código: Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single) If Button = 1 Then If Combo1.ListIndex = 0 Then Picture1.Move X, Y ElseIf Combo1.ListIndex = 1 Then Picture2.Move X, Y ElseIf Combo1.ListIndex = 2 Then Picture3.Move X, Y O evento ocorre sempre que um botão do mouse for pressionado sobre a área de um controle. Note que esse evento possui os seguintes argumentos: Button As Integer, Shift As Integer, X As Single, Y As Single. Eles significam o seguinte: 21

22 (4);` Button especifica qual botão do mouse foi pressionado, se o esquerdo (valor 1), o direito (2), ou o do centro Shift define o estado das teclas Shift, Ctrl e Alt, tendo os valores abaixo conforme elas forem pressionadas: VALOR ALT CTRL SHIFT 0 NÃO NÃO NÃO 1 NÃO NÃO SIM 2 NÃO SIM NÃO 3 NÃO SIM SIM 4 SIM NÃO NÃO 5 SIM NÃO SIM 6 SIM SIM NÃO 7 SIM SIM SIM X e Y são as coordenadas do local onde o botão do mouse foi pressionado. Observe que o argumento Button só pode representar um botão por vez pressionado do mouse. O código acima faz o seguinte: se o botão do mouse pressionado é o da esquerda, é movido (pelo método Move) um controle picture para as coordenadas X e Y. O controle movido depende de qual item do controle Combo Box está selecionado. Se for pressionado qualquer outro botão do mouse, nada ocorrerá. 2.6) As Coordenadas do Formulário As coordenadas do formulário são definidas em função das seguintes propriedades: ScaleMode: Define qual a unidade que será usada como medida. Os valores possíveis são os seguintes: 0-User (É definido pelas propriedades ScaleHeight, ScaleWidth, ScaleLeft, e ScaleTop), 1-Twip (default Twips por polegada; 567 Twips por centímetros), 2-Point (72 pontos por polegada), 3 - Pixel (depende da resolução do monitor), 4-Character (horizontal = 120 twips por unidade; vertical = 240 twips por unidade), 5-Inch (polegadas), 6-Millimeter (milímetros), 7-Centimeter (centímetros) ScaleHeight/ScaleWidth: Determina o número de unidades (de acordo com ScaleMode) para a área interna vertical e horizontal, respectivamente. ScaleLeft/ScaleTop: Determina o valor da coordenada do ponto superior esquerdo do controle. O default é zero para ambas. 2.7) O Método Move Este método move um controle ou um formulário, e tem a seguinte sintaxe: [objeto.]move left[, top[, width[, height] ] ] Com os parâmetros significando o seguinte (somente o argumento left é obrigatório): 2.8) O Evento MouseMove objeto Formulário ou controle a ser movido. Pode ser qq controle, a exceção de Timer e Menu. left Valor Single que indica a coordenada horizontal para o lado esquerdo do objeto. top Valor Single que indica a coordenada vertical para a parte superior do objeto. width Valor Single que indica o novo valor da propriedade Width. height Valor Single que indica o novo valor da propriedade Height. - No evento MouseMove do formulário, incluir o seguinte código: Label1.Caption = X Label2.Caption = Y If Button = 1 Then If Combo1.ListIndex = 0 Then Picture1.Move X, Y ElseIf Combo1.ListIndex = 1 Then Picture2.Move X, Y ElseIf Combo1.ListIndex = 2 Then Picture3.Move X, Y 22

23 ElseIf Button = 2 Then Circle (X, Y), 70, QBColor(VFcor) Esse evento ocorre sempre que o mouse for movimentado sobre a área do objeto, com algum de seus botões pressionado. Observe que esse evento possui os mesmos argumentos do evento MouseDown, tendo praticamente os mesmos significados. Uma das diferenças está nos argumentos X e Y, que são as coordenadas do local onde o mouse está posicionado. Esses argumentos são continuamente verificados, enquanto o cursor do mouse percorrer a área do formulário com um botão pressionado. A outra diferença está no argumento Button. Enquanto que no evento MouseDown esse argumento só poderia ter os valores 1, 2 ou 4 (significando botão esquerdo pressionado, botão direito, ou botão central), no evento MouseMove este argumento pode ter os seguintes valores: VALOR BOTÃO ESQUERDO BOTÃO DIREITO BOTÃO CENTRAL 0 NÃO NÃO NÃO 1 SIM NÃO NÃO 2 NÃO SIM NÃO 3 NÃO SIM SIM 4 NÃO NÃO SIM 5 SIM NÃO SIM 6 NÃO SIM SIM 7 SIM SIM SIM É importante ressaltar que outros controles também possuem os eventos MouseMove e MouseDown, que são disparados quando o mouse percorre a área sobre o controle respectivo. O código acima faz o seguinte: se o botão pressionado quando o mouse for movimentado é o da esquerda, é movido um controle picture para as coordenadas X ey. O controle movido depende de qual item do controle Combo Box está selecionado. Se o botão pressionado for o da direita, é desenhado um círculo (método Circle) na posição X, Y, com um raio de 70 unidades (definida pela propriedade ScaleMode). OBS: Para verificar o funcionamento do evento MouseMove, e dos argumentos X e Y, insira dois labels no formulário, e esta linha de código no início do evento MouseMove do formulário: label1.caption = x label2.caption = y 2.9) O Método Circle Este método desenha um círculo, uma elipse ou um arco em um objeto. Possui a seguinte sintaxe: [object.]circle [Step](x, y), radius[,[color] [,[start] [,[end] [,aspect] ] ] ] object Objeto no qual a figura será desenhada. Step Especifica que o centro da figura é relativo às coordenadas correntes do objeto. (x,y) Valores Single que indicam as coordenadas do centro da figura. A medida é determinada pelas propriedades de escala (ScaleMode, ScaleLeft, ScaleTop, ScaleHeight and ScaleWidth). radius Valor Single que indicao raio da figura. A medida é determinada pelaspropriedades de escala (ScaleMode, ScaleLeft, ScaleTop, ScaleHeight and ScaleWidth). color Valor Long integer que indica a cor da linha da figura. Se for omitida, o valor da propriedade ForeColor é usado. start e end Valores Single que indicam o iníco e o final de um arco de círculo ou elipse. A faixa vai de -2 PI radianos até 2 PI radianos. O default para start é 0 radianos, e para end é 2 PI radianos. aspect Valor Single que indica o aspecto da figura. O default é 1.0, e indica que será denhado um círculo. No nosso projeto, esse método é chamado no evento Mouse Move, e como nenhum objeto é especificado, o desenho é feito sobre o formulário. Ele desenha um círculo de 70 unidades de raio, como já foi dito, e com a cor especificada pela função Qbcolor. Essa função será vista em outro capítulo, mas por hora basta informar que ela retorna um valor Long integer que representa uma cor, segundo o argumento numérico que lhe for passado (no caso, a variável VFcor). 3 - UTILIZANDO MENUS Este programa permitirá que o usuário modifique a cor de fundo e o tamanho de um formulário, através da 23

24 utilização de menus. Também será visto uma nova função do VB, a função QBcolor(). Siga os passos descritos abaixo: 3.1) Menu - Iniciar um projeto. - Alterar as propriedades do formulário: Name = FRMmenu Caption = Programa Menu - Salvar o projeto no diretório c:\aulavb\aula04\proj1: formulário :menu.frm projeto : menu.vbp Para criarmos um menu em um formulário, utilizamos o Menu Editor do VB. Escolhemos a opção de menu Tools - Menu Editor, ou clicamos as teclas <Ctr E>, e a janela que permite a criação do menu é aberta. Um item de menu também é um controle, e portanto possui propriedades. Essas propriedades são definidas na janela do Editor de Menu. A maioria já é conhecida, e têm a mesma função que em outros controles, como as propriedades Caption, Name, Index, Visible, Checked e Enabled. A propriedade ShortCut permite especificarmos uma tecla de atalho, a partir da lista de opções que é oferecida. Para se criar os menus, escreve-se os valores das propriedades nos locais apropriados da janela Menu Design, e seleciona-se ou não as propriedades que possuem valores do tipo lógico, através dos check box. Os botões de setas da janela permitem a criação de submenus, e a navegação pelos itens. FIG A janela Menu Editor - Criar os seguintes itens de menu: ITEM DE MENU NAME CAPTION Cores MNPcores &Cores Branco MNSbranco &Branco Azul MNSazul A&zul Vermelho MNSvermelho &Vermelho MNSsep - Sair MNSsair Sai&r Tamanho MNPtamanho &Tamanho Minimizado MNSminimizado &Minimizado Normal MNSnormal &Normal Maximizado MNSmaximizado Ma&ximizado Após a criação de todos os itens de menu, teclar o botão OK. 24

25 Observe que os itens com a propriedade name iniciando com as letras MNP, são os itens principais de menu, enquanto que os outros são os submenus. - Inserir o seguinte código no evento click do menu MNSvermelho: Sub MNSvermelho_Click () FRMmenu.BackColor = QBColor(4) MNSvermelho.Enabled = False MNSazul.Enabled = True MNSbranco.Enabled = True 3.2) Função Qbcolor() A função Qbcolor() é uma função do VB, que retorna um valor de cor (um inteiro longo, que é identificado pelo windows como uma cor), de acordo com o argumento que lhe é passado, conforme a tabela abaixo (observe que o valor do argumento pode ser qq inteiro entre 0 e 15): Nº Cor Nº Cor 0 Preto 8 Cinza escuro 1 Azul 9 Azul claro 2 Verde 10 Verde claro 3 Cyan 11 Cyan claro 4 Vermelho 12 Vermelho claro 5 Magenta 13 Magenta claro 6 Amarelo 14 Amarelo claro 7 Cinza 15 Branco O código acima faz com que o formulário fique vermelho, desabilitando o item de menu MNSvermelho, e habilitando os itens MNSverde e MNSbranco. Os códigos dos eventos click dos demais itens de menu relacionados com as cores devem produzir resultados semelhantes: - Inserir o seguinte código no evento click do menu MNSazul: Sub MNSazul_Click () FRMmenu.BackColor = QBColor(1) MNSvermelho.Enabled = True MNSazul.Enabled = False MNSbranco.Enabled = True - Inserir o seguinte código no evento click do menu MNSbranco: Sub MNSbranco_Click () FRMmenu.BackColor = QBColor(15) MNSvermelho.Enabled = True MNSazul.Enabled = True MNSbranco.Enabled = False - Inserir o seguinte código no evento load do formulário Sub Form_Load () MNSbranco.Enabled = False FRMmenu.BackColor = QBColor(15) MNSnormal.Enabled = False FRMmenu.WindowState = 0 Este código faz com que o programa sempre inicie com o formulário no tamanho normal, com a cor branca, além de desabilitar os itens de menu MNSbranco e MNSnormal. 3.3) A propriedade WindowState do Formulário A propriedade WindowState de um formulário informa qual o tamanho do formulário. Ela pode ser acessada tanto em tempo de projeto quanto em tempo de execução, e os valores possíveis são os seguintes: 25

26 0 (Default) Normal 1 Minimizado 2 Maximizado (toda a tela) - Inserir no evento click do item de menu MNSminimizado: Sub MNSminimizado_Click () FRMmenu.WindowState = 1 MNSminimizado.Enabled = False MNSmaximizado.Enabled = True MNSnormal.Enabled = True Este código minimiza a janela do programa, além de desabilitar o item de menu MNSminimizado e habilitar os itens MNSnormal e MNSmaximizado. Obviamente os eventos click do outros dois itens relacionados ao tamanho do formulário deverão conter códigos semelhantes. 3.4) O evento Resize do Formulário Com o programa do jeito que está, se o tamanho do formulário for alterado através do menu de controle ou dos botões maximizar e minimizar do formulário, os itens de menu não terão suas propriedades Enabled modificadas de acordo, pois nenhum evento click foi disparado. Para resolver esse inconveniente, temos que capturar o evento que ocorre, e nele inserir o código apropriado. Estamos falando do evento Resize. Ele ocorre sempre que o formulário tem o seu tamanho alterado. Portanto, para que o problema deixe de existir, deve ser feito o seguinte: - Inserir no evento Resize do formulário FRMmenu o seguinte código: Sub Form_Resize () If FRMmenu.WindowState = 0 Then MNSminimizado.Enabled = True MNSmaximizado.Enabled = True MNSnormal.Enabled = False ElseIf FRMmenu.WindowState = 2 Then MNSminimizado.Enabled = True MNSmaximizado.Enabled = False MNSnormal.Enabled = True Desta forma, toda vez que o formulário tiver seu tamanho alterado, os itens de menu terão sua propriedades Enabled alteradas de acordo. Observe as três linhas inferiores do evento click dos menus relacionados ao tamanho do formulário. Elas se encarregam de alterar as propriedades Enabled de cada item de menu apropriadamente. Como é exatamente isso que faz o código do evento Resize, e como este evento ocorre sempre que um item desses é selecionado (devido a instrução que altera a propriedade WindowState), elas não são mais necessárias nos eventos Click dos itens de menu. Deixá-las no programa não causará nenhum problema, mas elas se tornaram redundantes. 3.5) Menus Instantâneos Um menu instantâneo é um pequeno menu que surge em algum lugar do formulário, em resposta a um evento do programa. Como exemplo, temos o menu que aparece no programa Word for Windows 7.0, toda vez que o usuário aperta o botão direito do mouse sobre a área de texto. Um menu instantâneo aparecerá sempre na posição atual do mouse, e depois que a seleção é feita, o menu desaparece da tela. A criação de um menu instantâneo é feita da mesma forma que a de um menu comum. Na verdade, a diferença está na chamada a esse menu, que é feita pelo método PopUpMenu, como veremos adiante. 3.6) Método PopUpMenu Este método faz com que um menu apareça na posição em que o cursor do mouse se encontra. A sua sintaxe é a seguinte: object.popupmenu menuname Por exemplo, se inserirmos o código a seguir no nosso projeto, toda vez que o usuário apertar o botão direito do mouse, sobre o formulário, o menu Cores irá surgir no posição do cursor. Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single) 26

27 If Button = 2 Then PopupMenu MNPcores Observe que o menu Cores aparece também na barra de menu. Se quisermos que ele seja apenas um menu instantâneo, basta selecionarmos a sua propriedade Visible como False. 4 - FORMULÁRIO MDI 4.1) MDI Form Um formulário MDI (multiple-document interface) é uma janela que atua em background na aplicação e que pode conter formulários que têm a propriedade MDIChild definida em True. Um exemplo de aplicativo que usa MDI é o Word. Cada documento é um formulário diferente, e quando não há nenhum documento aberto, o formulário MDI assume o foco. É possível adicionar um formulário MDI em um projeto, através da opção de Menu Project - Add MDI Form. Cada aplicação só pode conter um MDI, mas vários formulários filhos (MDIchild). A barra de menu dos formulários filhos é automaticamente aplicada ao MDIForm, quando o formulário filho é ativado. Um MDIchild minimizado aparece como um ícone dentro do MDIForm. Um formulário MDI só pode conter Menu e PictureBox, ou controles que posuam a propriedade Align. 4.2) Propriedade Align Essa propriedade determina como o controle será alinhado dentro do formulário que o contiver. - Inicie um novo projeto, e inclua um formulário MDI. - Inclua um menu com as seguintes propriedades, e de acordo com a figura 3.6: - inserir as seguintes linhas de código: Private Sub MNScascata_Click() MDIForm1.Arrange 0 Private Sub MNShorizontal_Click() MDIForm1.Arrange 1 Private Sub MNSvertical_Click() MDIForm1.Arrange 2 Private Sub MNSicones_Click() MDIForm1.Arrange 3 Private Sub MNSsair_Click() End NAME CAPTION MNParquivo &Arquivo MNSprimeiro &Primeiro MNSnovo Form novo sep - MNSsair Sai&r MNPjanela &Janela MNShorizontal Lado a lado (horizontalmente) MNSvertical Lado a lado (verticalmente) MNScascata Em ascata MNSicones Organizar ícones A instruções MDIForm1.Arrange 0, MDIForm1.Arrange 1 e MDIForm1.Arrange 2, mostram os formulários filhos do MDI, e que estivem visíveis, em cascata, horizontalmente e verticalmente, respectivamente. A instrução MDIForm1.Arrange 3 organiza os ícones dos formulários filhos que estiverem minimizados. 27

28 fig janela de menu - Incluir um novo formulário no projeto e definir a propriedade MDIchild para True; - inserir um CommandButton e um ListBox neste formulário, atribuindo os seguintes valores à propriedade Name desses controles CONTROLE Form CommandButton ListBox NAME Formulario BTN List1 4.3) Vetor de Controles Um vetor de controles é um conjunto de controles do mesmo tipo, todos com o mesmo valor para a propriedade Name. Quando, em tempo de projeto, nomeamos dois controles com o mesmo nome, o VB nos pergunta se desejamos criar um vetor com esses controles. Para que o vetor possa existir, a propriedade Index dos controles envolvidos devem receber valores inteiros e consecutivos. Também é possível criar vetores de controles dinamicamente. Nesse caso devemos atribuir à propriedade Index de um controle o valor 0 (zero), e usar o método Load, como veremos adiante. - Atribuir à propriedade Index do controle BTN o valor 0 (zero) -Inserir as seguintes linhas de código no formulário MDI: Option Explicit Dim Form() As New Formulario Private Sub MNSprimeiro_Click() Load Formulario As duas primeiras linhas devem ser escritas na seção general do formulário MDI. A palavra chave New usada com a declaração Dim cria uma matriz de objetos Form, com as características do controle formulario, deste projeto. A instrução Load carrega o controle formulário. - Inserir mais essas linhas de código no MDI: Private Sub MNSnovo_Click() Static i As Integer i = i + 1 ReDim Form(i) Load Form(i) 28

29 Form(i).Caption = Str$(i) + "º Formulário" Form(i).Show Esse código é executado quando o item de menu Novo é acionado. Observe que é declarada uma variável Static, que será usada para redimensionar a matriz de formulários. A cada vez que esse evento ocorrer, a variável será incrementada de 1, e conseqüentemente a matriz de formulários também, devido a ReDim Form(i). O último formulário dessa matriz (índice i) é carregado, e sua propriedade Caption recebe o valor apropriado. Portanto, a cada vez que esse item de menu for selecionado, um novo formulário será acrescido à aplicação. Da mesma forma que um novo documento é adicionado ao Word. - Inserir as seguintes linhas de código no controle formulario: Private Sub BTN_Click(Index As Integer) Static i As Integer i = i + 1 List1.AddItem (i) Load BTN(i) BTN(i).Top = 0 BTN(i).Left = (i - 1) * 1000 BTN(i).Visible = True BTN(i).Caption = "botão " + Str(i) No evento Private Sub BTN_Click tambem é delarada uma variável Static, e cada vez que esse evento ocorrer acontecerá o seguinte: será adicionado um elemento ao controle List1, mostrando o valor da variável i; um novo controle BTN será carregado, com a propriedade Index uma unidade maior do que a do controle anteriormente carregado, e com a propriedade Caption mostrando a string "botão " seguida do valor da variável i. Observe que as propriedades Left e Top do novo controle BTN são configuradas de forma que o controle fique no alto do formulário, ao lado do controle anteriormente carregado. A aplicação em funcionamento tem a aparência da figura 3.7. fig o programa sendo executado 29

30 CAPÍTULO IV Neste capítulo veremos a criação de menus, que são utilizados para escolha de opções, e também a criação e utilização de janelas de diálogos. 1- MANIPULANDO JANELAS E MENSAGENS Veremos agora a criação de janelas de diálogo, que possibilitam a comunicação de um programa com o usuário. As janelas podem ser de três tipos: as personalizadas, as predefinidas e as comuns. fig Usando janelas de diálogos Este programa mostrará os dois primeiros tipos de janelas, permitindo que o usuário faça escolhas, como mudar a cor de fundo dos objetos, além de digitar números, datas e nomes. Será visto também a utilização de mais de um formulário por programa. A última categoria de janelas de diálogos, as comuns, será vista no próximo capítulo. O nosso programa terá a aparência da figura 4.1: Seguir as instruções abaixo. - Iniciar um projeto. - Alterar as propriedades do formulário: Name = FRMjanelas Caption = Verificando Janelas de Diálogo - Salvar o projeto no diretório c:\aulavb\aula04\proj2 formulário :janelas.frm projeto : janelas.vbp 1.1) O Controle SSPanel Este controle é um painel com aparência três dimensões, que serve basicamente para personalizar a aparência de um aplicativo, permitindo a utilização de grupos de controles, como botões de opção. O botão da caixa de ferramentas é o mostrado na fig 4.3: - Inserir um Panel3D. OBS: Para tornar disponível esse controle, é necessário inserir o componente Sheridan 3D Controls, através do item de menu Project - Components. O arquivo que corresponde a esse controle é o IMGADMIN.OCX, como pode ser visto na figura 4.3. fig Ícone do Frame 30

31 fig A janela de componentes - Alterar as propriedades: Name = Panel3D1 Caption = Personalizadas - Alterar as propriedades referentes à aparência do painel, verificando o que ocorre. - Inserir dois botões de comando, dentro do painel, com as seguintes propriedades: Name = BTNmensagemp Caption = Mensagem Name = BTNsairp Caption = Sair Foram usados nomes terminando em p, para distinguir esses botões como os que mostram as janelas Personalizadas. OBS: Para que os controles referentes ao Sheridan 3D Controls estejam disponíveis, é necessário que eles tenhas sido instalados. Esses controles não são desenvolvidos pela Microsoft, mas são feitos para serem utilizados por programas escritos em VB. Caso o seu computador não tenha esses controles, inclua um Frame ao invés de um Panel. 1.2) Usando novos Formulários Incluir dois novos formulários no programa. Isto é feito através da opção de menu Project - Add Form. Alterar as propriedades dos formulários, conforme tabela abaixo: NOME EXTERNO NAME CAPTION Mensagem.frm FRMmensagem Exemplo de Janela Personalizada Sair.frm FRMsair Sair - Incluir no formulário FRMmensagem um label e um botão, conforme a figura 4.4 e a tabela seguinte: 31

32 fig Janela personalizada CONTROLE NAME CAPTION Label LBL1 Esta msg pode ser alterada por você! Command Button BTNok Ok Quando temos mais de um formulário em um projeto, podemos ter controles com o mesmo nome, desde que em formulários diferentes. Por exemplo, podemos ter dois botões com Name BTNsair, um em cada formulário. Para referenciar os controles, é necessário que se informe a qual formulário ele pertence: Por ex.: FRMmsg.BTNsair ou FRMinicial.FRMsair - Inserir o seguinte código no evento click do botão FRMjanelas.BTNmensagemp: Sub BTNmensagem_per_Click () FRMmensagem.Show 1 1.3) Os Métodos Load e Unload e os Eventos Load e Unload Esses métodos são aplicados a formulários, e fazem com que o formulário seja carregado (Load) e descarregado (Unload) da memória. Quando um formulário é carregado, o evento Load ocorre, e quando ele é descarregado, o evento que ocorre é o Unload. 1.4) Os Métodos Show e Hide e os Eventos Activate e Deactivate Esses métodos são aplicados a formulários, e fazem com que o formulário seja mostrado (show) e escondido (Hide). Quando um formulário é mostrado, o evento Activate ocorre, e quando ele é escondido, o evento que ocorre é o Deactivate. Se um formulário não estiver carregado na memória, o método Show primeiro carrega (ocorre o evento Load) e depois mostra o formulário (ocorre o evento Activate). O método Show tem um parâmetro, que informa se o formulário é modal ou não. Um formulário é modal, quando nenhum outro formulário da aplicação pode ter o foco se ele estiver ativado. Para mostrar um formulário como modal, usa-se o método Show com o parâmetro 1. Um parâmetro 0 ou ausência de parâmetro, mostra o formulário normalmente. Portanto, o código do evento click acima mostra o FRMmensagem da forma modal. - Inserir o seguinte código no evento click do botão FRMmensagem.BTNok: Sub BTNok _Click () FRMmensagem.Hide Este código esconde o formulário. 1.5) Janelas Personalizadas - Executar o programa, e verificar o que ocorre quando clicamos no botão Mensagem. Temos um exemplo de janela personalizada. Para que o formulário se pareça com uma janela de mensagem, alterar as seguintes propriedades: PROPRIEDADE VALOR BorderStyle 3 ControlBox False Isto fará com que a borda do formulário fique fixa, e que não apareça o botão de controle no canto superior esquerdo. - Incluir no formulário FRMsair um label e dois botões de comando, conforme abaixo: 32

33 fig Outra janela CONTROLE NAME CAPTION Label LBL1 Deseja realmente sair? Command Button BTNsim Sim Command Button BTNnao Não - Inserir o seguinte código no evento click do botão FRMjanelas.BTNsairp: Sub BTNsairp _Click () FRMsair.Show 1 Este código fará com que o formulário FRMsair seja mostrado na forma modal. - Inserir o seguinte código no evento click do botão FRMsair.BTNsim: Sub BTNsim _Click () End Este código encerra o programa. - Inserir o seguinte código no evento click do botão FRMsair.BTNnao: Sub BTNnao _Click () FRMsair.Hide Este código esconde o formulário FRMsair, e o programa continua a ser executado. Temos um outro exemplo de janela personalizada. Mude as propriedades que se referem a aparência no formulário FRMsair, para que seja alcançado um melhor efeito visual. 1.6) Janelas Padronizadas - MsgBox e InputBox A função MsgBox mostra uma mensagem em uma caixa de diálogo (fig. 4.6), e espera que o usuário clique em um botão desta caixa de diálogo. Tem os seguintes parâmetros: msg, buttons, title. *msg : *buttons: *title: Define a mensagem que será mostrada. É uma string. Define os botões e a imagem que serão mostrados. É um valor integer. Define o título da caixa de diálogo. É uma string. fig MsgBox 33

34 Ela pode ser usada como function ou como procedimento (statement). Se for usada como function, ela retorna um valor e os parâmetros devem vir entre parênteses; se for usada como procedimento, não é retornado valor e não se usa parênteses. Os valores retornados, no caso de ser usada como function, dependem dos botões mostrados. Tanto os valores de retorno (para o caso de function) quanto os valores para o argumento type podem ser consultados na ajuda on line (help) do VB. Serão mostrados abaixo os valores mais usados para o argumento buttons, imediatamente seguido dos valores de retorno. buttons Descrição 0 Mostra botão OK, somente 1 Mostra botões OK e Cancelar 2 Mostra botões Abortar, Repetir e Ignorar. 3 Mostra botões Sim, Não e Cancelar. 4 Mostra botões Sim e Não 5 Mostra botões Repetir e Cancelar. 16 Mostra ícone de mensagem crítica. 32 Mostra ícone de interrogação. 48 Mostra ícone de exclamação. 64 Mostra ícone de informação. OBS: Para obter uma associação de butões e ícones, os valores devem ser somados. Por exemplo: o valor 36 mostra o ícone de interrogação e os botões Sim e Não, pois 36= Retorno Descrição 1 OK 2 Cancelar 3 Abortar 4 Repetir 5 Ignorar 6 Sim 7 Não A função InputBox mostra um prompt em uma caixa de diálogo, e espera que o usuário digite algo e pressione um botão (Ok e Cancel). Tem os seguintes parâmetros: prompt, title, default, xpos, ypos. *prompt: Define a mensagem. É uma string. *title: Define o título da caixa. É uma string. *default: Define uma string que é mostrada no prompt, e que será usada como valor de retorno, caso o usuário não digite algo. É uma string. *xpos, ypos: Definem as distancias do alto e do lado esquerdo da tela, em twips. É uma expressão numérica. InputBox só pode ser usada como function. O pressionamento do botão Cancel faz com que o valor retornado seja uma string nula. O pressionamento do botão Ok retorna o que foi digitado pelo usuário. - Inserir outro Panel3D, conforme a fig 4.2, com as seguintes propriedades: Name = Panel3D2 Caption = Predefinidas fig InputBox - Inserir dois frames, dentro do painel, com as seguintes propriedades: Name =Frame1 Caption = MsgBox Name =Frame2 Caption = InputBox 34

35 - Dentro do frame1, inserir os seguintes controles: CONTROLE NAME CAPTION Command Button BTNmensagem Mensagem Command Button BTNsair Sair - Inserir o seguinte código no evento click do botão BTNmensagem: MsgBox "Esta mensagem é informativa.", 16, "Mensagem" - Inserir o seguinte código no evento click do botão BTNsair: Dim X X = MsgBox("Deseja sair do programa?", 36, "Confirma saída") If X = 6 Then End No primeiro caso, MsgBox é usada como statement, e o valor 16 como argumento type, define que será mostrado a figura Stop e um botão Ok. O código apenas mostra uma janela de mensagem, que é fechada quando o usuário clicar sobre o botão. No segundo caso, MsgBox é usada como function. O valor 36 como argumento type define que serão mostrados dois botões (Sim e Não) e a figura 4.8: fig Ícone de interrogação No caso de botões Sim e Não, o valor de retorno pode ser 6 ou 7, respectivamente, conforme o botão clicado. O código acima encerra o programa se o botão clicado for o Sim. - Dentro do frame2, inserir os seguintes controles: CONTROLE NAME CAPTION Command Button BTNnome Nome Command Button BTNnumero Número Command Button BTNdata Data - Inserir dois labels no formulário FRMjanelas, na parte superior, fora de qualquer SSPanel. Nomeá-los como LBL1 e LBL2. - Inserir o seguinte código no evento click do botão BTNnome: Dim nome As String LBL1.Caption = "" LBL2.Caption = "" nome = InputBox("Digite seu nome", "Demonstração") If nome = "" Then Exit Sub LBL1.Caption = "O seu nome é " + nome Este código limpa o caption dos dois labels, mostra uma InputBox e coloca o valor de retorno como caption do label LBL1. - Inserir o seguinte código no evento click do botão BTNnumero: Dim numero As String LBL1.Caption = "" LBL2.Caption = "" numero = InputBox("Digite um número", "Demonstração") If numero = "" Then Exit Sub If IsNumeric(numero) Then LBL1.Caption = "O número digitado foi " + numero Else 35

36 MsgBox "Você não digitou um número!",, "Aviso!!" 1.7) Função IsNumeric Este código limpa o caption dos dois labels, mostra uma InputBox e verifica se o valor retornado é numérico, através da função IsNumeric. Esta função verifica se um argumento String pode ser considerado um número, retornando True ou False. Se foi digitado um valor numérico, o valor de retorno é colocado como caption do label LBL1. 1.8) Função IsDate - Inserir o seguinte código no evento click do botão BTNdata: Dim dta, dia As String LBL1.Caption = "" LBL2.Caption = "" dta = InputBox("Digite uma data", "Demonstração") If dta = "" Then Exit Sub If Not IsDate(dta) Then MsgBox "Você não digitou uma data!",, "Aviso!!" Exit Sub LBL1.Caption = "A data digitada foi " + dta Select Case Weekday(dta) Case 1 dia = "Domingo" Case 2 dia = "Segunda" Case 3 dia = "Terça" Case 4 dia = "Quarta" Case 5 dia = "Quinta" Case 6 dia = "Sexta" Case 7 dia = "Sábado" End Select LBL2.Caption = "e o dia da semana é : " + dia Este código limpa o caption dos dois labels, mostra uma InputBox e verifica se o valor retornado pode ser uma data, através da função IsDate. Esta função verifica se um argumento String pode ser considerado uma data, retornando True ou False. 1.9) Função WeekDay Se foi digitado um valor que pode ser considerado uma data, o valor de retorno é passado para a função WeekDay. Esta função recebe uma data e retorna um inteiro entre 1 e 7, que informa qual o dia da semana referente àquela data. O código acima utiliza o valor retornado pela função WeekDay para informar qual o dia da semana através do label LBL JANELAS DE DIÁLOGOS COMUNS Dando continuidade ao assunto janelas de diálogos, veremos agora as janelas de diálogos comuns. Elas são as janelas de diálogos padronizadas do Windows. Uma caixa de diálogo comum pode ser vista na figura

37 fig A caixa de diálogo Salvar Como O VB oferece um controle que permite exibir facilmente caixas de diálogos, que é o CommomDialog. Para verificarmos isso, iniciaremos um outro projeto, que terá a aparência final da figura 4.10: fig O formulário do programa - Inserir dois CommandButton, com as seguintes propriedades: CONTROLE NAME CAPTION Command Button BTNcor Cor Command Button BTNarquivo Arquivo 2.1) O Controle Common Dialog Este controle proporciona a apresentação das caixas de diálogo comuns (File, Font, Color, Print) para operações como abrir, imprimir ou salvar arquivos, ou selecionar cores ou fontes. Este controle não tem nenhum evento associado, e fica sempre invisível durante a execução. A propriedade Action deste controle determina qual será a caixa de diálogo mostrada. Por exemplo, a caixa de diálogo comum de abrir arquivo é mostrada na fig 4.11: 37

38 fig Caixa de Diálogo Abrir Action Diálogo Mostrado 0 nenhum 1 Abrir 2 Salvar como 3 Cor 4 Fonte 5 Impressão De acordo com a caixa mostrada, outras propriedades devem ser selecionadas. Veremos neste capítulo, as caixas de diálogo comuns Abrir e Cor. - Inserir um Common Dialog Control no formulário. Não se preocupe com a localização dele, pois ele sempre fica invisível. O ícone é o da figura 4.12: fig Ícone do Common Dialog Control OBS: Para que o Common Dialog Control fique disponível na ToolBox, é necessário incluir o arquivo de controle respectivo, que é o Microsoft Common Dialog Control 5.0. Isto é feito através da opção de menu Project - Components. O arquivo correspondente é o COMDLG32.OCX. As propriedades principais desse controle são usadas de acordo com o valor da propriedade Action. A propriedade Cancel indica que um erro ocorrerá, caso ela seja definida como True, e o usuário pressione, durante a execução, a tecla Cancelar da janela de diálogo (isso será usado no nosso programa, e será melhor explicado). Já FileName retorna o nome do Path e do arquivo selecionado (se Action = 1). Filter especifica o filtro que será mostrado na ListBox Type da janela, em tempo de execução (para Action = 1), e representa o tipo de arquivo que será mostrado na janela. Color retorna a cor selecionada (para Action = 3). - Inserir no evento click do botão BTNcor: Private Sub BTNcor_Click() On Error GoTo 2 'seleciona a ação para que a caixa de diálogo permita escolha 'de cores CMdialog1.Action = 3 'utiliza a cor escolhida na caixa de diálogo, como cor de 'fundo para os controles e o formulário FRMdialogos.BackColor = CMdialog1.Color 38

39 2: Exit Sub If Err = Then Exit Sub Else MsgBox "Algum erro ocorreu!",, "Aviso" Exit Sub Como podemos ver, Action foi definida em 3, o que significa que uma caixa de diálogo de cores irá aparecer. A propriedade Color representa a cor escolhida pelo usuário, e é utilizada para mudar a cor de fundo de todos os controles do formulário, inclusive o próprio. Como a propriedade Cancel é True, se o usuário clicar no Botão Cancel da caixa de diálogo, ocorre um erro ( o código desse erro é 32755). A linha de código On Error GoTo 2 diz ao VB para que o controle do programa vá para o label 2, caso algum erro ocorra. Se o usuário escolher o botão Cancel, ocorrerá o erro 32755, e o código após o label 2 é executado. Maiores informações sobre o controle de erros será visto adiante. - Inserir no evento click do botão BTNarquivo: Private Sub BTNarquivo_Click() Dim X Dim ext, nome_arquivo As String On Error GoTo 1 'especifica os filtros que são mostrados na caixa de diálogo CMdialog1.Filter = "Texto *.txt Desenho *.bmp" 'especifica que a caixa de diálogo é para abrir arquivos 'se o botão cancelar é clicado, ocorre um erro CMdialog1.Action = 1 'o nome do arquivo escolhido é colocado na variável nome_arquivo nome_arquivo = CMdialog1.filename lbl1.caption = "O Arquivo escolhido foi: " + nome_arquivo 1: 'se não foi clicado o botão <Cancelar> ext = Mid$(nome_arquivo$, Len(nome_arquivo$) - 2, 3) Select Case ext Case "txt" X = Shell("notepad " + nome_arquivo$, 1) Case "bmp" X = Shell("pbrush " + nome_arquivo$, 1) Case Else MsgBox "Deve ser escolhido um arquivo.txt ou.bmp!",, "Aviso" End Select Exit Sub If Err = Then Exit Sub Else MsgBox "Algum erro ocorreu!",, "Aviso" Exit Sub Como podemos ver, Action foi definida em 1, o que significa que uma caixa de diálogo Abrir irá aparecer. A propriedade Filter representa o filtro que será mostrado ao usuário, e é utilizada para selecionar o tipo de arquivo que será visível na caixa. É formada pelo nome que informa o tipo do arquivo (Texto, Desenho), que é definido pelo programador ; e pela extensão do arquivo (txt, bmp), que deve ser uma extensão válida (só serão mostrados os arquivos que tiverem a mesma extensão). Observe que deve haver um traço vertical " " entre cada um dos argumentos da propriedade, como escrito no código transcrito a seguir: CMdialog1.Filter = "Texto *.txt Desenho *.bmp". 39

40 2.2) Métodos ShowColor, ShowFont, ShowOpen, ShowSave e ShowPrinter A propriedade Action se manteve no VB5 por questões de compatibilidade com as versões anteriores. Nos códigos vistos acima, pode-se usar os novos métodos ShowColor, ShowFont, ShowOpen, ShowSave e ShowPrinter, no lugar dessa propriedade. Esta seria, inclusive, a forma mais adequada de se escrever o código. Após o usuário escolher o arquivo, a propriedade FileName informa qual o nome (incluindo o Path) do arquivo escolhido. O que foi dito em relação à captura de erros do código do evento Click do botão BTNcor ocorre novamente. A linha de código ext = Mid$(nome_arquivo, Len(nome_arquivo) - 2, 3) coloca na variável ext, a extensão do arquivo (as últimas três letras do nome do arquivo). Isto é feito com a utilização de duas funções relacionadas a strings. 2.3) A Função Len Essa função retorna o número de letras de um argumento String. Sua sintaxe é definida abaixo: 2.4) A Função Mid Len(strintg) Essa função retorna, de um argumento String (primeiro argumento), a partir de uma determinada posição (definida pelo 2º argumento), um determinado número de letras (definida pelo 3º argumento). No nosso caso, o primeiro argumento é a extensão e o nome do arquivo selecionado; o segundo argumento informa a posição (o tamanho da string menos 2); e o terceiro argumento define que os três caracteres seguintes a essa posição, inclusive, serão retornados. 2.5) O Comando Shell Este comando inicia a execução de um outro aplicativo a partir do programa em VB. Ele tem dois argumentos: o nome do programa (que deve ser uma String), e um número (que identifica como a janela deste aplicativo será apresentada no monitor). Os valores possíveis são descritos a seguir: 0 Janela escondida com foco. 1 Janela com foco e tamanho e posição original. 2 Janela como ícone com foco. 3 Janela maximizada com foco. 4 Janela restaurada para o tamanho e posição anterior, sem o foco. 6 Janela como ícone sem foco. Um aplicativo iniciado a partir do comando Shell do VB, será executado, e quando for terminado, devolve o controle ao programa chamador. Portanto, a parte do código referente ao Select, usa a extensão do arquivo para iniciar o aplicativo adequado (Pbrush para um arquivo.bmp, e Notepad para um arquivo.txt) OBS: A cada nova função vista, é interessante que verificar, através do help do VB, quais as funções que tratam de assuntos correlatos. Isto é feito clicando-se na opção See Also do Help. Como exercício, verifique as funções relacionadas com a função M id(). fig Help do VB 40

41 CAPITULO V Neste capítulo serão vistos as ferramentas gráficas do VB. Veremos os controles gráficos, os métodos gráficos e os controles de imagens. 1 - OS CONTROLES GRÁFICOS Nesta primeira parte do programa serão vistos os controles que representam figuras geométricas. Estes controles são o Shape Control e Line Control. 1.1) Shape Control Shape é um controle gráfico que mostra um retângulo, um quadrado, um círculo, uma elipse, um retângulo arredondado ou um quadrado arredondado. Shape Contro fig o ícone do Shape Control O que determina qual figura será desenhada é a propriedade Shape, conforme quadro abaixo: (Default) Retângulo 1 Quadrado 2 Elipse 3 Círculo 4 Retângulo arredondado 5 Quadrado arredondado A propriedade BorderWidth determina a espessura da linha de contorno da figura. - Iniciar um projeto. - Alterar as propriedades do formulário: Name = FRMgrafic1 Caption = Controles Gráficos - Salvar o projeto no diretório c:\aulavb\aula09\proj1: formulário :grafic1.frm projeto :grafic.vbp - Inserir os controles conforme a figura 5.2 (os botões, a barra de rolagem horizontal, a caixa de checagem, e os controles Shape e Line), alterando a propriedade Name de cada controle de acordo com o Caption. Em relação a Barra de Rolagem, alterar as propriedades Max, Mim, SmallChange e LargeChange para 50, 1, 1 e 25, respectivamente. 1.2) Line Control Line é um controle gráfico que mostra uma linha vertical, horizontal ou diagonal. O botão da caixa de ferramentas é mostrado na figura 5.3. Da mesma forma que no controle Shape, a propriedade BorderWidth determina a espessura da linha. O objetivo deste programa é desenhar uma linha ou uma figura geométrica, conforme o botão pressionado. A borda da figura será determinada pela barra de rolagem. Não esqueça de nomear os botões adequadamente, conforme a padronização seguida no curso. 41

42 fig o primeiro formulário desse projeto Line fig o ícone do Line Control - Inserir os seguintes códigos nos eventos apropriados dos controles: Sub BTNlinha_Click () shape1.visible = False line1.visible = True Sub BTNretangulo_Click () If CHKarredondado.Value Then shape1.shape = 4 Else shape1.shape = 0 shape1.visible = True line1.visible = False Sub BTNquadrado_Click () If CHKarredondado.Value Then shape1.shape = 5 Else shape1.shape = 1 shape1.visible = True line1.visible = False Sub BTNelipse_Click () shape1.shape = 2 shape1.visible = True line1.visible = False Sub BTNcirculo_Click () shape1.shape = 3 shape1.visible = True line1.visible = False 42

43 Observe que os códigos acima alternam os controles Shape e Line, mantendo apenas um visível. Quando o controle Shape estiver visível, a figura a ser mostrada depende do valor da propriedade Shape. Observe também que os códigos dos eventos Sub BTNretangulo_Click () e Sub BTNquadrado_Click() verificam a propriedade Value do CHKarredondado, mostrando uma figura arredondada ou não (retângulo ou quadrado). Sub HSClargura_Change () line1.borderwidth = HSClargura.Value shape1.borderwidth = HSClargura.Value Este código altera a espessura da figura, de acordo com o valor da propriedade Value da Barra de Rolagem. 1.3) O Controle SpinButton Este contrloe incrementa e decrementa números. Clicar em um SpinButton altera somente o valor do próprio SpinButton. Você pode escrever o código que utiliza o SpinButton para atualizar o valor exibido de outro controle. Por exemplo, você pode utilizar um SpinButton para alterar o mês, dia ou ano mostrados em uma data. Pode também usálo para se movimentar por um intervalo de valores ou lista de itens ou para alterar o valor exibido em uma caixa de texto. Para exibir um valor atualizado por um SpinButton, você deve atribuir o valor do SpinButton à parte exibida de um controle, como a propriedade Caption de um Label ou a propriedade Text de um TextBox. Para criar um SpinButton horizontal ou vertical, escolha o valor apropriado da propriedade Orientation. A propriedade padrão de um SpinButton é a propriedade Value, e o evento padrão de um SpinButton é o evento Change. No nosso projeto usaremos os eventos SpinDown e SpinUp, que ocorrem quando o usuário clica com o mouse na seta inferior ou superior, respectivamente, de um controle Spin. - Inserir quatro controles SpinButton no formulário, conforme a figura 5.2, e nomeá-los como spin1, spin2, spin3 e spin4, do controle mais ao alto para baixo. - Inserir oito labels, conforme a figura 5.2, e nomeá-los como LBLx1, LBLx2, LBLy1 e LBLy2, para os quatro labels próximos aos controles Spin; e LBL1,LBL2, LBL3 e LBL4 para os outros. Nestes últimos, definir a propriedade Caption com os valores X1, X2, Y1, e Y2, conforme a figura. Spin Button fig o ícone do controle SpinButton - Inserir as seguintes linhas de código: Private Sub Spin1_SpinDown() LBLx1.Caption = LBLx1.Caption - 10 Line1.x1 = LBLx1.Caption Private Sub Spin1_SpinUp() LBLx1.Caption = LBLx1.Caption + 10 Line1.x1 = LBLx1.Caption Private Sub Spin2_SpinDown() LBLx2.Caption = LBLx2.Caption - 10 Line1.x2 = LBLx2.Caption Private Sub Spin2_SpinUp() LBLx2.Caption = LBLx2.Caption + 10 Line1.x2 = LBLx2.Caption Private Sub Spin3_SpinDown() 43

44 LBLy1.Caption = LBLy1.Caption - 10 Line1.y1 = LBLy1.Caption Private Sub Spin3_SpinUp() LBLy1.Caption = LBLy1.Caption + 10 Line1.y1 = LBLy1.Caption Private Sub Spin4_SpinDown() LBLy2.Caption = LBLy2.Caption - 10 Line1.y2 = LBLy2.Caption Private Sub Spin4_SpinUp() LBLy2.Caption = LBLy2.Caption + 10 Line1.y2 = LBLy2.Caption Essas linhas de código definem as propriedades X1, X2, Y1 e Y2 do controle Line com o valor da propriedade Value dos controles Spin respectivos. 2 - OS MÉTODOS GRÁFICOS São semelhantes aos controles gráficos, porém são mais fáceis de usar em algumas situações. Enquanto os controles gráficos podem ser manipulados em tempo de projeto (alterando suas propriedades na Janela de Propriedades), os métodos gráficos só podem ser utilizados em tempo de execução. Veremos os métodos Pset, Line e Circle, que desenham respectivamente pontos, linhas e círculos (ou arcos e elipses). O nosso programa ganhará um novo formulário, que mostrará o funcionamento dos métodos gráficos. - Inserir um novo formulário no nosso projeto, através da opção de menu Project - Add Form. Nomear o novo formulário como FRMgrafic2, e salvá-lo como Grafic2.frm, no diretório desse projeto. O objetivo é desenhar aleatoriamente pontos, linhas e círculos no formulário, conforme o botão selecionado. Será utilizado um Timer, que conterá o coração do código. O funcionamento é o seguinte: Serão declaradas variáveis a nível de formulário, conforme abaixo: Option Explicit Dim VRpontos, VRlinhas, VRcirculos As Integer Essas variáveis terão seus valores mudados entre zero e um, conforme o botão pressionado. O código do evento Timer1.timer verifica quais variáveis têm o valor 1, e desenha as figuras respectivas. Inserir 6 botões de comando, um controle Timer e três Frames, posicionando-os e alterando as propriedades Caption (quando for o caso) conforme a figura 5.5. Não esqueça de alterar a propriedade Interval do controle Timer para 1. 44

45 fig o segundo formulário desse projeto O botão com o Caption Outro Formulário servirá para alternar o formulário ativo, devendo ser colocado um botão idêntico no formulário FRMgrafic1, que terá a mesma função. - Inserir o seguinte código no evento Click deste botão: Sub BTNoutro_click() FRMgrafic1.Show FRMgrafic2.Hide No evento Click() do botão semelhante do formulário FRMgrafic1, o código deve mostrar o segundo formulário e esconder o primeiro. - Inserir os seguintes códigos nos botões: Sub BTNpontos_Click () If BTNpontos.Caption = "Para" Then BTNpontos.Caption = "Desenha" VRpontos = 0 Else BTNpontos.Caption = "Para" VRpontos = 1 Sub BTNlinhas_Click () If BTNlinhas.Caption = "Para" Then BTNlinhas.Caption = "Desenha" VRlinhas = 0 Else BTNlinhas.Caption = "Para" VRlinhas = 1 Sub BTNcirculos_Click () If BTNcirculos.Caption = "Para" Then BTNcirculos.Caption = "Desenha" VRcirculos = 0 Else BTNcirculos.Caption = "Para" VRcirculos = 1 Esses três eventos têm funcionamento semelhante, alterando o valor da propriedade Caption do botão respectivo, de Desenha para Para e vice e versa, e alterando o valor da variável respectiva entre 1 e 0. Como já foi dito, e conforme veremos no evento Timer do controle Timer1, serão desenhadas as figuras cujas variáveis respectivas tiverem o valor 1. Sub BTNlimpa_pontos_Click () VRpontos = 0 VRlinhas = 0 VRcirculos = 0 FRMgrafic2.Cls BTNpontos.Caption = "Desenha" BTNlinhas.Caption = "Desenha" BTNcirculos.Caption = "Desenha" Este evento atribui 0 às variáveis, desabilitando o desenho de todas, e altera o Caption dos botões, além de limpar o formulário com o método Cls. 2.1) O Método Cls Limpa texto e gráficos gerados em tempo de execução, de um Formulário ou de uma Picture Box. Vamos agora verificar qual o código responsável pelo desenho, que está no evento Timer : 45

46 Sub Timer1_Timer () Dim vermelho, verde, azul Dim X, Y, x1, x2, y1, y2 Dim contador As Integer desenha os pontos If VRpontos = 1 Then vermelho = Rnd * 255 verde = Rnd * 255 azul = Rnd * 255 X = Rnd * FRMgrafic2.ScaleWidth Y = Rnd * FRMgrafic2.ScaleHeight FRMgrafic2.PSet (X, Y), RGB(vermelho, verde, azul) desenha as linhas If VRlinhas = 1 Then vermelho = Rnd * 255 verde = Rnd * 255 azul = Rnd * 255 x1 = Rnd * FRMgrafic2.ScaleWidth y1 = Rnd * FRMgrafic2.ScaleHeight x2 = Rnd * FRMgrafic2.ScaleWidth y2 = Rnd * FRMgrafic2.ScaleHeight FRMgrafic2.Line (x1, y1)-(x2, y2), RGB(vermelho, verde, azul)', BF desenha os círculos If VRcirculos = 1 Then vermelho = Rnd * 255 verde = Rnd * 255 azul = Rnd * 255 x1 = Rnd * FRMgrafic2.ScaleWidth y1 = Rnd * FRMgrafic2.ScaleHeight FRMgrafic2.Circle (x1, y1), 150, RGB(vermelho, verde, azul)', 0, 3 Este código é dividido em 4 partes: a declaração de variáveis locais, a parte que desenha os pontos, a parte que desenha as linhas e a parte que desenha os círculos. Observe que cada bloco de If verifica se a variável global adequada (VRpontos, VRlinhas ou VRcirculos) tem o valor 1. Se tiver, as instruções do bloco são executadas, e as figuras são desenhadas; caso contrário, o bloco não é executado. 2.2) A Função Rnd Essa função retorna um valor Single aleatório, variando entre zero e um. Dentro de cada bloco IF existe um conjunto de instruções comuns: vermelho = Rnd * 255 verde = Rnd * 255 azul = Rnd * 255 Essas instruções atribuem a cada variável (vermelha, verde e azul) um valor que varia entre 0 e 255, pois multiplica 255 pelo valor retornado pela função Rnd. Essas variáveis serão usadas, no código, como argumentos da função RGB(), que será vista adiante. 2.3) A Função RGB Retorna um inteiro Longo (Long) que representa uma cor no padrão RGB, que é o padrão usado no Windows. Ela é composta de três parâmetros: Red, Green e Blue. Esses parâmetros representam os componentes de vermelho, verde e azul, respectivamente, da cor retornada, e seus valores são inteiros. 46

47 Observe que após as instruções comuns, cada bloco de If inicializa as variáveis X e Y, ou X1, Y1, X2, Y2, conforme o caso. A elas são atribuídos valores que variam de 0 até ao valor da largura do formulário (no caso de variáveis X) ou de zero até o valor da altura do formulário (no caso dos Y). Isso é conseguido multiplicando-se o valor retornado pela função Rnd (que varia entre 0 e 1) pelo valor da propriedade ScaleWidth (largura útil do formulário) ou pelo valor da propriedade ScaleHeight (altura útil do formulário). Tendo compreendido tudo o que foi visto até agora, veremos a parte do código que realmente desenha no formulário. 2.4) O Método Pset Desenha um ponto em um objeto, com uma cor específica. A sintaxe é a seguinte: [object.]pset [Step](x, y)[,color] E suas partes são: object Objeto no qual o ponto será desenhado. Step Palavra chave que especifica que as coordenadas são relativas à posição corrente dada pelas propriedades CurrentX e CurrentY. x, y Valores Single que indicam as coordenadas horizontal e vertical do ponto color Cor RGB especificada para o ponto. A linha de código que desenha o ponto é a seguinte: FRMgrafic2.PSet (X, Y), RGB(vermelho, verde, azul) 2.5) O Método Line Desenha linhas ou retângulos em um objeto. A sintaxe é a seguinte: [object.]line [[Step](x1, y1)] - [Step](x2, y2) [,[color][,b[f]]] E suas partes são: object Objeto no qual a linha será desenhada. Step Palavra chave que especifica que as coordenadas são relativas à posição corrente dada pelas propriedades CurrentX e CurrentY. x1, y1 Valores Single que indicam as coordenadas horizontal e vertical do ponto de início da linha (ou vértice superior esquerdo do retângulo).. Step Palavra chave que especifica que as coordenadas são relativas ao ponto inicial da linha. x2, y2 Valores Single que indicam as coordenadas horizontal e vertical do ponto de final da linha (ou vértice inferior direito do retângulo). color Cor RGB especificada para a linha. B Opção que determina o desenho de um retângulo. F Se a opção B é usada, essa opção determina que o retângulo será preenchido pela mesma cor da borda. A instrução que desenha a linha é a seguinte: FRMgrafic2.Line (x1, y1)-(x2, y2), RGB(vermelho, verde, azul)', BF Observe que as opções B e F estão comentadas. Retire o comentário, e verifique o que ocorre ao executar o programa. 2.6) O Método Circle Desenha círculos, arcos ou elipses em um objeto. A sintaxe é a seguinte: [object.]circle [Step](x, y), radius[,[color] [,[start] [,[end] [,aspect] ] ] ] E suas partes são: object Objeto no qual o círculo será desenhado. Step Palavra chave que especifica que as coordenadas são relativas à posição corrente dada pelas propriedades CurrentX e CurrentY. x, y Valores Single que indicam as coordenadas horizontal e vertical do centro do círculo (ou do arco ou da elipse). radius Valor Single que indica o raio da figura. color Cor RGB especificada para a figura. Start 47

48 End Valores Single que indicam o início e o final do arco. A faixa de valores vai de 0 Pi radianos até 2 Pi radianos. aspect Valor Single que indica se a figura será um círculo (valor 1.0) ou uma elipse (valor diferente). A instrução que desenha o círculo é a seguinte: FRMgrafic2.Circle (x1, y1), 150, RGB(vermelho, verde, azul)', 0, 3 Retire o comentário que antecede os números 0 e 3, e verifique o que ocorre ao executar o programa. OBS: A propriedade DrawWidth do formulário determina qual espessura dos pontos, das linhas e dos círculos desenhados pelos métodos Pset, Line e Circle, respectivamente. Experimente alterar o valor dessa propriedade, em tempo de projeto, e veja como os pontos, linhas e círculos serão desenhados. 3 - OS CONTROLES DE IMAGEM Veremos agora os controles que permitem que arquivos de imagens sejam armazenados. Else são A Picture Box Control e a Image Control. Na terceira aula foi apresentado o controle Picture Box, e agora veremos mais alguma coisa referente a esse controle, além do controle Image. 3.1) Picture Box Control Como já visto, permite que uma imagem seja mostrada, bastando que o arquivo gráfico (.bmp,.wmf,.emf,.ico, ou.dib) que contenha informações sobre a imagem seja atribuído à propriedade Picture. Possui ainda a propriedade AutoSize, que determina que o controle se ajuste ao tamanho da figura por ele mostrada. 3.2) Image Control Controle que também permite que uma imagem seja mostrada. A propriedade Picture deve ser configurada da mesma forma que no controle anterior. Possui a propriedade Stretch, que dimensiona a figura de acordo com o tamanho do controle (o contrário da propriedade AutoSize do controle Picture). - Incluir um novo formulário no projeto: Name = FRMgrafic3 Caption = Imagens - Salvá-lo no diretório corrente, como grafic3.frm. - Incluir 7 botões, 2 chek box, dois labels, um controle Picture e outro Image, e distribuí-los conforme a figura 5.6. Por enquanto não se preocupar com a imagem da lua. Os controles referentes a essa imagem serão incluídos mais tarde. - Nomear os controles de acordo com a convenção utilizada, não alterando os nomes da Picture e da Image. - Incluir um CMdialog Control, configurando a propriedade Filter para BMP *.bmp ICO *.ico. - Escrever os seguintes códigos nos respectivos botões: Sub BTNcarrega_picture_Click () CMdialog1.ShowOpen picture1.picture = LoadPicture(CMdialog1.Filename) Sub BTNcarrega_image_Click () CMdialog1.ShowOpen image1.picture = LoadPicture(CMdialog1.Filename) Os códigos acima acionam o controle CMdialog1, fazendo-o mostrar uma janela de diálogo para abrir arquivo (método ShowOpen, já visto). O arquivo escolhido (CMdialog1.Filename) é atribuído à propriedade Picture, através da função LoadPicture, já vista anteriormente. - Inserir os códigos abaixo nos eventos click dos botões apropriados: Sub BTNlimpa_picture_Click () 48

49 picture1.picture = LoadPicture("") picture1.height = 1575 picture1.width = 1815 Sub BTNlimpa_image_Click () image1.picture = LoadPicture("") image1.height = 1575 image1.width = 1815 fig o terceiro formulário do projeto Os códigos anteriores removem a figura do controle (1ª linha do código), a ajustam o tamanho do controle, para o tamanho inicial (2ª e 3ª linhas). - Inserir os códigos abaixo nos eventos click dos controles CheckBox: Sub Check2_Click () picture1.autosize = check2.value Sub Check1_Click () image1.stretch = check1.value Esses dois últimos códigos ajustam as propriedades AutoSize e Stretch, dos controles respectivos, tornandoas True ou False, conforme a propriedade Check do controle CheckBox. - Inserir no evento click do controle BTNoutro: Sub BTNoutro_Click () FRMgrafic1.Show FRMgrafic2.Hide FRMgrafic3.Hide Ajuste os códigos dos eventos Click dos botões BTNoutro dos dois primeiros formulários, de forma similar ao código descrito acima, permitindo que todos os formulários possam ser acionados em tempo de execução. 3.3) Vetor de Controles Um vetor de controles é um conjunto de controles do mesmo tipo, todos com o mesmo valor para a propriedade Name. Quando, em tempo de projeto, nomeamos dois controles com o mesmo nome, o VB nos pergunta se desejamos criar um vetor com esses controles. Para que o vetor possa existir, a propriedade Index dos controles envolvidos devem receber valores inteiros e consecutivos. 49

50 - Inserir um novo controle Image no formulário, na posição em que aparece a lua na figura. Não altera a propriedade Name ( Image2). Com esse controle selecionado, copie para a área de transferência (Ctrl - C). Clique sobre o formulário, e cole (Ctrl - V) o conteúdo da área de transferência. O VB perguntará se você deseja criar um vetor de controles com o objeto Image2. Responda sim e vá colando novos controles Image2, até fazer um total de 9 elementos. Posicione-os, de forma que os elementos fiquem um ao lado do outro, em ordem de valor da propriedade Index, à exceção do primeiro (Index = 0), que deve ficar na posição em que aparece a lua na figura. Observe que a única diferença entre os controles é o valor da propriedade Index. A exceção do primeiro, altere a propriedade Visible para False de todos os controles. Atribua à propriedade Picture do controle com Index = 1 o arquivo c:\vb\icons\elements\moon01.ico. Atribua os arquivos subsequentes para os controles que se seguem, em ordem. Caso não encontre esses arquivos ou o diretório, use o pbrush para desenhar as figuras. A posição dos controles no formulário realmente não importa, já que eles ficarão invisíveis durante a execução. Mas para um melhor efeito visual durante o projeto, aconselho colocá-los um ao lado do outro. Eles podem ser colocados inclusive em uma parte do formulário que não é mostrada quando o programa for executado. fig posicionamento dos controles Image2 - Inserir um controle Timer no formulário, atribuindo 100 para Interval. - Escrever o seguinte código: Option Explicit Dim i As Integer Sub Timer1_Timer () i = i + 1 If i = 9 Then i = 1 image2(0).picture = image2(i).picture Sub BTNlua_Click () If timer1.enabled Then timer1.enabled = False Else timer1.enabled = True Ao pressionar o botão BTNlua, se o Timer1 estiver habilitado, ele é desabilitado, e vice-versa. Enquanto o Timer1 estiver habilitado, o evento Timer1_Timer() ocorre de 100 em 100 milisegundos (conforme valor da propriedade Interval). A cada vez que o evento ocorrer, o valor da variável i é incrementado e depois verificado, de maneira que ele nunca seja superior a 8. Desta forma, a propriedade Picture do controle Image2(0) recebe o valor da propriedade Picture de cada um dos controles do vetor, em ordem, dando a impressão de movimento. 50

51 CAPÍTULO VI 1 - MANIPULANDO ARQUIVOS Veremos agora como manipular arquivos, como utilizar a Área de Transferência do Windows e como tratar os erros. Isto será feito ao desenvolvermos um programa semelhante ao Bloco de Notas do Windows. Para isso, devemos abrir um novo projeto, nomear o formulário como FRMbloco, e salvá-lo como c:\aulavb\aula07\proj1\bloco.frm. Salvar o projeto como c:\aulavb\aula05\proj2\bloco.vbp. O programa terá a aparência da figura Inserir um quadro texto, nomeando-o como TXTbloco. 1.1) O Evento de Formulário Resize Este evento ocorre sempre que o formulário for redimensionado. - Escrever o seguinte código no evento Resize e no evento Load do formulário: TXTedicao.Height = FRMbloco.ScaleHeight TXTedicao.Width = FRMbloco.ScaleWidth Isto fará com que o controle de texto sempre tenha o tamanho da área útil do formulário. fig Bloco de Notas - Inserir um Menu com os seguintes itens de Menu: Name Caption MNParquivo &Arquivo MNSnovo &Novo MNSabrir &Salvar MNSsep1 - MNSsalvar &Salvar MNSsalvarcomo Salvar &Como MNSsep2 - MNSsair Sai&r - Inserir um Cmdialog, configurando as propriedades conforme abaixo: Filter = Arquivo texto *.txt CancelError = True - Escrever os seguintes códigos: Option Explicit Dim numero_arquivo, nome_arquivo Sub MNSnovo_Click () TXTedicao.Text = "" FRMbloco.Caption = "Bloco de Notas" nome_arquivo = "" TXTedicao.SetFocus 51

52 Foram declaradas as variáveis, a nível de formulário, numero_arquivo e nome_arquivo. Essas variáveis são utilizadas para abrir e referenciar um arquivo. O código do evento MNSnovo_click limpa o conteúdo do TXTedição e da variável nome_arquivo. Sub MNSabrir_Click () On Error GoTo cancelar1 CMdialog1.Action = 1 nome_arquivo = CMdialog1.Filename numero_arquivo = FreeFile Open nome_arquivo For Input As numero_arquivo FRMbloco.Caption = "Bloco de Notas - " & nome_arquivo TXTedicao.Text = Input(LOF(numero_arquivo), numero_arquivo) Close numero_arquivo TXTedicao.SetFocus Exit Sub cancelar1: trata_erro TXTedicao.Text = "" Exit Sub O código do evento MNSabrir_click usa o Cmdialog1 para mostrar a janela de diálogo que permite selecionar um arquivo para abertura (Action = 1). 1.2) A Função FreeFile A Função FreeFile retorna um número válido para referenciar um arquivo. O VB pode tratar de vários arquivos abertos simultaneamente, e cada arquivo é referenciado por um número. Essa função retorna o próximo nº livre para um arquivo. Observe que no código acima, o valor retornado pela função é atribuído à variável número_arquivo, que é usada no comando Open, como o último argumento. 1.3) O Comando Open Esse comando abre um arquivo, habilitando leitura e escrita. Um arquivo pode ser aberto nos seguintes modos: Append, Binary, Input, Output e Random. Os modos Append, Input e Output se referem a arquivos abertos no modo sequencial, e definem se o arquivo será aberto para acréscimo, entrada ou saída, respectivamente. Binary abre um arquivo em modo binário, e Random abre um arquivo para acesso aleatório. A sintaxe básica desse comando é a seguinte: Open <nome_arquivo> For <modo> As [#]<número_arquivo> 1.4) A Função Input Essa função retorna caracteres lidos de um arquivo sequencial. Tem dois parâmetros: o nº de caracteres que devem ser lidos, e o nº que referencia o arquivo. Obviamente o arquivo deve ser aberto antecipadamente pela função Open. 1.5) A Função LOF Essa função retorna o nº de bytes de um arquivo aberto. Possuí um parâmetro, que especifica o nº do arquivo previamente aberto. 1.6) O método Close Essa função fecha um arquivo previamente aberto pela função Open. É possível agora entender o código do evento MNSabrir_Click (). O código usa a função Open para abrir o arquivo escolhido pelo usuário, através do controle Cmdialog1 (variável nome_arquivo), no modo Input, com o número retornado pela função FreeFile (variável numero_arquivo). Neste modo (Input), o arquivo é aberto para leitura. Após abrir o arquivo, o conteúdo dele é copiado para a propriedade Text do controle TXTedição, sendo o arquivo fechado logo em seguida, pela função Close. - Incluir os seguintes códigos nos eventos click dos botões MNSsalvar e MNSsalvar_como: Sub MNSsalvar_Click () On Error GoTo cancelar2 If nome_arquivo = "" Then CMDialog1.Action = 1 nome_arquivo = CMDialog1.filename numero_arquivo = FreeFile 52

53 Open nome_arquivo For Output As numero_arquivo FRMbloco.Caption = "Bloco de Notas - " & nome_arquivo Print #numero_arquivo, TXTedicao.Text Close numero_arquivo TXTedicao.SetFocus Exit Sub cancelar2: trata_erro Exit Sub Sub MNSsalvarcomo_Click () On Error GoTo cancelar3 CMdialog1.Action = 2 nome_arquivo = CMdialog1.Filename numero_arquivo = FreeFile Open CMdialog1.Filename For Output As numero_arquivo FRMbloco.Caption = "Bloco de Notas - " & nome_arquivo Print #numero_arquivo, TXTedicao.Text Close numero_arquivo TXTedicao.SetFocus Exit Sub cancelar3: Exit Sub 1.7) O Método Print Esse método copia o conteúdo de uma variável em um arquivo sequencial previamente aberto. Tanto o código do evento MNSsalvar_click quanto o do evento MNSsalvarcomo_Click, abrem um arquivo para gravação, usando Open no modo Output. A diferença é no evento MNSsalvarcomo_Click a variável nome_arquivo tem seu valor alterado, através da chamada ao controle Cmdialog1, com Action = 2, enquanto que no evento MNSsalvar_click o conteúdo dessa variável não foi alterado. Ambos os eventos copiam o conteúdo do TXTedicao para o arquivo especificado, usando o método Print, fechando o arquivo logo em seguida. Pode ser notado que o nosso programa sempre trabalha com o arquivo fechado. Ele é aberto somente durante a ocorrência dos eventos click de menu (que têm uma duração de milisegundos), e o seu conteúdo é copiado ou lido, conforme o caso. 2 - ÁREA DE TRANSFERÊNCIA 2.1) O Objeto ClipBoard Esse objeto é utilizado para manipular textos e gráficos na área de transferência. Permite a implementação das ações Copiar, Colar e Recortar nos seus programas. - Adicionar ao menu existente, os seguintes itens de menu: Name Captions MNPeditar MNScolar MNScopiar MNSrecortar - Inserir os seguintes códigos: Editar Colar Copiar Recortar Sub MNScopiar_Click () clipboard.clear clipboard.settext TXTedicao.SelText TXTedicao.SetFocus Sub MNScolar_Click () On Error GoTo cancelar4 TXTedicao.SelText = clipboard.gettext() 53

54 TXTedicao.SetFocus Exit Sub cancelar4: trata_erro Exit Sub Sub MNSrecortar_Click () clipboard.clear clipboard.settext TXTedicao.SelText TXTedicao.SelText = "" TXTedicao.SetFocus 2.2) O Método Clear Esse método limpa o conteúdo da área de transferência, quando chamado junto com a palavra chave Clipboard. 2.3) O Método SetText Coloca o conteúdo de uma variável String, que lhe é passada como argumento, na área de transferência. 2.4) O Método SetData Coloca uma picture, que lhe é passada como argumento, na área de transferência, usando o formato grafico específico. Possui outro argumento, que indica o formato da picture. Pode ter um dos seguintes valores: Valor Descrição 2 Bitmap (.bmp files) 3 Metafile (.wmf files) 8 Device-independent bitmap (DIB) 9 Color palette 2.5) O Método GetText Retorna o conteúdo da área de transferência, no formato texto. 2.6) O Método GetData Retorna o conteúdo da área de transferência, em um formato gráfico. Opcionalmente pode especificar o formato, usando os mesmos valores vistos no método SetData. OSB: A utilização dos métodos SetData e GetData será vista oportunamente. 2.7) A Propriedade SelText Essa propriedade identifica a string que está selecionada em um quadro texto. Verificando os códigos dos eventos relacionados aos menus recém inseridos, será possível identificar a sintaxe dos diversos métodos relacionados ao manuseio da Área de Transferência. 3 - MANIPULANDO ERROS Observe que no eventos Colar, e em outros eventos anteriormente vistos, existe a chamada a um procedimento não visto até agora, o procedimento trata_erro. O código desse procedimento é mostrado a seguir. Sub trata_erro () Select Case Err Case 52 MsgBox "Nome de arquivo inválido",, "Impossível salvar" Case Exit Sub Case 7 MsgBox "Erro de memória",, "Operação cancelada" Case Else MsgBox "Ocorreu algum erro!",, "Operação cancelada" End Select 54

55 3.1) On Error Quando um erro de execução ocorre, o programa é encerrado, e uma mensagem do VB é enviada para a tela. Para evitar que isso ocorra, e tratar o erro sem que o programa seja encerrado, deve ser usado a construção On Error. Ela deve ser usada em conjunto com Goto, que especifica para qual linha o controle do programa deve ir, caso seja detectado um erro de execução. Esse tratamento é restrito a um evento ou função. Portanto, cada procedimento deve ter o seu On Error. A linha a que se refere o Goto é especificada por um Label, e o programa continuará a ser executado normalmente após essa linha. 3.2) A função Err A cada erro em tempo de execução, está relacionado um número. A função Err retorna o número do último erro ocorrido. Normalmente ela é utilizada em uma rotina de tratamento de erros, conforme a que foi vista acima. OBS: Existe um número muito grande de erros em tempo de execução. Para verificar quais os erros possíveis, e seus respectivos números, consulte o help, veja a função Err, e escoha os assuntos correlatos. Uma lista com todos os códigos de erros pode ser visualizada.capítulo VI Neste capítulo veremos como manipular arquivos de acesso randômico (registros). Criaremos uma aplicação que permitirá a gravação, recuperação e alteração de diversos registros em um arquivo. Este capítulo complementa o assunto iniciado no capítulo anterior, quando foi visto a manipulação de arquivos seqüenciais. 4 - MANIPULANDO ARQUIVOS DE REGISTROS -Abrir um novo projeto, nomear o formulário como FRMagenda, e salvá-lo como agenda.frm. Salvar o projeto como agenda.vbp. A aparência final do programa, quando em execução, é a da figura 6.1: LBLagend a fig manipulando registros Esse programa cria e manipula arquivos, através de registros. O usuário pode escolher qual arquivo de agenda será aberto para edição. - Inserir quatro labels, nomeando-os da seguinte forma: LBLnome, LBLtelefone, LBLcomentarios e LBLagenda. A propriedade Caption de cada label deve ser a que aparece na figura, a exceção do LBLagenda, que deve ter essa propriedade vazia. Esse último label será usado para informar qual registro está sendo acessado (parte inferior esquerda da figura). Os Labels devem ser colocados conforme aparecem na figura. - Inserir oito botões de comando, nomeando-os e configurando a propriedade Caption de cada um deles, conforme a figura. Por exemplo: BTNnovo (Caption = &Novo). - Inserir três quadro textos, dispondo-os conforme a figura, e nomeando-os de acordo com o label mais próximo. Por exemplo: TXTnome próximo ao LBLnome. 55

56 4.1) A Declaração Type Esta declaração permite a definição de um tipo de dado definido pelo usuário, composto de um ou mais elementos. O VB oferece os tipos de dados padrões (integer, string, boolean, etc), mas o programador pode definir novos tipos, usando os tipos pré-definidos, ou outros também definidos. A sintaxe da definição de tipos está mostrada abaixo: - Inserir um módulo no projeto, salvando-o como agenda.bas, no diretório do projeto atual. Um módulo é um objeto que contém código (funções e procedimentos) e declarações de tipos e variáveis, não sendo possível a colocação de controles. Para inserir um módulo no projeto, deve-se selecionar a opção de menu Project - Add Module. - Escrever o seguinte código na seção de declarações do módulo: Option Explicit Type informação nome As String * 40 fone As String * 20 comentários As String * 100 End Type Esta declaração cria o tipo informação, que é composto pelos elementos nome, fone e comentários. A partir de agora, é possível a declaração de uma variável como sendo do tipo informação, da mesma forma que se declara uma variável do tipo integer. Por exemplo: Dim x as informação cria uma variável chamada x que é do tipo informação. Para se acessar os elementos dessa variável (nome, fone, e comentários) usa-se um ponto (.) separando o nome da variável do identificador do elemento, por exemplo: x.nome = "Alfredo" x.fone = TXTfone.text Esta declaração deve ser feita em um módulo. - Escrever o seguinte código na seção de declarações do formulário: Option Explicit Dim pessoa As informação Dim numero_arquivo As Integer Dim tamanho_registro, corrente_registro, ultimo_registro As Long Dim clicou_novo, clicou_cancelar, clicou_change, clicou_excluir As Integer Dim nome_procurado As String Observe que na segunda linha foi declarada uma variável (pessoa), como sendo do tipo informação. As variáveis clicou_<alguma_coisa> serão usadas para controlar o funcionamento do programa, no que diz respeito a habilitação dos botões de comando, como será visto mais adiante. - Inserir o código a seguir, no evento Form_load(): Private Sub form_load() FRMagenda.Show nome_arquivo = InputBox("Digite o caminho e o nome do arquivo", "Selecione Arquivo de Agenda", "c:/agenda.dat", 2300, 2500) If nome_arquivo = "" Then End tamanho_registro = Len(pessoa) numero_arquivo = FreeFile Open nome_arquivo For Random As numero_arquivo Len = tamanho_registro _ ultimo_registro = FileLen(nome_arquivo) / tamanho_registro If ultimo_registro = 0 Then BTNgravar.Enabled = False BTNcancelar.Enabled = False BTNexcluir.Enabled = False BTNnovo.Enabled = True BTNprocurar.Enabled = False 56

57 Else TXTnome.Enabled = False TXTfone.Enabled = False TXTendereco.Enabled = False BTNgravar.Enabled = False BTNcancelar.Enabled = False BTNexcluir.Enabled = True BTNnovo.Enabled = True BTNprocurar.Enabled = True TXTnome.Enabled = True TXTfone.Enabled = True TXTendereco.Enabled = True corrente_registro = 1 mostra_registro LBLagenda.Caption = "Registro " + Str(corrente_registro) + "/" + Str(ultimo_registro) Este código abre (ou cria) o arquivo digitado pelo usuário, na caixa inpubox mostrada ao iniciar o programa. O que for digitado pelo usuário é retornado pela função inpubox para a variável nome_arquivo. fig InputBox("Digite o caminho e o nome do arquivo",... Observe que o comando Open abre o arquivo no modo Randon. O tamanho dos registros desse arquivo é definido pelo último argumento (Len = tamano_registro). Verifique que o valor da variável tamanho_registro é o nº de bytes da variável pessoa. A variável ultimo_registro calcula quantos registros existem no arquivo recém aberto, dividindo o tamanho do arquivo pelo tamanho de cada registro (4ª linha). Observe que conforme o valor apresentado por essa variável (se igual ou diferente de zero), os botões e os quadros textos são habilitados e desabilitados. Por exemplo: não faz sentido deixar os textos habilitados, ou os botões (a exceção do botão Novo), caso não haja registros no arquivo. Observe que se houver pelo menos um registro no arquivo (caso ultimo_registro <>0), a variável corrente_registro recebe o valor 1 (o arquivo sempre é aberto com o apontador no início). Logo em seguida é chamado o procedimento de usuário mostra_registro, que deve ser escrito conforme abaixo, na seção general do formulário (poderia ser escrito no módulo, usando a palavra public). Sub mostra_registro () If ultimo_registro = 0 Then Exit Sub Get #numero_arquivo, corrente_registro, pessoa TXTnome.Text = pessoa.nome TXTfone.Text = pessoa.fone TXTcomentarios.Text = pessoa.comentarios LBLagenda.Caption = "Registro " + Str(corrente_registro) + "/" + Str(ultimo_registro) 4.2) O Procedimento Get O procedimento get lê dados de um arquivo de acesso randômico, colocando o conteúdo de um registro em uma variável. Ele recebe três parâmetros, a saber: o número do arquivo (definido no comando open); o número do 57

58 registro a ser lido (o primeiro registro é o número 1, o segundo o nº 2, e assim por diante); e a variável que receberá o conteúdo do registro especificado. Essa variável deve ter o mesmo tamanho que o registro do arquivo. O procedimento mostra_registro verifica se existe algum registro no arquivo, verificando a variável ultimo_registro. Caso exista, o arquivo é lido (função Get()) na posição determinada pela variável corrente_registro, e o valor é colocado na variável pessoa. Observe como as variáveis numero_arquivo, corrente_registro e pessoa são passadas para o procedimento get. Por fim, na última linha, o label LBLagenda informa qual o nº registro (variável corrente_registro) que está sendo acessado, e quantos registros (variável ultimo_registro) existem no arquivo. -Inserir no evento click do BTNnovo o seguinte código: Sub BTNnovo_Click () LBLagenda.Caption = "Registro Novo" ultimo_registro = ultimo_registro + 1 corrente_registro = ultimo_registro BTNgravar.Enabled = True BTNcancelar.Enabled = True BTNexcluir.Enabled = False BTNnovo.Enabled = False BTNprocurar.Enabled = False BTNproximo.Enabled = False BTNanterior.Enabled = False TXTnome.Text = "" TXTfone.Text = "" TXTcomentarios.Text = "" TXTnome.Enabled = True TXTfone.Enabled = True TXTcomentarios.Enabled = True TXTnome.ForeColor = &H0& TXTnome.SetFocus clicou_novo = True Neste evento, que ocorre quando o usuário quer inserir um registro novo, as variáveis ultimo_registro e corrente_registro são incrementadas, e os botões e quadro textos são habilitados e desabilitados conforme a necessidade. Observe que a variável clicou_novo recebe o valor True. Isto é feito porque, como veremos adiante, os eventos change dos quadro textos contém um código que também atualiza os botões, e nós não queremos que esse código seja executado quando a mudança nos textos tenha ocorrido devido o pressionamento do botão novo. Observe também que a cor dos textos (propriedade ForeColor) muda de vermelho para preto (&H0&), o que significa que os dados que aparecem nos textos não foram gravados ainda. - Inserir no evento click do controle BTNgravar o seguinte código: Sub BTNgravar_Click () If TXTnome.Text = "" Then MsgBox "É necessário preencher o nome!",, "Impossível Gravar" Exit Sub BTNgravar.Enabled = False BTNcancelar.Enabled = False BTNexcluir.Enabled = True BTNnovo.Enabled = True BTNprocurar.Enabled = True BTNproximo.Enabled = True BTNanterior.Enabled = True pessoa.nome = TXTnome.Text pessoa.fone = TXTfone.Text pessoa.comentarios = TXTcomentarios.Text TXTnome.ForeColor = &HFF& TXTfone.ForeColor = &HFF& TXTcomentarios.ForeColor = &HFF& Put #numero_arquivo, corrente_registro, pessoa TXTnome.SetFocus LBLagenda.Caption = "Registro " + Str(corrente_registro) + "/" + Str(ultimo_registro) clicou_novo = False 58

59 4.3) O Procedimento Put Esse procedimento grava para um arquivo em disco o conteúdo de uma variável. Ele é o oposto do comando Get, visto anteriormente. Também recebe três argumentos, na mesma ordem que no comando anterior (nº do arquivo, nº do registro, variável). A sintaxe deve ser estudada nas linhas abaixo, que explicam o código do evento Sub BTNgravar_Click (). Este evento ocorre quando o usuário deseja gravar um registro novo, ou uma alteração em algum registro existente. Caso o nome não tenha sido preenchido, a gravação não é feita (as primeiras quatro linhas). Verifique que ele também habilita e desabilita os botões, torna os textos dos quadros textos vermelhos (propriedade ForeColor = &HFF&), e usa o comando put para gravar no arquivo (referenciado pela variável numero_arquivo), na posição determinada pela variável corrente_registro, o conteúdo da variável pessoa. Note que antes da chamada a esse comando (put), a variável pessoa teve os seus diversos elementos atualizados pelos valores dos quadros textos (linhas 12, 13 e 14). Observe que a variável clicou_novo recebe o valor False ao final do evento, só tornando a ficar True caso o botão Novo seja novamente pressionado. Isto ocorre porque durante esse evento, serão chamados os eventos change dos quadros textos, e os códigos nesses eventos verificam o valor dessa variável para tomar decisões. - inserir nos eventos change dos quadros textos os seguintes códigos: Private Sub TXTnome_Change() If clicou_excluir Or clicou_cancelar Then Exit Sub If TXTnome.Text <> pessoa.nome Then clicou_change = True TXTnome.ForeColor = &H0& TXTendereco.ForeColor = &H0& TXTfone.ForeColor = &H0& BTNgravar.Enabled = True BTNcancelar.Enabled = True BTNexcluir.Enabled = False BTNnovo.Enabled = False BTNprocurar.Enabled = False BTNproximo.Enabled = False BTNanterior.Enabled = False Private Sub TXTfone_Change() If clicou_excluir Or clicou_cancelar Then Exit Sub If TXTfone.Text <> pessoa.fone Then clicou_change = True TXTnome.ForeColor = &H0& TXTendereco.ForeColor = &H0& TXTfone.ForeColor = &H0& BTNgravar.Enabled = True BTNcancelar.Enabled = True BTNexcluir.Enabled = False BTNnovo.Enabled = False BTNprocurar.Enabled = False BTNproximo.Enabled = False BTNanterior.Enabled = False Private Sub TXTendereco_Change() If clicou_excluir Or clicou_cancelar Then Exit Sub If TXTendereco.Text <> pessoa.comentarios Then clicou_change = True TXTnome.ForeColor = &H0& TXTendereco.ForeColor = &H0& TXTfone.ForeColor = &H0& BTNgravar.Enabled = True 59

60 BTNcancelar.Enabled = True BTNexcluir.Enabled = False BTNnovo.Enabled = False BTNprocurar.Enabled = False BTNproximo.Enabled = False BTNanterior.Enabled = False Veja que a única diferença entre esses códigos está na 5ª linha. Em todos eles, é feita uma comparação entre o conteúdo do quadro texto em questão com o conteúdo do elemento respectivo da variável pessoa. Se esses conteúdos forem diferentes, a cor dos textos muda para preto, e os botões são habilitados/desabilitados de forma que fique claro que houve uma alteração no registro, e que essa alteração pode ser gravada ou cancelada (os botões gravar e cancelar ficam habilitados, e os demais não). Esse evento ocorre nas seguintes ocasiões: 1) sempre que o usuário digitar algo nos quadros; 2) quando clicar o botão Novo, pois nesse evento os quadros têm seus textos alterados para "", o que invoca o evento change; 3) quando clicar o botão Excluir, pois nesse evento os quadros também têm seus textos alterados, como veremos adiante; 4) quando clicar o botão Cancelar, pois nesse evento os quadros também têm seus textos alterados, como veremos adiante. Deve ficar claro que, nos casos de exclusão e cancelamento, não estamos alterando o conteúdo de um registro em particular, como nos outros casos. Por isso o if inicial que verifica se as variáveis clicou-excluir ou clicou_cancelar estão com valor true. A variável clicou_change recebe o valor True no final do evento, pois é verificada no código do evento click do botão BTNcancelar. - Inserir no evento click do controle BTNcancelar: Private Sub BTNcancelar_Click() clicou_cancelar = True TXTnome.ForeColor = &HFF& TXTfone.ForeColor = &HFF& TXTendereco.ForeColor = &HFF& If clicou_novo Then ultimo_registro = ultimo_registro - 1 corrente_registro = ultimo_registro If clicou_novo And ultimo_registro = 0 Then BTNgravar.Enabled = False BTNcancelar.Enabled = False BTNexcluir.Enabled = False BTNnovo.Enabled = True BTNprocurar.Enabled = True BTNproximo.Enabled = True BTNanterior.Enabled = True TXTnome.Text = "" TXTfone.Text = "" TXTendereco.Text = "" TXTnome.Enabled = False TXTfone.Enabled = False TXTendereco.Enabled = False LBLagenda.Caption = "Registro " + Str(corrente_registro) + "/" + Str(ultimo_registro) ElseIf clicou_change And ultimo_registro <> 0 Then BTNgravar.Enabled = False BTNcancelar.Enabled = False BTNexcluir.Enabled = True BTNnovo.Enabled = True BTNprocurar.Enabled = True BTNproximo.Enabled = True BTNanterior.Enabled = True TXTnome.Enabled = True TXTfone.Enabled = True 60

61 TXTendereco.Enabled = True mostra_registro TXTnome.SetFocus clicou_novo = False clicou_change = False clicou_cancelar = False Este evento ocorre quando o usuário deseja cancelar a inclusão de um registro novo ou a alteração do registro corrente. Aparece a variável clicou_change, que é True caso o usuário tenha digitado texto do registro corrente (conforme foi visto nos eventos change dos quadro textos). Observe que os If s do código verificam as variáveis clicou_..., para habilitar/desabilitar os botões, mostrar ou não um registro, e apresentar o número do registro corrente e o número de registros. Não deixe de entender porque as variáveis clicou_... recebem False ao final do evento. - Inserir o seguinte código no evento click do controle BTNexcluir: Private Sub BTNexcluir_Click() Dim tmp_numero_arquivo Dim tmp_corrente_registro, recnum As Long Dim tmp_pessoa As informação clicou_excluir = True tmp_numero_arquivo = FreeFile Open "c:\agenda.tmp" For Random As tmp_numero_arquivo Len = tamanho_registro tmp_corrente_registro = 1 recnum = 1 Do While recnum < ultimo_registro + 1 If recnum <> corrente_registro Then Get #numero_arquivo, recnum, tmp_pessoa Put #tmp_numero_arquivo, tmp_corrente_registro, tmp_pessoa tmp_corrente_registro = tmp_corrente_registro + 1 recnum = recnum + 1 Loop Close numero_arquivo Kill nome_arquivo Close tmp_numero_arquivo Name "c:\agenda.tmp" As nome_arquivo Open nome_arquivo For Random As numero_arquivo Len = tamanho_registro ultimo_registro = FileLen(nome_arquivo) / tamanho_registro If ultimo_registro = 0 Then BTNgravar.Enabled = False BTNcancelar.Enabled = False BTNexcluir.Enabled = False BTNnovo.Enabled = True BTNprocurar.Enabled = False TXTnome.Text = "" TXTfone.Text = "" TXTendereco.Text = "" TXTnome.Enabled = False TXTfone.Enabled = False TXTendereco.Enabled = False corrente_registro = 0 Else BTNgravar.Enabled = False BTNcancelar.Enabled = False BTNexcluir.Enabled = True BTNnovo.Enabled = True BTNprocurar.Enabled = True TXTnome.Enabled = True TXTfone.Enabled = True TXTendereco.Enabled = True corrente_registro = 1 mostra_registro 61

62 LBLagenda.Caption = "Registro " + Str(corrente_registro) + "/" + Str(ultimo_registro) clicou_excluir = False Este evento ocorre quando o usuário que deletar algum registro. Observe as variáveis locais que são criadas no início do evento; elas servirão para a gravação de um arquivo, que receberá todos os registros do arquivo em uso, menos o registro corrente (o que se quer deletar). O arquivo com a extensão tmp é criado para acesso randômico, com o tamanho do registro igual ao do arquivo em uso. Após sua criação, o loop while faz com que os registros do arquivo original sejam lidos, um a um, para a variável tmp_pessoa, que por sua vez tem seu conteúdo gravado no arquivo.tmp, a exceção do registro corrente. Temos então dois arquivos, sendo que o.tmp é uma réplica do original, menos o registro corrrente. Em seguida, o arquivo original é fechado, sendo deletado pelo procedimento Kill. 4.4) O Procedimento Kill Este procedimento apaga um arquivo em disco. O arquivo deve estar fechado para que posa ser deletado. A sintaxe é a seguinte: Kill <nome_do_arquivo> 4.5) O Procedimento Name... as... Este procedimento renomeia um arquivo em disco. O arquivo deve estar fechado para que posa ser renomeado. A sintaxe é a seguinte: Name <nome_do_arquivo> as <nome_novo> O arquivo.tmp é então fechado, e renomeado para o nome do arquivo original. Note portanto, que a exclusão de um registro significa na verdade acessar um outro arquivo com o mesmo nome, com todos os registros do arquivo original, mas sem o registro que foi excluído. - Inserir o código a seguir no evento click do controle BTNprocurar: Private Sub BTNprocurar_Click() Dim achou As Integer Dim aux_corrente_registro As Long Dim aux_pessoa As informação nome_procurado = InputBox("Digite o nome: ", "Procurar" ) 'figura 6.3 If nome_procurado = "" Then Exit Sub achou = False For aux_corrente_registro = 1 To ultimo_registro Get #numero_arquivo, aux_corrente_registro, aux_pessoa If UCase(nome_procurado) = UCase(Trim(aux_pessoa.nome)) Then achou = True Exit For Next If achou Then corrente_registro = aux_corrente_registro mostra_registro Else MsgBox "Nome não encontrado!",, "Aviso!" Este código proporciona ao usuário procurar por um registro, fornecendo o nome cadastrado. Uma InputBox retorna o nome procurado pelo usuário. 62

63 fig procurando um registro Dentro do loop for, o arquivo é lido (até o fim) para a variável aux_pessoa, que tem seu conteúdo comparado com o nome digitado pelo usuário na InputBox. Se o conteúdo for igual, o loop é interrompido, caso contrário ele segue. Ao final, de acordo com o resultado da busca, o registro procurado é mostrado, ou é enviada uma MsgBox informando que o nome não foi encontrado. Ele usa duas novas funções, que serão explicadas adiante. 4.6) As Funções UCase e LCase A função UCase recebe um argumento string e retorna uma cópia dessa string, porém com todos os caracteres alfabéticos em maiúsculos. Ela é usada no evento para garantir que um nome seja encontrado, independente de como o usuário o digite (maiúsculo ou minúsculo). A função Lcase funciona de forma semelhante, porém retorna os caracteres em minúsculo. 4.7) As Funções Trim, LTrim e RTrim A função Trim também recebe um argumento string e retorna uma cópia dessa string, só que com os espaços em branco do início e do final, que porventura existam, removidos. É usada com finalidade semelhante a da função anterior. As funções LTrim e RTrim removem os espaços em branco do início e do final de uma string, respectivamente. - Inserir nos eventos click dos botões Próximo e Anterior, os seguintes códigos: Sub BTNproximo_Click () If corrente_registro < ultimo_registro Then corrente_registro = corrente_registro + 1 mostra_registro Else MsgBox "Este é o último registro",, "Aviso!" Sub BTNanterior_Click () If corrente_registro > 1 Then corrente_registro = corrente_registro - 1 mostra_registro Else MsgBox "Este é o primeiro registro",, "Aviso!" - Estes eventos mostram o próximo registro ou o registro anterior, conforme o caso. Os códigos são muito parecidos, e fazem uso da rotina mostra_registro, tendo antes incrementado ou decrementado a variável corrente_registro. Para finalizar o nosso projeto, vamos incluir um menu com os seguintes ítens: Name MNParquivo MNSabrir Caption &Arquivo &Abrir 63

64 sep - MNSsair Sai&r MNPajuda &? MNSsobre &Sobre No evento click do item Abrir, colocar uma chamada ao evento Form_load, da seguinte maneira: Private Sub MNSabrir_Click() form_load Isso permitirá que o usuário possa escolher um outro arquivo de agenda, mesmo com o programa em execução. No evento click do item Sair, obviamente colocar o comando End. No evento click do item Sobre, inserir a seguinte linha de código: FRMsobre.Show 1 Este formulário ainda não existe. Portanto, devemos adicionar um novo formulário ao projeto (item de menu Project - Add Form), atribuir para a propriedade Name o valor FRMsobre, e salvá-lo no diretório do projeto, com o nome de sobre.frm. É possível agora criarmos uma janela de informações sobre o programa, que será mostrada ao usuário sempre que ele escolha essa opção de menu. Para obter idéias de como essa janela deve ser, selecione os itens de menu Sobre dos diversos programas for Windows existentes. Não esqueça de colocar um botão de comando OK nesse formulário, com uma instrução para que ele seja descarregado, senão o usuário não tem como voltar ao programa, já que o formulário está sendo mostrado na forma modal ( argumento 1 para o método Show). 64

65 CAPÍTULO VII Neste capítulo veremos como manipular banco de dados utilizando um controle do VB, O Data Control. O programa criado no capítulo anterior será revisto, e o arquivo de registro criado será no formato.mdb, que é o tipo de arquivo manipulado pelo Access. 1 - Definições Gerais de Banco de Dados 1.1) Definições Gerais de Banco de Dados Um banco de dados é formado por um conjunto de tabelas, que por sua vez são formadas por um conjunto de registros, estes últimos contendo campos. Uma tabela representa um conjunto de objetos do mundo real. É utilizada para armazenar informações sobrte vários elementos de um mesmo conjunto. Como exemplo de objetos podemos ter os funcionários de uma empresa, os livros de uma biblioteca, os fornecedores de uma loja, etc. Teríamos, portanto, a tabela funcionários, a tabela livros e a tabela fornecedores, para representar cada um dos objetos citados anteriormente. Cada elemento desses conjuntos (um funcionário, um livro ou um fornecedor) será um registro da tabela respectiva. Na tabela funcionários, por exeplo, seria possível termos um registro referente ao funcionário João. Obviamente, cada elemento possui atributos que o diferenciam dos demais elementos do mesmo conjunto de objetos. Esses atributos são os campos das tabelas. Por exemplo, os funcionários de uma empresa têm os seguintes atributos: nome, endereço, telefone, identidade, etc. Quando for criada a tabela que representar esse conjunto, ela deverá ser organizada com os campos nome, endereço, telefone, identidade, e assim por diante. Podemos imaginar uma tabela como sendo composta de linhas e colunas, as linhas representando os registros, e as colunas os campos, como no exemplo abaixo. TABELA FUNCIONÁRIOS IDENTIDADE NOME ENDEREÇO TELEFONE João Maria Observe que o campo identidade foi colocado à esquerda. Isto foi proposital, pois ele é chamado de campo chave. Um campo chave é um campo que identifica univocamente um registro. No caso em questão, podemos ter vários registros com o valor João no campo nome, e mais de um registro com o mesmo valor no campo endereço, por exemplo, mas só pode existir um registro com o valor no campo identidade. Em outras palavras, um campo chave sempre terá valores diferentes para registros diferentes. 1.2) Banco de Dados MDB Um Banco de Dados no formato MDB (Microsoft Data Base) é um arquivo.mdb que pode conter várias tabelas de dados, e que é reconhecido pelo programa Access, da Microsoft. Na verdade, quando se quer criar uma ou mais tabelas de dados, é necessário a utilização de um programa como o Access. Existem vários programas que permitem a criação e manipulação de tabelas de dados, cada um gerando um arquivo em um determinado formato. 2 - O Data Control O Data Control é um controle do VB que proporciona acesso aos dados armazenados em um arquivo de banco de dados. O ícone na Caixa de Ferramentas é o seguinte: Ele permite a movimentação pelos registros e que cada registro seja mostrado em um bound control. Daremos início ao projeto, executando as ações discriminadas abaixo. fig ícone do Data Control -Abrir um novo projeto, nomear o formulário como FRMagenda, e salvá-lo como c:\aulavb\aula07\proj1\agenda.frm. Salvar o projeto como \aulavb\aula07\proj1\agenda.vbp. - Inserir um Data Control no formulário, conforme a figura

66 fig Agenda telefônica usando o Data Control - Inserir quatro labels, nomeando-os da seguinte forma: LBLnome, LBLtelefone, LBLcomentarios e LBLfoto. A propriedade Caption de cada label deve ser a que aparece na figura. Os Labels devem ser colocados conforme aparecem na figura. - Inserir oito botões de comando, nomeando-os e configurando a propriedade Caption de cada um deles, conforme a figura. Por exemplo: BTNnovo (Caption = &Novo). - Inserir três quadro textos, dispondo-os conforme a figura, e nomeando-os de acordo com o label mais próximo. Por exemplo: TXTnome próximo ao LBLnome. - Inserir uma caixa de diálogos. Este controle será usado para permitir a escolha de um arquivo de figura, que será mostrada no controle de imagem. - Inserir um controle de Imagem, conforme mostra a figura. Este controle será usado para mostrar uma figura, que será armazenada no nosso arquivo de banco de dados. 2.1) A propriedade Connect Como foi dito anteriormente, existem vários formatos de banco de dados, sendo que o Data Control se conecta com os seguintes: access, dbase, excel, lotus, texto, paradox e foxpro. A definição de qual formato será utilizado é feita configurando-se a propriedade Connect do controle de dados. 2.2) A propriedade DataBase Essa propriedade seleciona o nome e a localização da origem dos dados para o Data Control. Em outras palavras, nesta propriedade deve ser especificado o path e o nome do arquivo que será conectado ao controle. 2.3) A propriedade RecordSource Como foi dito anteriormente, um arquivo de banco de dados pode conter várias tabelas. Enquanto que a propriedade DataBase especifica o arquivo, RecordSource define a origem dos registros. A origem pode ser uma tabela ou uma instrução em SQL. Se o valor dessa propriedade for mudado em tempo de execução, deve ser usado o método Refresh sobre o data control, para habilitar a mudança. 66

67 fig definindo a propriedade conect do Data Control Para o nosso projeto utilizaremos um arquivo chamado agenda.mdb, que será composto de uma tabela chamada agenda, composta dos seguintes campos: nome (text - 20), telefone (text - 15), comentários (memo) e foto (binary). O campo foto é do tipo Binary, porque esse tipo permite o armazenamento de imagens. A criação desse arquivo foge ao escopo deste trabalho, mas pode ser feita no Access ou no Visula Data Manager. O Visual Data Manager é um utilitário que vem com o pacote do VB, e que permite a criação e a manipulação de banco de dados. Para iniciar esse programa, usa-se o item de menu Add-Ins - Visual Data Manager. fig Executando o Visual Data Manager Para associarmos o controle Data Control à tabela Agenda do banco de dados Agenda.mdb, após ele ter sido criado, devemos configurar as propriedades DatabaseName e RecordSource como segue: - DatabaseName = C:\aulavb\aula07\proj1\agenda.mdb - RecordSource = Agenda 2.4) A propriedade Recordset Quando a origem dos registros é definida pelas propriedades DataBase e RecordSource, o Data Control, ao ser carregado juntamente com o formulário que o contém, cria um conjunto de dados (objeto) chamado Recordsert, que pode ser acessado, em tempo de execução, pela propriedade Recordset. É essa propriedade que permite que o conjunto de dados seja acessado. Portanto, como veremos adiante, qualquer movimentação pelos registros, adição, deleção, deve ser feita com referência a essa propriedade. 2.5) A propriedade RecordsetType A propriedade RecordsetType define qual o tipo do Recordset criado, que pode ser Dynaset, Table ou Snapshot. Neste projeto, usaremos a propriedade com o valor Dynaset, e no próximo capítulo explicaremos a diferença entre esses tipos. A partir de agora, temos que acessar cada campo dessa tabela, para que possamos acessar os seus registros. 3 - Bound control Um bound control é um controle comum do VB, que pode ser conectado a um controle Data Control, desde que esse controle esteja no mesmo formulário. Sem um Data Control, não é possível fazer com que um controle funcione como um bound control em um formulário. Veremos mais adiante, quais são os controles que podem funcionar como um bound control, e como fazer para conectá-los ao data control. 3.1) As propriedades DataSource e DataField Todos os controles que podem funcionar como bound controls possuem essas duas propriedades. Elas providenciam a ligação ao controle Data e ao campo específico, respectivamente. 67

68 Nos controles textos e imagem do nosso formulário, alterar a propriedade DataSource da seguinte forma: DataSource = Data1 (é o valor da propriedade Name do Data Control do nosso formulário) fig as propriedades DataSource e DataField Para cada controle texto e para o controle imagem, colocar na propriedade DataField os nomes dos campos, em tempo de projeto, da seguinte forma: TXTnome.DataField = Nome TXTtelefone.DataField = fone TXTcomentarios.DataField = comentarios TXTfoto.DataField = foto - Utilizando o Data Manager, inserir dois registros no nosso banco de dados. - Inserir o seguinte código no nosso projeto: Sub Form_Load () BTNcancelar.Enabled = False BTNgravar.Enabled = False frmagenda.show Sub Form_Activate () If Data1.Recordset.RecordCount = 0 Then TXTnome.Enabled = False txtfone.enabled = False txtcomentarios.enabled = False BTNgravar.Enabled = False LBLagenda.Caption = Data1.Recordset.RecordCount 4 - Objeto Recordset Como foi dito anteriormente, esse objeto é gerado quando o formulário que contem um controle de dados é carregado. Serão vistas adiante, algumas das características mais importantes desse objeto. 4.1) A propriedade RecordCount Retorna o número de registros acessados em um objeto Recordset ou o número total de registros em um objeto Recordset tipo table. Ela não indica quantos registros estão contidos em um objeto Recordset tipo dynaset, snapshot ou forward only, até que todos os registros tenham sido acessados. O código descrito acima habilita os textos do formulário, assim que ele é carregado, somente se houver algum registro. - Executar o programa. Podemos observar que apesar de não termos escrito praticamente nenhuma linha de código, já é possível visualizar e alterar os registros da nosso tabela, bastando escrever nos controles de texto e clicar nas setas do controle Data1. - Inserir os seguintes códigos: 68

69 Sub BTNnovo_Click () If Data1.Recordset.RecordCount <> 0 Then corrente_registro = Data1.Recordset.Bookmark Data1.Recordset.AddNew TXTnome.Enabled = True txtfone.enabled = True txtcomentarios.enabled = True Data1.Enabled = False BTNnovo.Enabled = False BTNgravar.Enabled = True BTNcancelar.Enabled = True BTNexcluir.Enabled = False TXTnome.SetFocus 4.2) O Método AddNew Limpa o buffer do arquivo para a criação de um novo registro em um Recordset. Observe que o código do evento click do botão BTNnovo usa o método AddNew e habilita os textos e a imagem, para que possam ser preenchidos pelo usuário. Também habilitam e desabilitam os botões, conforme o caso. Sub BTNgravar_Click () If TXTnome.Text = "" Then MsgBox "É necessário preencher o nome!",, "Impossível gravar" TXTnome.SetFocus Exit Sub Data1.Enabled = True Data1.Recordset.Update BTNnovo.Enabled = True BTNgravar.Enabled = False BTNcancelar.Enabled = False BTNexcluir.Enabled = True Data1.Recordset.Bookmark = Data1.Recordset.LastModified LBLagenda.Caption = Data1.Recordset.RecordCount 4.3) O Método Edit Abre o registro corrente do Recordset especificado para edição, copiando o conteúdo para o buffer de arquivo. recordset.edit registo. Após a sua utilização, deve ser empregado o método Update, para que o conteúdo do buffer seja salvo no 4.4) O Método Update Esse método é usado para salvar qualquer mudança em um registro, após a utilização dos métodos AddNew ou Edit. Ele grava o conteúdo do buffer do arquivo, no registro corrente. 4.5) A Propriedade Bookmark Determina qual o registro do Recordset é o registro corrente. Só é avaliado em tempo de execução. recordset.bookmark [ = variavel ] Quando um Recordset é criado ou aberto, cada registro tem um único e inequívoco Bookmark. É possível salvar o Bookmark do registro corrente atribuindo esse valor a uma variável do tipo variant. Para retornar rapidamente a esse registro, após ter havido movimentação pelos registros, basta atribuir à propriedade Bookmark do Recordset o valor dessa variável. 69

70 4.6) A Propriedade LastModify Essa propriedade contem o Bookmark do registro mais recentemente modificado. Só é avaliada em tempo de execução. Recordset.Bookmark = Recordset.LastModified Pode ser usada para fazer com que o registro mais recentemente modificado passe a ser o registro corrente. 4.7) O Método Delete Este método exclui o registro atual em um objeto Recordset atualizável. Após esse método ser executado, é necessário mover o apontador de arquivo para um registro válido, pois o registro excluído deixa de existir. No projeto atual, é usado o método MoveFirst, que move o apontador para o primeiro registro do Recordset. Esse e os outros métodos associados à movimentação e à procura de registros serão vistos no capítulo seguinte. Insira os códigos abaixo e verifique o que ocorre, tendo em vista as explicações dos métodos e propriedades deste capítulo. Sub BTNcancelar_Click () clicou_cancelar = True If corrente_registro <> "" Then Data1.Recordset.Bookmark = corrente_registro clicou_cancelar = False Data1.Enabled = True BTNnovo.Enabled = True BTNgravar.Enabled = False BTNcancelar.Enabled = False BTNexcluir.Enabled = True Sub BTNexcluir_Click () If Data1.Recordset.RecordCount <> 0 Then Data1.Recordset.Delete Data1.Recordset.MoveFirst LBLagenda.Caption = Data1.Recordset.RecordCount Else MsgBox "Não há registro!",, "Impossível excluir" TXTnome.Enabled = False txtfone.enabled = False txtcomentarios.enabled = False - Inserir o seguinte código: Sub Image1_DblClick () On Error GoTo 1 CMdialog1.Action = 1 Image1.Picture = LoadPicture(CMdialog1.Filename) Exit Sub 1 : Exit Sub Observe que ao dar dois clikes sobre a imagem, o controle de caixa de diálogos é ativado, permitindo a escolha de um arquivo de figura. Esse arquivo é então atribuído à propriedade Picture do controle imagem. Sub Image1_MouseDown (Button As Integer, Shift As Integer, X As Single, Y As If Button = 2 Then If MsgBox("Deseja realmente excluir a foto?", 36, "Exclusão de Foto") = 6 Image1.Picture = LoadPicture("") Single) Then 70

71 Esse evento limpa o conteúdo da propriedade picture do controle imagem, caso o usuário assim deseje. Ele ocorre quando o usuário aperta o botão direito do mouse (devido a instrução If Button = 2 Then ). Vamos voltar a falar sobre o Data Control. Existem dois eventos principais associados a esse controle: Validate e Reposition. 5 - Os Eventos do Data Control 5.1) O Evento Reposition Quando o Data Control é carregado, o primeiro registro do Recordset é transformado no registro corrente, e o evento Reposition ocorre. Toda vez que o usuário clicar em qualquer botão do Data Control, movendo-se de registro em registro, ou usar os métodos Move ou Find (que serão vistos no próximo capítulo) o evento Reposition ocorre. Portanto, esse evento ocorre sempre depois que o registro corrente passar a ser outro registro O Evento Validate O evento Validate ocorre antes de um registro diferente passar a ser o registro corrente, antes do método Update, e antes das operações Delete, Unload e Close. Possue dois parâmetros (como pode ser visto no código abaixo), que têm o seguinte significado: O argumento Action indica a operação que causou a ocorrência do evento. Os valores possíveis desse argumento são: Valor Descrição 0 Cancela a operação que causou o evento. 1 MoveFirst método. 2 MovePrevious método. 3 MoveNext método. 4 MoveLast método. 5 AddNew método. 6 Update operation. 7 Delete método. 8 Find método. 9 A propriedade Bookmark foi alterada. 10 Close método. 11 O formulário começa a ser descarregado da memória. O argumento Save indica se houve mudança no dado que está no buffer. Se ele for True, os métodos Edit e UpdateRecord são invocados. Portanto, se algum texto tiver seu conteúdo modificado, e um botão do Data1 for clicado, automaticamente essa mudança será salva. Insira o seguinte código no evento Data1_Validate: Sub Data1_Validate (Action As Integer, save As Integer) If clicou_cancelar = True Then save = False Quando o botão cancelar é clicado, o registro que era o corrente volta a sê-lo (verifique o evento BTNcancelar_click). Houve, portanto, alteração da propriedade BookMark (action=9), e o evento validate ocorre. A variável clicou_cancelar neste momento é true, fazendo o argumento save = False, impedindo que os métodos Edit e UpdateRecord ocorram, não salvando qualquer mudança. Para uma maior comodidade, é repetido abaixo o evento Sub BTNcancelar_Click (): Sub BTNcancelar_Click () clicou_cancelar = True If corrente_registro <> "" Then Data1.Recordset.Bookmark = corrente_registro clicou_cancelar = False 'nesta linha o evento validate é 'acionado Data1.Enabled = True BTNnovo.Enabled = True BTNgravar.Enabled = False BTNcancelar.Enabled = False BTNexcluir.Enabled = True 71

72 Para encerrar esse projeto, inserir um menu com os itens mostrados abaixo: fig o menu do programa Nomeá-los como MNPOrdenar, MNSnome e MNSregistro. Eles serão usados para ordenar o Recordset por nome ou por ordem de entrada. Observe que isto é feito configurando-se a propriedade Data1.RecordSource com uma instrução SQL, contendo ou não um comando order by. Se essa cláusula estiver presente, isto gera um Recordset ordenado, caso contrário, é gerado o Recordset com os registros em ordem de digitação. Não esqueça que o Recordset só é gerado após o método Refresh ser executado,. Para maiores detalhes sobre a instrução SQL, consultar o apêndice que trata do assunto. Private Sub MNSnome_Click() Data1.RecordSource = "select * from agenda order by nome" Data1.Refresh MNSregistro.Checked = False MNSnome.Checked = True Private Sub MNSregistro_Click() Data1.RecordSource = "select * from agenda" Data1.Refresh MNSregistro.Checked = True MNSnome.Checked = False 72

73 CAPÍTULO VIII I - Objetos de Dados A utilização do controle de dados Data Control para realizar o acesso a um arquivo de dados MDB, foi vista no capítulo anterior. Neste capítulo veremos que esse acesso também é possível sem o uso do controle, mas com o uso dos objetos de dados disponíveis no VB. Um objeto de dados pode ser visto como uma variável que tem uma função específica no tratamento de banco de dados. Os principais objetos de dados do VB são os seguintes: DataBase e Recordset. Enquanto que o Data Control oferece facilidade no manuseio de um Banco de Dados, os Objetos de Dados permitem uma maior flexibilidade, porém com o ônus de uma maior codificação. 1.1) Objeto DataBase Um objeto database é usado para referenciar um arquivo de Banco de Dados (mdb, por exemplo). Sua função pode ser comparada à propriedade DataBaseName do Data Control. A declaração de um objeto database é feita da seguinte forma: Public <nome_objeto> as DataBase 1.2) Objeto Recordset Um objeto Recordset permite o acesso a uma tabela ou grupo de registros de uma ou mais tabelas de um banco de dados previamente aberto com o método Open DataBase. É equivalente à propriedade RecordSource do Data Control. A declaração é a seguinte: Public <nome_objeto> as Recordset Um Recordset pode ser de três tipos: Table, Dynaset ou Snapshot. A definição de qual o tipo do Recordset criado é feita por ocasião da inicialização do objeto, que será vista adiante. Essa definição corresponde à propriedade RecordsetType do Data Control Table Uma table é uma representação física da estrutura do banco de dados. Um recordset do tipo table só pode ser ligado às tabelas existentes no arquivo de dados. É a ligação mais direta, e os dados são acessados e modificados em uma tabela um registro por vez. Como vantagens temos a possibilidade de criar e usar índices; utilizar o método Seek, que permite pesquisas rápidas em busca de um registro e visualizar as mudanças feitas por outros usuários em tempo real. As principais desvantagens são a impossibilidade de se definir filtros para limitar o escopo dos registros acessados e a não utilização dos métodos Find, que podem encontrar mais de uma ocorrência de um mesmo valor para uma determinada chave. O método Seek só encontra a primeira ocorrência. Para se abrir uma tabela, é necessário a inicialização de um objeto Recordset, através do método OpenRecordset Dynaset Uma Dynaset é um agrupamento de dados provenientes de uma ou mais tabelas do banco de dados. Um recordset do tipo Dynaset é composto de campos selecionados, geralmente de um grupo de registros filtrados, de uma ou mais tabelas. Ele permite que seja feito acesso a várias tabelas de um banco de dados, usando-se uma instrução SQL. Na verdade, um Dynaset é um ponteiro de registros para o que havia nas tabelas no momento em que ele foi criado. Qualquer alteração no Dynaset se reflete nas tabelas originais, mas uma alteração em qualquer tabela, não se reflete no Dynaset, devendo ele ser atualizado. Isso diminui a sua utilização em programas multiusuário. Como vantagens temos a possibilidade de manipular informações provenientes de várias tabelas; utilizar os método Find; filtrar campos e registros. As principais desvantagens são a impossibilidade de se utilizar índices e o fato de que ele não reflete as alterações que outros programas ou usuários possam fazer nas tabelas. Para se abrir uma Dynaset, é necessário a inicialização de um objeto Recordset, através do método OpenRecordset Sanpshot Uma Sanpshot é uma cópia dos dados provenientes de uma ou mais tabelas do banco de dados. Um recordset do tipo Sanpshot é quase idêntico ao dynaset. A diferença é que um Sanpshot não pode ser atualizado, sendo apenas de leitura. A sua utilização normalmente se faz em relatórios ou telas de visualização de dados. Existe um tipo de Sanpshot chamado Forward-Only, que só pode ser percorrido no sentido ascendente dos registros, não sendo possível o emprego dos métodos Move. 73

74 Como vantagens temos a possibilidade de manipular informações provenientes de várias tabelas; utilizar os método Find; filtrar campos e registros. As principais desvantagens são a impossibilidade de se utilizar índices e o fato de que ele não reflete as alterações que outros programas ou usuários possam fazer nas tabelas, e o fato de que ele não é atualizável. Para se abrir uma Sanpshot, é necessário a inicialização de um objeto Recordset, através do método OpenRecordset. 1.3) Método OpenDataBase Proporciona a abertura de um arquivo de banco de dados, e o associa a um objeto database. É a inicialização do objeto. Por exemplo: Public Dbagenda as DataBase {declaração} Set DBagenda = OpenDatabase("C:\agenda\agenda.mdb") {inicialização} 1.4) Método OpenRecordset Este método associa uma ou mais tabelas de um banco de dados, a um objeto Recordset. Quando o objeto é uma table, somente uma tabela pode ser associada; quando o objeto é um dynaset ou um snapshot, pode ser usada uma instrução SQL que filtre os dados de várias tabelas. A sintaxe é a seguinte: Set objeto = objeto_database.openrecordset (origem,tipo,opções) Uma table só pode ser criada a partir de um objeto DataBase, mas um dynaset e um snapshot também podem ser criados a partir de outro dynaset ou snapshot. Neste último caso, o argumento origem não é usado. Veremos a seguir vários exemplos de declarações que criam table, dynaset e snapshot. Set DBagenda = OpenDatabase("C:\AGENDA.MDB") Set DYNagenda = DBagenda.OpenRecordset("Select * from agenda order by nome", DbOpenDynaset) 'cria um dynaset Set TABagenda = DBagenda.OpenRecordset("agenda", DbOpenTable) 'cria uma table Set DYNagenda = DBagenda.OpenRecordset("Select * from agenda order by nome", DbOpenSnapshot) 'cria um snapshot Com os objetos de banco de dados vistos, é possível a utilização dos seguintes métodos: métodos Move, métodos Find, método Delete, método Close. Com o objeto Table é possível também a utilização do método Seek, desde que haja um índice especificado para a tabela, mas não é possível a utilização dos métodos Find. Será visto a seguir, como utilizar esses métodos. 1.5) Os Métodos Find São quatro: FindPrevious, FindNext, FindLast e FindFirst. Servem para procurar o registro anterior, o próximo registro, o último registro e o primeiro registro (respectivamente) que se enquadre no critério de procura. A sintaxe é a seguinte: recordset.findfirst criterio recordset.findlast criterio recordset.findnext criterio recordset.findprevious criterio onde recordset é um objeto do tipo dynaset ou snapshot. O critério é uma string que contém uma instrução SQL, sem a palavra Where. Por exemplo: DYNagenda.FindFirst nome = Jose {posiciona no primeiro registro cujo conteúdo do campo nome seja igual a Jose} 1.6) Os Métodos Move São quatro: MovePrevious, MoveNext, MoveLast e MoveFirst. Servem para movimentar o ponteiro de registros para o registro anterior, para o próximo registro, para o último registro e para o primeiro registro, respectivamente. A sintaxe é a seguinte: recordset.movefirst recordset.movelast recordset.movenext recordset.moveprevious onde recordset é um objeto do tipo table, dynaset ou snapshot. Por exemplo: 74

75 DYNagenda.MoveLast {posiciona no último registro do dynaset} Não esqueça que a propriedade recordset de um Data Control cria um dynaset, um snapshot ou uma table, de acordo com a propriedade RecordsetType, o que significa que esses métodos podem ser usados com um Data Control, através da propriedade recordset. Por exemplo: Data1.recordset.MoveLast {posiciona no último registro} 1.7) O Método Seek Localiza um registro em um objeto Table indexado, seguindo o critério especificado para o índice corrente. A sintaxe é a seguinte: <nome_table>.seek comparação, chave1, chave2... onde comparação é uma das seguintes strings: <, <=, =, >=, >, ou <>. Devem vir entre aspas duplas. Chaves é um valor para cada campo do índice corrente da table. 1.8) A propriedade Index Define ou retorna um valor que indica o nome do objeto Index atual em um objeto Recordset tipo table. Para utilizar o método Seek, a propriedade Index do recordset deve ser definida antes. O objeto Index especificado deve já estar definido. Se você definir a propriedade Index como um objeto Index que não existe ou se a propriedade Index não for definida quando você usar o método Seek, ocorrerá um erro interceptável. O índice pode ser criado através do Visual Data Manager, ou usando a declaração CreateIndex. A forma de se definir o objeto index utilizado é a seguinte: <nome_table>.index = nome_do_indice Essa instrução determina qual o índice existente será usado como o índice corrente para indexar os registros de um objeto criado a partir de uma tabela. table.index [ = indexname ] Indexname é o nome do índice, podendo ser definido através do Visual Data Manager. Sempre que se quiser usar o método seek, deve-se antes se determinar o índice, configurando-se a propriedade index. Por exemplo: TABagenda.index = "indcpf" TABagenda.seek "=", {já existe um índice com esse nome} {procura pelo registro que tenha esse cpf} OBS: As propriedades e os métodos vistos para os objetos de acesso a dados podem ser empregados a um controle Data Control, através da propriedade Recordset, observando o tipo de recordset definido pela propriedade RecordsetType. 2 - Praticando com Objetos de Dados Vamos agora por em prática os conhecimentos obtidos, e criar um programa com funções semelhantes ao criado no capítulo anterior, mas usando objetos de dados no lugar do Data Control. A listagem do programa, que tem a aparência da figura 8.1, servirá como exemplo dos conceitos vistos neste capítulo: Option Explicit Public DBagenda As Database Public DYNagenda As Recordset Public TABagenda As Recordset Public corrente_registro Dim inicio, clicou_procurar, clicou_ordenar As Integer Dim clicou_excluir, clicou_novo, clicou_cancelar As Integer Dim clicou_proximo, clicou_anterior As Integer 75

76 fig Usando objetos de acesso a dados Sub grava_registro() DYNagenda("nome") = FRMagenda.TXTnome DYNagenda("telefone") = FRMagenda.TXTfone DYNagenda("comentarios") = FRMagenda.TXTcomentarios DYNagenda("foto") = FRMagenda.CMDialog1.filename Sub le_registro() FRMagenda.TXTnome = DYNagenda("nome") If IsNull(DYNagenda("telefone")) Then FRMagenda.TXTfone = "" Else FRMagenda.TXTfone = DYNagenda("telefone") If IsNull(DYNagenda("comentarios")) Then FRMagenda.TXTcomentarios = "" Else FRMagenda.TXTcomentarios = DYNagenda("comentarios") If IsNull(DYNagenda("foto")) Then FRMagenda.Image1.Picture = LoadPicture("") Else FRMagenda.Image1.Picture = LoadPicture(DYNagenda("foto")) Private Sub BTNanterior_Click() If DYNagenda.RecordCount = 0 Then MsgBox "Não há registro!",, "Atenção" Exit Sub clicou_anterior = True DYNagenda.MovePrevious If Not (DYNagenda.BOF) Then le_registro corrente_registro = DYNagenda.Bookmark Else DYNagenda.MoveNext clicou_anterior = False 76

77 Private Sub BTNcancelar_Click() clicou_cancelar = True If Not IsEmpty(corrente_registro) Then DYNagenda.Bookmark = corrente_registro le_registro Else FRMagenda.TXTnome = "" FRMagenda.TXTfone = "" FRMagenda.TXTcomentarios = "" FRMagenda.Image1 = LoadPicture("") clicou_cancelar = False clicou_novo = False BTNnovo.Enabled = True BTNgravar.Enabled = False BTNcancelar.Enabled = False BTNexcluir.Enabled = True BTNproximo.Enabled = True BTNanterior.Enabled = True Private Sub BTNexcluir_Click() clicou_excluir = True If DYNagenda.RecordCount <> 0 Then DYNagenda.Delete Set DYNagenda = DBagenda.OpenRecordset("agenda", dbopendynaset) 'Set CMPnome = DYNagenda("nome") 'Set CMPtelefone = DYNagenda("telefone") 'Set CMPcomentarios = DYNagenda("comentarios") 'Set CMPfoto = DYNagenda("foto") If DYNagenda.RecordCount <> 0 Then DYNagenda.MoveFirst le_registro corrente_registro = DYNagenda.Bookmark Else TXTnome.Text = "" TXTfone.Text = "" TXTcomentarios.Text = "" Image1.Picture = LoadPicture("") TXTnome.Enabled = False TXTfone.Enabled = False TXTcomentarios.Enabled = False Image1.Enabled = False corrente_registro = Empty If DYNagenda.RecordCount <> 0 Then DYNagenda.MoveLast DYNagenda.MoveFirst If DYNagenda.RecordCount <= 1 Then LBLagenda.Caption = Str(DYNagenda.RecordCount) + " registro" Else LBLagenda.Caption = Str(DYNagenda.RecordCount) + " registros" Else LBLagenda.Caption = "Não há registro" Else MsgBox "Não há registro!",, "Impossível excluir" TXTnome.Enabled = False TXTfone.Enabled = False TXTcomentarios.Enabled = False Image1.Enabled = False 77

78 clicou_excluir = False Private Sub BTNgravar_Click() If TXTnome.Text = "" Then MsgBox "É necessário preencher o nome!",, "Impossível gravar" TXTnome.SetFocus Exit Sub grava_registro DYNagenda.Update DYNagenda.Bookmark = DYNagenda.LastModified corrente_registro = DYNagenda.Bookmark BTNnovo.Enabled = True BTNgravar.Enabled = False BTNcancelar.Enabled = False BTNexcluir.Enabled = True BTNproximo.Enabled = True BTNanterior.Enabled = True DYNagenda.Bookmark = DYNagenda.LastModified If DYNagenda.RecordCount <= 1 Then LBLagenda.Caption = Str(DYNagenda.RecordCount) + " registro" Else LBLagenda.Caption = Str(DYNagenda.RecordCount) + " registros" clicou_novo = False Private Sub BTNimprimir_Click() Dim x x = MsgBox("Somente esse registro?", 35, "Imprimir") If x = 6 Then Report1.SelectionFormula = "{agenda.nome} = '" + TXTnome.Text + "'" Report1.Action = 1 ElseIf x = 7 Then Report1.SelectionFormula = "" '+ TXTnome.Text Report1.Action = 1 Private Sub BTNnovo_Click() clicou_novo = True If DYNagenda.RecordCount <> 0 Then corrente_registro = DYNagenda.Bookmark DYNagenda.AddNew TXTnome.Enabled = True TXTfone.Enabled = True TXTcomentarios.Enabled = True Image1.Enabled = True TXTnome.Text = "" TXTfone.Text = "" TXTcomentarios.Text = "" Image1.Picture = LoadPicture("") BTNnovo.Enabled = False BTNgravar.Enabled = True BTNcancelar.Enabled = True BTNexcluir.Enabled = False BTNproximo.Enabled = False BTNanterior.Enabled = False TXTnome.SetFocus Private Sub BTNproximo_Click() 78

79 If DYNagenda.RecordCount = 0 Then MsgBox "Não há registro!",, "Atenção" Exit Sub clicou_proximo = True DYNagenda.MoveNext If Not (DYNagenda.EOF) Then le_registro corrente_registro = DYNagenda.Bookmark Else DYNagenda.MovePrevious clicou_proximo = False Private Sub BTNsair_Click() End Private Sub Form_Load() 'abre o arquivo agenda.mdb, e o associa à variável DBagenda Set DBagenda = OpenDatabase("C:\CURSOVB\AULA08\AGENDA.MDB") 'associa o dynaset DYNagenda à tabela agenda Set DYNagenda = DBagenda.OpenRecordset("agenda", dbopendynaset) 'associa cada variável field ao campo respectivo da tabela agenda 'Set CMPnome = DYNagenda("nome") 'Set CMPtelefone = DYNagenda("telefone") 'Set CMPcomentarios = DYNagenda("comentarios") 'Set CMPfoto = DYNagenda("foto") 'executa o corpo do if somente se houver algum registro 'na tabela If DYNagenda.RecordCount <> 0 Then inicio = True le_registro inicio = False corrente_registro = DYNagenda.Bookmark Else 'se não houver registro TXTnome.Enabled = False TXTfone.Enabled = False TXTcomentarios.Enabled = False Image1.Enabled = False BTNgravar.Enabled = False BTNcancelar.Enabled = False BTNgravar.Enabled = False 'informa o nº de registros If DYNagenda.RecordCount <> 0 Then DYNagenda.MoveLast DYNagenda.MoveFirst If DYNagenda.RecordCount <= 1 Then LBLagenda.Caption = Str(DYNagenda.RecordCount) + " registro" Else LBLagenda.Caption = Str(DYNagenda.RecordCount) + " registros" Else LBLagenda.Caption = "Não há registro" FRMagenda.Show 79

80 Private Sub Image1_DblClick() On Error GoTo 1 CMDialog1.Action = 1 Image1.Picture = LoadPicture(CMDialog1.filename) If BTNnovo.Enabled = True Then DYNagenda.Edit BTNnovo.Enabled = False BTNgravar.Enabled = True BTNcancelar.Enabled = True BTNexcluir.Enabled = False BTNproximo.Enabled = False BTNanterior.Enabled = False Exit Sub 1: Exit Sub Private Sub Image1_MouseDown(Button As Integer, Shift As Integer, x As Single, Y As Single) On Error GoTo 1 If Button = 2 Then If MsgBox("Deseja realmente excluir a foto?", 36, "Exclusão de foto") = 6 Then Image1.Picture = LoadPicture("") Else Exit Sub If BTNnovo.Enabled = True Then DYNagenda.Edit BTNnovo.Enabled = False BTNgravar.Enabled = True BTNcancelar.Enabled = True BTNexcluir.Enabled = False BTNproximo.Enabled = False BTNanterior.Enabled = False Exit Sub 1: Exit Sub Private Sub MNSnome_Click() clicou_ordenar = True Set DYNagenda = DBagenda.OpenRecordset("select * from agenda order by nome") le_registro corrente_registro = DYNagenda.Bookmark MNSregistro.Checked = False MNSnome.Checked = True clicou_ordenar = False Private Sub MNSnome2_Click() clicou_procurar = True FRMprocurar.Show 1 clicou_procurar = False Private Sub MNSproximo_Click() clicou_procurar = True DYNagenda.FindNext "nome = '" + TXTnome.Text + "'" If DYNagenda.NoMatch Then MsgBox "Não existem mais registros com esse nome!", 0, "Aviso" DYNagenda.Bookmark = corrente_registro 80

81 Else le_registro corrente_registro = DYNagenda.Bookmark clicou_procurar = False Private Sub MNSregistro_Click() clicou_ordenar = True Set DYNagenda = DBagenda.OpenRecordset("select * from agenda") le_registro corrente_registro = DYNagenda.Bookmark MNSregistro.Checked = True MNSnome.Checked = False clicou_ordenar = False Private Sub TXTcomentarios_Change() If clicou_procurar Or clicou_ordenar Or clicou_anterior Or clicou_proximo Or clicou_novo Or clicou_excluir Or inicio Then Exit Sub DYNagenda.Edit BTNnovo.Enabled = False BTNgravar.Enabled = True BTNcancelar.Enabled = True BTNexcluir.Enabled = False Private Sub TXTfone_Change() If clicou_procurar Or clicou_ordenar Or clicou_anterior Or clicou_proximo Or clicou_novo Or clicou_excluir Or inicio Then Exit Sub DYNagenda.Edit BTNnovo.Enabled = False BTNgravar.Enabled = True BTNcancelar.Enabled = True BTNexcluir.Enabled = False Private Sub TXTnome_Change() If clicou_procurar Or clicou_ordenar Or clicou_anterior _ Or clicou_proximo Or clicou_novo Or clicou_excluir _ Or inicio Then Exit Sub DYNagenda.Edit BTNnovo.Enabled = False BTNgravar.Enabled = True BTNcancelar.Enabled = True BTNexcluir.Enabled = False 81

82 ÍNDICE ANALÍTICO CAPÍTULO I CRIAÇÃO DE UM PROGRAMA AS PARTES DE UM PROGRAMA AMBIENTE DE PROGRAMAÇÃO VB ) Barra de menu ) Barra de ferramentas (atalho para as opções de menu) ) Caixa de ferramentas (ToolBox) ) Janela de projeto ) Janela de propriedades PROJETO ) O que é um projeto ) Componentes de um projeto ) Salvando um projeto ) Gerando um executável O PROGRAMA INAUGURAL ) Botões de Comando, Quadro Texto e Label ) Evento Click OUTRO PROGRAMA ) Propriedades Top, Left, Width, Height e ScaleMode ) Propriedades Alignment e MultiLine ) Barra de Rolagem Horizontal (HScrollBar) ) Propriedades Min, Max, Value, SmallChange e LargChange ) Foco do Teclado - Propriedade TabIndex ) Evento Change ) Evento Load ) Propriedade Enabled ) Evento Scroll...8 CAPÍTULO II TIPOS DE DADOS DECLARAÇÃO DE VARIÁVEIS ) Dim ) Public ) Private ) Static ) Matrizes ) Redim INSTRUÇÕES DE CONTROLE DE FLUXO DE PROGRAMAS ) If <expressão> Then <comando> ) A instrução Select Case ) A instrução Do While... Loop ) A instrução Do... Loop While ) A instrução For... Next ) A instrução Exit For ) A instrução Exit Do SELECIONANDO OPÇÕES ) Option Button e Check Box ESCREVENDO E CHAMANDO FUNÇÕES E PROCEDIMENTOS ) Procedimentos (Sub) ) Funções ) Função Val() ) Propriedade AutoSize CAPÍTULO III CONTROLANDO O TEMPO ) Timer Control ) Propriedade Interval e o evento Timer USANDO O MOUSE ) List Box Control ) Métodos AddItem e RemoveItem ) Combo Box Control ) Picture Box Control ) O Evento MouseDown

83 2.6) As Coordenadas do Formulário ) O Método Move ) O Evento MouseMove ) O Método Circle UTILIZANDO MENUS ) Menu ) Função Qbcolor() ) A propriedade WindowState do Formulário ) O evento Resize do Formulário ) Menus Instantâneos ) Método PopUpMenu FORMULÁRIO MDI ) MDI Form ) Propriedade Align ) Vetor de Controles CAPÍTULO IV MANIPULANDO JANELAS E MENSAGENS ) O Controle SSPanel ) Usando novos Formulários ) Os Métodos Load e Unload e os Eventos Load e Unload ) Os Métodos Show e Hide e os Eventos Activate e Deactivate ) Janelas Personalizadas ) Janelas Padronizadas - MsgBox e InputBox ) Função IsNumeric ) Função IsDate ) Função WeekDay JANELAS DE DIÁLOGOS COMUNS ) O Controle Common Dialog ) Métodos ShowColor, ShowFont, ShowOpen, ShowSave e ShowPrinter ) A Função Len ) A Função Mid ) O Comando Shell CAPITULO V OS CONTROLES GRÁFICOS ) Shape Control ) Line Control ) O Controle SpinButton OS MÉTODOS GRÁFICOS ) O Método Cls ) A Função Rnd ) A Função RGB ) O Método Pset ) O Método Line ) O Método Circle OS CONTROLES DE IMAGEM ) Picture Box Control ) Image Control ) Vetor de Controles CAPÍTULO VI MANIPULANDO ARQUIVOS ) O Evento de Formulário Resize ) A Função FreeFile ) O Comando Open ) A Função Input ) A Função LOF ) O método Close ) O Método Print ÁREA DE TRANSFERÊNCIA ) O Objeto ClipBoard ) O Método Clear ) O Método SetText ) O Método SetData ) O Método GetText ) O Método GetData

84 2.7) A Propriedade SelText MANIPULANDO ERROS ) On Error ) A função Err MANIPULANDO ARQUIVOS DE REGISTROS ) A Declaração Type ) O Procedimento Get ) O Procedimento Put ) O Procedimento Kill ) O Procedimento Name... as ) As Funções UCase e LCase ) As Funções Trim, LTrim e RTrim CAPÍTULO VII DEFINIÇÕES GERAIS DE BANCO DE DADOS ) Definições Gerais de Banco de Dados ) Banco de Dados MDB O DATA CONTROL ) A propriedade Connect ) A propriedade DataBase ) A propriedade RecordSource ) A propriedade Recordset ) A propriedade RecordsetType BOUND CONTROL ) As propriedades DataSource e DataField OBJETO RECORDSET ) A propriedade RecordCount ) O Método AddNew ) O Método Edit ) O Método Update ) A Propriedade Bookmark ) A Propriedade LastModify ) O Método Delete OS EVENTOS DO DATA CONTROL ) O Evento Reposition O Evento Validate CAPÍTULO VIII I - OBJETOS DE DADOS ) Objeto DataBase ) Objeto Recordset ) Método OpenDataBase ) Método OpenRecordset ) Os Métodos Find ) Os Métodos Move ) O Método Seek ) A propriedade Index PRATICANDO COM OBJETOS DE DADOS

Fundamentos Programação

Fundamentos Programação Fundamentos Programação A programação de computadores não é difícil. Realmente só requer algo como: Aprender alguns conceitos gerais Ser cuidadoso, organizado e lógico Praticar até aprender a dominar a

Leia mais

1 - Ambiente de desenvolvimento

1 - Ambiente de desenvolvimento Neste documento começa-se por apresentar o ambiente de desenvolvimento integrado do Visual Basic (menu bar, toolbars, toolbox, project explorer window, properties window, form designer e code editor window).

Leia mais

Visual Basic.NET. Buttons, Checkboxes, Radio Buttons, Panels e Group Boxes. Professor: Danilo Giacobo

Visual Basic.NET. Buttons, Checkboxes, Radio Buttons, Panels e Group Boxes. Professor: Danilo Giacobo Visual Basic.NET Buttons, Checkboxes, Radio Buttons, Panels e Group Boxes Professor: Danilo Giacobo Página pessoal: www.danilogiacobo.eti.br E-mail: [email protected] 1 Objetivos da aula Trabalhar

Leia mais

Aula 01 Microsoft Excel 2016

Aula 01 Microsoft Excel 2016 Aula 01 Microsoft Excel 2016 Prof. Claudio Benossi Prof. Rodrigo Achar Prof. Wagner Tufano São Paulo SP 2018 1 01 Informações sobre a interface Aprender a trabalhar com o Excel pode ser o divisor de águas

Leia mais

Laboratório de Programação I

Laboratório de Programação I Laboratório de Programação I Estruturas de Controle: Parte 2 Fabricio Breve Select Case ComboBox cbnota Label Label lblconceito Código do evento SelectedIndexChanged do componente ComboBox Public Class

Leia mais

WINDOWS FORMS APPLICATION - Aplicação (Programa) que não usa a CONSOLE

WINDOWS FORMS APPLICATION - Aplicação (Programa) que não usa a CONSOLE WINDOWS FORMS APPLICATION - Aplicação (Programa) que não usa a CONSOLE 1. Introdução. Uma Aplicação Windows Forms consiste em programas GRÁFICOS fundamentados no conceito de JANELAS que, no Visual Studio,

Leia mais

5. NOÇÕES DE PROGRAMAÇÃO

5. NOÇÕES DE PROGRAMAÇÃO 5. NOÇÕES DE PROGRAMAÇÃO VARIÁVEIS As variáveis, em Visual Basic, são classificadas de acordo com o esquema a seguir: Tabela 14 ESCOPO VIDA DECLARAÇÃO Local Dinâmica ou Estática Dim, Static (dentro de

Leia mais

WINDOWS FORMS APPLICATION - Aplicação (Programa) que não usa a CONSOLE

WINDOWS FORMS APPLICATION - Aplicação (Programa) que não usa a CONSOLE WINDOWS FORMS APPLICATION - Aplicação (Programa) que não usa a CONSOLE Uso de ELEMENTOS GRÁFICOS 1. Introdução. Uma Aplicação Windows Forms consiste em programas GRÁFICOS fundamentados no conceito de JANELAS

Leia mais

Linguagem de Programação II. Introdução à programação em VB Professor: Armando Hage

Linguagem de Programação II. Introdução à programação em VB Professor: Armando Hage Linguagem de Programação II Introdução à programação em VB Professor: Armando Hage Belém-2008 Linguagem Basic Sadia Formatada Útil quando se deseja aplicar máscaras para a exibição dos dados. Sintaxe de

Leia mais

Windows Forms Applications - Introdução. Prof. Robinson Alves IFRN

Windows Forms Applications - Introdução. Prof. Robinson Alves IFRN Windows Forms Applications - Introdução Prof. Robinson Alves IFRN Windows Forms Applications - Introdução Baseado na apostila do Prof. Fabiano Papaiz Windows Forms Applications Permitem o desenvolvimento

Leia mais

Vejamos agora as ferramentas mais utilizadas para criação de imagens:

Vejamos agora as ferramentas mais utilizadas para criação de imagens: Vejamos agora as ferramentas mais utilizadas para criação de imagens: Lápis: Apenas mantenha pressionado o botão do mouse sobre a área em branco, e arraste para desenhar. Pincel: Tem a mesma função do

Leia mais

Delphi 7 Aula 03 Progressão Geométrica

Delphi 7 Aula 03 Progressão Geométrica Delphi 7 Aula 03 Progressão Geométrica Prof. Gilbert Azevedo da Silva I. Objetivos Desenvolver aplicativos com várias janelas, Manipular lista de strings, Utilizar os componentes: MainMenu, ToolBar, ImageList,

Leia mais

Eventos no Visual FoxPro

Eventos no Visual FoxPro O Visual FoxPro fornece uma verdadeira operação não-modal para que você possa coordenar com facilidade vários formulários automaticamente, assim como executar várias instâncias de um formulário ao mesmo

Leia mais

Módulo 1a: Introdução ao Visual Basic for Applications (VBA)

Módulo 1a: Introdução ao Visual Basic for Applications (VBA) Módulo 1a: Introdução ao Visual Basic for Applications (VBA) - Elementos básicos - O Excel (revisões ou não?) Folha de cálculo baseada em células Usa um sistema de coordenadas (letra, número) Recalcula

Leia mais

Inserindo Imagem. Inserindo uma imagem a partir da Galeria

Inserindo Imagem. Inserindo uma imagem a partir da Galeria Inserindo Imagem No writer, para inserir uma imagem é muito simples. Para isso, basta clicar no menu Inserir Figura (De um arquivo, Digitalizar, Galeria do Fontwork). É possível modificar os atributos

Leia mais

DELPHI Curso Extensão. walter Prof. Walter Gima

DELPHI Curso Extensão. walter Prof. Walter Gima DELPHI Curso Extensão walter [email protected] Prof. Walter Gima DELPHI 7 Ementa do Curso Introdução ao Delphi. Ambiente de programação. Sintaxe e estrutura de linguagem. Uso de projetos units e formulários,

Leia mais

Curso de AutoCAD 2D. Instrutor : Mauro Pio Dos Santos Junior Monitor : Thainá Souza

Curso de AutoCAD 2D. Instrutor : Mauro Pio Dos Santos Junior Monitor : Thainá Souza Curso de AutoCAD 2D Instrutor : Mauro Pio Dos Santos Junior Monitor : Thainá Souza Regras da Fundação Gorceix Controle de frequência: Primeira chamada após decorridos 10 minutos do início da aula; Segunda

Leia mais

Para visualizar corretamente configurar a tela para 1024 x 768 pixels. Tabelas

Para visualizar corretamente configurar a tela para 1024 x 768 pixels. Tabelas Para visualizar corretamente configurar a tela para 1024 x 768 pixels Tabelas Sumário Alinhamento de conteúdo Autoformatação Barra suspensa Como criar uma tabela Como excluir elementos Como inserir elementos

Leia mais

Introdução a Tecnologia da Informação

Introdução a Tecnologia da Informação Introdução a Tecnologia da Informação Informática Básica Software de apresentação Prof. Jonatas Bastos Power Point p Faz parte do pacote Microsoft Office; p Software com muitos recursos para construção

Leia mais

Departamento de Informática. Orientações básicas de como utilizar Equipamento Central (BULL)

Departamento de Informática. Orientações básicas de como utilizar Equipamento Central (BULL) Departamento de Informática Orientações básicas de como utilizar Equipamento Central (BULL) Acesso ao Sistema Para utilizar os sistemas BULL devemos primeiramente fazer a conexão com o sistema através

Leia mais

Executar uma macro clicando em um botão da Barra de Ferramentas de Acesso Rápido

Executar uma macro clicando em um botão da Barra de Ferramentas de Acesso Rápido Página 1 de 8 Excel > Macros Executar uma macro Mostrar tudo Há várias maneiras de executar uma macro no Microsoft Excel. Macro é uma ação ou um conjunto de ações que você pode usar para automatizar tarefas.

Leia mais

BEKS. Modelos: BEKY e BEKS. Manual de Referência Rápida

BEKS. Modelos: BEKY e BEKS. Manual de Referência Rápida BEKS Modelos: BEKY e BEKS Manual de Referência Rápida Junho, 2017 Ícone Nome Descrição USB Imp./Exp. Entrada e Saída de bordados a partir de uma memória USB Pen Drive. Memória Acesso às 100 posições de

Leia mais

Unidade 2: Navegação e Edição Básica

Unidade 2: Navegação e Edição Básica Unidade 2: Navegação e Edição Básica 2.0 Introdução Na Unidade 1: O Painel de Controle do Excel foram descritos os vários componentes da interface do Excel. Esta segunda unidade mostra os usos mais básicos

Leia mais

Crystal Reports - Gerando seus relatórios.

Crystal Reports - Gerando seus relatórios. Crystal Reports - Gerando seus relatórios. O Crystal Reports é o gerador de relatórios do Visual Basic e com ele desenhamos os relatórios de nossos aplicativos. Embora possua um objeto chamado Printer

Leia mais

Selecione o menu FILE NEW PROJECT como apresentado a seguir:

Selecione o menu FILE NEW PROJECT como apresentado a seguir: Aula 01 Introdução ao Visual Basic.Net 1. Acessando o Visual Studio.Net 2. Criando um projeto no VB.Net Após iniciado o visual Studio.net aparecerá uma tela como a abaixo: Selecione o menu FILE NEW PROJECT

Leia mais

Curso de AutoCAD Fundação Gorceix 30/05/2017. Curso de AutoCAD 2D. Instrutor : Mauro Pio Dos Santos Junior Monitor : Brenda Mara Marques

Curso de AutoCAD Fundação Gorceix 30/05/2017. Curso de AutoCAD 2D. Instrutor : Mauro Pio Dos Santos Junior Monitor : Brenda Mara Marques Curso de AutoCAD 2D Instrutor : Mauro Pio Dos Santos Junior Monitor : Brenda Mara Marques Regras da Fundação Gorceix Controle de frequência: Primeira chamada após decorridos 10 minutos do início da aula;

Leia mais

Inserindo Quebra de Página

Inserindo Quebra de Página Inserindo Quebra de Página Quando estamos digitando um texto ou elaborando um documento, podemos por algum motivo, querer que estes terminem em um determinado ponto da página (antes do seu final) e começar

Leia mais

Microsoft Word 2010 NORMA ABNT para Trabalhos Acadêmicos Conceitos Básicos

Microsoft Word 2010 NORMA ABNT para Trabalhos Acadêmicos Conceitos Básicos Microsoft Word 2010 NORMA ABNT para Trabalhos Acadêmicos Conceitos Básicos [email protected] SUMÁRIO Iniciando o Word... 1 Conhecendo a Ferramenta... 1 Menu Layout da Página... 2 Capa... 3 Folha

Leia mais

Estruturas de Repetição

Estruturas de Repetição Algoritmos e Estruturas de Dados I (DCC/003) Estruturas de Repetição Aula Tópico 4 (while, for) 1 Problema 10 Suponha que soma (+) e subtração (-) são as únicas operações disponíveis em C. Dados dois números

Leia mais

MANUAL DE UTILIZAÇÃO DO SOFTWARE DE IMPRESSÃO DE ETIQUETAS MOORE.

MANUAL DE UTILIZAÇÃO DO SOFTWARE DE IMPRESSÃO DE ETIQUETAS MOORE. MANUAL DE UTILIZAÇÃO DO SOFTWARE DE IMPRESSÃO DE ETIQUETAS MOORE. Uma marca de sucesso da 1 CONTEÚDO 3 3 3 4 4 5 5 6 6 6 6 7 7 7 7 8 9 9 10 10 10 11 11 11 11 12 12 13 SOFTWARE DE IMPRESSÃO DE ETIQUETAS

Leia mais

Dicas de utilização AULA DE APLICAÇÃO

Dicas de utilização AULA DE APLICAÇÃO Microsoft Word 2003 Dicas de utilização Professor: Edwar Saliba Júnior AULA DE APLICAÇÃO Observação: Os atalhos disponibilizados são para o Office em Português Brasil e Inglês, respectivamente. Atividade

Leia mais

Recursos Complementares (Tabelas e Formulários)

Recursos Complementares (Tabelas e Formulários) Linguagem de Programação para Web Recursos Complementares (Tabelas e Formulários) Prof. Mauro Lopes 1-31 30 Objetivo Nesta aula iremos trabalhar o conceito de tabelas e todas as tags associadas ao seu

Leia mais

Interface. Movimentação na planilha

Interface. Movimentação na planilha EXCEL Excel é uma das melhores planilhas existentes no mercado. As planilhas eletrônicas são programas que se assemelham a uma folha de trabalho, na qual podemos colocar dados ou valores em forma de tabela

Leia mais

Aprendendo o PowerPoint

Aprendendo o PowerPoint Aprendendo o PowerPoint Prof. Claudio A. B. Tiellet Parte I Capítulo 1 Introdução O PowerPoint é um programa para apresentações. Apresentações são exibições de imagens na tela do micro em forma de eslaides,

Leia mais

Obrigado por adquirir o GNOTE da IDEON Brazil, o mais moderno gerenciador de conteúdos da Internet.

Obrigado por adquirir o GNOTE da IDEON Brazil, o mais moderno gerenciador de conteúdos da Internet. Obrigado por adquirir o GNOTE da IDEON Brazil, o mais moderno gerenciador de conteúdos da Internet. Esse manual foi desenvolvido com o intuito de que você use de maneira eficaz os recursos que ele oferece

Leia mais

OmniPC 4.2 Guia do usuário

OmniPC 4.2 Guia do usuário OmniPC 4.2 Guia do usuário Utilização prevista O OmniPC é um software destinado aos produtos OmniScan usados em ensaios não destrutivos de materiais comerciais e industriais. Não use o OmniPC para fins

Leia mais

Aula 01 Excel Prof. Claudio Benossi

Aula 01 Excel Prof. Claudio Benossi Aula 01 Excel 2016 Prof. Claudio Benossi São Paulo SP 2018 1 01 Informações sobre a interface Aprender a trabalhar com o Excel pode ser o divisor de águas em ser aprovado para uma vaga onde trabalhar com

Leia mais

Manual de Utilização do software Colacril Office para criação e impressão de etiquetas. Manual de Utilização

Manual de Utilização do software Colacril Office para criação e impressão de etiquetas. Manual de Utilização Manual de Utilização do software Colacril Office para criação e impressão de etiquetas. Manual de Utilização Conteúdo Colacril Office... 3 Instalação do Colacril... 3 Inicialização do Colacril Office...

Leia mais

Tutorial básico para Kdenlive

Tutorial básico para Kdenlive Tutorial básico para Kdenlive Veja a lista completa de tutoriais para o Kdenlive 1. Download 2. Instalação Linux/Ubuntu 3. Instalação Windows 4. Conhecendo o programa - Interface 5. Edição com o Kdenlive

Leia mais

1 Criando um projeto. Instituto Federal do Paraná

1 Criando um projeto. Instituto Federal do Paraná 1 Criando um projeto Com o Code::Blocks aberto, vá em File New Project... Selecione a opção Console Application, clique em Go e depois Next >. Selecione a linguagem C++ e clique em Next >. A seguir será

Leia mais

ROBERTO OLIVEIRA CUNHA

ROBERTO OLIVEIRA CUNHA LEIAME Apresentação Nenhuma informação do TUTORIAL DO MICRO- SOFT OFFICE PUBLISHER 2003 poderá ser copiada, movida ou modificada sem autorização prévia e escrita do Programador Roberto Oliveira Cunha.

Leia mais

Manual SISTEMA GERENCIADOR DE SENHAS Versão SERVIDOR

Manual SISTEMA GERENCIADOR DE SENHAS Versão SERVIDOR Manual SISTEMA GERENCIADOR DE SENHAS Versão 22.4.0 SERVIDOR Índice I INTRODUÇÃO... 3 II INSTALAÇÃO DO SOFTWARE... 4 III UTILIZAÇÃO DO SOFTWARE... 6 ANEXO 1 GUIA DE REFERÊNCIA RÁPIDA... 16 ANEXO 2 SOLUÇÕES

Leia mais

Linguagem de Programação I. Formulários

Linguagem de Programação I. Formulários Linguagem de Programação I Formulários Introdução Formulários são interfaces visuais de um programa com o usuário; Dentro de um formulário podem ser inseridos diversos componentes que podem facilitar a

Leia mais

B E X. Manual de Referência Rápida

B E X. Manual de Referência Rápida B E X T Manual de Referência Rápida Junho, 2017 Ícone Nome Descrição Tecla 2 Memória Mostra às 100 posições de memória da máquina. Tecla 1 USB Entra no menu USB para ler pen drives e salvar bordados na

Leia mais

1. Introdução O que é Microsoft PowerPoint Recursos de PowerPoint. Introdução

1. Introdução O que é Microsoft PowerPoint Recursos de PowerPoint. Introdução 1. Introdução 1.1. O que é Microsoft PowerPoint 2007 Microsoft Office PowerPoint 2007 é um software de apresentação gráfica produzido pela Microsoft Corporation para o sistema operacional Microsoft Windows.

Leia mais

Ambiente de programação

Ambiente de programação EXPLORANDO O O que é o SCRATCH? O software Scratch é um ambiente para a criação de jogos, histórias e animações, usando raciocínio lógico. A partir desta ferramenta é possível exercitar conceitos de lógica

Leia mais

PLANILHA ELETRÔNICA EXCEL

PLANILHA ELETRÔNICA EXCEL 1 INSTITUTO FEDERAL DE EDUCAÇÃO, CIÊNCIA E TECNOLOGIA DO RIO GRANDE DO NORTE CAMPUS JOÃO CÂMARA PLANILHA ELETRÔNICA EXCEL Nickerson Fonseca Ferreira [email protected] Conceitos básicos de

Leia mais

Visual Basic.NET. List Boxes, Checked List Boxes, Combo Boxes e Picture Boxes. Professor: Danilo Giacobo

Visual Basic.NET. List Boxes, Checked List Boxes, Combo Boxes e Picture Boxes. Professor: Danilo Giacobo Visual Basic.NET List Boxes, Checked List Boxes, Combo Boxes e Picture Boxes Professor: Danilo Giacobo Página pessoal: www.danilogiacobo.eti.br E-mail: [email protected] 1 Objetivos da aula Trabalhar

Leia mais

3. Conhecimentos Básicos

3. Conhecimentos Básicos 3. Conhecimentos Básicos 3.1 Sistema de Coordenadas A área de trabalho do AutoCAD é baseada em um sistema cartesiano de coordenadas, onde serão posicionados os pontos que definirão as entidades do desenho.

Leia mais

MÁSCARAS DE PIXELS DA AMBRA

MÁSCARAS DE PIXELS DA AMBRA MÁSCARAS DE PIXELS DA AMBRA Resumo Este manual visa instruir o usuário a instalar e a criar máscaras de pixels nas imagens. Suporte Ambra Saúde [email protected] Sumário Máscaras de Pixels da Ambra...3

Leia mais

Entendendo as janelas do Windows Uma janela é uma área retangular exibida na tela onde os programas são executados.

Entendendo as janelas do Windows Uma janela é uma área retangular exibida na tela onde os programas são executados. Windows Menu Entendendo as janelas do Windows Uma janela é uma área retangular exibida na tela onde os programas são executados. Minimizar Fechar Maximizar/restaurar Uma janela é composta de vários elementos

Leia mais

Material reorganizado e adaptado por: Suéllen Rodolfo Martinelli. Disponibilizado em:

Material reorganizado e adaptado por: Suéllen Rodolfo Martinelli. Disponibilizado em: Material reorganizado e adaptado por: Suéllen Rodolfo Martinelli Disponibilizado em: www.scratchbrasil.net.br Material original criado por: Cesar Ferreira, Cláudio Gilberto César e Susana Seidel Disponibilizado

Leia mais

COMO CRIAR PEDIDOS A PARTIR DA CESTA DE PRODUTOS

COMO CRIAR PEDIDOS A PARTIR DA CESTA DE PRODUTOS Esse guia considera que o catálogo já esteja atualizado, caso haja dúvidas de como atualizar o catálogo favor consultar o Guia de Atualização do Catálogo. Abra o programa e clique no botão Clique aqui

Leia mais

Introdução ao IDE Netbeans (Programação Java)

Introdução ao IDE Netbeans (Programação Java) Universidade Federal do ABC Disciplina: Processamento da Informação (BC-05045) Assunto: Introdução ao IDE Netbeans Introdução ao IDE Netbeans (Programação Java) Conteúdo 1. Introdução... 1 1.1. Programas

Leia mais

Capítulo 11. GRÁFICOS COM WGNUPLOT

Capítulo 11. GRÁFICOS COM WGNUPLOT Capítulo 11. GRÁFICOS COM WGNUPLOT OBJETIVOS DO CAPÍTULO Aprender a utilizar o aplicativo Wgnuplot para fazer gráficos Aprender a utilizar o aplicativo Wgnuplot interativamente com um programa em FORTRAN

Leia mais

Manual de instruções. Requisito de sistema:

Manual de instruções. Requisito de sistema: Manual de instruções Requisito de sistema: Windows XP / Windows Vista / Windows 7 / Windows 8 (OS) 1 Porta USB (1.1 / 2.0) livre 30 MB disponíveis em disco Instalação: Primeiramente, conecte o mouse na

Leia mais

EXCEL Atividade Prática

EXCEL Atividade Prática EXCEL Atividade Prática Construa a Planilha exatamente conforme a figura abaixo (o gráfico será feito posteriormente). Siga as instruções contidas nas observações abaixo e utilize os Comandos básicos apresentados

Leia mais

Curso Técnico em Informática. Sistema Educacional Galileu. A interface do PowerPoint. Barra do Título. Barra de Menu. Barra de Formatação

Curso Técnico em Informática. Sistema Educacional Galileu. A interface do PowerPoint. Barra do Título. Barra de Menu. Barra de Formatação Microsoft PowerPoint O Microsoft PowerPoint é uma ferramenta ou gerador de apresentações, palestras, workshops, campanhas publicitárias, utilizados por vários profissionais, entre eles executivos, publicitários,

Leia mais

2.8 Inserindo Objetos. Campos

2.8 Inserindo Objetos. Campos 2.8 Inserindo Objetos Vamos relacionar todos os comandos necessários para inserir novos elementos no texto, incluindo seção, notas de rodapé, caracteres especiais, fotos, objetos, gráficos, tabelas. Na

Leia mais

Partes Principais da Janela 3/26

Partes Principais da Janela 3/26 EDITOR DE TEXTO Write O Writer é o responsável pela edição de texto dos aplicativos do LibreOffice. Ele possui as características habituais de um processador de texto: inserir e editar texto, verificação

Leia mais

Método dos Elementos Finitos Aplicado à Engenharia de Estruturas Página 1

Método dos Elementos Finitos Aplicado à Engenharia de Estruturas Página 1 Método dos Elementos Finitos Aplicado à Engenharia de Estruturas Página 1 INICIANDO O ANSYS VERSÃO ED 9.0 I. Iniciando o Programa: INTRODUÇÃO No Windows, o grupo de programa do ANSYS contém os ícones que

Leia mais

AULA 2 Planos Vistas e Temas

AULA 2 Planos Vistas e Temas 2.1 AULA 2 Planos Vistas e Temas Nesta aula serão apresentados os conceitos de Planos de Informação, Vista e Tema e sua manipulação no TerraView. Para isso será usado o banco de dados criado na AULA 1,

Leia mais

UNIVERSIDADE FEDERAL RURAL DO SEMI-ÁRIDO CURSO: CIÊNCIA DA COMPUTAÇÃO 9º PERÍODO. Profª Danielle Casillo

UNIVERSIDADE FEDERAL RURAL DO SEMI-ÁRIDO CURSO: CIÊNCIA DA COMPUTAÇÃO 9º PERÍODO. Profª Danielle Casillo UNIVERSIDADE FEDERAL RURAL DO SEMI-ÁRIDO CURSO: CIÊNCIA DA COMPUTAÇÃO 9º PERÍODO Profª Danielle Casillo Sistemas Supervisórios - Aula 2 2 Abra o Intouch Aparecerá o gerenciador de aplicativos, selecione

Leia mais

Tutorial sobre o uso da ferramenta de autoria A Ferramenta de Autoria - Célula

Tutorial sobre o uso da ferramenta de autoria A Ferramenta de Autoria - Célula Tutorial sobre o uso da ferramenta de autoria A Ferramenta de Autoria - Célula Célula é uma Ferramenta de Autoria para o padrão Ginga. Auxilia no processo de criação da interatividade na TV Digital e é

Leia mais

Oficina: Planilha Eletrônica

Oficina: Planilha Eletrônica Governo do Estado do Pará Secretaria de Estado de Educação Secretaria Adjunta de Ensino Diretoria de Educação para Diversidade, Inclusão e Cidadania Coordenação de Tecnologia Aplicada à Educação Núcleo

Leia mais

VBA USANDO TABELA DO WORD COMO BANDO DE DADOS

VBA USANDO TABELA DO WORD COMO BANDO DE DADOS VBA USANDO TABELA DO WORD COMO BANDO DE DADOS PREENCHENDO UMA TABELA ATRAVÉS DE UM USERFORM Nível: Avançado w w w. t u t o r i a i s w o r d. c o m ÍNDICE O QUE É VBA?... 3 OBJETIVO DESTE EBOOK.... 4 AUTOR...

Leia mais

S40. Primeiros Passos. DAELT - Profa. Mariana Antonia Aguiar Furucho e Prof. José da Silva Maia 1

S40. Primeiros Passos. DAELT - Profa. Mariana Antonia Aguiar Furucho e Prof. José da Silva Maia 1 S40 Primeiros Passos DAELT - Profa. Mariana Antonia Aguiar Furucho e Prof. José da Silva Maia 1 Tela inicial Iniciar o programa pelo ícone do S40 localizado no desktop. Não utilizar o link do menu Iniciar

Leia mais

Usando o Eclipse - Fundamentos. Professor Vicente Paulo de Camargo

Usando o Eclipse - Fundamentos. Professor Vicente Paulo de Camargo Usando o Eclipse - Fundamentos Professor Vicente Paulo de Camargo O Eclipse é um ambiente de desenvolvimento integrado (IDE) É a ferramenta mais utilizada pelas empresas, visto que pode ser configurada

Leia mais

LibreOffice Calc: aula 3

LibreOffice Calc: aula 3 Universidade Federal de Uberlândia Faculdade de Computação GMA038 Introdução à Ciência da Computação Prof. Renato Pimentel Objetivos LibreOffice Calc: aula 3 Apresentar a criação de um gráfico no LibreOffice

Leia mais

Visual Basic.NET Image Lists, Tree e List Views, Toolbars, Status e Progress Bars e Tab Controls Lista de Exercícios

Visual Basic.NET Image Lists, Tree e List Views, Toolbars, Status e Progress Bars e Tab Controls Lista de Exercícios Ministério da Educação UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ Campus Pato Branco Visual Basic.NET Image Lists, Tree e List Views, Toolbars, Status e Progress Bars e Tab Controls Lista de Exercícios

Leia mais

08. A figura seguinte representa uma tela do Excel XP.

08. A figura seguinte representa uma tela do Excel XP. INFORMÁTICA A figura acima mostra uma janela do Windows XP, contendo informações acerca de uma lista de arquivos. Com relação a essa janela e ao Windows XP, responda a questão 01. 01. Ao se clicar o menu,

Leia mais

Capítulo 1... Iniciando o Word Conhecendo a tela do word...10 Exercício...14

Capítulo 1... Iniciando o Word Conhecendo a tela do word...10 Exercício...14 SUMÁRIO Capítulo 1... Iniciando o Word 2013...9 Conhecendo a tela do word...10 Exercício...14 Capítulo 2... Apredendo a digitar um texto...17 Iniciando a digitação...20 Salvando o documento...22 Senha

Leia mais

Introdução à Informática. Aula 07 MS WORD. Prof. Fábio Nelson

Introdução à Informática. Aula 07 MS WORD. Prof. Fábio Nelson Aula 07 MS WORD Tabelas Tabela é um recurso do Word, que nos permite criar uma tabela mais limitada que a do Excel, mas possuindo ampla aplicação. 2 Para inserir uma tabela, clique no botão tabela na barra

Leia mais

CENTRO PAULA SOUZA ETEC PADRE JOSÉ NUNES DIAS APLICATIVOS INFORMATIZADOS WORD 2007 PROFESSORA: ALINE PRISCILA SCHMIDT ALUNO:

CENTRO PAULA SOUZA ETEC PADRE JOSÉ NUNES DIAS APLICATIVOS INFORMATIZADOS WORD 2007 PROFESSORA: ALINE PRISCILA SCHMIDT ALUNO: CENTRO PAULA SOUZA ETEC PADRE JOSÉ NUNES DIAS APLICATIVOS INFORMATIZADOS WORD 2007 PROFESSORA: ALINE PRISCILA SCHMIDT ALUNO: Monte Aprazível 2011 O Word 2007 é o processador de texto mais conhecido e utilizado

Leia mais

MIDISUL (48) (48) CEP CNPJ:

MIDISUL (48) (48) CEP CNPJ: Conteúdo Introdução... 3 Tópicos... 3 Abrangência... 3 1. Acessar o Consulti... 4 2. Selecionar os Módulos do Consulti... 5 3. Selecionar as Empresas no Consulti... 5 4. Executar os Programas do Consulti...

Leia mais

INFORMÁTICA APLICADA AULA 05 WINDOWS XP

INFORMÁTICA APLICADA AULA 05 WINDOWS XP UNIVERSIDADE FEDERAL RURAL DO SEMI-ÁRIDO CURSO: Bacharelado em Ciências e Tecnologia INFORMÁTICA APLICADA AULA 05 WINDOWS XP Profª Danielle Casillo SUMÁRIO Painel de Controle 2 PAINEL DE CONTROLE Fornece

Leia mais

Trabalhando com MDI e Menus

Trabalhando com MDI e Menus Ambiente de Programação Visual Trabalhando com MDI e Menus Prof. Mauro Lopes 1-31 22 Objetivos Nesta aula iremos apresentar o desenvolvimento de uma aplicação padrão MDI. Este modelo de aplicação é muito

Leia mais

Como criar um menu pop-up no Dreamweaver

Como criar um menu pop-up no Dreamweaver Como criar um menu pop-up no Dreamweaver Introdução: Seguindo o crescimento do conteúdo em sites de Internet, a necessidade por uma fácil navegação nas páginas cresce igualmente. Um menu pop-up pode ser

Leia mais

Editor de Texto. Microsoft Word 2007

Editor de Texto. Microsoft Word 2007 Editor de Texto Microsoft Word 2007 Conteúdo O ambiente de trabalho do Word 2007 Criação do primeiro documento O trabalho com arquivos Edição do texto Formatação e impressão do documento Cabeçalho e rodapé

Leia mais

VISUALIZANDO O DESENHO NA TELA

VISUALIZANDO O DESENHO NA TELA UNIVERSIDADE FEDERAL DO RIO GRANDE DO NORTE CENTRO DE TECNOLOGIA DEPARTAMENTO DE ENGENHARIA MECÂNICA VISUALIZANDO O DESENHO NA TELA Professor: João Carmo Os Comandos de Zoom e Posicionamento Os comandos

Leia mais

Tutorial rápido CMAP TOOLS

Tutorial rápido CMAP TOOLS UFAL - Universidade Federal de Alagoas FEAC Faculdade de Economia, Administração e Contabilidade Tutorial rápido CMAP TOOLS Maceió 04 de Outubro de 2007 Sumário 1.0 Tela de Abertura do CMAP TOOLS... 3

Leia mais

A configuração é bem simples e é feita através de um painel onde cada gesto é associado a um comando do NetBeans.

A configuração é bem simples e é feita através de um painel onde cada gesto é associado a um comando do NetBeans. Mouse Gestures Visão Geral Screenshot Principais Características Requisitos do Produto Operação Configuração Visão Geral Mouse Gestures são uma maneira rápida de executar comandos do NetBeans sem usar

Leia mais

O que é Microsoft Word?

O que é Microsoft Word? Informática Aplicada 2009.2 Campus Angicos Roteiro 02 Professor: Araken de Medeiros Santos Microsoft Word 1. Abra o Microsoft Word. 2. Selecione Abrir no menu Arquivo ou clique no botão. 3. Navegue pela

Leia mais

Para abrir um documento deve utilizar uma das abordagens seguintes.

Para abrir um documento deve utilizar uma das abordagens seguintes. RESUMO O software Excel apresenta as melhores condições para se elaborar as ferramentas estratégicas de importância inigualável para o Planejamento das Estruturas, que proporcionam inclusive extrema versatilidade

Leia mais

Departamento de Engenharia Elétrica e de Computação EESC-USP. Guia de Projetos VHDL utilizando o QUARTUIS II. Profa. Luiza Maria Romeiro Codá

Departamento de Engenharia Elétrica e de Computação EESC-USP. Guia de Projetos VHDL utilizando o QUARTUIS II. Profa. Luiza Maria Romeiro Codá Departamento de Engenharia Elétrica e de Computação EESC-USP Guia de Projetos VHDL utilizando o QUARTUIS II Profa. Luiza Maria Romeiro Codá 1. Criando um novo projeto: 1.1 Iniciando o Quartus II, criando

Leia mais

AULA: BrOffice Impress segunda parte

AULA: BrOffice Impress segunda parte AULA: BrOffice Impress segunda parte Objetivos Ter uma visão geral do BrOffice Impress; Aprender a trabalhar com o modo de exibição dos slides; Saber utilizar cores ou textura em segundo plano; Aprender

Leia mais

MANUAL DO USUÁRIO SISTEMA GERENCIADOR DE SENHAS VERSÃO SERVIDOR

MANUAL DO USUÁRIO SISTEMA GERENCIADOR DE SENHAS VERSÃO SERVIDOR MANUAL DO USUÁRIO SISTEMA GERENCIADOR DE SENHAS VERSÃO 22.4.0 SERVIDOR SUMÁRIO 1. INTRODUÇÃO 3 2. INSTALAÇÃO DO SOFTWARE 4 3. UTILIZAÇÃO DO SOFTWARE 6 ANEXO 1 GUIA DE REFERÊNCIA RÁPIDA 17 ANEXO 2 SOLUÇÕES

Leia mais

Informática Prof. Rodrigo Schaeffer

Informática Prof. Rodrigo Schaeffer Técnico Judiciário Área Administrativa Informática Prof. Rodrigo Schaeffer Informática Professor Rodrigo Schaeffer www.acasadoconcurseiro.com.br Edital INFORMÁTICA: Sistemas operacionais: Windows XP/7.

Leia mais

INFORMÁTICA. 02. Com relação à figura abaixo e ao Word, marque a opção correta:

INFORMÁTICA. 02. Com relação à figura abaixo e ao Word, marque a opção correta: INFORMÁTICA 01. Todos os aplicativos abaixo são usados para edição de texto, EXCETO a) WordPad b) NotePad c) MS Word d) Windows Media Player e) BrOffice.org Writer 01. D Comentário: Os aplicativos que

Leia mais

Informática. LibreOffice Impress. Professor Márcio Hunecke.

Informática. LibreOffice Impress. Professor Márcio Hunecke. Informática LibreOffice Impress Professor Márcio Hunecke Informática Aula XX LIBREOFFICE IMPRESS Modos de Exibição Normal Alterna para a exibição normal, na qual é possível criar e editar slides. Estrutura

Leia mais