Documente Academic
Documente Profesional
Documente Cultură
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
1
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.
Para se visualizar a janela de propriedades, seleciona-se a opção de menu Window - Properties, ou a tecla de
atalho F4.
2
4 - 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.
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
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.
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>.
4
Label
Quadro
Texto
fig 1.7 - Botão de Comando, Quadro Texto e Label
- 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.
- Executar o programa.
Verificar o que ocorre ao se clicar no botão Ecoar.
- 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.
5
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.
*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.
6
- Incluir um botão de comando
*Name = BTNsair
*Caption = Sai&r
*Top = 3000
*Left = 1440
*Width = 1215
*Height = 495
- No evento BTNsair_click
End
- Executar o programa.
Verificar que não ocorre nada ao se clicar na Barra de Rolagem.
Barras de
Rolagem
7
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.
- Executar o programa.
Verificar que agora o quadro texto já apresenta o valor da barra, ao iniciar o programa.
- Executar o programa.
8
CAPÍTULO II
1 - TIPOS DE DADOS
Os tipos de dados suportados pelo VB são os seguintes:
Integer % 2 bytes
Long(long integer) & 4 bytes
Single ! 4 bytes
Double # 8 bytes
Currency @ 8 bytes
Variant Nenhum
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
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
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
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
2.5) Matrizes
As variáveis matrizes são declaradas usando a seguinte sintaxe:
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:
5 6 7 8 9
1
2
3 8.
9
4
5
6
7
8
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:
If A = 1 Then
<cmdo ou bloco executado somente se A for igual a 1>
End If
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>
End If
10
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>
End If
Select Case x
Case 0
<comandos que serão executados caso x = 0>
Case 1
<comandos que serão executados caso x = 1>
Case 2
<comandos que serão executados caso x = 2>
End Select
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:
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
1000.
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 1000.
11
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.
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.
x = <qualquer_valor>
Do
x =x+1
if x = 30 then
Exit Do
End If
Loop While x < 1000
4 - 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.
- Inserir um label:
Name = LBLescolha
Caption = <vazio>
12
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.
fig 2.1
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
End If
End Sub
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.
Sub atualiza_label
pl = Chr(10) + Chr(13)
If CHKcor Then
info = "Cor ON"
Else
info = "Cor OFF"
End If
If CHKsom Then
info = info + pl + "Som ON"
Else
info = info + pl + "Som OFF"
End If
If CHKmouse Then
info = info + pl + "Mouse ON"
Else
info = info + pl + "Mouse OFF"
End If
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 2.5.
15
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
- 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
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.
- Executar o programa.
17
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
- 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
- Executar o programa. Note que nada acontece, pois o evento Timer não tem qualquer código associado.
18
fig. 3.2 - 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.
- Executar o programa.
Sub BTNhabilita_Click ()
If VRGhabilita = 1 Then
timer1.Enabled = True
VRGhabilita = 0
BTNhabilita.Caption = "Desabilitar"
Else
timer1.Enabled = False
VRGhabilita = 1
BTNhabilita.Caption = "Habilitar"
End If
End Sub
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.
19
fig 3.3 - o formulário desse projeto
Picture Frame
Box
Comb
oBox
List
Box
fig 3.4 - Controles ComboBox, ListBox, Frame e PictureBox
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
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
End Sub
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.
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.
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
Button especifica qual botão do mouse foi pressionado, se o esquerdo (valor 1), o direito (2), ou o do centro
(4);`
Shift define o estado das teclas Shift, Ctrl e Alt, tendo os valores abaixo conforme elas forem pressionadas:
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.
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.
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
End If
22
ElseIf Button = 2 Then
Circle (X, Y), 70, QBColor(VFcor)
End If
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:
É 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
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
utilização de menus. Também será visto uma nova função do VB, a função QBcolor(). Siga os passos descritos abaixo:
- 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
3.1) Menu
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.
24
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.
Sub MNSvermelho_Click ()
FRMmenu.BackColor = QBColor(4)
MNSvermelho.Enabled = False
MNSazul.Enabled = True
MNSbranco.Enabled = True
End Sub
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:
Sub MNSazul_Click ()
FRMmenu.BackColor = QBColor(1)
MNSvermelho.Enabled = True
MNSazul.Enabled = False
MNSbranco.Enabled = True
End Sub
Sub MNSbranco_Click ()
FRMmenu.BackColor = QBColor(15)
MNSvermelho.Enabled = True
MNSazul.Enabled = True
MNSbranco.Enabled = False
End Sub
Sub Form_Load ()
MNSbranco.Enabled = False
FRMmenu.BackColor = QBColor(15)
MNSnormal.Enabled = False
FRMmenu.WindowState = 0
End Sub
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.
Sub MNSminimizado_Click ()
FRMmenu.WindowState = 1
MNSminimizado.Enabled = False
MNSmaximizado.Enabled = True
MNSnormal.Enabled = True
End Sub
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.
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
End If
End Sub
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.
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.
4 - FORMULÁRIO MDI
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
27
fig 3.6 - janela de menu
CONTROLE NAME
Form Formulario
CommandButton BTN
ListBox List1
Option Explicit
Dim Form() As New 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.
28
Form(i).Caption = Str$(i) + "º Formulário"
Form(i).Show
End Sub
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.
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.
29
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.
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:
- Iniciar um projeto.
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.
30
fig 4.3 - A janela de componentes
- Alterar as propriedades:
Name = Panel3D1
Caption = Personalizadas
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.
- Incluir no formulário FRMmensagem um label e um botão, conforme a figura 4.4 e a tabela seguinte:
31
fig 4.4 - Janela personalizada
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
Sub BTNmensagem_per_Click ()
FRMmensagem.Show 1
End Sub
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.
33
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
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=32 + 4.
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.
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.
34
- Dentro do frame1, inserir os seguintes controles:
Dim X
X = MsgBox("Deseja sair do programa?", 36, "Confirma saída")
If X = 6 Then
End
End If
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:
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.
- Inserir dois labels no formulário FRMjanelas, na parte superior, fora de qualquer SSPanel. Nomeá-los como
LBL1 e LBL2.
Este código limpa o caption dos dois labels, mostra uma InputBox e coloca o valor de retorno como caption
do label LBL1.
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.
36
fig 4.9 - 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:
37
fig 4.11 - Caixa de Diálogo Abrir
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:
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).
End 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.
On Error GoTo 1
End 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
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.
Len(strintg)
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().
40
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.
Shape
Contro
fig 5.1 - 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
- Iniciar um projeto.
- 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.
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
fig 5.2 - o primeiro formulário desse projeto
Line
Sub BTNlinha_Click ()
shape1.Visible = False
line1.Visible = True
End Sub
Sub BTNretangulo_Click ()
If CHKarredondado.Value Then
shape1.Shape = 4
Else
shape1.Shape = 0
End If
shape1.Visible = True
line1.Visible = False
End Sub
Sub BTNquadrado_Click ()
If CHKarredondado.Value Then
shape1.Shape = 5
Else
shape1.Shape = 1
End If
shape1.Visible = True
line1.Visible = False
End Sub
Sub BTNelipse_Click ()
shape1.Shape = 2
shape1.Visible = True
line1.Visible = False
End Sub
Sub BTNcirculo_Click ()
shape1.Shape = 3
shape1.Visible = True
line1.Visible = False
42
End Sub
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
End Sub
Este código altera a espessura da figura, de acordo com o valor da propriedade Value da Barra de Rolagem.
- 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
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
fig 5.5 - 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.
Sub BTNoutro_click()
FRMgrafic1.Show
FRMgrafic2.Hide
End Sub
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
End If
End Sub
Sub BTNlinhas_Click ()
If BTNlinhas.Caption = "Para" Then
BTNlinhas.Caption = "Desenha"
VRlinhas = 0
Else
BTNlinhas.Caption = "Para"
VRlinhas = 1
End If
End Sub
Sub BTNcirculos_Click ()
If BTNcirculos.Caption = "Para" Then
BTNcirculos.Caption = "Desenha"
VRcirculos = 0
Else
BTNcirculos.Caption = "Para"
VRcirculos = 1
End If
End Sub
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"
End Sub
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.
45
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
‘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
‘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
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.
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.
Observe que as opções B e F estão comentadas. Retire o comentário, 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.
- 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.
Sub BTNcarrega_picture_Click ()
CMdialog1.ShowOpen
picture1.Picture = LoadPicture(CMdialog1.Filename)
End Sub
Sub BTNcarrega_image_Click ()
CMdialog1.ShowOpen
image1.Picture = LoadPicture(CMdialog1.Filename)
End Sub
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.
Sub BTNlimpa_picture_Click ()
48
picture1.Picture = LoadPicture("")
picture1.Height = 1575
picture1.Width = 1815
End Sub
Sub BTNlimpa_image_Click ()
image1.Picture = LoadPicture("")
image1.Height = 1575
image1.Width = 1815
End Sub
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).
Sub Check2_Click ()
picture1.AutoSize = check2.Value
End Sub
Sub Check1_Click ()
image1.Stretch = check1.Value
End Sub
Esses dois últimos códigos ajustam as propriedades AutoSize e Stretch, dos controles respectivos, tornando-
as True ou False, conforme a propriedade Check do controle CheckBox.
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.
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.
Option Explicit
Dim i As Integer
Sub Timer1_Timer ()
i=i+1
If i = 9 Then
i=1
End If
image2(0).Picture = image2(i).Picture
End Sub
Sub BTNlua_Click ()
If timer1.Enabled Then
timer1.Enabled = False
Else
timer1.Enabled = True
End If
End Sub
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
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 5.6..
- Inserir um quadro texto, nomeando-o como TXTbloco.
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.
Name Caption
MNParquivo &Arquivo
MNSnovo &Novo
MNSabrir &Salvar
MNSsep1 -
MNSsalvar &Salvar
MNSsalvarcomo Salvar &Como
MNSsep2 -
MNSsair Sai&r
Option Explicit
Dim numero_arquivo, nome_arquivo
Sub MNSnovo_Click ()
TXTedicao.Text = ""
FRMbloco.Caption = "Bloco de Notas"
nome_arquivo = ""
TXTedicao.SetFocus
End Sub
51
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
End 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).
É 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
End If
52
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
End 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
End Sub
2 - ÁREA DE TRANSFERÊNCIA
Name Captions
MNPeditar Editar
MNScolar Colar
MNScopiar Copiar
MNSrecortar Recortar
Sub MNScopiar_Click ()
clipboard.Clear
clipboard.SetText TXTedicao.SelText
TXTedicao.SetFocus
End Sub
Sub MNScolar_Click ()
On Error GoTo cancelar4
TXTedicao.SelText = clipboard.GetText()
53
TXTedicao.SetFocus
Exit Sub
cancelar4:
trata_erro
Exit Sub
End Sub
Sub MNSrecortar_Click ()
clipboard.Clear
clipboard.SetText TXTedicao.SelText
TXTedicao.SelText = ""
TXTedicao.SetFocus
End Sub
Valor Descrição
2 Bitmap (.bmp files)
3 Metafile (.wmf files)
8 Device-independent bitmap (DIB)
9 Color palette
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 32755
Exit Sub
Case 7
MsgBox "Erro de memória", , "Operação cancelada"
Case Else
MsgBox "Ocorreu algum erro!", , "Operação cancelada"
End Select
End Sub
54
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.
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.
LBLagend
a
fig 6.1 - 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 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
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:
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
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.
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.
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
End If
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)
End Sub
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
End Sub
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.
Sub BTNgravar_Click ()
If TXTnome.Text = "" Then
MsgBox "É necessário preencher o nome!", , "Impossível Gravar"
Exit Sub
End If
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
End Sub
58
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.
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:
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.
60
TXTendereco.Enabled = True
mostra_registro
TXTnome.SetFocus
End If
clicou_novo = False
clicou_change = False
clicou_cancelar = False
End Sub
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.
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
End If
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
61
End If
LBLagenda.Caption = "Registro " + Str(corrente_registro) + "/" + Str(ultimo_registro)
clicou_excluir = False
End Sub
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.
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:
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
fig 6.3 - 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.
- 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!"
End If
End Sub
Sub BTNanterior_Click ()
If corrente_registro > 1 Then
corrente_registro = corrente_registro - 1
mostra_registro
Else
MsgBox "Este é o primeiro registro", , "Aviso!"
End If
End Sub
- 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 Caption
MNParquivo &Arquivo
MNSabrir &Abrir
63
sep -
MNSsair Sai&r
MNPajuda &?
MNSsobre &Sobre
No evento click do item Abrir, colocar uma chamada ao evento Form_load, da seguinte maneira:
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
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.
TABELA FUNCIONÁRIOS
IDENTIDADE NOME ENDEREÇO TELEFONE
002233 João
023132 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 002233 no campo identidade. Em outras palavras, um campo
chave sempre terá valores diferentes para registros diferentes.
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.
65
fig 7.2 - Agenda telefônica usando o Data Control
- 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.
66
fig 7.3 - 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.
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
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.
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
Sub Form_Load ()
BTNcancelar.Enabled = False
BTNgravar.Enabled = False
frmagenda.Show
End Sub
Sub Form_Activate ()
If Data1.Recordset.RecordCount = 0 Then
TXTnome.Enabled = False
txtfone.Enabled = False
txtcomentarios.Enabled = False
BTNgravar.Enabled = False
End If
LBLagenda.Caption = Data1.Recordset.RecordCount
End Sub
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.
- 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.
68
Sub BTNnovo_Click ()
If Data1.Recordset.RecordCount <> 0 Then
corrente_registro = Data1.Recordset.Bookmark
End If
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
End Sub
Sub BTNgravar_Click ()
If TXTnome.Text = "" Then
MsgBox "É necessário preencher o nome!", , "Impossível gravar"
TXTnome.SetFocus
Exit Sub
End If
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
End Sub
recordset.Edit
Após a sua utilização, deve ser empregado o método Update, para que o conteúdo do buffer seja salvo no
registo.
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
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.
Sub BTNcancelar_Click ()
clicou_cancelar = True
If corrente_registro <> "" Then
Data1.Recordset.Bookmark = corrente_registro
End If
clicou_cancelar = False
Data1.Enabled = True
BTNnovo.Enabled = True
BTNgravar.Enabled = False
BTNcancelar.Enabled = False
BTNexcluir.Enabled = True
End Sub
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
End If
End Sub
Sub Image1_DblClick ()
On Error GoTo 1
CMdialog1.Action = 1
Image1.Picture = LoadPicture(CMdialog1.Filename)
Exit Sub
1:
Exit Sub
End 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.
70
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.
Valor Descrição
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:
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 'nesta linha o evento validate é
'acionado
End If
clicou_cancelar = False
Data1.Enabled = True
BTNnovo.Enabled = True
BTNgravar.Enabled = False
BTNcancelar.Enabled = False
BTNexcluir.Enabled = True
End Sub
71
Para encerrar esse projeto, inserir um menu com os itens mostrados abaixo:
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.
72
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.
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.
1.2.1 - 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.
1.2.2 - 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.
1.2.3 - 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
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.
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.
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.
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}
recordset.MoveFirst
recordset.MoveLast
recordset.MoveNext
recordset.MovePrevious
74
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:
onde comparação é uma das seguintes strings: <, <=, =, >=, >, ou <>. Devem vir entre aspas duplas. Chaves é
um valor para cada campo do índice corrente da table.
<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:
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.
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
fig 8.1 - 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
End Sub
Sub le_registro()
FRMagenda.TXTnome = DYNagenda("nome")
If IsNull(DYNagenda("telefone")) Then
FRMagenda.TXTfone = ""
Else
FRMagenda.TXTfone = DYNagenda("telefone")
End If
If IsNull(DYNagenda("comentarios")) Then
FRMagenda.TXTcomentarios = ""
Else
FRMagenda.TXTcomentarios = DYNagenda("comentarios")
End If
If IsNull(DYNagenda("foto")) Then
FRMagenda.Image1.Picture = LoadPicture("")
Else
FRMagenda.Image1.Picture = LoadPicture(DYNagenda("foto"))
End If
End Sub
76
End Sub
BTNnovo.Enabled = True
BTNgravar.Enabled = False
BTNcancelar.Enabled = False
BTNexcluir.Enabled = True
BTNproximo.Enabled = True
BTNanterior.Enabled = True
End Sub
77
clicou_excluir = False
End Sub
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"
End If
clicou_novo = False
End Sub
BTNnovo.Enabled = False
BTNgravar.Enabled = True
BTNcancelar.Enabled = True
BTNexcluir.Enabled = False
BTNproximo.Enabled = False
BTNanterior.Enabled = False
TXTnome.SetFocus
End Sub
78
If DYNagenda.RecordCount = 0 Then
MsgBox "Não há registro!", , "Atenção"
Exit Sub
End If
clicou_proximo = True
DYNagenda.MoveNext
If Not (DYNagenda.EOF) Then
le_registro
corrente_registro = DYNagenda.Bookmark
Else
DYNagenda.MovePrevious
End If
clicou_proximo = False
End Sub
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"
End If
Else
LBLagenda.Caption = "Não há registro"
End If
FRMagenda.Show
End Sub
79
Private Sub Image1_DblClick()
On Error GoTo 1
CMDialog1.Action = 1
Image1.Picture = LoadPicture(CMDialog1.filename)
If BTNnovo.Enabled = True Then
DYNagenda.Edit
End If
BTNnovo.Enabled = False
BTNgravar.Enabled = True
BTNcancelar.Enabled = True
BTNexcluir.Enabled = False
BTNproximo.Enabled = False
BTNanterior.Enabled = False
Exit Sub
1:
Exit Sub
End Sub
End If
Exit Sub
1:
Exit Sub
End Sub
End Sub
80
Else
le_registro
corrente_registro = DYNagenda.Bookmark
End If
clicou_procurar = False
End Sub
BTNnovo.Enabled = False
BTNgravar.Enabled = True
BTNcancelar.Enabled = True
BTNexcluir.Enabled = False
End Sub
BTNnovo.Enabled = False
BTNgravar.Enabled = True
BTNcancelar.Enabled = True
BTNexcluir.Enabled = False
End Sub
BTNnovo.Enabled = False
BTNgravar.Enabled = True
BTNcancelar.Enabled = True
BTNexcluir.Enabled = False
End Sub
81
ÍNDICE ANALÍTICO
CAPÍTULO I............................................................................................................................................................................... 1
1 - CRIAÇÃO DE UM PROGRAMA ........................................................................................................................................ 1
2 - AS PARTES DE UM PROGRAMA..................................................................................................................................... 1
3 - AMBIENTE DE PROGRAMAÇÃO VB ............................................................................................................................... 1
3.1) Barra de menu ............................................................................................................................................................ 1
3.2) Barra de ferramentas (atalho para as opções de menu)............................................................................................. 1
3.3) Caixa de ferramentas (ToolBox) ................................................................................................................................. 1
3.4) Janela de projeto......................................................................................................................................................... 1
3.5) Janela de propriedades............................................................................................................................................... 2
4 - PROJETO ......................................................................................................................................................................... 3
4.1) O que é um projeto .................................................................................................................................................... 3
4.2) Componentes de um projeto ....................................................................................................................................... 3
4.3) Salvando um projeto ................................................................................................................................................... 3
4.4) Gerando um executável .............................................................................................................................................. 3
5 - O PROGRAMA INAUGURAL ............................................................................................................................................ 3
5.1) Botões de Comando, Quadro Texto e Label ............................................................................................................... 4
5.2) Evento Click ................................................................................................................................................................ 5
6 - OUTRO PROGRAMA........................................................................................................................................................ 6
6.1) Propriedades Top, Left, Width, Height e ScaleMode .................................................................................................. 6
6.2) Propriedades Alignment e MultiLine............................................................................................................................ 6
6.3) Barra de Rolagem Horizontal (HScrollBar) ................................................................................................................. 7
6.4) Propriedades Min, Max, Value, SmallChange e LargChange ..................................................................................... 7
6.5) Foco do Teclado - Propriedade TabIndex................................................................................................................... 7
6.6) Evento Change ........................................................................................................................................................... 7
6.7) Evento Load ................................................................................................................................................................ 8
6.8) Propriedade Enabled .................................................................................................................................................. 8
6.9) Evento Scroll ............................................................................................................................................................... 8
CAPÍTULO II.............................................................................................................................................................................. 9
1 - TIPOS DE DADOS ............................................................................................................................................................ 9
2 - DECLARAÇÃO DE VARIÁVEIS ........................................................................................................................................ 9
2.1) Dim.............................................................................................................................................................................. 9
2.2) Public .......................................................................................................................................................................... 9
2.3) Private......................................................................................................................................................................... 9
2.4) Static ........................................................................................................................................................................... 9
2.5) Matrizes .................................................................................................................................................................... 10
2.6) Redim........................................................................................................................................................................ 10
3 - INSTRUÇÕES DE CONTROLE DE FLUXO DE PROGRAMAS ...................................................................................... 10
3.1) If <expressão> Then <comando> End If ................................................................................................................... 10
3.2) A instrução Select Case............................................................................................................................................ 11
3.3) A instrução Do While ... Loop.................................................................................................................................... 11
3.4) A instrução Do ... Loop While.................................................................................................................................... 11
3.5) A instrução For ... Next ............................................................................................................................................. 12
3.6) A instrução Exit For................................................................................................................................................... 12
3.7) A instrução Exit Do.................................................................................................................................................... 12
4 - SELECIONANDO OPÇÕES............................................................................................................................................ 12
4.1) Option Button e Check Box ....................................................................................................................................... 13
5 - ESCREVENDO E CHAMANDO FUNÇÕES E PROCEDIMENTOS................................................................................. 13
5.1) Procedimentos (Sub) ................................................................................................................................................ 13
5.2) Funções .................................................................................................................................................................... 15
5.3) Função Val() ............................................................................................................................................................. 17
5.4) Propriedade AutoSize ............................................................................................................................................... 17
CAPÍTULO III........................................................................................................................................................................... 18
1- CONTROLANDO O TEMPO ............................................................................................................................................ 18
1.1) Timer Control ............................................................................................................................................................ 18
1.2) Propriedade Interval e o evento Timer ...................................................................................................................... 18
2 - USANDO O MOUSE........................................................................................................................................................ 19
2.1) List Box Control......................................................................................................................................................... 20
2.2) Métodos AddItem e RemoveItem.............................................................................................................................. 20
2.3) Combo Box Control................................................................................................................................................... 21
2.4) Picture Box Control ................................................................................................................................................... 21
2.5) O Evento MouseDown .............................................................................................................................................. 21
82
2.6) As Coordenadas do Formulário ................................................................................................................................ 22
2.7) O Método Move......................................................................................................................................................... 22
2.8) O Evento MouseMove............................................................................................................................................... 22
2.9) O Método Circle ........................................................................................................................................................ 23
3 - UTILIZANDO MENUS ..................................................................................................................................................... 23
3.1) Menu ......................................................................................................................................................................... 24
3.2) Função Qbcolor() ...................................................................................................................................................... 25
3.3) A propriedade WindowState do Formulário .............................................................................................................. 25
3.4) O evento Resize do Formulário................................................................................................................................. 26
3.5) Menus Instantâneos.................................................................................................................................................. 26
3.6) Método PopUpMenu ................................................................................................................................................. 26
4 - FORMULÁRIO MDI ......................................................................................................................................................... 27
4.1) MDI Form .................................................................................................................................................................. 27
4.2) Propriedade Align...................................................................................................................................................... 27
4.3) Vetor de Controles .................................................................................................................................................... 28
CAPÍTULO IV .......................................................................................................................................................................... 30
1- MANIPULANDO JANELAS E MENSAGENS ................................................................................................................... 30
1.1) O Controle SSPanel.................................................................................................................................................. 30
1.2) Usando novos Formulários ....................................................................................................................................... 31
1.3) Os Métodos Load e Unload e os Eventos Load e Unload......................................................................................... 32
1.4) Os Métodos Show e Hide e os Eventos Activate e Deactivate ................................................................................. 32
1.5) Janelas Personalizadas ............................................................................................................................................ 32
1.6) Janelas Padronizadas - MsgBox e InputBox............................................................................................................ 33
1.7) Função IsNumeric ..................................................................................................................................................... 36
1.8) Função IsDate........................................................................................................................................................... 36
1.9) Função WeekDay...................................................................................................................................................... 36
2 - JANELAS DE DIÁLOGOS COMUNS............................................................................................................................... 36
2.1) O Controle Common Dialog ...................................................................................................................................... 37
2.2) Métodos ShowColor, ShowFont, ShowOpen, ShowSave e ShowPrinter................................................................. 40
2.3) A Função Len............................................................................................................................................................ 40
2.4) A Função Mid ............................................................................................................................................................ 40
2.5) O Comando Shell...................................................................................................................................................... 40
CAPITULO V ........................................................................................................................................................................... 41
1 - OS CONTROLES GRÁFICOS......................................................................................................................................... 41
1.1) Shape Control ........................................................................................................................................................... 41
1.2) Line Control............................................................................................................................................................... 41
1.3) O Controle SpinButton .............................................................................................................................................. 43
2 - OS MÉTODOS GRÁFICOS ............................................................................................................................................. 44
2.1) O Método Cls ............................................................................................................................................................ 45
2.2) A Função Rnd ........................................................................................................................................................... 46
2.3) A Função RGB .......................................................................................................................................................... 46
2.4) O Método Pset .......................................................................................................................................................... 47
2.5) O Método Line........................................................................................................................................................... 47
2.6) O Método Circle ........................................................................................................................................................ 47
3 - OS CONTROLES DE IMAGEM ....................................................................................................................................... 48
3.1) Picture Box Control ................................................................................................................................................... 48
3.2) Image Control............................................................................................................................................................ 48
3.3) Vetor de Controles .................................................................................................................................................... 49
CAPÍTULO VI .......................................................................................................................................................................... 51
1 - MANIPULANDO ARQUIVOS .......................................................................................................................................... 51
1.1) O Evento de Formulário Resize ................................................................................................................................ 51
1.2) A Função FreeFile..................................................................................................................................................... 52
1.3) O Comando Open ..................................................................................................................................................... 52
1.4) A Função Input.......................................................................................................................................................... 52
1.5) A Função LOF........................................................................................................................................................... 52
1.6) O método Close ........................................................................................................................................................ 52
1.7) O Método Print .......................................................................................................................................................... 53
2 - ÁREA DE TRANSFERÊNCIA .......................................................................................................................................... 53
2.1) O Objeto ClipBoard ................................................................................................................................................... 53
2.2) O Método Clear......................................................................................................................................................... 54
2.3) O Método SetText ..................................................................................................................................................... 54
2.4) O Método SetData .................................................................................................................................................... 54
2.5) O Método GetText..................................................................................................................................................... 54
2.6) O Método GetData .................................................................................................................................................... 54
83
2.7) A Propriedade SelText .............................................................................................................................................. 54
3 - MANIPULANDO ERROS................................................................................................................................................. 54
3.1) On Error .................................................................................................................................................................... 55
3.2) A função Err .............................................................................................................................................................. 55
4 - MANIPULANDO ARQUIVOS DE REGISTROS ............................................................................................................... 55
4.1) A Declaração Type.................................................................................................................................................... 56
4.2) O Procedimento Get ................................................................................................................................................. 57
4.3) O Procedimento Put.................................................................................................................................................. 59
4.4) O Procedimento Kill .................................................................................................................................................. 62
4.5) O Procedimento Name ... as ... ................................................................................................................................. 62
4.6) As Funções UCase e LCase ..................................................................................................................................... 63
4.7) As Funções Trim, LTrim e RTrim .............................................................................................................................. 63
CAPÍTULO VII ......................................................................................................................................................................... 65
1 - DEFINIÇÕES GERAIS DE BANCO DE DADOS ........................................................................................................................... 65
1.1) Definições Gerais de Banco de Dados ..................................................................................................................... 65
1.2) Banco de Dados MDB............................................................................................................................................... 65
2 - O DATA CONTROL .............................................................................................................................................................. 65
2.1) A propriedade Connect ............................................................................................................................................. 66
2.2) A propriedade DataBase........................................................................................................................................... 66
2.3) A propriedade RecordSource.................................................................................................................................... 66
2.4) A propriedade Recordset .......................................................................................................................................... 67
2.5) A propriedade RecordsetType .................................................................................................................................. 67
3 - BOUND CONTROL ............................................................................................................................................................... 67
3.1) As propriedades DataSource e DataField................................................................................................................. 67
4 - OBJETO RECORDSET .......................................................................................................................................................... 68
4.1) A propriedade RecordCount ..................................................................................................................................... 68
4.2) O Método AddNew.................................................................................................................................................... 69
4.3) O Método Edit ........................................................................................................................................................... 69
4.4) O Método Update...................................................................................................................................................... 69
4.5) A Propriedade Bookmark .......................................................................................................................................... 69
4.6) A Propriedade LastModify......................................................................................................................................... 70
4.7) O Método Delete ....................................................................................................................................................... 70
5 - OS EVENTOS DO DATA CONTROL ........................................................................................................................................ 71
5.1) O Evento Reposition ................................................................................................................................................. 71
5.2 - O Evento Validate .................................................................................................................................................... 71
CAPÍTULO VIII ........................................................................................................................................................................ 73
I - OBJETOS DE DADOS ............................................................................................................................................................ 73
1.1) Objeto DataBase....................................................................................................................................................... 73
1.2) Objeto Recordset ...................................................................................................................................................... 73
1.3) Método OpenDataBase............................................................................................................................................. 74
1.4) Método OpenRecordset ............................................................................................................................................ 74
1.5) Os Métodos Find....................................................................................................................................................... 74
1.6) Os Métodos Move ..................................................................................................................................................... 74
1.7) O Método Seek ......................................................................................................................................................... 75
1.8) A propriedade Index.................................................................................................................................................. 75
2 - PRATICANDO COM OBJETOS DE DADOS ................................................................................................................................ 75
84