Escolar Documentos
Profissional Documentos
Cultura Documentos
Visual Basic - Livro
Visual Basic - Livro
Índice de Figuras
FIGURA 1. INTERFACE MDI (MUTIPLE DOCUMENT INTERFACE) DO VISUAL BASIC 6.0 .................................................3
FIGURA 2. INTERFACE SDI (SINGLE DOCUMENT INTERFACE) DO VISUAL BASIC 6.0 ....................................................3
FIGURA 3. TELA DE SELEÇÃO DE UM NOVO PROJETO, COM OS DIVERSOS MODELOS.......................................................6
FIGURA 4. ORGANOGRAMA SIMPLIFICADO DE UMA APLICAÇÃO. ............................................................................17
FIGURA 5. JANELA DE PROPRIEDADES DO VISUAL BASIC. ...................................................................................17
FIGURA 6. MENU EDITOR DO MICROSOFT® VISUAL BASIC. ...............................................................................21
FIGURA 7. CAIXA DE CONTROLES ACTIVEX PERSONALIZADOS, LOCALIZADOS NO SISTEMA. ...........................................25
FIGURA 8.MICROSOFT WINDOWS COMMON CONTROL 6.0 .................................................................................26
FIGURA 9. A- CONFIGURAÇÕES DO TAMANHO DAS IMAGENS; B- COLEÇÃO DE IMAGENS INSERIDAS NO IMAGELIST. .............28
FIGURA 10. CONTROLE LISTVIEW, EXIBINDO ÍCONES PEQUENOS..........................................................................29
FIGURA 11. CONTROLES PROGRESSBAR'S EXIBINDO OS DOIS VALORES DA PROPRIEDADES SCROLLING (0 –
CCSCROLLINGSTANDARD E 1- CCSCROLLINGSMOOTH) ...............................................................................30
FIGURA 12. CONTROLE STATUSBAR, EXIBINDO VÁRIAS INFORMAÇÕES ADICIONAIS....................................................31
FIGURA 13. CONTROLE STATUSBAR DO PROCESSADOR DE TEXTOS MICROSOFT® WORD............................................31
FIGURA 14. CONTROLES TOOLBAR'S ALINHADOS NO TOPO DA JANELA E EM BAIXO E COM A PROPRIEDADE STYLE 1 – TBRFLAT E
0 – TBRSTANDARD, RESPECTIVAMENTE..................................................................................................32
FIGURA 15. CAIXA DE PROPRIEDADES GERAL DE UMA BARRA DE FERRAMENTAS (ABA GENERAL).....................................34
FIGURA 16. CAIXA DE PROPRIEDADES DOS BOTÕES DE UMA BARRA DE FERRAMENTAS (ABA BUTTONS). ...........................34
FIGURA 17. CAIXA DE PROPRIEDADES DOS BOTÕES DE UM CONTROLE TREEVIEW (ABA GENERAL). .................................35
FIGURA 18. EXEMPLO DE UM CONTROLE TREEVIEW, COM UM NODE PAI (ÍCONES) E 4 NODES FILHOS. LINESTYLE IGUAL A 1–
TVWROOTLINE. ..............................................................................................................................36
FIGURA 19. CONTROLE SLIDER ..................................................................................................................37
FIGURA 20. INTERFACE DA CALCULADORA DE IDADE .........................................................................................40
FIGURA 21. CAIXA DE DIÁLOGO DE CONTROLE VERSÕES E INFORMAÇÕES DO APLICATIVO. ...........................................41
FIGURA 22. TELA DE INFORMAÇÕES DE UM PROJETO.........................................................................................43
FIGURA 23. ESTRUTURA DO BANCO DE DADOS COM QUATRO TABELAS....................................................................48
FIGURA 24. ORGANOGRAMA SIMPLES DE UM BANCO DE DADOS. AS LINHAS PONTILHADAS INDICAM O RELACIONAMENTO ENTRE
AS TABELAS....................................................................................................................................53
FIGURA 25. HIERARQUIA DE CLASSES DAO ...................................................................................................54
FIGURA 26. LAYOUT PARA PESQUISA DE DADOS DO PROGRAMA LIZARO VISUAL BASIC DICAS V3.0 ................................63
FIGURA 27. CONTROLE MICROSOFT CHART 5.0 ..............................................................................................69
FIGURA 28. GRÁFICO DE RECEITAS/DESPESAS DE ABRIL A JUNHO APRESENTANDO A MÉDIA DE CADA MÊS. ........................71
FIGURA 29. GRÁFICO CRIADO COM DADOS DE ENTRADA MANUAL, EXIBINDO AS ESTATÍSTICAS. .....................................72
FIGURA 30. GRÁFICO PLOTADO A PARTIR DOS DADOS DE UM BANCO DE DADOS ACCESS 97 .........................................74
FIGURA 31. TELA INICIAL DO SETUP WIZARD QUE ACOMPANHA O VISUAL BASIC 5.0. ................................................81
FIGURA 32. TELA INICIAL DO PACKAGE AND DEPLOYMENT WIZARD QUE ACOMPANHA O VISUAL BASIC 5.0 ......................82
FIGURA 33. FIGURA DO EDITOR DE SCRIPT DO INNO SETUP COMPILER V3.0. ..........................................................84
FIGURA 34. INTERFACE DO PROGRAMA ISTOOL 3.0 EM PORTUGUÊS (BR) ..............................................................85
FIGURA 35.JANELA PARA INICIAR UM NOVO ARQUIVO........................................................................................93
FIGURA 36. TELA DO WIZARD PARA ESPECIFICAR O CAMINHO E O NOME DO PROJETO. ...............................................94
FIGURA 37. LISTAGEM DE ARQUIVOS HTML, QUE IRÃO FAZER PARTE DO ARQUIVO DE AJUDA. ......................................94
FIGURA 38. JANELA DO PROJETO RECÉM CRIADO, COM AS OPÇÕES E LISTAGEM DE ARQUIVOS CRIADOS. ..........................95
FIGURA 39. JANELA DE OPÇÃO PARA CRIAÇÃO OU ABERTURA DE UMA RQUIVO DE CONTEÚDO. .......................................95
FIGURA 40. JANELA DE ADIÇÃO DE TÓPICOS E DE LIGAMENTO (LINK) COM O ARQUIVO CORRESPONDENTE. .......................96
FIGURA 41. JANELA DE "LINKAGEM" DE ARQUIVO AO TÓPICO DO CONTEÚDO. A LISTAGEM É EXIBIDA POR TÍTULO DO ARQUIVO.
..................................................................................................................................................96
VIII Desvendando a linguagem de programação mais popular do mundo – W.C. Rodrigues
FIGURA 42. ABA DE CONTENTS, COM SUA APARÊNCIA FINAL LISTANDO TODOS OS TÓPICOS CRIADOS..............................97
FIGURA 43. JANELA HTMLHELP API INFORMATION COM A ADIÇÃO DO ARQUIVO DE CABEÇALHO INSECTA.H. ...................98
FIGURA 44. JANELA DE LIGAÇÃO DA DEFINIÇÃO (IDH_MAIN), COMO O ARQUIVO HTML (INSECTA.HTM). .......................98
FIGURA 45. ÍCONE DO CRYSTAL REPORTS V4.6. ........................................................................................... 101
FIGURA 46. JANELA PARA CRIAÇÃO DE UM RELATÓRIO NOVO NO CRYSTAL REPORTS................................................. 101
FIGURA 47. JANELA CREATE REPORT EXPERT, COM A OPÇÃO O PASSO 1: SELEÇÃO DE TABELAS NO CRYSTAL REPORTS ...... 102
FIGURA 48. PASSO 3: SELEÇÃO DE CAMPOS A SEREM EXIBIDOS NO RELATÓRIO DO CRYSTAL REPORTS. ......................... 103
FIGURA 49. PASSO 4: SELEÇÃO DOS CAMPO DE ORDENAÇÃO DO RELATÓRIO E TIPO DE ORDENAÇÃO NO CRYSTAL REPORTS. 103
FIGURA 50. PASSO 8: ESPECIFICAÇÃO DE TÍTULO E SELEÇÃO SE ESTILO DO RELATÓRIO NO CRYSTAL REPORTS................ 104
FIGURA 51. JANELA DO MODO DE DESENHO DO CRYSTAL REPORT. ..................................................................... 104
FIGURA 52. JANELA PAR INSERÇÃO DE NOVO(S) CAMPO(S) AO RELATÓRIO NO CRYSTAL REPORTS................................ 105
FIGURA 53. BARRA DE FERRAMENTAS DE FORMATAÇÃO DO TEXTO DOS CAMPOS NO CRYSTAL REPORTS. ........................ 105
FIGURA 54. MENU SUSPENSO PARA FORMATAÇÃO DO CAMPO (FONTE, FORMATO, BORDAS, ETC.) NO CRYSTAL REPORTS .... 106
FIGURA 55. JANELA DE ALTERAÇÃO DO FORMATO DO CAMPO NO CRYSTAL REPORTS. ............................................... 106
FIGURA 56. ALTERAÇÃO DE BORDA E CORES DE BORDA E TEXTO DO CAMPO DO CRYSTAL REPORTS. ............................. 106
FIGURA 57. BARRA DE FERRAMENTAS PARA INSERÇÃO DE FIGURA, LINHA E CAIXA (RESPECTIVAMENTE) DO CRYSTAL REPORTS.
................................................................................................................................................ 107
FIGURA 58. JANELA DE EDIÇÃO DE FÓRMULA DO CRYSTAL REPORTS .................................................................... 107
FIGURA 59. BARRA DE FERRAMENTAS NA JANELA DE VISUALIZAÇÃO DO CRYSTAL REPORTS. ....................................... 109
FIGURA 60.JANELA DE VISUALIZAÇÃO DE UM RELATÓRIO PELO CRYSTALREPORT ACTIVEX CONTROL............................. 109
FIGURA 61. CONTROLE ACTIVEX EM DESIGN-TIME. ....................................................................................... 113
Microsoft Visual Basic – Índices de códigos IX
Índice de Códigos
CÓDIGO 1. EXEMPLO DE DECLARAÇÃO DE VARIÁVEIS NO VISUAL BASIC....................................................................7
CÓDIGO 2. PROCEDIMENTO PARA EXIBIÇÃO DO FORMULÁRIO FRMMAIN....................................................................9
CÓDIGO 3. CÓDIGO EXTENSOS PARA ALTERAR A PROPRIEDADE CAPTION E BACKCOLOR, DO FORM2 E EXIBI-LO. ................18
CÓDIGO 4. CÓDIGO MAIS PRÁTICOS ATRAVÉS DA FUNÇÃO SHOWFORM PARA ALTERAR A PROPRIEDADE CAPTION E BACKCOLOR,
DO FORM2 E EXIBI-LO. .....................................................................................................................18
CÓDIGO 5. ESTE EXEMPLO CARREGA VÁRIOS BITMAPS EM UM CONTROLE IMAGELIST. QUANDO O FORM É CLICADO UM UMA
IMAGEM DA LISTA É SUBSTITUÍDA POR OUTRA IMAGEM. ESTE EXEMPLO NECESSITA DE UM CONTROLE IMAGELIST E UM
CONTROLE PICTUREBOX. ...................................................................................................................28
CÓDIGO 6. LINHA DE COMANDO PARA RETORNAR A SEGUNDA IMAGEM DA COLEÇÃO DA IMAGELIST1 PARA O CONTROLE
PICTURE1. ....................................................................................................................................28
CÓDIGO 7, LINHA DE COMANDO PARA RETORNAR A SEGUNDA IMAGEM (ÍCONE) DA COLEÇÃO DA IMAGELIST1 PARA O CONTROLE
PICTURE1. ....................................................................................................................................28
CÓDIGO 8. ROTINA SIMPLES PARA EXIBIR O PROGRESSO DE UM CONTROLE PROGRESSBAR...........................................30
CÓDIGO 9. LINHA DE COMANDO PARA EXTRAIR A IMAGEM DE INDEX 1 CONTIDA NUM CONTROLE IMAGELIST E RETORNA-LO
PARA O PAINEL A PROPRIEDADE PICTURE DA BARRA DE STATUS COM O INDEX 1. ...............................................31
CÓDIGO 10. CONTROLE STATUSBAR. ATRIBUINDO UM TEXTO AO PAINEL 1 E ADICIONANDO PAINÉIS E FIGURAS. ...............32
CÓDIGO 11. ADIÇÃO DE NODES NUM CONTROLE TREEVIEW................................................................................37
CÓDIGO 12. REMOVENDO UM NODE DO CONTROLE TREEVIEW. ...........................................................................37
CÓDIGO 13. PROJETO CALCULADORA DE DIAS, MESES E ANOS VIVIDOS ..................................................................40
CÓDIGO 14. PROJETO PARA EXIBIR AS INFORMAÇÕES DE UM APLICATIVO................................................................42
CÓDIGO 15. ROTINA PARA ACESSO A DADOS DE UMA TABELA UTILIZANDO A INSTRUÇÃO DBOPENTABLE ..........................55
CÓDIGO 16. ROTINA PARA ACESSO A DADOS DE UMA TABELA UTILIZANDO A INSTRUÇÃO DBOPENDYNASET, UTILIZANDO
INSTRUÇÕES SQL............................................................................................................................55
CÓDIGO 17. PREENCHENDO UMA CAIXA DE LISTAGEM COM DADOS DE UMA TABELA UTILIZANDO O RECORDESET DO TIPO
FOWARD-ONLY. ..............................................................................................................................57
CÓDIGO 18. ROTINA PARA ABERTURA DE UMA BASE DE DADOS MS ACCESS.............................................................58
CÓDIGO 19. ROTINA PARA ABERTURA DE UMA BASE DE DADOS MS ACCESS COM SENHA..............................................58
CÓDIGO 20. ROTINA PARA ACESSO A UM BANCO DE DADOS DO TIPO MS ACCESS. .....................................................58
CÓDIGO 21. ROTINA PARA ACESSO A DADOS DE UMA TABELA VIA INSTRUÇÃO SQL....................................................59
CÓDIGO 22. ROTINA PARA PREPARAR UMA TABELA PARA RECEBER NOVOS DADOS (REGISTRO) ......................................59
CÓDIGO 23. ROTINA PARA GRAVAR DADOS EM UMA TABELA DO BANCO DE DADOS. ....................................................60
CÓDIGO 24. ROTINA PARA LOCALIZAR DADOS DENTRO DE UMA TABELA, UTILIZANDO AS INSTRUÇÕES DO DATACONTROL E
INSTRUÇÕES SQL............................................................................................................................60
CÓDIGO 25. ROTINA PARA FILTRAR OS DADOS DE UMA TABELA ............................................................................61
CÓDIGO 26. ROTINA PARA LOCALIZA DADOS DENTRE DE UMA TABELA, UTILIZANDO SQL E EM SEGUINDA PREENCHENDO UMA
TREEVIEW COM OS DADOS ENCONTRADOS. .............................................................................................62
CÓDIGO 27. ROTINA PARA EDITAR UM REGISTRO GRAVADO EM UMA TABELA DO BANCO DE DADOS. ................................63
CÓDIGO 28. ROTINA PARA COMPACTAR UM BANCO DE DADOS SEM SENHA. ..............................................................64
CÓDIGO 29. ROTINA PARA COMPACTAR UM BANCO DE DADOS COM SENHA. .............................................................64
CÓDIGO 30. ROTINA PARA RECUPERAR UM BANCO DE DADOS CORROMPIDO.............................................................64
CÓDIGO 31. ROTINA PARA SALVAR E RECUPERAR UMA FIGURA DENTRO DUM CAMPO OLE DE UM BANCO DE DADOS. ............66
CÓDIGO 32. ROTINA PARA ACESSO À BANCO DE DADOS DBASE VERSÃO III. ............................................................66
CÓDIGO 33. ROTINA PARA ACESSO À BANCO DE DADOS FOXPRO VERSÃO 2.5. .........................................................66
CÓDIGO 34. ROTINA PARA ACESSO À BANCO DE DADOS EXCEL VERSÃO 4.0.............................................................67
CÓDIGO 35. ROTINA PARA ACESSO À BANCO DE DADOS TEXTO. ...........................................................................67
CÓDIGO 36. CÓDIGO PARA CRIAÇÃO DE UM GRÁFICO DE RECIETAS/DESPESAS E MÉDIA DUTRANTE TRÊS MESES..................70
CÓDIGO 37. CÓDIGOS PARA CRIAÇÃO DE UM GRÁFICO MANUALMENTE E XIBIÇÃO DE ESTATÍSTICAS. ...............................72
X Desvendando a linguagem de programação mais popular do mundo – W.C. Rodrigues
CÓDIGO 38. CÓDIGO PARA EXTRAIR DADOS DE UM BANCO DE DADOS ACCESS 97, LISTANDO O NÚMERO DE PESQUISADORES
POR ESTADO. .................................................................................................................................73
CÓDIGO 39. ROTINA COMPLETA PARA INTERCEPTAÇÃO, EXIBIÇÃO E ARMAZENAMENTO DE ERRO DE UMA APLICAÇÃO ............80
CÓDIGO 40. EXEMPLO DE COMO ABRIR UM ARQUIVO DE AJUDA ATRAVÉS DE API ......................................................88
CÓDIGO 41. EXEMPLO DE COMO ABRIR O BROWSER OU EDITOR DE E-MAIL PADRÃO ..................................................88
CÓDIGO 42.EXEMPLO DE COMO ENCONTRAR O DIRETÓRIO DE INSTALAÇÃO DO WINDOWS E DE SISTEMA ........................89
CÓDIGO 43. EXEMPLO DE COMO DETECTA R ALETRA DO DRIVE DO CD ...................................................................90
CÓDIGO 44. EXEMPLO DE COMO ESCREVER E OBTER INFORMAÇÕES DE UM ARQUIVO INI.............................................91
CÓDIGO 45. ESTRUTURA DE UMA ARQUIVO DE CABEÇALHO, CONTENDO OS TÓPICOS SENSÍVEIS AO CONTEXTO E SUA
IDENTIFICAÇÃO NUMÉRICA. ................................................................................................................98
CÓDIGO 46. CLASSE CLSHELPCHM, CRIADA PARA ACESSAR ATRAVÉS DE API AO ARQUIVO DE AJUDA CHM, PELO VISUAL BASIC
..................................................................................................................................................99
CÓDIGO 47. CODÍGO PARA EXIBIR O ARQUIVO DE AJUDA ATRAVÉS DO EVENTO CLICK, DE UM COMMANDBUTTON, CHAMADO
CMDHELP. ................................................................................................................................... 100
CÓDIGO 48. CODÍGO PARA EXIBIR O CONTEXTO ESPECÍFCO DO ARQUIVO DE AJUDA ATRAVÉS DO EVENTO CLICK, DE UM
COMMANDBUTTON, CHAMADO CMDHELP. ............................................................................................. 100
CÓDIGO 49. TEXTO DA FÓRMULA "NOME" INSERIDA NO RELATÓRIO DO CRYSTAL REPORTS........................................ 107
CÓDIGO 50. ENVIO DE VALOR PARA UMA FÓRMULA DO CRYSTALREPORT .............................................................. 108
CÓDIGO 51. FILTRAGEM DE DADOS NO CRYSTALREPORTS ATRAVÉS DO VISUAL BASIC.............................................. 108
CÓDIGO 52. CÓDIGO PARA IMPRESSÃO DIRETA DO RELATÓRIO SEM VISUALIZAÇÃO PRÉVIA NO CRYSTAL REPORTS. ........... 108
CÓDIGO 53. CÓDIGO PARA VISUALIZAR UM RELATÓRIO. .................................................................................. 109
CÓDIGO 54. CÓDIGO PARA EXPORTAR UM ARQUIVO NO FORMATO DO WORD. ........................................................ 110
CÓDIGO 55. EXPORTANDO UM ARQUIVO PARA UMA MENSAGEM DE E-MAIL............................................................. 111
CÓDIGO 56. CÓDIGO DO CONTROLE ACTIVEX PARA ESPECIFICAR E RETORNAR AS PROPRIEDADES. ............................... 114
CÓDIGO 57. CÓDIGO PARA EXIBIR A ARQUIVO DE AJUDA ESPECÍFICO ATRAVÉS DA API WINHELP NO CONTROLE ACTIVEX. . 114
Microsoft Visual Basic – Índices de tabelas XI
Índice de Tabelas
TABELA 1. CONTROLES BÁSICO E SUAS DESCRIÇÕES. ..........................................................................................4
TABELA 2. TIPO DE VARIÁVEIS SUA CAPACIDADE DE USO. .....................................................................................6
TABELA 3. SUGESTÃO DE PREFIXO PARA IDENTIFICAÇÃO DO TIPO DE VARIÁVEL...........................................................7
TABELA 4. FUNÇÕES INTERNAS DO VISUAL BASIC PARA CONVERSÃO DE DADOS. .........................................................7
TABELA 5. PREFIXOS PARA NOMES DOS OBJETOS MAIS UTILIZADOS EM APLICAÇÃO (SUGESTÃO DA MICROSOFT E DO AUTOR) 14
TABELA 6. PRINCIPAIS PROPRIEDADES DE UM FORMULÁRIO.................................................................................16
TABELA 7. CONSTANTES, VALORES E DESCRIÇÃO DO PROPRIEDADE VIEW DO CONTROLE LISTVIEW. ...............................28
TABELA 8. PROPRIEDADES DO CONTROLE LISTVIEW. ........................................................................................29
TABELA 9. CONSTANTES, VALORES E DESCRIÇÃO DA PROPRIEDADE STYLE DO CONTROLE STATUSBAR.............................31
TABELA 10. AS CONSTANTES PARA RELATIONSHIP SÃO: ....................................................................................36
TABELA 11. CONTROLES PARA O PROJETO IDADE. ............................................................................................39
TABELA 12. CONTROLES PARA EXIBIR AS VERSÃO E AS INFORMAÇÕES DE UM PROJETO. ...............................................41
TABELA 13. PRINCIPAIS FUNÇÕES NUMÉRICAS UTILIZADAS PELO VISUAL BASIC E A DESCRIÇÃO. ....................................45
TABELA 14. TIPOS DE DADOS UPORTADOS PELO JET E PELA A SQL ......................................................................49
TABELA 15. TIPOS DE DADOS SUPORTADOS PELO BANCO DE DADOS ACCESS ............................................................53
TABELA 16. THE OPENDATABASE METHOD SYNTAX HAS THESE PARTS....................................................................57
TABELA 17. TIPO DE GRÁFICO A SEREM EXIBIDOS PELA PROPRIEDADE CHARTYPE, SUAS CONSTANTE E VALORES.................69
TABELA 18. ERROS GENÉRICOS RELACIONADOS À OPERAÇÃO DE BANCO DE DADOS ....................................................76
TABELA 19. ERROS RELACIONADOS A BLOQUEIO DE REGISTROS ...........................................................................76
TABELA 20. ERROS RELACIONADOS A PERMISSÕES ...........................................................................................77
TABELA 21. STRINGS UTILIZADAS PELO ARQIVO SETUP.LST AS STRINGS EQUIVALNTES NO INNO SETUP COMPILER..............83
Microsoft Visual Basic – Dedicatória e Agradecimentos XIII
Dedicatória
Dedico a presente obra a DEUS, pela concessão de minha
vida, a minha mãe por aceitar está tarefa árdua, a minha
filha pela paciência e por suportar as incansáveis e
exageradas hora que fico na frente do computador.
William Costa Rodrigues
Agradecimentos
A todos aqueles que direta ou indiretamente
participaram e incentivaram-me na confecção da
presente obra.
Meus humildes e sinceros agradecimentos.
William Costa Rodrigues
Microsoft Visual Basic – Introdução 1
1. INTRODUÇÃO
O Microsoft™ Visual Basic é uma poderosa linguagem de programação, e tem uma grande
vantagem em relação às outras linguagens, por ser do mesmo fabricante do sistema operacional
Microsoft™ Windows tem uma maior integração com o mesmo. Outra vantagem e que os
programas gerados pelo Visual Basic, para serem ser executados necessitam da biblioteca
Msvbvm50.dll ou Msvbvm60.dll e outros arquivos de extensão de aplicativos. Na prática a
vantagem é o seguinte, os programas têm tamanhos menores e são executados, compartilhando
este arquivos (bibliotecas e ActiveX).
As interfaces de usuário gráficas, ou GUIs (pronuncia "gúis", do Inglês Graphic Interfaces
User), revolucionaram a indústria da microinformática. Elas demonstram que a frase "Uma figura
vale por mil palavras" é verdadeira para a maioria dos usuários de computadores. Em lugar do
estranho prompt do DOS C:> que os usuários observavam durante muito tempo (e que assustou
muitos deles), você é presenteado com uma área de trabalho cheia de ícones e com programas
que utilizam mouse e menus.
Embora alguns programadores tenham apresentado sentimentos contraditórios a respeito
das GUIs, os iniciantes gostam delas, e assim é de se esperar que os programas Windows sejam
baseados no modelo GUI (e que tenham a aparência e proporcionem a sensação certa). Portanto ,
se você precisar desenvolver um programa para qualquer versão Windows, desejará Ter uma
ferramenta para desenvolver com eficiência aplicativos fundamentados em GUIs, e o Visual Basic é
a ferramentas mais indicada, por possui facilidade na síntese de código e interface amigável,
próxima dos aplicativos do Windows.
Os exemplos e dicas aqui exibidos são de parte de exemplos de livros, do Help do Visual
Basic, dicas da Internet (VBAccelerator.com – www.vbaccelerator.com de Steve MacMahon,
vbbrasil.com – www.vbbrasil.com.br, VBMania – www.vbmania.com.br, José Carlos Macorati – Site
Pessoal www.macoratti.net e etc.).
Uma recomendação bastante pertinente para que pretende programar é por em dia o
Inglês, pois todos os comandos os arquivos de ajuda (Help) e a maioria da documentação para as
linguagens de programação estão em Inglês. Outra recomendação é sempre que possui dúvidas
acesse o arquivo de Ajuda ou o Books Online que vêm junto com o Visual Basic.
Para quem não possui uma versão registrada do Microsoft™ Visual Basic poderá adquirir
gratuitamente no site da Microsoft a versão mais simplificada: Visual Basic Control Create. Apesar
de muito básica é possível criar executáveis simples e componentes ActiveX, com a mesma
facilidade das outras versões (Standard, Professional e Enterprise).
2 Desvendando a linguagem de programação mais popular do mundo – W.C. Rodrigues
Microsoft Visual Basic – Conceitos Básicos do Visual Basic 3
Se você já está familiarizado com o Visual Basic pode passar para o próximo capítulo, pois
o capítulo atual visa fazer uma introdução do Visual Basic para os iniciantes.
O Visual Basic Possui uma interface amigável com o padrão MDI (Multiple Document
Interface), porém é possível trabalhar com uma interface SDI (Single Document Interface),
através do menu Tools > Options > Advanced.
Standard EXE – Este é o projeto padrão. Através do qual o programador inicia um novo
projeto baseado na construção de um aplicativo executável comum;
ActiveX EXE – Este projeto permite que o aplicativo gerado possa de utilizado ou distribuído
pela Internet;
ActiveX DLL – Este tipo de projeto permite a criação de executáveis do tipo DLL (Dynamic
Link Libary, ou seja Biblioteca de Vínculo Dinâmico). Sua construção permite a utilização dos
códigos nela construídos, em projeto futuros;
ActiveX Control – Permite a criação de controles personalizados de acordo com a
necessidade de funções e controles para outros projetos, minimizando assim o excesso de
programação;
VB Application Wizard – Este projeto dispara o assistente de criação de aplicativos do Visual
Basic, permitindo a criação de formulários chaves de uma aplicação como a tela de entrada
SplashScreen, formulário das informações do sistema, vínculo com base de dados, ente outros;
VB Enterprise/Professional Edition Controls – Este tipo de projeto permite que o
programador elabore um aplicativo com base em todos os controles disponíveis para as
versões Professional e Enterprise;
Addin – Permite a elaboração de Add-ins que poderão ser utilizados pelo Visual Basic, para
automatizar tarefas repetitivas e/ou complexas;
ActiveX Document DLL – Permite criar DLLs do tipo ActiveX que podem ser utilizadas na
Internet para exibir ou capturar dados;
ActiveX Document EXE – Permite que seja criado documentos para utilização na Internet.
6 Desvendando a linguagem de programação mais popular do mundo – W.C. Rodrigues
O Visual Basic trabalha com 8 tipo de variáveis fixas que possuem características próprias
de tamanho e forma de uso. Porém você poderá criar variáveis temporárias para atender suas
necessidade. A seguinte demonstra o nome das variáveis e a capacidade de dados de cada uma.
Alguns padrões poderão ser seguidos para facilitar a identificação do tipo de variável, o
seja, antes do nome da variável o programador poderá inserir uma letra ou duas letras que
identifique o tipo de variável. Veja uma sugestão na Tabela 3.
Função Descrição
CBool Transforma uma expressão em booleana (verdadeira/falsa)
CByte Transforma uma expressão numérica em um byte.
CDate Transforma uma expressão compatível em uma data válida.
2.8. Exercícios
1. Quais controles abaixo são básico da biblioteca padrão do Visual Basic?
( ) PictureBox ( ) RichTextBox ( ) ProgressBar ( ) Image ( ) OLE
( ) Label ( ) TabStrip ( ) Timer ( ) ListBox ( ) ComboBox
3. De acordo com os tipos de projeto do Visual Basic qual dos tipos encaixa-se na descrição
seguinte: "Permite a criação de controles personalizados de acordo com a necessidade de
funções e controles para outros projetos, minimizando assim o excesso de programação"
( ) StandardEXE ( ) ActiveX EXE ( ) ActiveX Control ( ) AddIn
5. Qual das variáveis do Visual Basic, listadas abaixo, retorna o valor verdadeiro/false
(True/False).
( ) String ( ) Variant ( ) Boolean ( ) Long ( ) Integer ( ) Single
6. Qual das variáveis do Visual Basic, listadas abaixo, retorna o maior valor numérico.
( ) Byte ( ) Variant ( ) Boolean ( ) Long ( ) String ( ) Single
7. Qual das variáveis do Visual Basic, listadas abaixo, retorna o menor valor numérico.
( ) Integer ( ) Variant ( ) Byte ( ) Long ( ) String ( ) Single
8. Declare uma variável publica (Public) do tipo String, atribua uma valor a esta variável e por fim
converta esta para uma variável longa (Long)
Microsoft Visual Basic – Estrutura de uma Aplicação 9
1
Baseado na obra Morgado, F. 1998. Visual Basic 5, método rápido
Microsoft Visual Basic – Estrutura de uma Aplicação 11
3.1.1.1.2 IIF
Variável=IIF(<condição>, <valor true>, <valor false>)
Considerada uma variante à estrutura If... Then... Else, a instrução Select Case permite
que o programador faça apenas um teste <condição> no início da instrução Select Case e
tome várias decisões dependendo do valor retornado.
Esta instrução é geralmente utilizada quando existem inúmeras possibilidades de
tratamento do valor gerado pela cláusula <condição>, como é o caso das rotinas de tratamento
de erro em tempo de execução ou ativação de botões de uma ToolBar (Barra de Ferramentas),
onde nesse caso a resultado é geralmente o valor Key ou o valor Index de cada botão.
Verifique que esta estrutura oferece uma saída caso nenhum valor retornado (resultado)
seja verificado pelos Case's da instrução, assim o valor retornado poderá ser atribuído na
expressão Case Else (Declaração 3).
Esta estrutura de laço permite que você execute todas as instruções contidas dentro de
For... Next, por um número de vezes definido entre o valor <começo> e o valor <fim>, contando-
se as interações de acordo com o argumento opcional Step <passo>. O valor do contador não
poderá ser uma variável Boolean (Boleana) ou uma array.
ª Exemplo: O laço For... Next..., abaixo, faz com que a variável IntJ sela incrementada de 1 a
tá 100, de 5 em 5 unidades (forçando a execução do laço por 20 vezes consecutivas):
Dim IntJ as Integer
For IntJ = 1 To 100 Step 5
<executar as instruções>
Next IntJ
12 Desvendando a linguagem de programação mais popular do mundo – W.C. Rodrigues
A especificação do nome da variável contadora dentro da cláusula Next ( como Next IntJ é
opcional) é opcional – basta escrever Next para fechar o laço. No entanto, ela melhora
significativamente a compreensão do código e, portanto, é amplamente recomendada.
A instrução Do... Loop convencional é executada continuamente. Você deve colocar uma
condição de teste no interior do laço, através de uma instrução If... Then... Else, para fazer com
que ela termine sua execução, enviando uma instrução do tipo Exit Do.
ª Exemplo: No exemplo a seguir, a instrução Do... Loop é executada continuamente, ate que
o valor da variável fCancelar seja verdadeiro.
Do
DoEvents
If fCancelar Then
Exit Do
End If
Loop
Muito cuidado na hora de utilizar uma instrução Do... Loop, pois se o valor que determina o
final do laço não for alcança o laço seja executado infinitamente, fazendo com que a aplicação seja
paralisada, provocando um Bug, consequentemente travando o computador.
As estruturas Do... Loop possuem diversas variantes e são utilizadas para fazer com que o
código seja executado seguidamente, até que uma determinada condição seja verdadeira. Esta
condição pode ser testada no início ou no fim do laço, e é normalmente utilizada com as cláusulas
While (enquanto) ou Until (até).
Nesta variante, as instruções dentro do laço Do... Loop serão executadas enquanto
(While) o valor de <condição> for verdadeiro. Isto significa que, se o valor de <condição> for
falso antes do início do laço, as declarações contidas em seu interior não serão executadas.
Apesar desta instrução ser muito semelhante a anterior à anterior, o teste é feito em um
momento diferente. Neste caso, o laço será executado até que o valor <condição> seja
verdadeiro, o que inverte a situação anterior, ou seja, as declarações no interior do laço serão
executadas apenas se o valor de <condição> for falso.
Microsoft Visual Basic – Estrutura de uma Aplicação 13
Esta estrutura é bastante semelhante a estrutura Do While... Loop. A diferença entre elas
consiste no fato de que While... Loop é menos flexível do que um laço Do... Loop convencional,
não permitindo, por exemplo, sair prematuramente do laço em uma instrução Exit Loop.
Além disso, a estrutura While... Wend sempre executa o teste <condição> no início do
laço.
Esta estrutura permite que você caminhe por todos os objetos de uma coleção ou matriz
(variável do tipo array).
ª Exemplo: No exemplo a seguir, você pode utilizar a estrutura For... Each para alterar a
propriedade Enabled (ativado) de todos os controles do tipo TextBox (Caixa de Texto) do
formulário frmMain, tornando-os indisponíveis.
For Each ctl In frmMain
If TypeOf ctl Is TextBox Then
ctl.Enabled = False
End IF
Next
A cláusula For... Each cria automaticamente uma variável chamada ctl (uma abreviação de
control ou controle), e faz um laço por todos os controle do formulário frmMain, desativando todas
as caixas de texto, sem importar quantas elas são. Verifique que o teste para saber se o controle é
mesmo uma caixa de texto (TextBox), é realizado pela cláusula If TypeOf Is TextBox Caso o valor
retornado seja verdadeiro o controle testado é desabilitado, ou seja, o controle é uma caixa de
texto, se o controle for um botão (CommandButton) este não será desabilitado pois não é um
TextBox.
.TabStop = True
.Visible = True
End With
Tabela 5. Prefixos para nomes dos objetos mais utilizados em aplicação (Sugestão da Microsoft e
do Autor)
Objeto/Componente Prefixo Exemplo
"Outline" out outChart
Abas (TabStrip) tab tabDados
Árvore de visualização (TreeView) tvw tvwNome
Barra de Ferramentas (ToolBar) tlb tlbMain
Barra de rolagem horizontal (HscroolBar) hsb hsbPicture
Barra de rolagem plana (FlatScroolBar) fsb fsbTextBox
Barra de rolagem vertical (VScroolBar) vsb vsbPicture
Barra de Status stb stbMain
Botão de comando (CommandButton) cmd cmdClose
Botão de opção (OptionButton) opt optSend
Caixa de Diálogo (CommonDialog) cdl cdlOpenFile
Caixa de Listagem (ComboBox) cbo ou cmb cboName
Caixa de listagem de Banco de dados (DBCombo) dbc dbcState
Caixa de listagem de imagens (ImageCombo) icb ou cbi icbIconSmall
Microsoft Visual Basic – Estrutura de uma Aplicação 15
frmMain m enus
controles
frmCad astro
Arqu ivo
con troles
menus
inúmeros eventos, do que procedimentos idênticos, escritos várias vezes ao longo das linhas de
códigos.
A linha de comando c1.Comment= "Acionado por uma função pública", altera o conteúdo
da variável pública Comment, ou melhor, altera o valor da propriedade Comment de um objeto
Class1. Somente a instância, isto é, o objeto passado para a rotina (ByVal c1 as Class1) será
afetado.
A seguir insira dois botões (CommandButton) no From1 e adicione as seguinte linhas de
código na seção Declarations:
Private c1Firt As Class1
Private c1Second as Class1
No evento Load do Form1, entre com as seguintes instruções – estas criarão duas
instâncias da classe Class1:
Private Sub Form_Load()
Set c1First = New Class1
Set c1Second = New Class1
sTitle = "Dados públicos de texto"
End Sub
Para completar a codificação, adicione as seguintes linhas de comando no evento Click dos
botões de comando:
Private Sub Command1_Click()
Call GetComment(c1First)
c1First.ShowComment
End Sub
Comment – o método ShowComment, será carregado para exibir o dado do objeto. A caixa de
mensagem mostra o texto "Acionado por uma função pública", demonstrando que a rotina pública
GetComment configurou a propriedade Comment do objeto que lhe foi passado, e que a "string"
pública está visível dentro de Class1.
O botão Command2, apensa chama o método ShowComment, da segunda instância de
Class1. Os dois objetos têm acesso à variável pública "string", mas a propriedades Comment do
segundo objeto está em vazia (em branco), porque chama a rotina pública GetComment comente
da propriedade Comment alterada para o primeiro objeto.
1. Para desenvolver uma aplicação em Visual Basic é necessário um planejamento detalhado das
janelas e procedimentos da aplicação? Porquê?
________________________________________________________________________________
________________________________________________________________________________
________________________________________________________________________________
5. Dentre as estruturas de laço qual delas é menos flexível e não permite a interrupção abrupta
pela instrução Exit Loop.
________________________________________________________________________________
22 Desvendando a linguagem de programação mais popular do mundo – W.C. Rodrigues
Next
9. Qual a diferença básica ente um módulo padrão (Module) e um Módulo Classe (Class Module)
________________________________________________________________________________
________________________________________________________________________________
________________________________________________________________________________
________________________________________________________________________________
10. Qual dos dois código abaixo tem maior rapidez no momento da escrita dos códigos.
Código 1 ( )
Private Sub cmdShowAbout_Click()
Microsoft Visual Basic – Estrutura de uma Aplicação 23
Código 2 ( )
Private Sub cmdShowAbout_Click()
frmAbout.Caption = "Sobre..."
frmAbout.WindowState = vbNormal
frmAbout.BackColor = vbWhite
frmAbout.Show 1, Me
End Sub
11. Especifique descritivamente com criar uma seqüência de menus contendo o menu Arquivo,
com submenus Novo, Abrir, Fechar, Salvar, Salvar Como... e Sair. Cada menu deverá possui
uma teca de atalho associada a tecla Alt e um Shortcut.
________________________________________________________________________________
________________________________________________________________________________
________________________________________________________________________________
________________________________________________________________________________
________________________________________________________________________________
________________________________________________________________________________
________________________________________________________________________________
________________________________________________________________________________
________________________________________________________________________________
________________________________________________________________________________
_______________________________________________________________________________
24 Desvendando a linguagem de programação mais popular do mundo – W.C. Rodrigues
Microsoft Visual Basic – Controles Personalizados (Propriedades e Eventos) 25
2
Tecnologia da Microsoft que utiliza componentes externos para desempenhar tarefas dentro de uma
aplicação, minimizando assim o tamanho do executável e aumentando assim a velocidade de execução
desta tarefas.
26 Desvendando a linguagem de programação mais popular do mundo – W.C. Rodrigues
3
Para inserir uma imagem após ligar o controle ImageList a um controle ToolBar o programador somente
poderá inserir a imagem após a última inserida e nunca entre duas imagem já inseridas.
4
Somente será possível remover a imagem caso o controle ImageList não esteja ligado a um controle
ToolBar.
Microsoft Visual Basic – Controles Personalizados (Propriedades e Eventos) 27
coleção ListImages começa em 1), para retornar a imagem correta. A partir daí a linha de código
abaixo carrega a segunda imagem da coleção da ImageList1 para a Picture1.
Na Figura 9a podemos ver as configurações do tamanho das imagens que irão compor a
coleção, devemos ressaltar que o tamanho deverá ser escolhido antes de iniciar a inserção de
imagens à coleção, pois o controle não permite modificar este valor após Ter sido inserida pelo
menos uma imagem, a opção UseMaskColor retorna ou seta a mascara de cor que a coleção irá
utilizar, veja exemplo no Código 5. Na Figura 9b pode ser verificado dois campos Key e Tag. O
campo Key deverá ser único e é Case Sensitive, ou seja, há diferença entre info e Info, pois há
diferença na primeira letra. Para evitar erros recomenda-se que todos os valores sejam em
minúsculo, sabe-se que o valor setado pode conter qualquer letra, número ou símbolos. Ex:
info@/1. Entretanto seria mais fácil somente info1. O campo Tag serve para que qualquer
configuração extra possa ser especificada (setado). Desta forma o campo Tag em qualquer
controle serve para dar maior flexibilidade ao programador na hora de especificar um valor, além
das variáveis que podem ser declaradas, mas a propriedade Tag acaba sendo mais flexível.
ScaleMode = vbPixels
' Set MaskColor property.
ImageList1.MaskColor = vbGreen
' Set the form's BackColor to white.
Form1.BackColor = vbWhite
End Sub
' Draw images onto the form for reference. Use the ImageWidth
' value to space the images.
ImageList1.ListImages(1).Draw Form1.hDC, 0, 0, imlNormal
28 Desvendando a linguagem de programação mais popular do mundo – W.C. Rodrigues
A– B–
Figura 9. A- configurações do tamanho das imagens; B- coleção de imagens inseridas no
ImageList.
5
Exemplo retirado do arquivo de ajuda do Microsoft® Visual Basic 6.0.
Microsoft Visual Basic – Controles Personalizados (Propriedades e Eventos) 29
Parte Descrição
object Requerido. Uma expressão de objeto que possua uma coleção de ListItems.
index Opcional. Um inteiro (Integer) que especifica a posição onde você quer inserir o
ListItem. Se nenhum índice for especificado, o ListItem é adicionado no fim da
coleção ListItems.
key Opcional. Uma expressão de string única que pode ser usada para acessar um
membro da coleção.
text Opcional. Uma string que é associada ao controle de objeto de ListItem.
icon Opcional. Um inteiro que fixa o ícone para ser exibido a partir de um controle de
6
Em geral ícones grandes possuem a dimensão de 32x32 pixels
7
Em geral ícones pequenos possuem a dimensão de 16x16 pixels
30 Desvendando a linguagem de programação mais popular do mundo – W.C. Rodrigues
For i = 0 To Text1.Text
pgbTarefa.Value = i
Next i
End Sub
Código 8. Rotina simples para exibir o progresso de um controle ProgressBar.
O Código 8 não verifica se o valor digitado na caixa de texto Text1, é numérico, portanto
para que não ocorra erro digite somente valor numérico positivo. Outra informação é que, quanto
maior for o valor maior será o tempo para que o preenchimento do progresso seja efetuado.
Inicialmente no Código 8, declaramos uma variável privada i, com Integer, para ser
utilizada no laço For-Next, que conta cada incremento a partir do valor 0 a adiciona o valor 1 a
variável i cada vez que o laço e reiniciado, até que o valor de i seja igual ao valor digitado na
caixa de texto. O valor mínimo (Min) da barra de progresso foi atribuído como 0 e o valor máximo
Microsoft Visual Basic – Controles Personalizados (Propriedades e Eventos) 31
(Max), foi atribuído ao valor digitado na caixa de texto (se a caixa de texto estiver vazia ou com
valor não numérico positivo o Visual Basic retorna um erro (Run-time error '13': Type mismatch).
Para testa o progresso, basta inserir, por exemplo, o valor 1.000 ou 2.000 na caixa de texto
e clicar o botão CommnadButton1.
É possível adicionar (até no máximo 16 painéis) em tempo de execução (run time) através
de linhas de comando, ou mesmo especificar uma imagem a partir de uma imagem existente no
disco rígido (HD – Hard Disk) ou ainda alterar as propriedade do controle StatusBar, como pode
ser visto no (Código 9)
Figura 14. Controles ToolBar's alinhados no topo da janela e em baixo e com a propriedade
Style 1 – tbrFlat e 0 – tbrStandard, respectivamente.
As propriedades Gerais do controle Toolbar (Figura 15 e 16) são:
Microsoft Visual Basic – Controles Personalizados (Propriedades e Eventos) 33
1. MousePointer – permite alterar o tipo de cursor que será exibido pela Barra de ferramenta;
2. ImageList – é o controle ImageList associado que contém os ícones que serão exibidos pela
barra de ferramentas;
3. DisabledImageList - é o controle ImageList associado que contém os ícones que serão exibidos
pela barra de ferramentas quando o botão estive desabilitado;
4. HotImageList - é o controle ImageList associado que contém os ícones que serão exibidos pela
barra de ferramentas quando o usuário passa o mouse por cima do botão8;
5. HelpContextID – Nesta propriedade o programador deverá atribuir o número do tópico de
ajuda, que foi especificado no projeto da ajuda, na seção MAP;
6. HelpFile – Nesta propriedade o programador deverá especificar o caminho lógico onde
encontra-se o arquivo de ajuda, caso este seja diferente do arquivo de ajuda do
programa/aplicativo;
7. AllowCostumize – permite que o usuário a partir de um duplo clique possa personalizar a barra
de ferramentas;
8. Wrappable – permite que a barra de ferramentas possa ser exibida "com quebra" caso o
tamanho da janela seja menor que a soma das larguras dos botões;
9. ShowTips – permite exibi ou ocultar as dicas dos botões;
10. Enabled – habilita ou desabilita a barra de ferramentas;
11. Appearance – Permite exibir a barra de ferramentas em 3D (cc3D - Padrão) ou plano (ccFlat);
12. BorderStyle – Altera o estilo da borda da barra de ferramentas, para ccNone (Sem borda -
Padrão) ou ccFixedSingle (com bordas);
13. TextAlignment – Permite alinhar o texto abaixo do botão ou ao lado – tbrTextAlignBottom
(Alinha abaixo) e tbrTextAlignRight (Alinha ao lado);
14. Style - permite alterar o estilo dos botões para 3D (tbrStandard - Padrão) ou plano (tbrFlat).
8
Geralmente quanto a propriedade HotImageList é vinculada a um controle ImageList, esta contém ícones
ou figuras coloridas e a propriedade ImageList é vinculada a um controle ImageList com ícones ou figuras
com colação em escala de cinza ou cores esmaecidas. Dando assim o efeito que poder ser visto no Windows
Explorer, Internet Explorer, etc.
34 Desvendando a linguagem de programação mais popular do mundo – W.C. Rodrigues
Figura 15. Caixa de propriedades geral de uma barra de ferramentas (aba General).
Figura 16. Caixa de propriedades dos botões de uma barra de ferramentas (aba Buttons).
4. ImageList – configura a o controle ImageList que contém as imagem que serão exibidas nos
nodes;9
5. BorderStyle – configura se o controle irá exibir as borad ou não. Os valores são 0 – ccNone e
1 – ccfixedSingle;
6. Appearance – configura a aparência do controle, se 3D ou plano. Os valores são 0 – ccFlat
(plano) e 1- cc3D (tridimensional);
7. Indentation – configura a largura indentation, ou seja, a largura entre o imagem ou o sins
menos/mais do node e o texto. O valor padrão é: 566,9292;
8. PathSeparator – configura o tipo de caractere que será utilizado como separador de nodes. O
valor padrão é \;
9. HideSelection – configura o controle para exibir uma marcação no último node selecionado
quando o controle perde o foco. Quando selecionado o texto não é marcado, quando não
selecionado o node fica marca com uma coloração amena, em geral cinza, quando o controle
perde o foco;
10. Sorted – configura o controle para distribuir o texto inserido nos nodes em ordem alfabética,
quando esta opção e marcada ou setada;
11. FullRowSelected – seleciona todo a linha quando o texto do node é selecionado;
12. Enabled – habilita o desabilita o controle;
13. CheckBoxes – quando esta opção e marcada ou setada, cada node exibira um CheckBoxes
(;).
Figura 17. Caixa de propriedades dos botões de um controle Treeview (aba General).
9
As imagem dentro do controle ImageList, deverão ser especificada o valor key, que deverão ser únicos, ou
seja, não podem ter valor igual. O valor key será utilizado para especificar a imagem que irá ser exibida pelo
Node, quando ele é adicionado no controle TreeView. Em geral o nome das chaves (key) são dadas em
minúsculo, pois existe uma sensibilidade entre maiúscula e minúscula, ou seja o parâmetro é Case Sensitive.
36 Desvendando a linguagem de programação mais popular do mundo – W.C. Rodrigues
Figura 18. Exemplo de um controle Treeview, com um node pai (Ícones) e 4 nodes filhos.
LineStyle igual a 1– tvwRootLine.
Para inserir nodes num controle Treeview, basta setar os valores no método Add da
propriedade Nodes. Como mostra o Código 11.
A sintaxe para adição de nodes é: Object.Nodes.Add([relative], [relationship], [key],
[text], [image], [selectedimage])
Parte Descrição
object Requerido. Uma expressão de objeto que possua uma coleção de ListItems.
relative Opcional. O número de índice ou chave de um objeto de Node pré-existente. A
relação entre o novo node e o node pré-existentes é verificado no próximo
parâmetro, relationship.
relationship Opcional. Especifica a colocação relativa do objeto Node, como descritas na
Tabela 10.
key Opcional. Uma expressão de string única que pode ser usada para acessar um
membro da coleção.
text Opcional. Uma string que é associada ao controle de objeto de ListItem.
image Opcional. O índice ou key de uma imagem em um controle de ImageList
associado.
selectedimage Opcional. O índice ou key de uma imagem em um ImageList associado ao
controle a imagem é exibida quando o Node for selecionado.
10
Extraído do arquivo de ajuda do Microsoft® Visual Basic 6.0
Microsoft Visual Basic – Controles Personalizados (Propriedades e Eventos) 37
4.2. Exercícios
1. Crie um pequeno projeto utilizando os seguintes controle ToolBar, ImageList e StatusBar.
Neste projeto adicione 3 ícones ao controle ImageList e em seguida crie 3 botões no controle
ToolBar. No controle StatusBar adicione um Pannels e adicione a imagem 2 do controle
ImageList através de código. Os códigos deverão se escrito abaixo e no projeto a ser entregue
para análise.
Private Form_ ()
End Sub
38 Desvendando a linguagem de programação mais popular do mundo – W.C. Rodrigues
2. Utilizando o controle TreeView adicione via código seis nodes com valor text livre entretanto os
valores Image e SelectedImage, diferente para cada node. O primeiro node deverá ser pai e os
demais deverão ser filhos. Adicione comentário para cada linha de comando escrita. Dica
Lembre-se da coleção de imagens.
Private Form_Load() 'Begin load event of this form
3. Quanto painéis (pannels) é possível adicionar num controle StatusBar? Ë poss;ivel adiciona-los
via código, caso verdadeiro crie um exemplo, para maiores informações verifique a ajuda do
Visual Basic
________________________________________________________________________________
Private Form_Load()
'Insira aqui o código para inserir um novo painel ao controle StatusBar
End Sub
5.1. Date
Datas com formato inválidos, devolverá uma mensagem "Illegal function call",(Chamada
ilegal de função), em tempo de execução (Run Time).
Date = "mm-dd-aaaa" 'Devolva a dada da seguinte forma mês-dia-ano
Date = "mm/dd/aaaa" 'Devolva a dada da seguinte forma mês/dia/ano
Date = "dd.mm.aaaa" 'Devolva a dada da seguinte forma dia.mês.ano
Date = "dd/mm/aaaa" 'Devolva a dada da seguinte forma dia /mês/ano
5.2. DataValue
Datas com formato inválido gera um erro Type Mismatch, em tempo de execução (Run
Time), por exemplo: DataValue("30-02-2001").
DataValue("11-20-2000")
DataValue("Novembro 11, 2000")
DataValue("Dez 31, 2000")
DataValue("31 Dezembro 2000")
DataValue("31-Dez-2000")
5.3. Format
Format (Now, "General Date") 'Devolve a seguinte data: 20/11/2000 00:44:26
Format (Now, "Long Date") 'Devolve a seguinte data: segunda-feira, 20 de novembro de 2000
Format (Now, "Medium Date") 'Devolve a seguinte data: 20-nov-00
Format (Now, "Short Date") 'Devolve a seguinte data: 20/11/00
Format (Now, "Long Time") 'Devolve a seguinte data: 00:49:34
Format (Now, "Medium Time") 'Devolve a seguinte data: 12:50
Format (Now, "Short Time") 'Devolve a seguinte data: 00:50
Version Information Æ Permite fornecer informações específicas sobre a versão atual de seu
projeto.
Type – Você pode entrar com as informações do nome da companhia, descrição do arquivo,
direitos autorais, marcas registradas legais, nome do produto e comentários.
Value – O valor para o tipo de informações selecionadas na caixa de Tipo (Type).
Para exibir as informações na tela de informações (About) Figura 22 inseridas nas
propriedades do projeto, insira num form os controles como na Tabela 12 abaixo:
5.0
BorderStyle: 0 – Fixed Single
StartUpPosition: 2 – ScreenCenter
Name: cmdOK
CommandButton
Caption: &OK
Name: lbTitulo
Label Caption: Titulo
Align: Right Justify
Name: lbVersao
Label Caption: Versão
Align: Right Justify:
Name: lbDesc
Caption: Descrição
Label
Autosize: True
WordWrap: True
Name: lbComentarios
Caption: Comentários
Label
Autosize: True
WordWrap: True
Name: lbCopyright
Label
Caption: Copyright
Name: lbTradeMarks
Label
Caption Trademarks
Name: lbProduto
Label
Caption Produto
Embora você tenha de utilizar esses nomes para os parâmetros se você os utiliza como
argumentos nomeados, a notação da Microsoft não enfatiza suficientemente Que as unidades
utilizadas para as várias entradas devem ser as mesmas. Por exemplo, se a taxa é calculada
utilizando meses, nper também tem de ser calculada utilizando meses.
Creio que estes motivos já são suficientes para você dar uma olhada no que a SQL pode
fazer por você e por seu código.
Com a SQL podemos realizar as seguintes tarefas:
ª Criação de Bases de Dados (Ver Banco de Dados).
ª Segurança de acesso aos Dados.
ª Recuperar informações e Integridade de transações.
ª Manipulação e controle de bases de dados.
Se você tem uma cópia do Access, sua incursão no mundo SQL será facilitada, pois o
Access praticamente escreve em SQL para você, depois você só precisar copiar e colar as
instruções no seu código em Visual Basic. Mas vale a pena aprender pelo menos as instruções
mais importantes em SQL. Com isso você já conseguira usar muito do seu potencial.
Talvez o maior problema para os que já utilizavam uma linguagem procedural (Basic,
Clipper, Fortran, Cobol, etc), ao lidar com a SQL seja o seguinte: Você tem que mudar a forma de
pensar ao programar com SQL.
Estas linguagens ditas da terceira geração, são caracterizadas por comandos que dizem
ao computador exatamente o que fazer em estruturas sequenciais executadas passo a passo.
São chamadas de linguagens procedurais.
A SQL,por outro lado, é caracterizada por ser uma linguagem declarativa, ou seja, ela diz
ao computador o que quer que ele faça, sem se preocupar de que forma o trabalho será realizado,
o que importa é o resultado.
A SQL é composta de subconjuntos de comandos para executar diferentes tarefas. Assim
podemos dizer que a SQL suporta:
ª Uma linguagem de definição de dados (DDL)
ª Uma linguagem de manipulação de dados (DML)
ª Uma linguagem de segurança de dados (DCL)
A DDL permite criar e modificar e excluir a estrutura de uma tabela e seus índices; seus
principais comandos são:
A DML permite manipular os dados (Inserir, Excluir e Atualizar) bem como executar
consultas através da recuperação de subconjuntos de dados para posterior tratamento. seus
principais comandos são:
ª SELECT – Seleciona um conjunto de registros de uma ou mais tabelas usando um
critério específico.
ª INSERT – Adiciona dados a uma tabela.
ª UPDATE – Atualiza os dados de uma tabela segundo critérios específicos.
ª DELETE - Remove registros de uma tabela.
Vamos criar via SQL as tabelas através da a estrutura dos dados que é são dados a seguir:
TblAlunos TblCursos TblNotas TblProfessor
codaluno codcurso codaluno codprofessor
nome nomecurso codcurso nome
endereco codprofessor nota endereco
telefone ano telefone
nascimento bimestre
nomepai Observacao
nomemae
observacao
Periodo
serie
numero
Obs : Codaluno , Codcurso, CodProfessor são chaves primárias de suas respectivas tabelas.
Para exercitar iremos definir os relacionamentos entre as tabelas da seguinte forma (figura 1.0
abaixo:
A instrução CREATE TABLE irá criar a tabela tblprofessor, com as definições da lista de
campos entre parênteses, separados um dos outros por vírgulas. Cada descrição de campo possui
duas partes: o nome do campo e o tipo de dados os quais são separados por um espaço entre si.
A cláusula CONSTRAINT é utilizada para definir a chave primária codprofessor.
Para criar a tabela no VB execute a instrução CREATE TABLE passando-a como parâmetro
do método Execute do objeto Database. Ex: db.Execute ("CREATE TABLE...")
Os nomes dos tipos de dados utilizados pelo JET não é igual aos nomes exigidos pelas
instruções SQL. Veja na tabela a abaixo a correspondência entre ambos:
A cláusula CONSTRAINT é utilizada para definir uma chave primária e uma chave externa.
Note que existe uma relação de um para muitos entre a tabela TblProfessor e a tabela
TblCursos, sendo que a coluna codprofessor da tabela TblCursos, é uma chave estrangeira
(Foreign Key - FK )
1- Na inclusão de um campo temos que especificar o NOME, TIPO e TAMANHO do campo, e usar
a cláusula ADD COLUMN
Assim para incluir o campo CIDADE com 50 caracteres na tabela tblalunos fazemos:
ALTER TABLE tblalunos ADD COLUMN cidade TEXT (50)
50 Desvendando a linguagem de programação mais popular do mundo – W.C. Rodrigues
Note que não será possível excluir um campo empregado em um índice ou em uma
relação.
A instrução abaixo cria um índice chamado series, usando os campos serie e periodo da
tabela tblalunos, sendo que serie será usado na ordem ASCENDENTE e periodo na ordem
DESCENDENTE.
CREATE INDEX series ON tblalunos(serie ASC, periodo DESC)
Dim db as Database
Dim qd as QueryDef
set db=DbEngineworkspaces(0).Opendatabase(app.path & "\escola.mdb")
set qd=db.CreateQueryDef("Lista_alunos", "SELECT * FROM tblalunos ORDER
BY nome"
Dim db as Database
Dim dyn as Recordset
set db=DbEngine.Workspaces(0).OpenDatabase(app.path & "\escola.mdb")
set dyn=db.QueryDefs("lista_alunos").OpenRecordset(dbOpendynaset)
Ou eliminá-la :
db.Querydefs.Delete "Lista_alunos"
Para tirar maior proveito das QueryDefs costuma-se criá-las de forma que aceitem
parâmetros, para isto usamos a palavra-chave PARAMETERS para passar um ou mais parâmetros
para as consultas SQL.
Suponha que no caso do exemplo anterior gostariamos de listar todos os alunos de uma
determinada série, para isso criamos a consulta e passamos o parâmetro da série desejada :
Dim db as Database
Dim qd as QueryDef
Dim dyn as Recordset
Dim Sql as String
set db=DbEngineworkspaces(0).Opendatabase(app.path & "\escola.mdb")
sql= "PARAMETERS pSerie String SELECT * FROM tblalunos WHERE serie =
pSerie "
sql=sql & " ORDER BY nome "
set qd=db.CreateQueryDef("Lista_alunos", Sql )
qd.Parameters("pSerie")= "1"
set dyn= qd.OpenRecordset()
O método Execute é usado para executar comandos de ação como DELETE ou UPDATE que
não retornam um conjunto de registros , é usado também para criar tabelas e índices via instrução
SQL.
O método OpenRecordset é usado para retornar um conjunto de registros como resultado
da consulta.
52 Desvendando a linguagem de programação mais popular do mundo – W.C. Rodrigues
Dim db as Database
Dim qd as QueryDef
Dim dyn as Recordset
Dim Sql as String
set db=DbEngineworkspaces(0).Opendatabase(app.path & "\escola.mdb")
sql= "DELETE * FROM tblalunos WHERE ativo=False "
set qd=db.CreateQueryDef("Apaga_alunos", Sql )
qd.Execute
As QueryDef possuem as seguintes propriedades:
Tabela Exame
WorkSpace Error
Database
Field
User Group
Group User
Objetos membros de uma coleção são acessados através de índices (a partir de zero).
Assim, por exemplo, para identificar de modo completo a coluna Código do primeiro TableDef
numa coleção TableDefs do primeiro Database de uma coleção Databases do primeiro Workspace
de uma coleção Workspaces do Dbengine, escrevemos:
DBEngine.Workspaces(0).Databses(0).TableDefs(0).Fields("nome")
Este exemplo nos faz lembrar que, quando a referência a um membro for explícita , isto é,
não desejarmos utilizar um índice da coleção, as duas formas seguintes são equivalentes:
Tabela.Fields("Nome")
Tabela.Fields!Nome
Tabela.Index = "Nome"
9.3.1.3. dbOpenSnapshot
Como um dynaset, um snapshot permite extrair dados de uma ou várias tabelas usando
uma instrução SQL, mas o conjunto do resultado não é editável. Um snapshot consiste em uma
cópia fixa dos dados reais que existem no banco de dados ao tempo que o Sanpshot é criado.
Uma vez que uma snapshot seja criado, os dados retornados tornam-se independentes da cópia
original no disco, e as referências subsequentes a um campo snapshot podem não
necessariamente refletir os dados subjacentes mais atuais. Como os snapshots não precisam
verificar o disco toda vez que um campo é referenciado, eles são consideravelmente mais rápidos
que os dynasets.
É necessário ter cuidado ao utilizar um sanpshot. Como está extraindo os dados para a
estação de trabalho, consideravelmente mais memória é utilizada do que ao criar um dynaset.
Uma vez que a memória pode ficar toda ocupada, o VB começará a transferir dados para o disco.
Neste ponto, a degradação no desempenho começará a ser sentida. Se o snapshot for grande o
bastante e o espaço de transferência ficar todo ocupado, o aplicativo irá diparar mensagem de
erro ou mesmo poderá ficar paralisado.
9.3.1.4. dbOpenFowardOnly
Os recordsets do tipo Foward-only permitem que os usuários passem uma vez por um
recordset. Esta opção é útil para as operações tais como quando se está carregando uma caixa de
combinação (ComboBox) ou uma caixa de listagem (ListBox) com os dados de uma tabela como
mostra o Código 17.
Public Sub CarregaDados(oList As ListBox)
Dim oDataBase As Database
Dim snpDici As Recordset
'Esta sub-rotina assume uma tabela com pelo menos duas colunas:
CompanyName e descr
Set snpDici = oDataBase.CreateSnapshot("SELECT * FROM Customers ORDER BY
CompanyName", dbForwardOnly)
Código 17. Preenchendo uma caixa de listagem com dados de uma tabela utilizando o recordeset
do tipo Foward-only.
9.3.1.5. dbAppendOnly
Permite o usuário acrescentar novos registros, porém impede a edição e exclusão dos
registros existentes, inclusive dos que ele adicionou.
9.3.1.6. dbReadOnly
Permite somente a consulta de dados, ou seja, não é possível acrescentar, editar ou excluir
dados.
9.3.1.7. dbSeeChanges
Dispara um erro de execução se um usuário estiver alterando os dados que outro usuário
estiver editando. Este tipo de recordset é ideal para rede multiusuários.
'This example uses the OpenDatabase method to open one Microsoft Jet
database.
Sub OpenDatabaseX()
Dim wrkJet As Workspace
Dim dbsNorthwind As Database
' Create Microsoft Jet Workspace object.
Set wrkJet = CreateWorkspace("", "admin", "", dbUseJet)
' Open Database object from saved Microsoft Jet database
' for exclusive use.
MsgBox "Opening Northwind..."
Set dbsNorthwind = wrkJet.OpenDatabase("Northwind.mdb", True)
11
Extraído do Arquivo de Ajuda do Visual Basic v5.0
58 Desvendando a linguagem de programação mais popular do mundo – W.C. Rodrigues
End Sub
Código 18. Rotina para abertura de uma base de dados MS Access12.
Caso a base de dados possuir uma senha esta deverá ser informada como segue o
exemplo abaixo:
Sub OpenDatabaseX()
Dim wrkJet As Workspace
Dim dbsNorthwind As Database
' Create Microsoft Jet Workspace object.
Set wrkJet = CreateWorkspace("", "admin", "", dbUseJet)
' Open Database object from saved Microsoft Jet database
' for exclusive use, don't read-only, and with password.
MsgBox "Opening Northwind..."
Set dbsNorthwind = wrkJet.OpenDatabase("Northwind.mdb", True,
False,";PWD=senha")
End Sub
Código 19. Rotina para abertura de uma base de dados MS Access com senha.
12
Extraído do Arquivo de Ajuda do Visual Basic v5.0
Microsoft Visual Basic – Trabalhando com banco de dados Access 59
robustos. Apesar do MS Access ter suas limitações, o uso de instruções SQL torna mais rápido o
acesso aos dados.
É possível utilizar as instruções SQL em conjunto com o DataControl, como podemos
verificar no Código 21.
Private Sub Form_Load()
With Data1
.DatabaseName = App.Path & "\Nwind.mdb" 'Abre o banco de dados
Obviamente que antes de iniciar uma rotina desta, o banco de dados e a tabela deveram
ter sido especificados, pois se não este procedimento irá gerar um erro.
Com a utilização do DataControl é possível vinculara TextBox, ListBox, Label, ComboBox e
outros controles que possuam as propriedade DataField e DataSource. A propriedade DataField
especifica qual o campo da tabela o controle estará vinculado e a propriedade DataSource,
especifica a qual controle DataControl o objeto está vinculado, ou seja, se o programador
especifica o caminho do banco de dados e o nome da tabela em um controle Data (nome=Data1)e
em seguida especifica as propriedades de uma caixa de texto, DataSource como Data1 e DataField
60 Desvendando a linguagem de programação mais popular do mundo – W.C. Rodrigues
como Code, significa que a caixa de texto estará ligada aos dados da tabela do banco de dados
especificada e exibirá os dados do campo Code. Vale lembrar que estas propriedades poder ser
alterada via código, ou seja, em Run-Time.
Após o preparo da tabela para receber o novo registro é necessário ao final salva-lo, pois
por se só o método AddNew, não garante a adição no banco de dados.
Para adicionar um registro é sempre necessário iniciar o método AddNew e em seguida o
método UpdateRecord, como pode ser visto no Código 23.
Public Sub SaveReg ()
'Salva fisicamente os dados no registro preparado pelo método
AddNew
Data1.UpdateRecord
'No local onde está escrito campo você pode substitui pelo verdadeiro
nome do campo, obviamente deve-se tomar cuidado no momento de especificar
este nome pois se o campo não existir o Visual Basic gera um erro "Item
Not found in this collection"
Código 24. Rotina para localizar dados dentro de uma tabela, utilizando as instruções do
DataControl e instruções SQL.
Microsoft Visual Basic – Trabalhando com banco de dados Access 61
O DataControl possui ainda outras variantes para pesquisa, são elas: FindLast, FindNext,
FindPrevious.
ª FindFirst – localiza o primeiro registro de acordo com o parâmetro passado;
ª FindLast – localiza o último registro de acordo com o parâmetro passado;
ª FindNext – localiza o registro seguinte ao primeiro de acordo com o parâmetro passado;
ª FindPrevious – localiza o registro anterior ao localizado de acordo com o parâmetro passado.
Outra instrução que pode ser utilizada pelo DataControl é Seek, porém este tipo de
instrução somente é aceito em RecordSet do tipo Table. Outro inconveniente de te método e que
o índice deve ser indicado na propriedade Index do DataControl.
A instrução de consulta da SQL também possui flexibilidade, por exemplo, filtrar todos os
produtos com um determinado código. Neste momento lançamos mão da instrução LIKE. Como
mostra ao Código 25.
Public Sub Localiza (sDado As String)
Dim rsLocal As Recordset
Set rsLocal = DB.OpenRecordset _
("SELECT * FROM tabela WHERE campo LIKE'" & sDado & "'" _
, dbOpenSnapshot)
End Sub
Código 25. Rotina para filtrar os dados de uma tabela
13
Código extraído do programa Lizaro Visual Basic Dicas v3.0
62 Desvendando a linguagem de programação mais popular do mundo – W.C. Rodrigues
End If
Me.tvwLocal.Clear 'Limpa os nodes do Treeview
cboLocal.AddItem cboLocal.Text 'Adiciona a palavra digitada no List do
ComboBox
Figura 26. Layout para pesquisa de dados do programa Lizaro Visual Basic Dicas v3.0
Sub Compacta_Database()
Dim dbsNorthwind As Database
'Fecha o banco de dados para evitar erros
dbsNorthwind.Close
'Verifica se já existe um arquivo com o nome do arquivo a ser
compactado
64 Desvendando a linguagem de programação mais popular do mundo – W.C. Rodrigues
Sub Compacta_Database()
Dim dbsNorthwind As Database
'Fecha o banco de dados para evitar erros
dbsNorthwind.Close
'Verifica se já existe um arquivo com o nome do arquivo a ser
compactado
If Dir("NwindBackup.mdb") <> "" Then Kill "NwindBackup.mdb"
14
Exemplo retirado do programa Lizaro Visual Basic Dicas v3.0
15
Exemplo retirado do programa Lizaro Visual Basic Dicas v3.0
16
Exemplo retirado do programa Lizaro Visual Basic Dicas v3.0
Microsoft Visual Basic – Trabalhando com banco de dados Access 65
Sub ReadPictureFromDb()
On Error Resume Next
Open "d:\picture.gif" For Binary Access Write As #1
lngTotalSize = rstAlbum!Picture.FieldSize
Chunks = lngTotalSize \ ArrSize
Fragment = lngTotalSize Mod ArrSize
ReDim Arr(ChunkSize)
Arr() = rstAlbum!Picture.GetChunk(lngOffset, ArrSize)
Put #1, , Arr() lngOffset = lngOffset + ArrSize
With rstAlbum
Do While lngOffset < lngTotalSize
Arr() = !Picture.GetChunk(lngOffset, ArrSize)
Put #1, , Arr()
lngOffset = lngOffset + ArrSize
Loop Close #1
Close
End With
End Sub
Sub SavePictureToDb()
rstAlbum.AddNew
Open "c:\picture.gif" For Binary Access Read As #1
FileLen = LOF(1) Chunks = FileLen \ ArrSize Fragment = FileLen Mod
ArrSize
ReDim Arr(Fragment)
With rstAlbum Get #1, , Arr()
!Picture.AppendChunk Arr()
ReDim Arr(ChunkSize)
For I = 1 To Chunks
Get DataFile, , Arr()
!Picture.AppendChunk Arr()
Next
Close #1 .Update
End With
End Sub
SavePictureToDb
ReadPictureFromDb
Set rstAlbum = Nothing
dbTest.Close
End Sub
Código 31. Rotina para salvar e recuperar uma figura dentro dum campo OLE de um banco de
dados17.
17
Exemplo retirado do programa Lizaro Visual Basic Dicas v3.0
Microsoft Visual Basic – Trabalhando com banco de dados Access 67
Em aplicação com banco de dados é sempre requerido que os dados sejam apresentados
na forma de relatórios ou gráfico, tamanaha é a facilidade de análise deste através destas duas
ferramentas. Neste capítulo iremos abordar a utilização do controle Microsoft Chart v5.0.
Com este controle é possível gerar gráficos de barras, linha e pizza (torta), de oforma
simples ou tridimensional.
18
Extraído em parte do arquivo de ajuda do Micotsoft Visual Basic 6.0™
70 Desvendando a linguagem de programação mais popular do mundo – W.C. Rodrigues
Além das janelas de propreidades do VB, podemos abrir uma caixa de diálogo de
propriedades do controle MSChart, como em todos a maioria dos controle ActiveX.
A figura abaixo demonstra como fica o gráfico após as linhas inseridas no evento Load do
From.
19
Consulta ao livro Lima (1998)
Microsoft Visual Basic – Trabalhando com o Controle MSChart no Visual Basic 71
Figura 28. Gráfico de receitas/despesas de abril a junho apresentando a média de cada mês.
Outro exemplo de gráfico manual poderá ser criado com exibição da estatística pode ser
visto no exemplo abaixo e figura seguinte:
Private Sub cmdDesvio_Click()
'Exibe a linha de desvio padrão
MSChart1.Plot.SeriesCollection.Item(1).StatLine.Flag = VtChStatsStddev
End Sub
Dim Matriz(1 To 6, 1 To 2)
With MSChart1
'Configurando as propriedades do controle
.ShowLegend = False 'Oculta Legenda
.Title = "Receitas/Despesas"
.Plot.Axis(VtChAxisIdX).AxisTitle.Text = "Meses"
.Plot.Axis(VtChAxisIdY).AxisTitle.Text = "Valor em Reais ($)"
.Plot.AutoLayout = True
'Determinando os valores da Matriz
Matriz(1, 1) = "Janeiro"
Matriz(2, 1) = "Fevereiro"
Matriz(3, 1) = "Março"
Matriz(4, 1) = "Abril"
Matriz(5, 1) = "Maio"
Matriz(6, 1) = "Junho"
Matriz(1, 2) = 345
Matriz(2, 2) = 978
Matriz(3, 2) = 410
Matriz(4, 2) = 1520
Matriz(5, 2) = 200
Matriz(6, 2) = 280
'Modifica o tipo do gráfico
.chartType = VtChChartType2dLine '3 – Grafico de linha 2D
'Plota os dados no gráfico
.ChartData = Matriz
End With
Código 37. Códigos para criação de um gráfico manualmente e xibição de estatísticas.
Figura 29. Gráfico criado com dados de entrada manual, exibindo as estatísticas.
Microsoft Visual Basic – Trabalhando com o Controle MSChart no Visual Basic 73
20
Código extraído do programa Entomologistas do Brasil Manager v3.1
74 Desvendando a linguagem de programação mais popular do mundo – W.C. Rodrigues
30 30
25 25
20 20
15 15
10 10
5 5
0 0
Figura 30. Gráfico plotado a partir dos dados de um banco de dados Access 97
Microsoft Visual Basic – Tratando erros em sua aplicação 75
como strings de tamanho zero. Clear dever ser chamada sempre que uma condição de erro for
tratada pela rotina de tratamento de erros para evitar que o mesmo erro seja disparado duas
vezes.
Número Mensagem
3197 Data has changed; operation stopped.
3260 Couldn't update; currently locked by user 'name' on machine 'name'.
3261 Table 'name' is exclusively locked by user 'name' on machine 'name'. The
database Is opened by user 'name' on machine 'name'.
Número Mensagem
52 Nome ou número de Arquivo inválido
53 Caminho do arquivo Errado. Arquivo não encontrado
54 Modo de arquivo errado
55 Arquivo aberto por outro aplicativo
57 Erro de dispositivo Entrada e Sáida do disco (HardDisk)
58 Arquivo já existente
59 Tamanho incorreto de registro
61 Disco cheio. Espaço insuficiente para gravar o arquivo ou outra coisa
62 A entrada ultrapassou o final do arquivo. EOF foi utilizado incorretamente
63 Número de registro errado
64 Nome de Arquivo errado as regras de nomenclatura de arquivo não foram
respeitadas
67 Vários arquivo abertos ao mesmo tempo
68 Dispositivo não disponível. Erro de leitura de mídia ou disquete não inserido no
drive
70 Permissão negada ou o disco ao qual você deseja acessar está protegido contra
gravação ou o arquivo está aberto por outra aplicação
71 O disco não está pronto ou disquete não inserido no drive
72 Erro de mídia de disco. Disquete ou disco rígido com problemas
74 Permisão negada para renomear o arquivo entre unidades diferentes
75 Erro de acesso oa arquivo ou caminho do mesmo
76 Caminho não encontrado. Arquivo não existente ou caminho incorreto.
21
Consulta ao Visual Basic 5 - Completo e Total - Gary Cornell, Makron Books - 1998
78 Desvendando a linguagem de programação mais popular do mundo – W.C. Rodrigues
22
Código extraídos do programa Entomologistas do Brasil® v1.1
Microsoft Visual Basic – Distribuindo sua aplicação 81
Figura 31. Tela inicial do Setup Wizard que acompanha o Visual Basic 5.0.
Figura 32. Tela inicial do Package and Deployment Wizard que acompanha o Visual Basic 5.0
Tabela 21. Strings utilizadas pelo arqivo Setup.lst as strings equivalntes no Inno Setup Compiler
Seção no Setup.Lst Alterar para no arquivo de script do Inno Setup
$(AppPath) = {app} Constant
$(WinSysPathSysFile) = {sys} Constant
$(WinSysPath) = {sys} Constant
84 Desvendando a linguagem de programação mais popular do mundo – W.C. Rodrigues
12.5. IsTool
Quem inicialmente tem contato com Inno Setup logo toma um susto pois escrever código
por código de um script de distribuiçao de aplicação não é mole, pois eis que entra o IsTool um
programa FrontEnd que escreve os scripts de forma intuitiva e com a inteface de janelas
(windows). Assim fica mais fácil criar os scripts.E a partir da versão 3.0 o FrontEnd, possui suporte
a script de libguagem, ou seja, ele pode falar Português (BR), basta instalar o script da linguagem
ou traduzir o original em Inglês.
A documentação (em Inglês) tanto do Inno Setup compiler e do ISTool são bem completas
e simples de entender. Caso ainda fique alguma dúvida o usuário poderá saná-la no site do
fabricante.
Microsoft Visual Basic – Distribuindo sua aplicação 85
Public Declare Function WinHelp Lib "user32" Alias "WinHelpA" (ByVal hwnd
As Long, ByVal lpHelpFile As String, ByVal wCommand As Long, ByVal dwData
As Long) As Long
Public Const HELP_CONTEXT = &H1 'Exibe o tópico de ajuda pelo Número ID
Public Const HELP_HELPONHELP = &H4 'Exibe a ajuda do Windows de como
utilizar ajuda
Public Const HELP_INDEX = &H3 'Exibe o Índice da Ajuda
Public Const HELP_QUIT = &H2 'Termina a juda
Public Const HELP_MULTIKEY = &H201& 'Procura por palavras-chave na tabela
alternativa da ajuda
13.4. Drive do CD
Se a aplicação necessita buscar informações a partir do driver do CD-Rom e você especifica
a letra padrão como D:, pode entrar em uma enrascada. Pois a maquina onde o aplicativo está
rodando poderá ter de uma a vários discos rígidos. Desta forma a API seguinte resolve o
problema.
'Detectando o drive do CD. Num módulo insira as seguintes API's e os
seguintes códigos:
Public Declare Function GetDriveType Lib "kernel32" Alias "GetDriveTypeA"
(ByVal nDrive As String) As Long
Public Declare Function GetLogicalDriveStrings Lib "kernel32" Alias
"GetLogicalDriveStringsA" (ByVal nBufferLength As Long, ByVal lpBuffer As
String) As Long
Public Const DRIVE_REMOVABLE = 2
Public Const DRIVE_FIXED = 3
Public Const DRIVE_REMOTE = 4
Public Const DRIVE_CDROM = 5
Public Const DRIVE_RAMDISK = 6
' Note that used this ONLY if you are creating a new
' section on the INI file, unless you wanted to erase
' its existing keys.
Call WritePrivateProfileSection("SectionName", "Key=Value",
App.Path & "\sample.ini")
Dim szBuf As String * 255
Call GetPrivateProfileSection("SectionName", szBuf, 255, App.Path &
"\sample.ini")
MsgBox szBuf
End Sub
Código 44. Exemplo de como escrever e obter informações de um arquivo INI.
92 Desvendando a linguagem de programação mais popular do mundo – W.C. Rodrigues
Microsoft Visual Basic – Criando arquivos de ajuda basedo em arquivos HTML 93
Figura 37. Listagem de arquivos HTML, que irão fazer parte do arquivo de ajuda.
Clique em avancar e após clique em concluir. Será exibida a janela do projeto de ajuda que
foi criado (Figura abaixo).
Microsoft Visual Basic – Criando arquivos de ajuda basedo em arquivos HTML 95
Figura 38. Janela do projeto recém criado, com as opções e listagem de arquivos criados.
Figura 39. Janela de opção para criação ou abertura de uma rquivo de conteúdo.
Digite o nome do arquivo de conteúdo e salve-o. A seguir a aba Contents estará em
branco, clique no botão 'Insert a heading' (2º botão) na barra de ferramntas lateral da aba
contents e será exibida a janela para criação do arquivo de conteúdo (Figura abaixo).
96 Desvendando a linguagem de programação mais popular do mundo – W.C. Rodrigues
Figura 40. Janela de adição de tópicos e de ligamento (link) com o arquivo correspondente.
Para criar o link com o arquivo HTML, clique no botão 'Add...' e em seguida será exibida a
lista de arquivos HTML adicionados ao projeto da ajuda (Figura abaixo).
Figura 41. Janela de "linkagem" de arquivo ao tópico do conteúdo. A listagem é exibida por título
do arquivo.
Microsoft Visual Basic – Criando arquivos de ajuda basedo em arquivos HTML 97
Figura 42. Aba de Contents, com sua aparência final listando todos os tópicos criados.
".h", isso mesmo com uma letra. Em seguida adicione ao projeto. É possível adiconar vários
arquivos de cabeçalho a um mesmo projeto da ajuda.
A estrutura do arqivo de cabeçalho deverá ser a seguinte:
#define IDH_Main 10001
#define IDH_Menu 10002
#define IDH_Metodos 10003
#define IDH_Info 10004
Código 45. Estrutura de uma arquivo de cabeçalho, contendo os tópicos sensíveis ao contexto e
sua identificação numérica.
Figura 43. Janela HTMLHelp API Information com a adição do arquivo de cabeçalho InsectA.h.
Agora devemos realizar a aoperação de identificar e indicar a que contexto os arquivos
estarão ligados. Para tal, ainda na mesma janela, clique na aba Alias e clique em 'Add...', para
exibir a janela de ligação digite no primeiro campo uma das definições (ex: IDH_Main) e em
seguida no campo seguinte selecione o arquivo de HTML relacionado (Figura abaixo).
Figura 44. Janela de ligação da definição (IDH_Main), como o arquivo HTML (insecta.htm).
A seguir clique em OK e verifique que na janela 'HTML Help API Information', aba
'Alias', estará listado cada definição e o arquivo referenciado.
Microsoft Visual Basic – Criando arquivos de ajuda basedo em arquivos HTML 99
'//API Declarations
Private Declare Function HtmlHelp Lib "hhctrl.ocx" Alias "HtmlHelpA" _
(ByVal hwnCaller As Long, ByVal pszFile As String, _
ByVal uCommand As Long, ByVal dwData As Long) As Long
If Len(WindowPane) Then
Call HtmlHelp (0, strFile, HH_DYSPLAY_TOPIC, ByVal 0&)
Else
Call HtmlHelp (0, strFile, HH_DYSPLAY_CONTEXT, ContextID)
End If
End Function
Código 46. Classe clsHelpCHM, criada para acessar através de API ao arquivo de ajuda CHM,
pelo Visual Basic
Para realmente exibir o arquivo de ajuda atrav;es de um formulário, seja por meio de
menu, botão, etc, é necessário a seguinte rotina (código):
Private Sub cmdHelp_Click()
End Sub
Código 47. Codígo para exibir o arquivo de ajuda através do evento Click, de um
CommandButton, chamado cmdHelp.
Se você queiser utilizar o sensibilidade ao contexto, será necessário referenciar a
identificação do contexto que deseja chamar. Desta forma para chamar o contexto desejado você
irá precisar da seguinte rotina.
Private Sub cmdHelp_Click()
End Sub
Código 48. Codígo para exibir o contexto específco do arquivo de ajuda através do evento Click,
de um CommandButton, chamado cmdHelp.
Bom como já dito outras opções que por ventura você deseje utilizar, deverá consultar o
arquivo de ajuda do programa.
Microsoft Visual Basic – Gerando relatórios com o Crystal Reports 101
Note que na janela Create New Report, temos nove opções de relatórios exibidas e mais
três ocultas que poderão ser acessadas através do botão 'Custom>>', mas será explorado em
nosso pequeno tutorial.
Para iniciar o nosso novo relatório, clique em 'Standard'. Em seguida será exibida a janela
como segue, dando a opção de selecionar uma base de dados através de uma arquivo ou através
de comando SQL (Structure Query Language).
23
A versão apresntada neste tutorial é a versão 4.6. Hoje já existe a versão 8.0 nomercado, porém com um
custo elevado para pequenas empresas e mesmo para um programador autônomo.
102 Desvendando a linguagem de programação mais popular do mundo – W.C. Rodrigues
Figura 47. Janela Create Report Expert, com a opção o passo 1: seleção de tabelas no Crystal
Reports
Selecionamos para o exemplo somente a tabela tbCadastro, para que possamos criar um
relatório baseado nesta tabela. Portanto excluimos todas os nomes das outras tabelas listadas.
Clieu em Next e será exibido passo 3: Campos (Fields). Note que saltamos o passo 2, Links
(lgação). Esta opção somente seria explorada e configurada se e somente se duas ou mais tabelas
fossem escolhidas. Seleciona-se nesta opção os campos a serem exibidos no relatório como mosta
a figura a seguir, mas não se preocupe, caso você esqueça algum campo ou inseriu um por
acidente poderá incluir e mesmo excluir um campo em modo de desenho (design-mode).
Microsoft Visual Basic – Gerando relatórios com o Crystal Reports 103
Figura 48. Passo 3: seleção de campos a serem exibidos no relatório do Crystal Reports.
Após selecionar os campos a serem exibidos, clique em Next >> e em seguida iremos
escolher a opção de ordenação dos dados e a forma de ordenação – se crescente ou decrescente -
como segue a janela abaixo.
Figura 49. Passo 4: seleção dos campo de ordenação do relatório e tipo de ordenação no Crystal
Reports.
Selecione o(s) campo(s) a serem utilizados como parâmentro de ordenação dos dados para
o relatório, podendo o usuário selecionar mais de um, porém caso seja selecionado mais de uma
ordenacão seguira o critério da ordem de inserção. Ex.: nome e matricula, a ordenação primeiro
será nome e depois matricula.
O tipo de ordenação poderá selecionado através da opção Order, que possui as seguintes
opções:
ª In ascending order – ordena crescentemente respeitando a ordem listada no campo Group
Fields.
ª In descending order – ordena decrescentemente respeitando a ordem listada no campo
Group Fields.
ª In specified order – ordena através dos dados originais do campo da tabela (esta opção
não será trabalhada neste tutorial).
ª In original order – ordena crescentemente através da lista de campos original da tabelas,
respeitando a ordem de criação dos campos (esta opção não será trabalhada neste
tutorial).
Iremos saltar os passo 5 e 6, e iremos direto para o passo 8, onde iremos definir o tíitulo e
estilo do relatório. Daremos ao tituo o seguinte texto 'Lizaro Administer – Cadastro' e o estilo será
o padrão Standard, como podemos ver na figura seguinte.
Verifique que no canto direito da janela teremos duas opções de finalização da geração do
relátorio: Preview Report (visualizar o relatório) e Preview Sample (visualizar o "modelo").
Caso deseje incluir uma imagem cliue no botão e em seguida selecione um tipo de
figura válida. O Crystal Reports v 4.6, suporta somente os seguites padrões de figuras: bitmap
104 Desvendando a linguagem de programação mais popular do mundo – W.C. Rodrigues
windows (bmp), CompuServe (gif), PC paitbrush (pcx), TIFF (tif), e Targa (tga). Adicionamos no
exmplo uma pequena figura (bmp) para exemplificar.
Figura 50. Passo 8: especificação de título e seleção se estilo do relatório no Crystal Reports.
Nesta janela veremos quatro seções no lado esquerdo do relatório. São elas:
ª Title – especifica o título do relatório a ser exibido no inicio da primeira página somente.
ª Page header – Exibe o conteúdo no inicio de cada página, com exceto na primenira que
será exibido abaixo do campo Title.
Microsoft Visual Basic – Gerando relatórios com o Crystal Reports 105
Figura 52. Janela par inserção de novo(s) campo(s) ao relatório no Crystal Reports.
Para inserir um novo campo, basta clicar e arrastar o campo para o seção Details e em
seguida organiza-lo na melhor posição.
Figura 53. Barra de ferramentas de formatação do texto dos campos no Crystal Reports.
Outras formatações a serem realizadas, podem ser acessadas através do menu suspenso
que pode ser acionado com um clique no botão direito em cima do campo a ser formatado.
106 Desvendando a linguagem de programação mais popular do mundo – W.C. Rodrigues
Figura 54. Menu suspenso para formatação do campo (fonte, formato, bordas, etc.) no Crystal
Reports
ª A opção Change Font... dá acesso a caixa de selção de fonte e suas variantes.
ª A opção Change Format... dá acesso a janela de formatação abaixo:
Figura 56. Alteração de borda e cores de borda e texto do campo do Crystal Reports.
ª Opção Edit Text Field... dá acesso a caixa de alteração do texto exibido no campo.
Figura 57. Barra de ferramentas para inserção de figura, linha e caixa (respectivamente) do
Crystal Reports.
15.6.1. Imprimindo
Nesse caso devemos fazer algumas considerações: você deverá definir no modulo de
desenho: a impressora, tamanho da página (A4, carta, etc.), margens, etc. Abaixo segue um
exemplo de código para imprimir o relatório que acabamos de criar.
Private Sub Command1_Click()
With CrystalReport1
'define o camino do relatório, podendo ser App.Path &
"\nomedorelatório.rpt"
.ReportFileName = App.Path & "\tut_test.rpt"
'especifica qual o campo irá ordenar os dados no relatório
.SortFields(0) = "+{tbcadastro.nome}"
'enviar os dados do aplicativo para a fórmula aplicativo do relatório
.Formulas(0) = "Aplicativo='" & App.Title & " v" & App.Major & "." &
App.Minor & " Copyright" & App.LegalCopyright & "'"
'define o destino do relatório
.Destination = crptToPrint
'aciona o mecanismo de destino escolhido
.Action = 1
End With
End Sub
Código 52. Código para impressão direta do relatório sem visualização prévia no Crystal Reports.
15.6.2. Visualizando
A visualização de um relatório possui algumas vantagens em relação à impressão ditreta,
pois possibilita o usuário além de visualizá-lo, como também imprimi-lo e/ou exporta-lo com
arquivo suportados pelo CrystalReport (HTML, RTF, WinWord, CSS, Lotus 1-2-3, Excel, etc.) e/ou
envia-lo por e-mail.
Na janela de visualização do relatório, veremos uma barra de ferramentas alinhada da base
da janela que posui os seguintes botões como a ordem que segue: voltar para a primeira página;
retornar uma página; avançar uma página; avançar para a última página; Cancelar uma operação,
Microsoft Visual Basic – Gerando relatórios com o Crystal Reports 109
zoom do relatórios, imprimir relatórios, exportar relatorio para arquivo; exportar arquivo como
anexo ao e-mail e fechar janela de visualização.
With CrystalReport1
'define o camino do relatório, podendo ser App.Path &
"\nomedorelatório.rpt"
.ReportFileName = App.Path & "\tut_test.rpt"
'especifica qual o campo irá ordenar os dados no relatório
.SortFields(0) = "+{tbcadastro.nome}"
'enviar os dados do aplicativo para a fórmula aplicativo do relatório
.Formulas(0) = "Aplicativo='" & App.Title & " v" & App.Major & "." &
App.Minor & " Copyright" & App.LegalCopyright & "'"
'define o destino do relatório
.Destination = crptToFile
'define o tipo de arquivo a ser exportado (WinWord no exemplo)
.PrintFileType = crptWinWord
'aciona o mecanismo de destino escolhido
.Action = 1
End With
End Sub
Código 54. Código para exportar um arquivo no formato do Word.
15.6.3.2. Enviando um relatório em anexo por e-mail24
O código abaixo não permite a visualização da mensagem pelo usuário do programa ela é
especificada em design-time (tempos de construção do aplicativo) e é prontamente enviada pelo
editor de e-mail padrão do computador.
Private Sub Command1_Click()
With CrystalReport1
'define o camino do relatório, podendo setr App.Path &
"\nomedorelatório.rpt"
.ReportFileName = App.Path & "\tut_test.rpt"
'especifica qual o campo irá ordenar os dados no relatório
.SortFields(0) = "+{tbcadastro.nome}"
'enviar os dados do aplicativo para a fórmula aplicativo do relatório
.Formulas(0) = "Aplicativo='" & App.Title & " v" & App.Major & "." &
App.Minor & " Copyright" & App.LegalCopyright & "'"
'define o destino do relatório
.Destination = crptMapi
'define o tipo de arquivo a ser enviado em anexo
.PrintFileType = crptWinWord
'define o e-mail ou nome do destinatário da ista de endereços do editor
de e-mail
.EMailToList = "saclizarosoft@hotmail.com"
'especifica o texto que deverá compor o corpo da mensagem
.EMailMessage = "Prezado Senhor," & vbCrLf & _
"Estamos enviando em anexo o relatório de cadastro do programa:" &
vbCrLf & _
"Relatório do programa Lizaro Administer" & vbCrLf & _
"Atenciosamente," & vbCrLf & _
"William Costa Rodrigues"
'define o assunto da mensagem
.EMailSubject = "Relatório de cadastro"
'aciona o mecanismo de destino escolhido
.Action = 1
End With
End Sub
24
É necessário conexão com a Internet, para envio de e-mails.
Microsoft Visual Basic – Gerando relatórios com o Crystal Reports 111
15.7.4. Fazendo com que a janela de impressão do Crystal Reports fique como filha
(MDIChild) de um MDI?
Insira o objeto Crystal Report no MDI Form e altere a propriedade ReportFileName para o
caminho do seu relatório.
No evento Activate do seu MDIForm, utilize a seguinte rotina:
Private Sub MDIForm_Activate()
CrystalReport1.WindowParentHandle = MDIForm1.hWnd
CrystalReport1.WindowState = 2 'Abre o relatório em formato
maximizado
CrystalReport1.Action = 1
End Sub
25
Exemplos retirados do programa Lizaro Visual Basic Dicas v3.0
112 Desvendando a linguagem de programação mais popular do mundo – W.C. Rodrigues
15.7.7. Outra forma de especificar a senha do banco de dados utilizado pelo relatório.
Altere a propriedade Connect, do objeto Crystal para algo como a
expressão abaixo:
CrystalReport1.Connect = App.Path & "\DataBase.mdb", False, False,
";PWD=senha"
Microsoft Visual Basic – Criando um ActiveX 113
Enum HLPConst
HELP_CONTEXT = &H1 'Exibe o tópico de ajuda pelo Número ID
HELP_HELPONHELP = &H4 'Exibe a ajuda do Windows de como utilizar
ajuda
HELP_INDEX = &H3 'Exibe o CONTEUDO da Ajuda
HELP_QUIT = &H2 'Termina a ajuda
HELP_MULTIKEY = &H201& 'Procura por palavras-chave na tabela
alternativa da ajuda
HELP_KEY = &H101 'Exibe o Índice da Ajuda
End Enum
'especifica a constante a ser utilizada pela API para exibir o arquivo de
ajuda
Dim m_AjudaHLP As HLPConst
cmdCtl.TOp = 0
cmdCtl.Left = 0
End Sub
26
Código retirado do ActiveX Lizaro HelpOCX v1.00.0007 disponível em www.lizarosoft.cjb.net
114 Desvendando a linguagem de programação mais popular do mundo – W.C. Rodrigues