ࡱ>  DIbjbjM]22228jnT2`w/w/w/IKKKKKK Kw/*w/w/w/K}}}}w/MI22w/I}j}=R7X I@O+22o}d+FEPESMIG/UEMG FENVA 1999 Visual Basic 5.0 Computao Digital Prof. Hlio Lemes Costa Jr. Aluno:___________________________ NDICE Histrico do VB . . . . . . . .3 Novidades do VB5 . . . . . . .4 O Que o VB? . . . . . . . .8 Rodando o VB5 . . . . . . . .9 A ToolBox do VB . . . . . . . .15 A Janela de Projeto . . . . . . .17 A Janela de Propriedades . . . . . .17 A Janela do Form . . . . . . .18 Passo-a-Passo para a Criao de uma Aplicao19 A Janela de Cgido . . . . . . .21 Criao de Menus . . . . . . .22 Principais Controles do VB5 . . . . .25 Eventos Comuns . . . . . . . .27 Propriedades Gerais . . . . . . .28 Variveis . . . . . . . . .31 Constantes . . . . . . . . .33 Escopo . . . . . . . . . .35 Estruturas e Loops . . . . . . .38 Subprocedimentos e Funes . . . . .41 Depurao do Cdigo . . . . . . .45 Criando Base de Dados via Data Manager . .46 Dicas e Macetes . . . . . . . .47 Comandos e funes do VB . . . . . .55 Agradecimentos . . . . . . . .78 Bibliografia . . . . . . . . .79 HISTRICO O BASIC em 1963 para os mainframes (computadores de grande porte) e foi adaptado na dcada de 70 para os primeiros microcomputadores. A adaptao do BASIC para micros foi o pontap inicial na carreira de Bill Gates, quando largou a faculdade com um amigo para fundar a MICROSOFT e fazer em duas semanas um interpretador para o BASIC, primeiro produto a ser comercializado pela Microsoft. Por esta empreitada conseguiu que a IBM, que estava lanando o seu PC e no esperava tanto sucesso, a permisso para fazer o sistema operacional deste computador, o MS-DOS, que marcou o incio do monoplio da Microsoft. No Brasil, muita gente entrou em contato com a linguagem BASIC na dcada de 80 com os finados computadores Apple, MSX, TK90, TK2000 e CP500, que a utilizavam como linguagem de programao residente; ou seja, a linguagem j vinha gravada no hardware do microcomputador. Quando o Windows se tornou padro, pensava-se que a programao para este ambiente s seria possvel com linguagens como C, sendo impossvel alguma pessoa com pouca experincia fazer um programa por mais simples que fosse. Foi a que surgiu o Visual Basic, com um novo BASIC, no mais aquele confuso, mas uma linguagem estruturada e bem mais poderosa. Tornou-se a linguagem mais utilizada em todo o mundo, sendo considerada uma das causas do sucesso do Windows. Hoje (1999) temos em torno de 3,5 milhes de desenvolvedores de Visual BASIC. O VB foi criado originalmente em 1987 por Alan Cooper (atravs de um programa com nome Ruby, que unido ao Quick BASIC deu origem ao Visual BASIC). Foi lanado em 1991 com a verso 1.0. Em outubro de 1992 veio a verso 2.0. Est atualmente (1999) na verso 6.0. OBJETIVO DO DESENVOLVIMENTO DE SOFTWARE Gerar solues em tecnologia de informao para que empresas fiquem mais organizadas, produtivas e competitivas e para que usurios trabalhem menos e com mais comodidade e prazer. Como tambm desenvolver solues que venham ajudar nas mais diversas reas que afetam indivduos: educao, lazer, cultura, etc. NOVIDADES DO VB 5.0 Novas construes de linguagem (For... Each ou With... End With); Public substitudo por Global; Standard EXE (Abre EXE com Forms, Mdulos, etc.); - ActiveX: EXE, DLL e Control (ActiveX construtor de servidores OLE); Controles customizados agora podem ser produzidos no VB e utilizados em qualquer programa para Windows que os aceite; Propriedade de Formulrio StartUp Position (podemos centralizar com ela o form); Todas as janelas agora esto integradas em uma s (podendo ser separadas como antes); A Caixa de Ferramentas (ToolBox) pode agora receber outras Abas (Tabs), basta clicar com o boto direito sobre a ToolBox Components para adicionar; Pode abrir mais de um projeto por vez (File Add Project); A janela Propertie agora pode ser listada por ordem alfabtica ou por categoria (como no Access); Layout do Formulrio Preview do Form; EDIO DE CDIGO: AutoList Members (opo para exibir lista de Mtodos e properties ao escrevermos o nome de um objeto; Source Safe; Auto Quick Info (ao escrever nomes de funes aparecem seus parmetros); Auto Data Tips (ao debugar v valor da varivel onde est o cursor); Drag-and-Drop Text Editing (copiar ou mover parte do Cdigo selecionado. Ctrl para copiar); Barras de Edio (Boto direito sobre as barras de ferramentas); Replace All (cuidado, fazer com muita ateno); - Compila realmente (coloca para cdigo mquina: Menu Project Project Propertie Compile); existem sete tipos de compilao, alm de ainda poderem ser gerado os velhos p-codes. At o VB4, na janela Make EXE File, no restava nada mais a ser feito do que clicar o boto OK, agora voc pode "regular" o executvel, como: * produza um compilado o mais rpido possvel, embora fique de tamanho maior; * produza um compilado de tamanho menor, embora fique mais lento; * produza um compilado que explore melhor o processador Pentium; * etc. Num teste feito na verso beta, o executvel compilado concluiu um clculo em 2 segundos, enquanto o interpretado levou um minuto. Mas a coisa no sempre assim. Executvel menor e programa mais rpido; Gera Cdigo apenas em 32 BITs (diferente do 4.0); Novos tipos de dados: Object, Byte, Variant Decimal, entre outros. OUTRAS NOVIDADES: - O editor de Cdigo, aquela janela onde voc escreve o programa, ficou inteligente, quando voc comea a escrever um comando, ele j mostra a sintaxe e escreve para voc (basta clicar), no preciso mais ver a ajuda; - Wizards que ajudam voc a fazer o programa. Por exemplo, todo editor de texto tem uma janela principal com os menus arquivo, novo, abrir, salvar... toolbar com a figura da pasta aberta para abrir, figura do disquete para salvar, uma janela de ajuda, etc. Com o wizard, voc seleciona um tipo de programa que o VB 5.0 gera as janelas, menus, botes, toolbars que so comuns a aquele tipo de aplicao, cabendo ao programador a alterar a interface segundo as suas necessidades e escrever o Cdigo. Acessados ao abrir o VB5. - Criao de OCXs para a Internet; do mesmo modo que um programador de Java pode fazer uma applet, o programador de VB pode fazer sua OCX que rode numa pgina HTML, so estes os chamados controles ActiveX, que s podiam ser feitos em C ou Java. - Voc no vai mais precisar aprender Java para poder criar uma home page interativa, porque com o VB 5, que tem os controles TCP/IP do Internet Control Pack, seus programas vo poder ser rodados dentro do Internet Explorer. - Controles para INTERNET: Internet Transfer Control Winsock e WebBrowser nica propriedade: MDIChild = False FAZER DOWNLOAD (RECEBER ARQUIVO VIA INTERNET): Inet1.Execute  HYPERLINK "FTP://ftp.microsoft.com" FTP://ftp.microsoft.com,GET disclaimer.txt c:\windows\temp\disclaimer.txt FAZER UPLOAD (ENVIAR ARQUIVO VIA INTERNET): Inet1.Execute  HYPERLINK "FTP://ftp.microsoft.com" FTP://ftp.microsoft.com,PUT riba.txt c:\windows\temp\riba.txt - Suporte a vrios padres grficos, como jpg, gif, gif animado, pcx, tif e grficos 3D. - Interface drag n' drop. - Suporte a mltiplos DBEngines. - Suporte a vrios resource files. - Suporte a polimorfismo. - Suporte a um tipo especial de herana. OUTRAS INFORMAES: Ainda ser preciso a runtime vbrun500.dll S vo poder ser gerados programas 32-bit. No menu New Project agora existem vrias opes, alm disso, permitido trabalhar com vrios projetos ao mesmo tempo, isto quer dizer que possvel fazer um OCX enquanto ao mesmo tempo ele pode estar sendo testado em outro projeto ao mesmo tempo. A Microsoft j disponibilizou o VB5 Control Creation Edition para download gratuito no seu site, que uma edio "light" do VB5 e no gera executvel. O tamanho aproximadamente 6 MB, para quem tem um acesso rpido vale a pena. Entre outras opes, a segunda verso do Visual BASIC para Windows 95, destacam-se aquelas referentes criao de arquivos DLL e OCX, que so bibliotecas de comandos e ferramentas voltadas para o Visual BASIC, a ferramenta de criao de formulrios referentes banco de dados, a nova interface, que permite que se trabalhe em mais de um projeto ao mesmo tempo e muitas opes que permitem a reciclagem de Cdigo, diminuindo o trabalho do programador. Quanto a criao de DLL e OCX, este trabalho foi muito facilitado, uma vez que nas verses anteriores, era necessrio se trabalhar com linguagens como o Visual C++ e o Delphi. Agora, existe um Mdulo que compila o Cdigo fonte para DLL ou OCX. Uma das grandes deficincias apontadas por programadores experientes era a dificuldade de se gerar um formulrio no estilo Access para o Visual BASIC. Era necessrio muito trabalho de interligao entre a tabela Access e os objetos Visual BASIC. Agora, existe um Wizard (assistente) que facilita e muito esta tarefa. Na interface, houve sensveis mudanas, com o uso de vrios projetos ao mesmo tempo, o que torna a interao entre os projetos muito mais rpida. Neste sentido, a janela de propriedades, velha conhecida de qualquer programador em Visual BASIC, foi remodelada, apresentando as propriedades em ordem alfabtica, como nas verses anteriores, ou na verso por categorias, deixando agrupadas propriedades de layout, de dados, etc., como no Microsoft Access, por exemplo. Aproveitando o assunto de vrios projetos ao mesmo tempo, uma das melhores vantagens do Visual BASIC 5.0 foi a interligao entre os projetos: caso um form que esteja sendo usado por mais de um projeto seja alterado, o Visual BASIC avisar ao usurio dessa alterao e de que possivelmente poder haver erro em algum projeto, uma vez que as propriedades no se cruzaro corretamente. CONHECIMENTO EXIGIDO PARA APRENDIZADO Normalmente, quando algum pensa em fazer um programa para computador, j um usurio com certa experincia. De programao mesmo, no preciso saber nada (se bem que quem j sabe BASIC ter muito mais facilidade). O conhecimento do ingls (mesmo que superficial) seria interessante, pois os comandos do VB so derivados desta lngua e o help do VB (muito bom, por sinal) todo em ingls. (Palavras emprestadas de uma pgina da INTERNET no Brasil (do programador em VB, Leandro Motta Barros, de quem tive ajuda substancial para esta apostila). O QUE O VISUAL BASIC? uma linguagem de programao Visual orientada a objetos (a partir da verso 4.0). At a verso 3.0 ele era orientado a Eventos. Aquela primeira frase quer dizer mais ou menos que com o VB possvel fazer programas para Windows utilizando programao orientada a objetos (OOP). O que so objetos? Objetos so coisas definidas por CLASSES e que possuem propriedades, Mtodos e Eventos. Uma janela, um boto e um banco de dados so objetos. Mas para entender bem o que um objetos ainda preciso definir as tais das propriedades, dos Mtodos e dos Eventos: Comecemos pelas Classes. Uma janela muito diferente de um boto, mas os dois so objetos. Isso acontece porque eles so definidos por Classes diferentes. Classes definem um objeto a grosso modo. Definem suas propriedades, seus Mtodos e seus Eventos. Classes so os moldes dos objetos. Um boto pode ser diferente do outro (maior ou menor, com uma legenda diferente...). Mas como isso possvel se eles pertencem mesma classe? Porque suas propriedades so diferentes. As propriedades definem caractersticas mais especficas dos objetos. Um boto tem, por exemplo, propriedades que determinam sua altura, sua largura e sua legenda. Um Mtodo uma coisa, uma funo, uma ao que age sobre um objeto. Por exemplo, se tivermos uma lista (tipo as listas de tpicos no "procurar" da ajuda do Windows), adicionamos ou removemos itens atravs de Mtodos. Ou ainda, se quisermos mover um certo objeto pela tela, poderamos usar um Mtodo. Por fim, o Evento. Digamos que em um certo programa, pressionamos um boto e um Beep emitido. Como o programa sabe quando apertamos o boto? Ele sabe porque quando um objeto da classe boto clicado, gerado um Evento. E a esse Evento que est associado o Cdigo (comandos) que produzir o beep. Ocorrem tambm Eventos, por exemplo, ao modificarmos o texto de uma caixa de texto ou ao mover o cursor do mouse sobre uma janela. S para ficar mais claro, um exemplo no muito nobre: digamos que haja uma classe "Galinha". Um objeto Galinha poderia ter a propriedade "Idade", uma propriedade "CorDasPenas" e uma propriedade "Nome". Ela teria um Mtodo "PoeOvo" e um Mtodo "Cacareja". E ela geraria Eventos ao dormir ao acordar e ao ser ameaada. RODANDO O VB 5.0 Basta clicar em Iniciar Programas Visual BASIC 5.0.  Observamos que o Grupo do VB 5.0 tem cinco itens: 1)API Text Viewer  Onde podemos visualizar as APIs do Windows: suas constantes, declaraes e tipos de dados. O mais importante desse utilitrio que podemos selecionar qualquer parte daqui e copiar e colar no Cdigo do projeto do VB. 2) O segundo item o Aplication Setup Wizard Este utilitrio o Assistente responsvel pela gerao dos discos (disquete ou Cd) instaladores do programa desenvolvido no VB. Tambm chega a gerar o executvel, se assim o desejemos. 3) Crystal Report o gerador de relatrios do VB. Desenvolvido pela Seagate (a mesma dos HDs) ele agiliza o desenvolvimento de relatrios, tornando essa tarefa menos trabalhosa que sua construo atravs de Cdigo. Pode estar no Grupo do VB ou no, depende da instalao (no nosso caso no foi instalado).  Books Online So arquivos de Help existentes no CD de instalao e que podem ser Instalados ou no no disco rgido e consultados atravs deste item. 4) Readme, arquivo de Help que traz inmeras informaes importantes:  5) O quinto item o prprio VB 5.0, que ao ser ativado abre a janela abaixo, onde devemos escolher o tipo de projeto que desejamos criar, abrir um existente ou os mais recentes:  Aps escolher a opo padro Standard EXE aparece a tela abaixo, que o ambiente de programao do Visual Basic 5.0:  Todas as janelas acima (Principal, ToolBox, Projeto, Propriedades e Formulrio) so exibidas por default. * Toolbox - Providencia um conjunto de ferramentas que voc usa durante o projeto para colocar controles dentro de seu form (janela de interface com o usurio). * Menu Bar - Mostra os comandos usados para construir a sua aplicao. * Form - a janela na qual voc ir construir a interface da sua aplicao. No form voc ir adicionar controles , grficos , figuras que iro criar a aparncia final da sua aplicao. Project Window - Lista os forms , Mdulos de Cdigo. * Properties Window - Lista as propriedades existentes para um form ou outro controle selecionado. Uma property (propriedade) um valor ou caracterstica associada a um objeto tais como tamanho , caption ou cor. A TOOLBOX DO VB5:  B) Agora a fora do VB, a janela TOOLBOX (Caixa de Ferramentas) - a janela que traz os Controles (as ferramentas no VB)  - Pointer No um Controle, mas uma ferramenta que serve para mover e dimensionar Controles; - PictureBox Exibir figuras ou cones nos Formulrios. Tambm responde ao Evento click. - Label Etiqueta ou rtulo, exibe um texto que no pode ser editado pelo usurio. Uso: Ttulos. - TextBox Exibe uma rea onde o usurio pode digitar texto. - Frame Moldura para agrupar Controles para que funcionem de forma lgica. - CommandButton Boto de Comando. Executa ao ao ser clicado. - CheckBox Pode assumir valores falso ou verdadeiro. Em um mesmo Formulrio vrios CheckBoxes podem assumir o valor verdadeiro ao mesmo tempo. - OptionButton Pode tambm assumir valores falso/verdadeiro, mas em um mesmo Formulrio somente um OptionButton pode assumir o valor verdadeiro. - ComboBox Combina caixa de texto com caixa de listagem. O usurio pode digitar a informao como tambm pode encolher da lista. - ListBox Exibe uma lista de itens que o usurio pode selecionar. - ScrollBar Horizontal e Vertical Permite selecionar com o mouse um determinado valor numa faixa de valores. - Timer Controla intervalos de tempo determinados pelo programador.  - DriveListBox Exibe uma lista de drives onde o usurio pode selecionar um. - DirListBox Exibe uma lista de diretrios (pastas) e permite que o usurio selecione um. - FileListBox Idem para arquivos. - Shape Adiciona diversas formas geomtricas ao Formulrio. - Line Adiciona linhas a Formulrios. - Image Exibe figuras ou cones e funciona como um CommandButton quando clicado. - Data o DataControl, que permite conectar-se a um Banco de Dados existente para extrair manipular as informaes contidas neste. OLE Incorpora objetos de outros aplicativos em um Formulrio. - CommonDialog Exibe um conjunto de caixas de dilogo comuns no Windows, abrir arquivo, imprimir, fontes, salvar, etc. - ToolBar Contem uma coleo de Botes e utilizado para criar Barras de Ferramentas que esto associadas com uma aplicao. - StatusBar Cria uma Barra de Status para um programa com at 16 painis contidos em uma coleo de painis.  ProgessBar Barra que indica o progresso de uma operao. - ImageList Contm uma coleo de objetos ListImage. Para exibir imagens.  - DBList Automaticamente preenche uma lista com campos de um DataControl e opcionalmente passa o campo selecionado para um segundo DataControl. O DBCombo similar mas permite editar o campo selecionado. - DBGrid Exibe e manipula uma srie de linhas e colunas representando Registros e Campos de um objeto Recordset. C) A JANELA DE PROJETO As caractersticas do ambiente Windows (interface grfica, janelas, objetos, Eventos, mouse, cones, botes, etc.) so trabalhadas no Visual BASIC. O ponto de partida do para o desenvolvimento do Visual BASIC uma janela o Formulrio. Realmente uma janela a interface entre o programa e o usurio. Ela interage com o usurio. Um PROJETO um conjunto de arquivos que compem a aplicao. Estes arquivos que compem a aplicao podem ser visualizados na janela Projeto do VB (Project Window). Esta a do VB4  Formulrio contem Um Mdulo Class contm as defi- A descrio e o cdi- nies caractersticas de uma Clas- go associado a este. se incluindo suas propriedades e Mtodos. Um Mdulo padro contm declaraes e Um arquivo Resource pode conter procedures. todos os Bitmaps, strings e outros dados de um projeto. Esta a do VB5  Para poder compartilhar Cdigo em todo o projeto deve-se colocar este Cdigo em um Mdulo e declarar a Procedure como Global. O ambiente de programao do Visual BASIC provm inmeras ferramentas para auxiliar no desenvolvimento de aplicaes grficas: Formulrios, Caixa de Ferramentas (Controles), Paleta de Cores, Propriedades, Eventos predefinidos, Janela de Mdulo interativa e com help on-line, Object Browser, API Viewer, Setup Wizard, etc. D) A JANELA DE PROPRIEDADES Esta do VB4   Esta uma janela muito til (economiza muitas linhas de Cdigo e a cada verso vem mais rica. Todas estas propriedades indicadas (nome, cor de frente, cor de fundo, ttulo, aparncia, caixa de controle, habilitada, etc.) so referentes a um objeto, cujo nome aparece na Barra de ttulos da janela (Form1 no caso da janela ao lado). Esta a janela de Propriedades do VB5: Form Layout (Visualiza- o do Projeto)  E) JANELA DO FORMULRIO  O Formulrio o principal objeto do VB, a janela que forma a interface com o usurio. Contm botes, menus, figuras, etc. Suas Propriedades principais so: BackColor, BorderStyle, Caption, ControlBox, Max e MinButton, Enabled, Height e Width, Icon, MousePointers, Top,StartUp Position, Visible e WindowState (0-Normal, 1-Minimizada e 2-Maximizada). CRIANDO APLICAES * Diferena entre uma Aplicao Tradicional e outra Event-Driven ou seja ativada por Eventos ou Orientada a Objetos. Em uma aplicao tradicional ou programada de forma procedural , a aplicao por si s controla que pores do Cdigo sero executadas. A execuo comea na primeira linha de Cdigo e segue um caminho pr-definido atravs de toda a aplicao , chamando subrotinas conforme for sendo necessrio. Em uma aplicao controlada por Eventos ou event-driven , uma ao do usurio ou do sistema , ativa um procedimento associado a este Evento. Assim a ordem atravs do qual o seu Cdigo de programa executado depende de quais Eventos ocorram , que por sua vez estes Eventos dependem das aes tomadas pelo usurio. Esta a essncia das Interfaces Grficas e da Programao Ativada por Eventos. PASSOS PARA A CRIAO DE UMA APLICAO: A. Criar a interface B. Setar as propriedades dos controles C. Escrever o Cdigo A. CRIAR A INTERFACE. O primeiro passo na construo de uma aplicao Visual BASIC desenhar os objetos que iro compor a interface. Para inserir o controle no seu form: 1. Clique no boto do controle dentro da toolbox. 2. Mova a seta do mouse para dentro da rea do form , a seta vira uma cruz. 3. Ponha a cruz no ponto dentro do form onde ir ficar o canto superior esquerdo do controle escolhido 4. Arraste a cruz at que o controle fique do tamanho desejado (arrastar significa apertar o boto esquerdo do mouse e mante-lo apertado enquanto o objeto movido com a mudana de posio do mouse) 5. Solte o boto do mouse e o controle aparecer no form. Caso voc d um duplo clique num Controle da ToolBox ele ser desenhado automaticamente em tamanho padro e no centro do Form. B. SETAR AS PROPRIEDADES DOS CONTROLES Propriedades so caractersticas que um objeto pode ter. Existem as comuns (p.e.: name) e as particulares a cada objeto. O prximo passo setar ( colocar valores de inicializao ) as propriedades dos objetos que voc criou. A janela Properties proporciona uma maneira fcil de inicializar as propriedades para todos os objetos do form . Para abrir a janela de propriedades , escolha o comando Properties Window no menu View ou ento clique no boto Properties na Barra de Ferramentas ( Toolbar ) ou tecle F4. OBJECT BOX - Mostra o nome do objeto selecionado. Clique a seta a direita do box para selecionar o form ou nome de controle a partir da lista de objetos presentes no form atual. SETTINGS BOX - Permite que voc edite a inicializao da propriedade selecionada na lista de propriedades. Algumas inicializaes podem ser trocadas clicando-se na seta sublinhada existente a direita do box ; ser mostrada ento uma lista de opes . Voc poder clicar em um item da lista para seleciona-lo. LISTA DE PROPRIEDADES - A coluna esquerda mostra todas as propriedades para um objeto selecionado, a coluna da direita mostra a inicializao atual para cada uma das propriedades. C. ESCREVER O CDIGO. MDULOS so objetos que contm cdigo de programao (procedures, variveis, constantes, tipos de dados, etc). A janela de Cdigo o local onde voc escreve o Cdigo Visual BASIC para a sua aplicao. Cdigo consiste em sentenas da linguagem , constantes e declaraes. Usando a janela de Cdigo ( Code Window ) , voc pode rapidamente ver e editar qualquer parte do seu Cdigo dentro de sua aplicao. Para abrir a janela de Cdigo voc deve clicar duas vezes no form ou no controle para o qual voc deseja escrever Cdigo ou ento a partir da janela Project , selecione o nome do form e clique no boto View Code. JANELA DE CDIGO (Code Window)  A janela de Cdigo ( Code Window ) contm os seguintes elementos : Object Box (Object) - Mostra o nome do objeto selecionado. Clique na seta a direita para mostrar a lista de todos os objetos associados a este form. Procedures List Box (Proc) - Lista os procedimentos existentes para um objeto. O box mostra o nome do procedimento selecionado - no exemplo acima Click . Clique na seta a direita do box para mostrar todos os procedimentos associados a este objeto. O CDIGO ( ou programa) em uma aplicao Visual BASIC dividido em pequenos blocos chamados procedures (procedimentos). Um event procedure ( procedimento associado a um Evento ) contm Cdigo que executado quando um Evento ocorre ( como por exemplo quando o usurio clica em um boto) . Cada controle tem uma parte do cdigo associada a si. Existem controles que tem apenas propriedades sem a necessidade de cdigo (acontece muito com os Labels), sem qualquer cdigo CRIANDO UM EVENT PROCEDURE: 1. No Object box , selecione o nome do objeto no form ativo ( form que atualmente tem o foco) 2. Na Procedure List box , selecione o nome do Evento desejado. No exemplo acima a procedure Click j estava selecionada, j que ela a procedure default para o boto de comando. Note que uma mscara (template) para a escrita do Cdigo para este Evento est sendo mostrada na janela de Cdigo 3. Digite o Cdigo desejado entre as sentenas Private Sub e End Sub e a procedure se parecer com o texto abaixo. Private Sub Command1_Click ( ) Text1.text = "Hello World!" End Sub CRIAO DE MENUS Menus so criados usando a janela Menu Design. Voc adiciona itens ao menu em tempo de projeto pela criao de controles de menu e setando propriedades que definiro sua aparncia. EDITOR DE MENUS (Menu Design) Para a criao de um Menu devemos ir ao menu Tools Menu Editor ou teclar Ctrl+E. Comeamos digitando o Ttulo (em Caption) do Menu mais esquerda. Caso desejemos acessar esse menu via Alt e a letra grifada devemos inserir o & antes da letra que ser grifada. No exemplo abaixo: &TesteMenu (que aparecer como TesteMenu); Depois digitamos o nome (em Name) do Menu para referncia em Cdigo; Os outros itens no so obrigatrios; Clicar em Next para entrar um novo Menu ou item de Menu. Caso seja um item de Menu devemos clicar na seta para a direita quando aparecero trs pontinhos a esquerda do ttulo do item que ficar abaixo do nome do Menu. Os Menus e os itens de Menus podem ser referenciados em Cdigo atravs do Evento Click, que deve ser feito no Formulrio aps teclarmos em OK.  4 - CONECTANDO FORMULRIOS A adio de novos formulrios na sua aplicao feito atravs da opo File na barra de menu , comando New Form ou clicando no Boto Form. Comandos para controle do form : Comando Ao Load form Carrega o form mas o deixa invisvel Form.Show [modo] Mostra o form se ele estiver invisvel, se ele no estiver carrega ento ele primeiro carrega o form e depois o mostra , estilo refere-se a se o form que fez a carga do prximo form , fica parado at a desativao do novo form (modo =0 ou modeless) ou se continua a sua execuo sem se importar com o prximo form (modo=1 ou modal) Unload form O form descarregado da memria e a sua execuo encerrada CONTROLES, MTODOS, EVENTOS E PROPRIEDADES PRINCIPAIS CONTROLES DO VB5  CommandButton (Boto de Comando) um dos Controles mais utilizados em programas do Windows, no apenas em VB. Sua funo principal executar comandos quando clicado. O Evento Click o mais importante para ele. As Propriedades Caption, Name, Enabled so importantes entre outras. A propriedade Enabled indica se o boto responder ao Evento Click ou no.  PictureBox (Caixa de Imagem) - Este Controle utilizado para exibir figuras nos Formulrios e tambm responde ao Evento Click. A propriedade Picture a que abre a caixa de dilogo para indicarmos o path do cone ou da figura que queremos exibir.  Label (Etiqueta ou Rtulo) Exibir um texto onde o usurio no possa alterar. Sua propriedade principal a Caption (que o texto que o Controle exibir). Outras Propriedades de formatao do texto: FontName, FontBold, Alignment, etc.  TextBox (Caixa de Texto) Exibir um texto onde o usurio possa editar. Sua propriedade principal o Text (que o texto que o Controle contem). As Propriedades de formatao do texto so idnticas ao Label.  CheckBox (Caixa de Verificao) til quando necessitamos informar ao sistema que determinadas informaes so verdadeiras ou falsas. Em um mesmo Formulrio vrios CheckBoxs podem assumir o valor verdadeiro ao mesmo tempo. Algumas Propriedades: Visible, Enabled e Caption.  OptionButton (Boto de Opo ou boto de rdio) Com este Controle somente uma das opes pode assumir o valor verdadeiro em um mesmo conjunto. Para Ter mais de um conjunto verdadeiro temos que utilizar o Controle Frame.  ListBox (Caixa de Listagem) Exibir e selecionar uma lista de itens. As Propriedades ListCount e ListIndex so utilizadas para identificar os itens da lista. Os Mtodos AddItem e RemoveItem so utilizados para adicionar e remover itens.  ComboBox (Caixa de Combinao) Combinao de uma TextBox com uma ListBox. Pode-se editar um texto na parte superior ou selecionar um item da lista. Propriedades idnticas as da ListBox.  ScrollBar (Barra de Rolagem) Vertical e Horizontal - Estes controles assumem valos mximos ou mnimos de acordo com as propriedades Max e Min, respectivamente. Estes controles podem receber um deslocamento pequeno (propriedade SmallChange), que ocorre quando se clica nas setas e um deslocamento grande (propriedade LangeChange), que ocorre quando se clica na barra. O controle recebe o valor da posio atual.  Timer (Temporizador) til para se controlar intervalos de tempo. Evento mais importante o Timer e a propriedade mais importante o Interval (que determina em milisegundos o intervalo de tempo d controle).  Shape (Formas Geomtricas) Adiciona figuras geomtricas aos Formulrios. Com a Propriedade Shape escolhemos o tipo de figura (forma). Outras Propriedades BorderColor, BorderStyle e BackColor.  Line (Linha) Adicionar linhas geomtricas a formulrios. Propriedades BorderColor, BorderWidth, BorderStyle, X1, X2, Y1 e Y2.  Image (Imagem) Exibe cones ou figuras e tambm responde ao Evento Click. Diferentemente do Controle Picture este controle tem a Propriedade Stretch que ajusta o tamanho da imagem para preencher a moldura.  Data Control Conectar-se a um Banco de Dados para extrair e manipular informaes deste BD. Propriedades mais importantes DatabaseName e RecordSource. Controles como TextBox podem ser vinculados a um DataControl atravs das Propriedades DataField e DataSource.  DBList Automaticamente preenche uma lista com campos de um DataControl e opcionalmente passa o campo selecionado para um segundo DataControl. DBCombo similar mas permite editar o campo selecionado. Propriedades importantes: DataField, DataSource, BoundColumn e RowSource.  OLE Incorpora e aninha objetos de outros aplicativos em um formulrio. As Propriedades Class, OLETypeAllowed e SourceDoc definem o objeto. EVENTOS COMUNS O Visual BASIC apresenta alguns Eventos de objetos que so usados freqentemente, e se apresentam na maior parte dos objetos de um form. Abaixo segue uma relao dos principais e suas respectivas funes: Click: um Evento que executa determinadas aes especificadas pelo programador quando algum clica sobre alguma coisa. Dblclick: Executa determinadas aes especificadas pelo programador quando algum clica duas vezes sobre algum objeto. Resize: executa algum comando pr estabelecido quando o usurio redimensiona o form. Load: executa ordens sempre que o programa for carregado na memria. Gotfocus: quando um objeto, um boto por exemplo, apenas ganha o foco, sem executar as suas funes em outros Eventos. Lostfocus: quando o foco passa para um outro objeto. Quando um objeto perde o foco. Keypress: quando pressionada alguma tecla, geralmente em caixas de texto, so acionados determinados comandos. Mousemove: sempre que se move o ponteiro do mouse, algo ser ativado. Um exemplo prtico, so os protetores de tela, que so desativados quando mexemos o mouse. PROPRIEDADES GERAIS As principais propriedades dos objetos do Visual BASIC, que esto presentes em praticamente todos os objetos do Visual BASIC, so as seguintes: Caption - Nos botes, form, e frames, altera o seu ttulo a ser exibido no form. Enabled - Presente em todos os objetos, permite que os objetos sejam acessados, caso ela esteja definida como False. Visible - Torna o objeto invisvel caso esta propriedades esteja configurada como False. Font - presente em objetos como textbox, label, botes command e botes check e option. Permite que seja alterada a fonte de um objeto. Que agora no VB5 configura tudo sobre fonte. Name - altera o nome do objeto, para fins de referncia durante a programao. Forecolor, Backcolor - define a cor da fonte e do fundo de uma textbox e uma label, por exemplo. Propriedades do form: Height (altura do form), Weight (largura do form), Maxbutton (ativa ou desativa a presena do boto Maximizar), Minbutton (ativa ou desativa presena do boto Minimizar), Left (altera a distncia do form a partir da extrema esquerda do vdeo) e Top (altera a distncia do form a partir do topo do vdeo). Em geral, todas as propriedades dos objetos presentes no Visual BASIC so bastante intuitivas, no que se refere aos seus nomes. Isto pode ser notado claramente nas propriedades Visible, Enabled, Name, entre outras. Bem, j que sabendo o que so Classes, Propriedades, Mtodos, Eventos e Objetos, vamos us-los! Inicie o VB. Voc certamente j notou que o VB cria uma janela automaticamente. Bem, esta janela um objeto. Voc pode ver suas propriedades na janela "Properties" (se esta janela no estiver visvel, use o menu View / Properties ou a tecla F4). Na verdade nem todas as propriedades esto listadas. Note que a janela Properties tem, logo abaixo da barra de ttulo, uma "caixa de seleo" dizendo "Form1 Form". Esta caixa lista todos os objetos colocados na janela ativa. O texto em negrito "Form1" indica o nome do objeto. O texto ao lado, "Form", indica a classe qual pertence o objeto. Logo abaixo h a lista das propriedades. esquerda ficam os nomes das propriedades e a direita os seus respectivos valores. Note que no VB a janela chamada de Form (a partir de agora uma janela que voc criar ser chamada de Form). Ento, quer ver os Eventos que um Form possui? D-lhe um duplo clique. Abre-se uma janela de edio. Alis, em janelas como estas que o seu programa ser escrito. No topo desta janela h duas "caixas de seleo"; a primeira ("Object:") lista os objetos que esto na janela. A Segunda ( "Proc:"), lista todos os Eventos do objeto. Dando um duplo clique no form, a janela de edio se abrir. O Evento "Load" do Form estar selecionado. J haver 2 linhas includas: "Private Sub Form_Load()"e "End Sub". "Private" por default coisa do VB4 em diante. Aquela 1 linha inicia um subprocedimento; a Segunda termina o mesmo subprocedimento. Qualquer coisa que voc colocar entre aquelas duas linhas ser executado quando aquele form for carregado na memria (porque o Evento o Load-Carrega). EXEMPLO DE UM PROGRAMA Vamos fazer um programinha: voc clica em um boto e o ttulo da janela passa a ser "O Boto Foi Clicado"; d um duplo-clique no form e o boto se mover na tela. Como exemplo serve! A primeira coisa a fazer criar um boto. Para um boto de tamanho "normal", d um duplo-clique na ferramenta "CommandButton" na caixa de ferramentas (toolbox). Deixe o boto deste tamanho, no meio da tela. No VB cada objeto tem um nome; quando voc cria um controle (um objeto como um boto, uma barra de rolagem, etc.), o VB lhe d um nome "genrico" automaticamente. O nome do objeto uma propriedade. Vamos trocar o nome do boto para "MeuBoto" e o do form para "MinhaJanela". Clique em uma rea vazia do form e v para a janela das propriedades. Ache a propriedade "Name" e troque-a para "MinhaJanela". Da mesma forma, troque o Name do boto para "MeuBoto". Vamos agora trocar a legenda do boto para "Clique-me". Ache a propriedade "Caption" do boto e troque para "Clique-me". Essas propriedades que voc alterou foram alteradas durante o Design Time, ou seja, enquanto o programa estava sendo criado (e no executado). Voc j deve imaginar que para trocar o ttulo da janela deveramos trocar a sua propriedade "caption". Certo, mas isto s deve acontecer ao clicar o boto. D um duplo-clique no boto que voc criou (para abrir a janela de edio). O Cdigo (ou seja, os comandos) para trocar o caption do form dever ser colocado no Evento Click do boto; assim, estes comandos s sero executados quando o boto for clicado. Ao criar um controle, a propriedade que tem o foco a Caption, ou seja, logo que criamos um Label (p.e.) podemos imediatamente digitar seu Caption (mesmo que a janela de propriedades no esteja visvel). Para alterar uma propriedade durante o Run-Time (enquanto o programa executado), o VB usa a seguinte sintaxe: Objeto.Propriedade = NovoValor Ento para trocar o caption do form usaramos o seguinte Cdigo (note que o Evento o click): Private Sub MeuBoto_Click () MinhaJanela.Caption = "O Boto Foi Clicado" End Sub Veja bem: como o valor do caption um texto, deve estar entre aspas. Com isto voc j capaz de se virar com as propriedades e ter uma boa noo sobre os Eventos. Agora vamos aos Mtodos: Para mover o boto vamos usar o Mtodo Move do boto. Como a movimentao acontecer ao duplo-clicar o form, o Cdigo vai no Evento DblClick do Form. A seguinte sintaxe usada no VB para Mtodos: Objeto.Mtodo Atributos (Nem sempre h atributos) Para mover o boto, usaremos o seguinte Cdigo (lembre-se sempre de colocar o Cdigo em seu devido Evento): Private Sub MinhaJanela_DblClick () MeuBoto.Move 100, 100 End Sub Os atributos 100, 100 vo colocar o boto perto do canto superior esquerdo do form. Execute o programa (tecla F5 ou o botozinho do tipo play na barra de ferramentas). Clique o boto e depois d um duplo clique no form. Se tudo funcionou direito, parabns. O VB tem dezenas de Classes com centenas, milhares de propriedades, Mtodos e Eventos. muito difcil falar sobre todos em pouco espao. Mas todos eles esto muito bem explicados no help on line do VB. Procure Methods, Properties e Events e brinque bastante com eles. Brinque tambm com outros controles, no s botes. Comece a usar Labels ("etiquetas" que mostram um texto), PictureBoxes (para mostrar desenhos) e outros. VARIVEIS O QUE SO VARIVEIS? Bem, variveis so coisas que, em programao, servem para armazenar dados temporariamente na memria. Digamos que voc queira, fazer uma "calculadora"; os nmeros sero armazenados em variveis. Como eu crio uma varivel? Normalmente no preciso criar uma varivel; basta us-la que ela criada automaticamente. Uma varivel identificada por um nome. Este nome deve obedecer s seguintes regras: - No pode haver repetio de nomes; - Deve comear com uma letra; - No pode conter espaos, pontos, vrgulas e outros caracteres do tipo: !, $, %. - Deve ter, no mximo, 255 caracteres. Muitssimas vezes voc usar variveis para guardar valores de propriedades. E depois poder atribuir o valor da varivel a uma outra propriedade. A sintaxe esta: Varivel = Objeto.Propriedade => Coloca na varivel o valor da propriedade Objeto.Propriedade = Varivel => Coloca na propriedade o valor da varivel EXEMPLO DE MQUINA DE SOMAR Para dar um exemplo, vamos fazer uma "mquina de somar": em um form coloque duas "text boxes", uma "label" e um boto. Nas caixas de texto sero colocados os nmeros. Um clique no boto e a soma aparecer na "label". Vamos usar os nomes padro dos controles (j que o projeto pequeno). Troque a caption do boto para "Soma" e apague o texto das text boxes. Todo o Cdigo estar no Evento Click do boto: Private Sub Command1_Click () Numero1 = Val(Text1.Text) Numero2 = Val(Text2.Text) Soma = Numero1 + Numero2 Label1.Caption = Str(Soma) End Sub Acho que at deu para entender. Mas o que so aqueles "Val (...)" e "Str (...)"? Val e Str so funes. Funes so comandos que retornam algum dado ou valor. Seguidamente uma funo requer atributos (que so colocados entre parnteses). Eis o porqu de usar essas funes: o VB diferencia nmeros de textos. Mas "12" pode ser um texto. Normalmente, quando algo est entre aspas, considerado texto. A propriedade "Text" (assim como a "Caption") sempre contm um texto. Uma soma entre os textos "1" e "1" resultaria em "11"! Por isso, usamos a funo Val, que pega um texto e transforma-o em um valor numrico. A funo Str, que aparece depois faz o contrrio, pega um nmero e transforma em uma string (texto). Note que voc tambm pode colocar um valor numa varivel diretamente: Valor = 10 ou Msg = "Isto aqui uma string." DECLARANDO VARIVEIS possvel (e importante) "declarar" variveis, ou seja, dizer ao programa que voc ir us-las antes que elas sejam "automaticamente criadas". Mas para que "declarar" se o processo automtico? Em algumas linguagens obrigatrio (C e Java). Principalmente por dois motivos: velocidade e economia de memria Existem vrios tipos de dados no VB (veja tabela na prxima pgina). Cada um destes tipos tem uma limitao em termos de valores que pode adquirir, mas tambm se diferenciam pela quantidade de memria que ocupam. CONSTANTES: CORES: vbBlack, vbRed, vbGreen, vbBlue, etc. TIPOS DE DADOS DO VB5 Data type Storage size Range Byte 1 byte 0 to 255 Boolean 2 bytes True or False Integer 2 bytes -32,768 to 32,767 Long (long integer) 4 bytes -2,147,483,648 to 2,147,483,647 Single (single-precision floating-point) 4 bytes -3.402823E38 to -1.401298E-45 for negative values; 1.401298E-45 to 3.402823E38 for positive values Double (double-precision floating-point) 8 bytes -1.79769313486232E308 to -4.94065645841247E-324 for negative values; 4.94065645841247E-324 to 1.79769313486232E308 for positive values Currency (scaled integer) 8 bytes -922,337,203,685,477.5808 to 922,337,203,685,477.5807 Decimal 14bytes +/-79,228,162,514,264,337,593,543,950,335 c/ no decimal point; +/-7.9228162514264337593543950335 with 28 places to the right of the decimal; smallest non-zero number is +/-0.0000000000000000000000000001 Date 8 bytes January 1, 100 to December 31, 9999 Object 4 bytes Any Object reference String (variable-length) 10 bytes + string length 0 to approximately 2 billion String (fixed-length) Length of string 1 to approximately 65,400 Variant (with numbers) 16 bytes Any numeric value up to the range of a Double Variant (with characters) 22 bytes + string length Same range as for variable-length String User-defined (using Type) Number required by elements The range of each element is the same as the range of its data type. Note Arrays of any data type require 20 bytes of memory plus 4 bytes for each array dimension plus the number of bytes occupied by the data itself. The memory occupied by the data can be calculated by multiplying the number of data elements by the size of each element. For example, the data in a single-dimension array consisting of 4 Integer data elements of 2 bytes each occupies 8 bytes. The 8 bytes required for the data plus the 24 bytes of overhead brings the total memory requirement for the array to 32 bytes. A Variant containing an array requires 12 bytes more than the array alone. Quando voc no declara uma varivel, ela considerada do tipo Variant. Note que este tipo ocupa pelo menos 16 bytes de memria, bem mais que os outros. A sintaxe para declarar uma varivel pode mudar um pouco, dependendo do "escopo" que voc deseja. ("escopo" a disponibilidade da varivel em cada um dos "nveis" do programa - veja o prximo captulo). Generalizando, a sintaxe esta: ComandoDeDeclarao NomeDaVarivel as TipoDeDado De um modo geral, o "ComandoDeDeclarao" ser o comando "Dim". Por exemplo, se quiser criar uma varivel do tipo Integer chamada MinhaVariavel, usaramos: Dim MinhaVariavel as Integer Mas, ser que faz muita diferena gastar 2, 4, 8 ou 16 bytes da memria? Hoje os computadores tm *muita* memria. Tudo bem, em programas pequenos isto no ser uma diferena crucial, mas em um programa maior, com centenas de variveis, isto pode fazer a diferena. Alm disto, devemos lembrar que o Windows pode trabalhar com vrios programas abertos ao mesmo tempo; e se seu programa for "gordo" poder atrapalhar a performance dos outros. Alm disto, quanto menos memria ocupa um certo tipo de dado, mais rapidamente ele processado. Por isso, procure sempre usar o "menor" tipo de dado possvel. Mas lembre-se: se voc ultrapassar o limite da varivel acontecer um erro (tente criar uma varivel do tipo Byte e atribua a ela um valor maior que 255). ESCOPO OS NVEIS DE UM PROGRAMA Vamos comear criando um programa que use 2 forms. Vamos fazer de conta que temos um excelente programa e queremos fazer uma janela "Sobre" para ele. Primeiro coloque um boto (botSobre - este ser seu name) no form que o VB cria para ns. Ajuste o caption deste boto para "Sobre..." Mas normalmente o "Sobre..." vai em um menu. Continuando. Nosso "Sobre" ser educado. Ele agradecer ao usurio por ter usado o programa. E o chamar pelo nome. Ento, ainda nesta primeira janela, coloque uma caixa de texto (chame-a de txtNome) e deixe-a em branco (apague todo seu text). Alm disto, crie um outro boto (chame-o de botPergunta) e coloque nele um caption de "?". Este boto mostrar uma caixa de mensagem com o nome do usurio e serve apenas para mostrar os tais dos "nveis" do programa. Adiante. Vamos colocar algum Cdigo no Evento Change da txtNome. O vento change ocorre cada vez que o texto de uma TextBox muda. Private Sub txtNome_Change() Dim Nome As String Nome = txtNome.Text A varivel Nome recebe a propriedade Text da End Sub txtNome fcil descobrir o que isto faz: cada vez que o texto da txtNome muda, ele guardado na varivel "Nome". Normalmente s leramos o valor da caixa quando realmente precisssemos dele, mas para o exemplo ter de ser assim. No botPergunta coloque o seguinte: Private Sub botPergunta_Click() Dim Nome as String MsgBox Nome End Sub MsgBox, um comando que mostra uma caixa de mensagem. Seu uso mais simples MsgBox Texto, onde Texto pode ser uma varivel string ou o texto em si (colocado entre aspas). J sei! Quando clicarmos no "?", vai aparecer uma caixa de mensagem contendo o nome escrito na caixa de texto. Por qu? Fcil. O texto da caixa de texto est na varivel "Nome". Depois, a MsgBox diz para mostrar o contedo da varivel Nome! Ento execute e veja se d certo. A caixa de mensagem aparece vazia! por causa dos "nveis" do programa. Quando declaramos uma varivel com um Dim, dentro de um subprocedimento (como fizemos agora), a varivel s existe dentro daquele subprocedimento. Ela no est disponvel para outras "Subs". Alm disto, quando a Sub que a continha acaba de ser executada, o valor da varivel se perde, mesmo para futuras "chamadas" da mesma Sub (Este segundo problema pode ser solucionado declarando a varivel com o comando Static, e no Dim). Vamos solucionar nosso problema. Primeiro, v nas duas Subs que criamos e recorte (Ctrl+X) a linha "Dim Nome as String" de ambas. Agora d um duplo clique no Form (at agora s estamos usando um) para mostrar a janela de edio. Na "Caixa de Seleo" Object, no canto superior esquerdo, escolha "General". Note que caixa "Proc:" vira "Declarations". Agora, abaixo, cole (Ctrl+V) a linha Dim Nome as String. E teste o programa de novo. Deve ter funcionado. Quando declaramos variveis na seo Declarations de um Form, aquela varivel estar disponvel para todas as Subs daquele Form. E a segunda janela? OK, crie um segundo Form. Basta clicar no primeiro boto da barra de ferramentas ou usar o menu Insert | Form. Coloque neste novo form o nome de JanSobre. Nele coloque uma Label ("lblObrigado"). No Evento Load deste form coloque o seguinte Cdigo: lblObrigado.Caption = Nome & ", obrigado por utilizar este programa." Uma OBSzinha: "&" um operador que junta duas Strings em uma s (operadores so comandos que realizam operaes - lgicas, matemticas...-, como +, -, AND e o prprio &. ). Podemos usar + no lugar de &. E na seo Declarations deste Form, coloque Dim Nome as String. Agora vamos "ligar" os dois forms. Volte ao primeiro form e inclua o seguinte Cdigo ao botSobre: Private Sub botSobre_Click() janSobre.Show vbModal End Sub Isto mostrar a janSobre quando o boto for clicado. vbModal indica ao VB que esta janela ser "Modal". Depois, retire o vbModal e note a diferena. OBS: Em verses do VB anteriores 4.0, use o nmero 1 no lugar de vbModal. Analisando todas estas novas subs, a que concluso chegastes? Bem, a caption do lblObrigado dever mostrar algo como: "Joo, obrigado por utilizar este programa." Mas se der errado de novo no me surpreendo. J deu para notar que adoras mostrar como no fazer... Mas vou executar. E a? Deu errado. A Label mostrou apenas ", obrigado por utilizar este programa." normal. Lembras que uma varivel declarada na seo Declarations de um Form est disponvel para todas as Subs do seu prprio form. Ns estamos usando dois forms; essencialmente o mesmo problema que tivemos alguns pargrafos acima. E para problemas semelhantes, solues semelhantes: declarar a varivel em um nvel "mais alto". S nos resta o terceiro e mais abrangente nvel de programao: o nvel que abrange todo o programa (o mdulo). Crie um Module. Use o menu Insert | Module, ou aquele boto da barra de ferramentas que parece uma aranha fantasiada para o carnaval. Neste module (as verses anteriores 4.0 do VB chamavam de Global Module, ou algo assim), inclua a declarao da varivel Nome: Public Nome as String Note que declaramos usando "Public", que informa ao VB que esta varivel ser "Pblica", disponvel para todas as Subs de todos os Forms deste programa. Agora, retire as duas linhas "Dim Nome as String" que esto nas sees Declarations de cada Form. Execute. Funcionou! Ento, s para uma aparncia mais bonitinha, a vai um esquema dos nveis do programa: Falta responder o que escopo! Escopo so os nveis do programa. Por exemplo, aqueles dois erros que tivemos durante o captulo foram causados porque as variveis estavam "fora de escopo". ESTRUTURAS E LOOPS Loops e estruturas permitem que um Cdigo VB (ou de qualquer outra linguagem) seja repetido vrias vezes. Permitem tambm analisar dados e tomar decises diferentes dependendo do resultado. Na verdade loops so criados por estruturas (as estruturas de loop). Afinal, como que eu fao para utilizar uma estrutura? No difcil; as estruturas so criadas atravs de alguns grupos de comandos. A seguir listo e comento as estruturas disponveis no VB. If... Then... Else... Isto, em bom portugus, quer dizer Se... Ento... Seno... Eis um exemplo de como utiliz-la: If MinhaVariavel <= 4 Then Beep ElseIf MinhaVariavel = 5 Then Beep Beep Else Beep Beep Beep End If Neste exemplo, se a MinhaVariavel for menor ou igual (<=) a 4, ento um beep ser emitido. O "bloco" ElseIf (em verde) opcional. Ele serve para dizer que se MinhaVariavel for igual a 5, algo ser feito (no caso, dois beeps sero emitidos). Podem ser includos quantos ElseIf forem desejados, mas talvez seja melhor usar a estrutura Select Case (veja adiante) do que vrios ElseIf. O bloco em azul (Else), tambm opcional, ser executado somente se nenhum dos blocos anteriores (If e ElseIf) for executados. End If finaliza a estrutura. Select Case Vamos direto ao exemplo: Select Case MinhaVariavel Case 0 Beep Case Is <= 5 Beep Beep Case Else Beep Beep Beep End Select Esta estrutura, inicialmente, "seleciona" o valor de MinhaVariavel. Depois verifica vrios casos (quantos forem desejados). Caso MinhaVariavel seja igual a 0, um beep ser emitido. Caso seja menor ou igual a 5, teremos dois beeps. O bloco Case Else, que opcional e est em azul, ser executado somente caso nenhum dos blocos case anteriores tenha sido executado. End Select finaliza a estrutura. Do... Loop Esta estrutura executa um certo grupo de comandos at (Until) ou enquanto (While) que uma certa condio verdadeira. Por exemplo: Randomize Timer Contador = 0 Do While MinhaVariavel <> 5 Enquanto MinhaVariavel <>5 Contador = Contador + 1 Aleatrio = Int (Rnd * 10) Sorteia nmero inteiro entre 0 e 9 If Aleatrio = 5 Then MinhaVariavel = 2 End If Loop MsgBox Str(Contador) Aqui h algumas observaes interessantes: a primeira que possvel colocar estruturas dentro de outras. Aqui, tivemos uma If... Then... dentro de uma Do... Loop. Isto chamado de estruturas aninhadas. Quando o computador chega na linha Do While... ele verifica se a condio (MinhaVariavel <> 5 ) verdadeira. Se for ele seguir at encontrar o comando Loop. A ele volta linha Do While... e o ciclo se repete enquanto a condio for verdadeira (quando for falsa, a execuo segue na linha logo abaixo de Loop. Se tivssemos usado Do Until ao invs de Do While, o loop seria executado at que a condio se tornasse verdadeira. Continuando a anlise: as linhas em azul criam um nmero aleatrio. Note que se este nmero for 5, MinhaVariavel receber o valor de 2 (que diferente de 5 - satisfaz a condio do loop; na prxima vez que a execuo chegar no Do While, o loop ser encerrado). A varivel Contador, inicializada em 0, acrescida de 1 a cada execuo do loop. No final, uma caixa de mensagem (MsgBox) exibida mostrando quantas vezes o loop precisou ser executado. Lembre-se que para testar este exemplo preciso colocar o Cdigo no Evento de algum objeto (como no Click de um boto). Mais uma coisinha: dentro de uma estrutura Do... Loop pode ser colocado o comando Exit Do. Quando um Exit Do for encontrado, a execuo automaticamente vai para a linha logo a seguir do Loop, independentemente da condio estar falsa ou verdadeira. For... Next A estrutura For... Next ideal para realizar tarefas repetitivas. Que tal somar todos os nmeros pares de 50 a 100 (50+52+54+...+100)? For Cont = 50 To 100 Step 2 Soma = Soma + Cont Next Cont MsgBox Str(Soma) No difcil entender este programinha: O lao (lao o mesmo que loop) iniciado pelo For utiliza uma varivel (que eu chamei de Cont) que inicia em 50. Quando a execuo chega no Next, volta linha For... Ali, Cont ser incrementado de 2 ("Step x" identifica de quanto ser o incremento. A ausncia do Step x equivalente a Step 1). Quando Cont passar de 100 e a execuo chegar linha For Cont..., a execuo continua a partir da linha logo aps o Next Cont. possvel sair do loop antes que a varivel contador chegue ao valor planejado. Basta que o computador veja o comando Exit For. Bem, basicamente s isso. Na verdade existem outras estrutura. OBSERVAO Conhecendo o uso bsico de objetos, o uso bsico de variveis as estruturas do VB e os nveis do programa, voc j estar pronto para fazer programas bem bonitinhos. Como j disse antes, no pretendo analisar cada detalhe, cada controle do VB. Tentar, errar, corrigir, errar de novo, corrigir de novo. Fazer programinhas simples, depois alguns mais complexos. Abrir exemplos e alterar. assim que se chega l. SUBPROCEDIMENTOS E FUNES Mas voltando aos subprocedimentos: voc j sabe que quando o usurio interage com o seu programa (clicando em um boto, por exemplo) gerado um Evento. Para responder a este Evento executado um suprocedimento. EXEMPLO Ento um subprocedimento tudo aquilo que colocamos entre as linhas "Private Sub..." e "End Sub" de um "respondedor de Eventos"? Bom, aquilo um subprocedimento sim. Mas subprocedimentos no s isto. Na verdade existem dois tipos de subprocedimentos: Subs e Functions. Vamos a um exemplo (outro daqueles inteis). Em um Form (Form1), coloque uma ScrollBar (horizontal ou vertical, tanto faz). Ajuste seu Name para "BarraRol", seu Max para 15 e seu LargeChange para 5. Abrindo um pequeno parnteses: as propriedades Max e Min de uma ScrollBar determinam o valor mximo e mnimo, respectivamente, que a ScrollBar pode possuir. A propriedade SmallChange determina de quanto ser o incremento (ou decremento) quando uma daquelas setinhas nas pontas da ScrollBar clicada. LargeChange determina de quanto ser o incremento (ou decremento) quando a ScrollBar for clicada fora das setinhas ou daquela "caixinha" que pode ser arrastada. Coloque no Form1 tambm uma Label (LabelValor) e ajuste seu Caption para 0. Agora, ao Evento Change da BarraRol, acrescente o seguinte Cdigo: Private Sub BarraRol_Change() LabelValor.Caption = Str(BarraRol.Value) End Sub Neste exemplo criamos uma Sub (note que todo o Cdigo est delimitado pelas linhas Private Sub... e End Sub). E aquele "Private" tem algo a ver com escopo? Tem sim. Agora inclua um boto (Zerador ser seu name). Quando ele for clicado a ScrollBar ir "zerar": Private Sub Zerador_Click() BarraRol.Value = 0 End Sub Certo. Agora, vamos incrementar. Coloque um Shape ( aquele boto da caixa de ferramentas com o desenho de um circulo e dois quadradinhos coloridos) no Form1. Nomeie este Shape como Figura e seu FillColor para azul (&H00FF0000&) e seu FillStyle para 0 (Solid). O Shape fica azul. Digamos que a cor deste Shape mude a cada vez que o boto for clicado e cada vez que a ScrollBar tenha seu valor modificado. Como faramos isto? Daria para colocar o Cdigo necessrio nos subprocedimentos BarraRol_Change e Zerador_Click. Daria, mas estaramos escrevendo o mesmo Cdigo duas vezes. Isto no muito interessante. A melhor soluo criar um subprocedimento (uma Sub) que no esta diretamente associado a um Evento. Para fazer isto v at a janela de edio do Form1 (dando um duplo clique em qualquer controle ou no prprio Form1). Na caixa de seleo "Object" escolha General. A, entre com o seguinte Cdigo: Private Sub MudaCor() Figura.FillColor = Figura.FillColor Xor &HFFFFFF End Sub Note que ao terminar de escrever a primeira linha o VB automaticamente inclui o "End Sub". O que este subprocedimento faz uma operao lgica XOR entre a cor atual do Shape e o nmero &HFFFFFF (255 em hexadecimal). Este novo valor atribudo cor do Shape. Devido s caractersticas do operador XOR, a cor ficar variando entre o azul original e o amarelo. Agora s falta fazer com que esta Sub seja "chamada" nos momentos adequados. Isto feito alterando as Subs BarraRol_Change e Zerador_Click. Elas Ficaro assim: Private Sub BarraRol_Change() LabelValor.Caption = Str(BarraRol.Value) MudaCor End Sub Private Sub Zerador_Click() BarraRol.Value = 0 MudaCor End Sub Na verdade s inclumos a chamada Sub MudaCor que acabamos de criar. Outra coisinha: uma Sub pode ser escrita tanto na seo General de um Form como em um Module. E aquela histria de escopo? Ah, sim. Subprocedimentos tambm tm escopo. Um subprocedimento (seja Sub ou Function), quando declarado como Private pode ser "chamado" apenas por subprocedimentos que estejam no mesmo Form ou Module que ele. Para permitir que seu subprocedimento seja chamvel de qualquer ponto do programa declare-o como Public ( idntico ao que fazemos com variveis). APROFUNDANDO Talvez voc esteja pensando o que faz aquele par de parnteses vazios ao lado de cada nome de subprocedimento. Dentro daqueles parnteses colocamos algum parmetro que ser utilizado pelo subprocedimento. Vamos tornar nosso programa-exemplo ainda mais fantstico: Quando a Sub MudaCor for chamada pela ScrollBar, a espessura da borda do Shape ficar com uma espessura igual ao seu Value. Quando for chamada pelo Boto, a borda ficar maior ainda (Uau!). A primeira coisa a fazer rescrever a Sub MudaCor: Private Sub MudaCor(MeuValor As Byte) Dim c As Byte Figura.FillColor = Figura.FillColor Xor &HFFFFFF Figura.BorderWidth = MeuValor End Sub Agora sim! Temos alguma coisa dentro dos parnteses! Aquilo que est entre os parnteses significa o seguinte: quando esta Sub for chamada, dever ser passado um valor (no caso um nmero, um Byte). Este valor estar disponvel para a Sub na forma de uma varivel (no exemplo, "MeuValor"). No difcil compreender isto analisando o exemplo. A estes valores "passados" a um subprocedimento damos o nome de argumento. O prximo passo alterar os outros subprocedimentos (os associados a Eventos) para que eles forneam o argumento necessrio: Private Sub BarraRol_Change() LabelValor.Caption = Str(BarraRol.Value) MudaCor BarraRol.Value End Sub Private Sub Zerador_Click() BarraRol.Value = 1 MudaCor 30 End Sub Na primeira Sub passado como argumento a propriedade Value da BarraRol. Na segunda passado um nmero (30) diretamente. Ainda preciso ajustar o Min da BarraRol para 1. Isto evitar que o programa tente dar Border do Shape um valor igual a 0 (o que geraria um erro). Ainda interessante dizer que podemos criar subprocedimentos que admitem mais de um argumento. ...FUNCTIONS Functions so o segundo tipo de subprocedimento que podemos criar com o VB. Elas se diferem das Subs porque elas retornam um valor. Como assim? Vamos logo a um exemplo: uma funo-dado, ou seja uma funo que retorna um nmero inteiro entre 1 e 6: Private Function Dado() As Byte Dado = Int(6 * Rnd + 1) End Function Esta uma funo simples, com apenas uma linha de Cdigo. O mais importante observar como fazemos para que a funo retorne um valor: a funo retorna um valor que est contido em uma varivel cujo nome igual ao nome da Function. Usar esta funo simples: Por exemplo: MinhaVariavel = Dado + Dado, coloca em MinhaVariavel o que seria o valor do lanamento de dois dados. Com Functions tambm possvel utilizar argumentos. Por exemplo, a seguinte funo retorna a soma de trs nmeros: Private Function SomaTres(Num1 as Integer, Num2 as Integer, Num3 as integer) As Integer SomaTres = Num1 + Num2 + Num3 End Function E para usar esta funo: MinhaVariavel = SomaTres (300, 20, 12) , colocaria 332 em MinhaVariavel. CONCLUINDO Saber quando e como utilizar Subs e Functions adequadamente uma coisa que s vem com o tempo, com a prtica. Alis, isto no acontece s com Subs e Functions... Uma ultima observao que subprocedimentos so comumente chamados de Procedures. Se algum dia voc vir algum texto falando em uma Procedure Sub ou Procedure Function, j sabe do que se trata. DEPURAO DE CDIGO O Visual BASIC no pode diagnosticar ou consertar erros para voc, mas fornece ferramentas que o ajudaro a analisar. As ferramentas de depurao incluem passo a passo em linhas na execuo do programa , breakpoints , break em expresses , passos a passo em procedures e visualizao de variveis e propriedades. Visual BASIC tambm inclui facilidades especiais de depurao tais como editar-e-continuar , alterando a prxima sentena a ser executada e testando o procedimento enquanto a aplicao est parada. Durante a digitao do Cdigo o Visual BASIC faz uma checagem prvia da sintaxe assinalando os erros em relao as palavras chaves da linguagem. Isso s acontecer se estiver ativada a opo Syntax Checking para Yes em Options , Environment no menu do Visual BASIC. CRIANDO BASE DE DADOS VIA DATA MANAGER Abrir o Visual Basic 5.0 Add-Ins Visual Data Manager... Se for a primeira vez que Acessa o Data Manager responda No para a Pergunta do VB (Add SYSTEM.MD? to INI file? ento aberta a janela do VisData File, New, Microsoft Access, Verso 7.0 Digitar o nome do Banco de Dados a ser criado e Save Na janela DataBase Window clicar com o boto direito e New Table No campo Table Name digitar o nome da Tabela; Clicar em Add Field para abrir a janela de adio de Campos; Onde se deve entrar com o nome, tipo, tamanho e outras caracterstica do campo e clicar em OK Inserir caractersticas de outros campos e clicar em OK, at completar os campos Clicar em Close para fechar a janela de criao dos campos Adicionar ndice se necessrio Clicar em Build the Table para construir a Tabela Aparece ento o nome da tabela na janela DataBase Window Caso desejemos inserir dados na tabela devemos dar um duplo clique no nome da mesma na janela DataBase Window Ser aberta a janela Dynaset para que sejam inseridos os dados, clicando em Add e digitando Fechar ento o Visual Datamaneger e o Banco de Dados est criado, podendo ser utilizado em um projeto do VB atravs do Datacontrol, Caixas de Texto e outros controles. DICAS E MACETES: SETUP DO VB 4.0-32BITs OU DO VB 5.0 EM PORTUGUS: Dica retirada do Site da Forum Access:  HYPERLINK http://www.forumaccess.com.br www.forumaccess.com.br Para instalar a verso em Portugus do Setup Kit 5.0 recomendamos os seguintes procedimentos: 1. Localize o diretorio do Microsoft Visual Basic; 2. Renomeie o atual arquivo (ingls) Setup132.exe que j existe no subdiretorio "\setupkit\setup1\" do seu Visual Basic. Ex: Renomeie-o para "Setup132-original.EXE" 3. Copie o novo arquivo em Portugus para este mesmo diretrio; 4. Faa um teste com qualquer aplicao DEMO ou que voc j tenha desenvolvido. - Para fazer este teste, voc dever selecionar o cone do Application Setup Wizard que est no mesmo grupo de programas do Visual Basic. Na caixa que pergunta o nome do projeto, selecione qualquer um que voc tenha em seu computador. - Siga os passos do Wizard normalmente! - Aps gerado o arquivos de instalao, execute o arquivo "setup.exe" que foi criado pelo Wizard. - Perceba que seu programa de instalao j encontra-se em portugus! DICA: Voc pode renomear o arquivo SETUP.EXE que o Wizard criou para, por exemplo, INSTALAR.EXE ou CONFIG.EXE, de modo que fique mais intuitivo para usurios mais leigos. UPGRADE: Antes de abrir um projeto do VB 3.0 no 4 ou 5, faa backup de todos os elementos do projeto, inclusive as VBX, DLL, MDB, etc. COMPILAO CONDICIONAL: Procurar no Help do VB por compiler constants. (#If... Then... #Else). ABRIR BANCO DE DADOS: Public Sub AbrirBanco(db As Database, Path_ps As String, File_ps As String) On Error GoTo TrataErr_DB Path_ps = VerificaOrtografiaCaminho(Path_ps) File_ps = VerificaOrtografiaArquivo(File_ps) Set db = OpenDatabase(Path_ps & File_ps, False) On Error GoTo 0 Exit Sub TrataErr_DB: Select Case Err Case 3000 'Banco est aberto como exclusivo MsgBox "O Banco de Dados est aberto para manuteno.", 16 , cNomeSistema_gs End Case 3033 'Identificao ou password Incorreta MsgBox "Acesso negado. Usurio e senha, do Banco " & Arquivo_ps _ & ", sem permisso.", 16, cNomeSistema_gs End Case 3028 MsgBox "Informe o Diretrio de Trabalho do Sistema " _ & cNomeSistema_gs & ", no Gerenciador de Programas.", 16 _ , cNomeSistema_gs End Case 3049 'Banco de Dados Corrompido Call RepararBanco(Path_ps, File_ps) Resume Case 3029 'Password Incorreta MsgBox "Acesso negado. Senha, do Banco " & Arquivo_ps & " , invlida."_ , 16, cNomeSistema_gs End Case Else MsgBox Str$(Err) & ": " & Error$(Err), 16, cNomeSistema_gs End End Select End Sub CRYSTAL REPORTS CUSTOM CONTROL: CONSTANTES USADAS NOS SISTEMAS: Global Const cNomeSistema_gs = "Nome do Sistema" Global Const cUserName_gs = "UserName" Global Const cPassword_gs = "Password" Global AtivadoPeloPrograma_gb As Boolean Global InicializandoSistema_gb As Boolean Dim Lendo_mb As Boolean Dim Alterando_mb As Boolean Dim Novo_mb As Boolean Acompanhando o Visual BASIC 5.0, vem o software Crystal Reports 4.0. um software extremamente til, possibilitando a rpida criao e impresso de relatrios. Aps ter criado seu relatrio, insira em seu formulrio um controle do Crystal. Se ele no estiver em sua caixa de ferramentas, v no menu Project/Components e selecione o controle do Crystal. Assim como qualquer controle Visual BASIC, este tem vrias propriedades. Vamos a uma breve explicao sobre as principais, com exemplos (entre <>) e supondo o nome do seu controle ser Relatorio1 Action Imprime seu Relatrio Connect D o log on em um servidor chamado Villalon, com o username Fernando e a senha LITOTECH. Utilizado somente em ambientes cliente/servidor, com acesso a bancos de dados via ODBC Copies To Printer Imprime 3 cpias do seu relatrio. Destination manda o relatrio para um dispositivo especfico. No caso, x ser 0 para que o relatrio seja enviado para o monitor, 1 para ser enviado impressora e 2 para ser gravado em arquivo. Password Envia a senha Litotech para um arquivo .MDB PrintFileName imprime o relatrio em um arquivo chamado CNTR.TXT ReportFileName especifica ao controle que o relatrio corrente o OPEN.RPT. UserName envia o username FERNANDO para um arquivo .MDB Selection Formula Muitos programadores por a esto quebrando a cabea tentando colocar SQL nessa propriedade. ESTA PROPRIEDADE NO ACEITA O CDIGO SQL COM SUA SINTAXE NORMAL. Essa propriedade tem sua sintaxe prpria, que muito parecida com SQL. Um exemplo: Voc quer imprimir o relatrio "PROVAS.RPT" na impressora, listando apenas os alunos da classe 'F'. Voc tem o relatrio, e seu arquivo .MDB contm uma tabela 'EscolaA', e dentro desta tabela um campo texto 'Classe'. O Cdigo fica assim: Relatorio1.ReportFileName = "C:\ESCOLA\PROVAS.RPT" Relatorio1.SelectionFormula = "{EscolaA.classe}='F'" Relatorio1.Action = 1 Note alguns detalhes: Para especificar o campo a ser selecionado, escreva entre chaves o nome da tabela. O nome do campo. Como o campo em questo um campo texto, o valor a ser selecionado (no caso a string F) aparece entre aspas simples. Assim como em SQL, voc pode unir vrios critrios de seleo por via da palavra chave AND. Por exemplo, voc agora que listar apenas os alunos da classe 'F' e que tenham recebido uma nota maior do que 5: Relatorio1.ReportFileName = "C:\ESCOLA\PROVAS.RPT" Relatorio1.SelectionFormula = "{EscolaA.classe}='F' AND {EscolaA.nota}>5" Relatorio1.Action = 1 Para se especificar datas, utiliza-se uma das vrias funes de data suportadas pelo Crystal. vou dar o exemplo de uma, a funo Date, que tem a sintaxe . Voc quer imprimir um relatrio de todas as Classes cujas provas tenham sido realizadas entre o dia 1/04/97 e 31/5/97: Relatorio1.ReportFileName = "C:\ESCOLA\PROVAS.RPT" Relatorio1.SelectionFormula = "{EscolaA.DataProva}>=Date(1997,04,01) AND {EscolaA.DataProva}>=Date(1997,05,31) Relatorio.Action = 1 Para se programar, no necessrio que voc seja um 'cobra' da informtica, mas conhecimento sempre ajuda. O importante em um programador sua capacidade de fazer com que um programa execute suas tarefas escrevendo o menor nmero de linhas de Cdigo possveis. Isso far com que o computador tenha a necessidade de processar menos dados, aumentando a velocidade de execuo. Um bom programa deve ser escrito de forma modular, ou seja, voc deve ter vrias funes ou subs que sejam comuns a vrios procedimentos. Assim, fica mais fcil identificar erros, realizar manuteno de seu software e atualizaes. Alm do mais, economiza seu tempo e pacincia, pois voc no ter que digitar a mesma coisa vrias vezes. Por exemplo, os Cdigos de Selection Formula. Voc provavelmente ter mais de um relatrio em seu programa. Assim, crie uma sub que defina a selection formula e imprima seu relatrio, recebendo por referncia os valores necessrios (nome dos campos, valores, comparadores, etc.). Infelizmente, no se encontram com facilidade bons livros de Visual BASIC. Em sua maioria, os livros so timos ao explicar as vantagens do ambiente G.U.I., o uso da interface, dos grficos, etc. Mas praticamente TODOS so extremamente fracos no quesito BANCO DE DADOS. Ora, os bancos de dados so os arquivos mais importantes da maioria dos programas. Em quase todos os livros voc encontrar apenas noes superficiais sobre o Microsoft Jet Engine e a linguagem SQL. Um bom livro para quem j programador em outras linguagens o "Microsoft Visual BASIC 4 - Segredos e Solues", de Gary Cornell e Troy Strain, editado pela Makron Books. indicado para programadores pois se concentra em familiarizar o programador com o ambiente Visual BASIC, sem grandes exemplos inteis e lies de lgica, etc. Infelizmente tambm superficial no quesito banco de dados, mas muito bom em outros pontos. Fora esse livro, os bons so os editados pela prpria Microsoft, os livros assinados pela Microsoft Press. Voc pode compr-los em sua livraria local (geralmente a preos acima de R$ 150,00) ou na amazon.com, a preos bem mais em conta. Detalhe: esses livros so sempre em ingls. VERIFICAR ORTOGRAFIA DE ARQUIVO: Sub VerificaOrtografiaArquivo(Arquivo_ps) If Mid$(Arquivo_ps,1,1) = "\" Then VerificaOrtografiaArquivo = Mid$(Arquivo_ps,2) Else VerificaOrtografiaArquivo = Arquivo_ps End If End Sub VERIFICA ORTOGRAFIA DE CAMINHO: Sub VerificaOrtografiaCaminho(Caminho_ps) If Mid$(Caminho_ps,Len(Caminho_ps),1) = "\" Then VerificaOrtografiaArquivo = Caminho_ps Else VerificaOrtografiaArquivo = Caminho_ps & "\" End If End Sub TOCANDO MIDI NO VB: A edio profissional do VB inclui um OCX, o MCI Multimedia Control, que permite a execuo de MIDIs, WAVs eCDs de msica, entre outros. Entretanto, para quem no tem a edio profissional ou prefere no utilizar o OCX, pode utilizar a funo mciSendString da API do Windows. Primeiro, crie um Module e, nele declare a funo mciSendString: Declare Function mciSendString Lib "winmm.dll" Alias "mciSendStringA" (ByVal lpstrCommand As String, ByVal lpstrReturnString As String, ByVal uReturnLength As Long, ByVal hwndCallback As Long) As Long Antes de tocar o MIDI preciso abri-lo. Basta usar o mciSendString assim: mciSendString "open c:\Musicas\Musica.Mid type sequencer alias apelido", 1, 1, 1 O trecho alias (apelido) pode ser omitido, mas recomendo a sua utilizao. Qualquer palavra que for colocada no lugar de apelido, poder ser usada quando for feita alguma referncia a este MIDI. Se voc no usar o alias apelido, dever indicar todo o caminho (c:\Musicas\....) do arquivo. Nos exemplos a seguir, considerei o uso do alias apelido. Para tocar o MIDI, use: mciSendString "play apelido", 1, 1, 1 Saindo do programa sem parar de tocar o MIDI, ele continua tocando. Para par-lo, use: mciSendString "stop apelido", 1, 1, 1 Antes de fechar seu programa, voc ainda deve fechar o MIDI: mciSendString "close apelido", 1, 1, 1 O ideal colocar este ltimo comando, o close, no Evento Form_Unload. Assim, quando o Form fechado, o MIDI pra de tocar e fechado. ASSOCIAR UM CONE AO PONTEIRO DO MOUSE AO PASSAR SOBRE UM CONTROLE: Selecionar o controle; Alterar a propriedade MousePointer do controle; Alterar a propriedade MouseIcon para o cone desejado. REGISTRAR OCX: Na subpasta \tools\constrol do CD de instalao do VB5 existem controles extras (como o caso do Sheridan e outros, inclusive os arquivos de Help desses controles e um arquivo texto contendo instrues de como registrar estas OCX. Supondo que desejamos registrar o controle Sheridan 3D Contrlos: Devemos copiar o arquivo threed32.ocx da referida pasta do CD para a pasta system; Devemos executar: c:\windows\system\regsvr32.exe threed32.ocx; Dar um duplo clique no arquivo com extenso reg da referida pasta do CD e pronto. NOMES DE ALGUNS CONTROLES IMPORTANTES DO VB5: Controle de ABAS: Mocrosoft Tabbled Dialog Control 5.0 Dilogo Comum: Microsoft Common Dialog Control 5.0 ToolBar, StatusBar e outros: Microsoft Windows Common Control 5.0 Principais Comandos e Funes do VB5 Abs (Funo) Descrio Retorna o valor absoluto de um nmero. Sintaxe Abs(nmero) Comentrios O argumento nmero pode ser qualquer expresso numrica vlida. O valor absoluto de um nmero corresponde sua magnitude, sem o sinal. O tipo de dado retornado o mesmo do argumento nmero. Exemplo Abs(-1) e Abs(1) retornam, ambos, o valor 1. Asc (Funo) Descrio Retorna o valor numrico correspondente ao cdigo ANSI para o primeiro caractere de uma expresso string. Sintaxe Asc(expresso_string) Comentrios Se expresso_string tiver comprimento zero ocorrer um erro em tempo de execuo. Atn (Funo) Descrio Retorna o arco-tangente de um nmero. Sintaxe Atn(nmero) Comentrios O argumento nmero pode ser qualquer expresso numrica vlida. O resultado expresso em radianos e est na faixa -p/2 e +p/2. Beep (Comando) Descrio Gera um tom sonoro no alto-falante do computador. Sintaxe Beep Comentrios A freqncia e a durao do som dependem do hardware e das configuraes da placa de som. ChDir (Comando) Descrio Muda o diretrio atual de um drive especificado. Sintaxe ChDir caminho Comentrios O argumento caminho um string que especifica qual diretrio deve se tornar o default. Este argumento deve conter menos de 128 caracteres e deve ter a seguinte sintaxe: [drive:] [ \ ]diretrio [ \diretrio] ... O comando ChDir opera de maneira semelhante ao comando CHDIR do DOS. Da mesma forma que CHDIR, ChDir (que no pode ser abreviado para CD) muda o diretrio default, mas no o drive default. Exemplo Se o drive default for o C, o comando a seguir muda o diretrio default do drive D, mas o drive default continua sendo o C. ChDir "D:\WINDOWS" ChDrive (Comando) Descrio Muda o drive default. Sintaxe ChDrive drive Comentrios O argumento drive um string que especifica o novo drive default e deve corresponder a um drive existente no computador. Exemplo ChDrive "D:" - muda para o drive D, que passa a ser o novo default. Chr, Chr$ (Funes) Descrio Retorna um string de um caractere cujo cdigo ANSI o argumento. Sintaxe Chr[$] (cdigo_do_caractere) Comentrios Chr retorna Variant; Chr[$] retorna String. O argumento cdigo_do_caractere um inteiro entre 0 e 255, inclusive. Aplicativos WINDOWS usam o cdigo ANSI e no o cdigo ASCII. Os caracteres correspondentes aos nmeros 0 e 31, inclusive, so os mesmos para estes dois cdigos. Por exemplo, Chr(10) retorna o caractere "mudana de linha" (linefeed). Close (Comando) Descrio Conclui uma operao I/O (input/output) para um arquivo, ou seja, fecha um arquivo anteriormente aberto. Sintaxe Close [[#]nmero_do_arquivo] [,[#]nmero_do_arquivo]... Comentrios O argumento nmero_do_arquivo deve ser o mesmo usado no comando Open para abrir o arquivo. O comando Close, usado sem argumento, fecha todos os arquivos abertos. Cos (Funo) Descrio Retorna o co-seno de um ngulo. Sintaxe Cos (ngulo) Comentrios O argumento ngulo pode ser qualquer expresso numrica vlida em radianos. CurDir, CurDir$ (Funes) Descrio Retorna o caminho atual para o drive especificado. Sintaxe CurDir[$] [(drive)] Comentrios CurDir retorna um Variant; CurDir$ retorna String. O argumento drive deve corresponder a um drive existente no computador. Se nenhum drive for especificado, CurDir[$] retornar o caminho do drive atual. Exemplo Se o diretrio atual for C:\VB\ o comando CurDir$ retornar o string "C:\VB". Date, Date$ (Funes) Descrio Retorna a data atual do sistema. Sintaxe Date [$] Comentrios Date retorna Variant; Date$ retorna String de comprimento 10 formatado como mm-dd-aaaa. Date, Date$ (Comandos) Descrio Define a data do sistema. Sintaxe Date[$] = expresso Comentrios Para Date, o argumento expresso deve ser um String ou Variant. Para Date$, expresso deve ser um String com um dos seguintes formatos: mm-dd-aa; mm-dd-aaaa; mm/dd/aa; mm/dd/aaaa. Dim (Comando) Descrio Declara variveis e aloca espao na memria para armazen-las. Quando usada na seo de Declaraes de um formulrio ou mdulo, as variveis declaradas com Dim tornam-se acessveis a todas os procedimentos do formulrio ou mdulo. Quando usada dentro de uma procedure, as variveis estaro disponveis apenas para a procedure em questo. Sintaxe Dim nome_da_varivel [([ndices])] [As [New] tipo][, nome_da_varivel [([ndices])] [As [New]] ... Comentrios O comando Dim tem as seguintes partes: PRIVATEParteDescrioNome_da_varivelNome da varivel a ser declarada.ndicesDimenses de variveis do tipo array, quando for o caso.As tipoPalavra reservada para indicar o tipo de varivel a ser declarada: Integer, Long, Single, Double. Currency, String ou Variant.NewCria um novo "instance" de um objeto. Somente aplicvel a variveis-objeto.Exemplo Dim Volume As Single Dir, Dir$ (Funes) Descrio Retorna o nome de um arquivo ou diretrio que se adeque aos Editorres especificados. Sintaxe Dir[$] [(arquivo_espec[,atributos])] Comentrios Dir retorna Variant; Dir$ retorna um String. O argumento arquivo_espec um string que especifica o caminho e nome do arquivo. O argumento atributos especifica os atributos do arquivo, de acordo com a seguinte tabela: PRIVATEValorSignificadoConstante Simblica0Arquivos normaisATTR_NORMAL2Arquivos escondidosATTR_HIDDEN4Arquivos de sistemaATTR_SYSTEM8Rtulo do volumeATTR_VOLUME16DiretrioATTR_DIRECTORY Do...Loop (Comando) Descrio Repete um bloco de comandos enquanto ("While") uma condio for verdadeira ou at que ("Until") a condio se torne verdadeira. Sintaxe 1 Do[{While|Until} condio] [bloco de comandos] Loop Sintaxe 2 Do [bloco de comandos] Loop [{While|Until} condio] End (Comando) Descrio Finaliza uma procedure em Visual Basic. Sintaxe End Comentrios O comando End por si s pode ser colocado em qualquer lugar de uma procedure e equivale a selecionar End no menu Run do Visual Basic. A execuo encerrada imediatamente. EOF (Funo) Descrio Retorna um valor que indica se o fim de um arquivo foi atingido. Sintaxe EOF(nmero_do_arquivo) Comentrios O argumento nome_do_arquivo deve ser o mesmo usado no comando Open. EOF retorna True (verdadeiro) se o fim do arquivo foi atingido e False (falso) em caso contrrio. Err, Erl (Funes) Descrio Retorna o estado do erro ocorrido. Sintaxe Err Erl Comentrios Depois de ocorrido um erro, a funo Err retorna uma varivel Integer correspondente ao cdigo do erro. A funo Erl retorna uma varivel Long correspondente ao nmero da linha onde o erro ocorreu. Estas funes devem ser usadas em rotinas de tratamentos de erros. Ver On Error e Resume. Error, Error$ (Funes) Descrio Retorna a mensagem de erro (em ingls) que corresponde a um dado cdigo de erro. Sintaxe Error[$](cdigo_do_erro) Comentrios Error retorna Variant; Erro$ retorna String. O argumento cdigo_do_erro um inteiro e deve estar entre 1 e 32.767. A funo Err pode ser usada para determinar o cdigo do erro ocorrido. Se a funo Error[$] for usada sem argumento, ser retornada a mensagem de erro do erro ocorrido mais recentemente. Exp (Funo) Descrio Retorna o nmero "e" (base dos logaritmos nepperianos) elevado a uma dada potncia. Sintaxe Exp(nmero) Comentrios Se o valor de nmero exceder 709,782712893, ocorrer um erro de Overflow. A constante e aproximadamente igual a 2,718282. FileCopy (Comando) Descrio Copia um arquivo. Sintaxe FileCopy arq_origem, arq_destino Comentrios Arq_origem um string contendo uma especificao no ambgua do arquivo a ser copiado. Este argumento pode incluir informaes sobre o drive e o caminho. Arq_destino um string contendo uma especificao no ambgua do arquivo para onde Arq_origem deve ser copiado. Este argumento pode incluir informaes sobre o drive e o caminho. O arquivo a ser copiado no pode estar aberto por qualquer aplicativo, seja DOS ou Windows. Exemplo O comando a seguir copia o arquivo "VBJUNK.DOC" do diretrio "C:\FOBOS" para o diretrio "D:\DEIMOS" e o renomeia para "VBJUNK.BAK": FileCopy "C:\FOBOS\VBJUNK.DOC", "D:\VBJUNK.BAK" FileLen (Funes) Descrio Retorna uma varivel Long que expressa o comprimento (length) de um arquivo, em bytes. Sintaxe FileLen (nome_do_arquivo) Comentrios O argumento nome_do_arquivo um string que contm uma referncia no ambgua a um arquivo, podendo conter informaes sobre drives e caminhos. Exemplo O comando a seguir mostra, na caixa de texto Text1, o tamanho do arquivo "VBJUNK.DOC" contido no caminho "C:\FOBOS\" Text1.Text = FileLen("C:\FOBOS\VBJUNK.DOC") For...Next (Comando) Descrio Repete um grupo de instrues um determinado nmero de vezes. Sintaxe For contador = comeo To fim [Step incremento] [bloco de comandos] Next [contador] Format, Format$ (Funes) Descrio Formata nmeros, datas, tempos ou strings de acordo com instrues especficas. Sintaxe Format[$](expresso[,fmt]) Comentrios Format retorna Variant; Format$ retorna String. O argumento expresso o string ou expresso numrica a ser formatada. O argumento fmt a expresso de formato. Para maiores informaes, consultar o manual "Language Reference" ou o Help on-line do Visual Basic. FreeFile (Funo) Descrio Retorna o prximo nmero de arquivo disponvel (no aberto). Sintaxe FreeFile [()] Comentrios FreeFile pode ser usada quando se deseja abrir um arquivo com a certeza de que no existe um arquivo j aberto com este nmero. Function (Comando) Descrio Declara o nome, argumento e cdigo que formam o corpo de uma procedure do tipo Function. Sintaxe [Static] [Private] Function nome_da_funo [(lista_de_argumentos)] [As tipo] [bloco de comandos] [nome_da_funo=expresso] End Function Comentrios O comando Function tem as seguintes partes: PRIVATEParteDescrioStaticIndica que as variveis locais da procedure Function em questo so preservadas entre duas chamadas.PrivateIndica que a procedure Function em questo acessvel somente a outros procedimentos do mdulo em que ela est declarada.Lista_de_argumentosLista de variveis passadas pela Function como parmetros.As tipoIndica o tipo da procedure Function (Integer, Long, Single, Double, Currency, String ou Variant).Bloco de comandosExpresses a serem executadas pela procedure Function.ExpressoValor de retorno da procedure FunctionPrecauo: Procedures do tipo Function podem ser recursivas, isto , podem chamar a si mesmas. Entretanto, este procedimento pode causar overflow da rea da memria conhecida como stack, por onde os parmetros so passados. Quando a recursividade for necessria, aconselha-se a no declarar a Function como Static. Exemplo A seguinte funo pode ser usada para calcular a raiz quadrada de um nmero. Function SquareRoot (X As Double) As Double Select Case Sgn(X) ' Determina o sinal do argumento. Case 1 ' OK se for positivo. SquareRoot = Sqr(X) Exit Function Case 0 ' Alertar usurio se for zero. SquareRoot = 0 Case -1 ' Alertar usurio se for negativo. SquareRoot = -1 End Select End Function Get (Comando) Descrio L uma varivel a partir de um arquivo em disco. Sintaxe Get [#] nmero_do_arquivo,[nmero_do_registro], nome_da_varivel Comentrios O comando Get tem as seguintes partes: PRIVATEParteDescrioNmero_do_arquivoNmero usado no comando Open para abrir o arquivo.Nmero_do_registroPara arquivos abertos no modo Random, este argumento o nmero do registro a ser lido. Para arquivos abertos no modo Binary, este argumento corresponde ao byte onde a leitura deve comear.Nome_da_varivelNome da varivel usada para receber o contedo do arquivo.Exemplo O seguinte comando l o dcimo registro do arquivo nmero 1 e o armazena na varivel Cliente. Get #1, 10, Cliente Public (Comando) Descrio Usado na seo de Declaraes de um mdulo para declarar variveis Pblicas e alocar espao de memria para armazen-las. Variveis Pblicas so disponveis para todas os procedimentos de todos os formulrios e mdulos, Sintaxe Public nome_da_varivel [([ndices])] [As [New] tipo][, nome_da_varivel [([ndices])] [As [New]tipo]] ... Comentrios O comando Public tem as seguintes partes: PRIVATEParteDescrioNome_da_varivelNome da varivel a ser declarada.ndicesDimenses de variveis do tipo array, quando for o caso.As tipoPalavra reservada para indicar o tipo de varivel a ser declarada: Integer, Long, Single, Double. Currency, String ou Variant.NewCria um novo "instance" de um objeto. Somente aplicvel a variveis-objeto.Exemplo Public Nmero As Integer Hex, Hex$ (Funes) Descrio Retorna um string que representa o valor hexadecimal de um argumento decimal. Sintaxe Hex[$](nmero) Comentrios Hex retorna Variant; Hex[$] retorna String. Exemplo O argumento nmero pode ser qualquer expresso numrica vlida e ser arredondada para o nmero inteiro mais prximo antes da converso. If...Then...Else (Comando) Descrio Permite execuo condicional de um bloco de comandos, baseado em uma expresso. Sintaxe If condio 1 Then [bloco de comandos 1] [ElseIf condio 2 Then [bloco de comandos 2]] [Else [bloco de comandos n]] End if Input# (Comando) Descrio L dados de um arquivo sequencial e os armazena em variveis. Sintaxe Input # nmero_do_arquivo, lista_de_variveis Comentrios O comando Input# tem as seguintes partes: PRIVATEParteDescrioNmero_do_arquivoNmero usado no comando Open para abrir o arquivo. O sinal (#) que precede o nmero do arquivo obrigatrio.Lista_de_variveisLista, separada por vrgulas, que descreve as variveis usadas para armazenar os dados lidos dos arquivos. Lista_de_variveis no pode ser um array, mas pode ser uma varivel que descreve um elemento de um array. Lista_de_variveis tambm no pode ser um tipo de dado definido pelo usurio (user-defined type), mas pode ser um elemento deste tipo de dadoExemplo O seguinte comando l o primeiro registro do arquivo nmero 1 e o armazena na varivel Dados: Input #1, Dados InputBox, InputBox$ (Funes) Descrio Mostra um pedido de entrada ("prompt") em uma caixa de dilogo, para que o usurio entre com um texto. Sintaxe InputBox[$](prompt[,ttulo][,default][,xpos, ypos]]]) Comentrios InputBox retorna Variant; InputBox$ retorna String. A funo InputBox[$] tem as seguintes partes: PRIVATEParteDescrioPromptString mostrado como mensagem na caixa de dilogo.TtuloString a ser mostrado na barra de ttulo da caixa de dilogo.DefaultString mostrado na caixa de dilogo como resposta default, caso o usurio no entre com uma expresso.xposExpresso numrica que especifica, em twips, a distncia horizontal da borda esquerda da caixa at a borda esquerda da tela.yposExpresso numrica que especifica, em twips, a distncia vertical da borda superior da caixa at a borda superior da tela.Exemplo InputBox("Entre com um valor de 0 a 15", "Demonstrao", "1") Int (Funo) Descrio Retorna a poro inteira de um nmero. Sintaxe Int(nmero) Comentrios O argumento nmero pode ser qualquer expresso numrica vlida. Kill (Comando) Descrio Deleta arquivos de um disco. Sintaxe Kill arquivo Comentrios O comando Kill similar aos comandos ERASE e DEL do DOS e deleta apenas arquivos. Para remover diretrios, deve-se usar o comando RmDir. O arquivo a ser removido deve existir previamente. Caso contrrio, um erro em tempo de execuo ocorrer. Exemplo Kill "C:\VBJUNK.DOC" LBound (Funo) Descrio Retorna o menor ndice disponvel para a dimenso indicada de um array. Sintaxe LBound(array[,dimenso]) Comentrios A funo LBound pode ser usada em conjunto com a funo UBound para se determinar o tamanho de um array. LBound pode ser necessria pois, em Visual Basic, os arrays no precisam comear necessariamente no ndice um. Exemplo Seja M um array tridimensional declarado da seguinte maneira: Dim M(1 To 100, 0 To 3, -3 To 4). A funo LBound retornar os seguintes valores: PRIVATEDeclaraoValor RetornadoLBound (M, 1)1LBound (M, 2)0LBound (M, 3)-3 LCase, LCase$ (Funes) Descrio Retorna um string no qual todas as letras de um argumento esto convertidas para minsculas ("lowercase"). Sintaxe LCase[$](string) Comentrios LCase retorna Variant; LCase$ retorna String. Left,Left$ (Funes) Descrio Retorna os n caracteres mais esquerda de um argumento string. Sintaxe Left[$](string, n) Comentrios Left retorna Variant; Left$ retorna String. O argumento n deve ser um inteiro longo (Long). Len (Funo) Descrio Retorna o nmero de caracteres em um string ou o nmero de bytes requerido para armazenar uma varivel. Sintaxe 1 Len(string) Sintaxe 2 Len(minha_varivel) Comentrios Na primeira sintaxe, Len retorna o nmero de caracteres na expresso string. Na segunda, Len retorna o nmero de bytes requeridos para armazenar a varivel minha_varivel. Load (Comando) Descrio Carrega um formulrio ou controle na memria. Sintaxe Load objeto Comentrios O argumento objeto deve ser um formulrio comum, formulrio MDI ou um elemento de um "array de controles". O comando Load carrega o formulrio ou controle na memria, disponibilizando todas as suas propriedades, mas no os exibe na tela. Para exibir um controle, deve-se fazer a propriedade "Visible" verdadeira (True) ou usar o comando Show. LoadPicture (Funo) Descrio Carrega uma figura em um formulrio, caixa de figuras ou controle de imagens. Sintaxe LoadPicture([expresso_string]) Comentrios O argumento expresso_string o nome do arquivo que contm a figura a ser carregada. Usada sem argumento, LoadPicture apaga o contedo de formulrios, caixas de figuras ou controle de imagens. Os arquivos de figuras reconhecidos pelo Visual Basic 3.0 incluem bitmaps (.BMP), cones (.ICO), arquivos codificados em modo run-length (.RLE), e arquivos metafile (.WMF). Para carregar figuras a serem mostradas em caixas de figuras, controle de imagens ou como fundo de formulrios, deve-se carregar o valor LoadPicture na propriedade Picture do objeto em questo. Por exemplo: Picture = LoadPicture(HYPERLINK "C:\\VBGRBG.BMP""C:\VBGRBG.BMP") Picture1. Picture = LoadPicture(HYPERLINK "C:\\VBGRBG.BMP""C:\VBGRBG.BMP") Para carregar uma figura na rea de transferncia deve-se usar a funo SetData:ClipBoard.SetData LoadPicture ("C:\VBGRBG.BMP") LOF (Funo) Descrio Retorna o tamanho, em bytes, de um arquivo aberto. Sintaxe LOF (nmero_do_arquivo) Comentrios O argumento nmero_do_arquivo o nmero usado no comando Open para a abertura do arquivo. Para obter o tamanho de arquivos no abertos deve-se usar a funo FileLen. Log (Funo) Descrio Retorna o logaritmo natural (nepperiano) de um nmero especificado. Sintaxe Log(nmero) Comentrios O argumento nmero pode ser qualquer expresso numrica vlida. A constante "e" aproximadamente 2,718282. MkDir (Comando) Descrio Cria um novo diretrio. Sintaxe MkDir(nome_do_caminho) Comentrios O argumento caminho um string que especifica qual diretrio deve ser criado. Este argumento deve conter menos de 128 caracteres e deve ter a seguinte sintaxe: [drive:] [ \ ]diretrio [ \diretrio] ... O comando MkDir opera de maneira semelhante ao comando MKDIR do DOS, exceto que no pode ser abreviado para MD. MsgBox (Comando e Funo) Descrio Mostra uma mensagem em uma caixa de dilogo Editorronizada e espera que o usurio escolha um boto. A funo MsgBox retorna um valor indicando qual boto foi escolhido; o comando MsgBox no retorna valor. Sintaxe da Funo MsgBox(msg[,[tipo][ttulo]]) Sintaxe do Comando MsgBox msg[,[tipo][,ttulo]] Comentrios O comando e a funo MsgBox tm as seguintes partes: Msg: String a ser mostrado como mensagem da caixa de dilogo; Tipo: Expresso numrica opcional que a soma de valores especificando quais botes devem aparecer, qual cone a ser usado e qual o boto default. A tabela a seguir mostra os valores possveis e os respectivos significados. PRIVATEConstante simblicaValorSignificadoMB_OK0Mostra apenas o boto OK.MB_OKCANCEL1Mostra os botes OK e Cancel.MB_ABORTRETRYIGNORE2Mostra os botes Abort, Retry e Ignore.MB_YESNOCANCEL3Mostra os botes Yes, No e Cancel.MB_YESNO4Mostra os botes Yes e No.MB_RETRYCANCEL5Mostra os botes Retry e Cancel.MB_ICONSTOP16Mostra o cone "Stop".MB_ICONQUESTION32Mostra o cone "Interrogao" (?).MB_ICONEXCLAMATION48Mostra o cone "Exclamao" (!).MB_ICONINFORMATION64Mostra o cone "Informao" (i).Botes defaultMB_DEFBUTTON10O primeiro boto o default.MB_DEFBUTTON2256O segundo boto o default.Ttulo: String a ser usado como ttulo na barra de ttulos da caixa de dilogo. Se omitido, a expresso "Microsoft Visual Basic" ser mostrada. Os valores retornados pela funo MsgBox indicam qual boto foi pressionado, conforme a tabela abaixo. PRIVATEConstante simblicaValorSignificadoIDOK1OK foi pressionadoIDCANCEL2Cancel foi pressionadoIDABORT3Abort foi pressionadoIDRETRY4Retry foi pressionadoIDYES6Yes foi pressionadoIDNO7No foi pressionadoExemplo A funo a seguir mostra uma caixa de dilogo com o ttulo "DEMO" e com a mensagem "Esta uma demonstrao". Somente o boto OK mostrado. RetVal=MsgBox("Esta uma demonstrao", 64, "DEMO") Name (Comando) Descrio Altera o nome de um arquivo em disco ou diretrio. Sintaxe Name arq_antigo As arq_novo Comentrios O comando Name similar ao comando RENAME do DOS, mas pode ser usado tambm para renomear diretrios. Usando Name, pode-se mover arquivos de um diretrio para outro, mas no se pode mover diretrios. Os argumentos arq_antigo e arq_novo so strings que especificam os arquivos antigo e novo, respectivamente, incluindo caminhos. O arquivo especificado em arq_antigo deve existir e o caminho especificado em arq_novo no pode existir ainda. Se Name for usado para renomear arquivos abertos ocorrer um erro em tempo de execuo. Exemplo A declarao a seguir muda o arquivo VBJUNK.DOC do diretrio C:\FOBOS para o diretrio C:\DEIMOS: Name "C:\FOBOS\VBJUNK.DOC" As \DEIMOS\VBJUNK.DOC" On Error (Comando) Descrio Habilita rotinas de tratamento de erros e especifica a localizao desta rotina dentro de uma procedure. Sintaxe On Error {GoTo linha|Resume Next|GoTo 0} Comentrios Se o comando On Error no for usado qualquer erro em tempo de execuo ser fatal, isto , o Visual Basic acusa o erro e gera a mensagem correspondente, mas aborta a execuo. O comando On Error tem as seguintes partes: PRIVATEPartesDescrioGoTo linhaHabilita a rotina de tratamento de erros que comea na linha rotulada com linha. A rotina de tratamento de erros deve estar dentro da mesma procedure onde o erro ocorreu.Resume NextEspecifica que, quando um erro ocorrer, o controle ser dirigido para o comando imediatamente a seguir quele onde o erro ocorreu. Em outras palavras, o programa continua a execuo normal.GoTo 0Desabilita o tratamento de erros na procedure atual.Para evitar que a rotina de tratamento de erros seja inadvertidamente executada quando a procedure for finalizada sem erros, basta inserir os comandos Exit Sub ou Exit Function imediatamente antes da rotina de tratamento de erros. Open (Comando) Descrio Habilita operaes de entrada/sada (I/O) em um arquivo, ou seja, "abre" um arquivo. Sintaxe Open arquivo [For modo][Access acesso][lock] As [#]n_do_arquivo [Len= comprimento] Comentrios Todo arquivo deve ser aberto antes que qualquer operao de entrada/sada possa ser executada. o comando Open aloca um buffer para o arquivo e determina o modo de acesso a ser empregado. O comando Open tem as seguintes partes: PRIVATEPartesDescrioArquivoNome do arquivo.ModoPalavra reservada que especifica o tipo de arquivo: Append, Binary, Input, Output, Random.AccessPalavra reservada que especifica quais operaes so permitidas para o arquivo: Read, Write, Read Write. Disponvel somente para ambiente em rede.PartesDescrioLockPalavra reservada que especifica quais operaes so permitidas para o arquivo por outros processos: Shared, Lock Read, Lock Write, Lock Read Write. Disponvel somente para ambiente em rede.N_do_arquivoNmero inteiro com valor entre 1 e 255, inclusive. Quando um arquivo for aberto, esta varivel estar associada ao arquivo enquanto ele estiver aberto.ComprimentoPara arquivos Random, siginifica o comprimento do registro. Para arquivos sequenciais, significa o nmero de caracteres.Se o arquivo no existir, ser criado quando da execuo do comando Open. O argumento Modo divide-se nos seguintes casos: PRIVATEModoDescrioRandomArquivos de acesso aleatrio (default)BinaryArquivos binriosInputArquivos sequenciais para entrada (leitura)OutputArquivos sequenciais para sada (gravao)AppendArquivos sequenciais para sada (gravao). O ponteiro colocado no fim do arquivo.Option Explicit (Comando) Descrio Fora que todas as variveis sejam explicitamente declaradas. Sintaxe Option Explicit Comentrios O comando Option Explicit usado na seo de Declaraes de um formulrio ou mdulo para forar a declarao explcita de variveis, isto , todas as variveis devero ser declaradas antes de serem usadas. Caso o comando Option Explicit esteja sendo usado e alguma varivel usada no for declarada, ocorrer um erro de compilao. Quando o comando Option Explicit no for usado, todas as variveis usadas e no declaradas sero do tipo Variant, o que pode ocupar mais memria do que o necessrio. Print# (Comando) Descrio Escreve dados em um arquivo sequencial. Sintaxe Print# nmero_do_arquivo,[[{Spc(n)|Tab(n)}][lista_de_expresses][{;|,}]] Comentrios O comando Print# tem as seguintes partes: PRIVATEParteDescrioNmero_do_arquivoNmero usado no comando Open para abrir o arquivo.Spc(n)Funo do Visual Basic usada opcionalmemente para inserir n espaos. O uso mltiplo permitido.Tab(n)Funo do Visual Basic usada opcionalmemente para deslocar para a coluna n antes da sada ser gravada. O uso mltiplo permitido.Lista_de_expressesExpresses numricas ou string, separadas por vrgulas, a serem escritas no arquivo.Caractere que determina a posio do prximo caractere a ser gravado. Ponto-e-vrgula siginifica que o prximo caractere gravado imediatamente aps o anterior; vrgula siginifica que o prximo caractere impresso no comeo da prxima "zona de impresso". Cada zona de impresso tem 14 colunas. Se nenhum caractere for especificado, a gravao ser feita na prxima linha. Put (Comando) Descrio Grava uma varivel em um arquivo em disco. Sintaxe Put[#]nmero_do_arquivo,[nmero_do_registro],nome_da_varivel. Comentrios O comando Put tem as seguintes partes: PRIVATEParteDescrioNmero_do_arquivoNmero usado no comando Open para abrir o arquivo.Nmero_do_registroPara arquivos abertos como Random, o nmero do registro onde se deseja gravar a varivel. Para arquivos abertos como Binary, o byte onde a gravao deve comear.Nome_da_varivelNome da varivel a ser gravada. Variveis-objeto e arrays no podem ser usados. Entretanto, elementos de arrays podem ser gravados individualmente. QBColor (Funo) Descrio Retorna a cor RGB (Vermelho, Verde, Azul) correspondente a um nmero. Sintaxe QBColor(nmero_da_cor) Comentrios O argumento nmero_da_cor um inteiro entre 0 e 15 que corresponde a cores usadas em outras verses do BASIC. A tabela abaixo descreve tais cores. PRIVATENmeroCorNmeroCor0Preto8Cinza1Azul9Azul Claro2Verde10Verde Claro3Ciano11Ciano Claro4Vermelho12Vermelho Claro5Magenta13Magenta Claro6Amarelo14Amarelo Claro7Branco15Branco BrilhanteEm alguns monitores, a cor QBColor(7) pode fornecer um cinza claro. O branco usual a cor QBColor(15). Randomize (Comando) Descrio Inicializa o gerador de nmeros aleatrios. Sintaxe Randomize[nmero] Comentrios O argumento nmero qualquer expresso numrica vlida e usado para inicializar o gerador de nmeros aleatrios, fornecendo uma nova semente. Se este argumento for omitido, ser usado o valor retornado pela funo Timer. Se o comando Randomize no for usado, a funo Rnd retornar a mesma sequncia de nmeros aleatrios cada vez que o programa for executado. ReDim (Comando) Descrio Usado dentro de procedures para declarar arrays dinmicos e alocar ou desalocar espao de armazenagem. Sintaxe ReDim[Preserve] nome_do_array(ndices)[As tipo] Comentrios O comando ReDim tem as seguintes partes: PRIVATEParteDescrioPreservePreserva os dados em um array existente quando a ltima dimenso redimensionada.Nome_do_arrayNome da varivel.ndicesDimenses do array.As tipoTipo do array (Integer, Long, Single, Double, Currency, String, Variant) Reset (Comando) Descrio Fecha todos os arquivos em disco. Sintaxe Reset Comentrios O comando Reset fecha todos os arquivos em disco abertos e grava o contedo de todos os buffers do DOS em disco. Resume (Comando) Descrio Continua a execuo aps o trmino de uma rotina de tratamento de erros. Sintaxe Resume {[0]|Next|linha} Comentrios As vrias formas do comando Resume esto descritas na tabela a seguir. PRIVATEComandoDescrioResume [0]A execuo continua a partir do comando que causou o erro, ou a partir da procedure mais recentemente chamada que contenha uma rotina de tratamento de erro.Resume NextA execuo continua a partir do comando imediatamente a seguir quele que causou o erro, ou imediatamente a seguir da procedure mais recentemente chamada que contenha uma rotina de tratamento de erro.Resume linhaA execuo continua em linha, que um rtulo ou nmero de linha e deve estar na mesma procedure da rotina de tratamento de erros.Se o comando Resume for usado em qualquer lugar exceto em uma rotina de tratamento de erros, um erro ocorrer. RGB (Funo) Descrio Retorna um inteiro longo (Long) representativo de um valor de cor RGB. Sintaxe RGB(vermelho, verde, azul) Comentrios A funo RGB tem as seguintes partes: PRIVATEParteDescrioVermelhoInteiro na faixa 0 a 255, inclusive, que representa a componente vermelha da cor.VerdeInteiro na faixa 0 a 255, inclusive, que representa a componente verde da cor.AzulInteiro na faixa 0 a 255, inclusive, que representa a componente azul da cor.A tabela a seguir mostra a representao hexadecimal de algumas cores padronizadas, bem como as intensidades das respectivas controles. PRIVATECorValor RGBVermelhoVerdeAzulPreto&H00000Azul&HFF000000255Verde&HFF0002550Ciano&HFFFF000255255Vermelho&HFF25500Magenta&HFF00FF2550255Amarelo&HFFFF2552550Branco&HFFFFFF255255255 RmDir (Comando) Descrio Remove um diretrio existente. Sintaxe RmDir caminho Comentrios O argumento caminho um string que especifica o nome do diretrio a ser removido e deve ter a seguinte sintaxe: [drive:] [ \ ]diretrio [ \diretrio] ... O comando RmDir semelhante ao comando RMDIR do DOS, mas no pode ser abreviado para RD. Se o diretrio a ser removido contiver qualquer informao alm do diretrio de trabalho (.) e do diretrio (..), ocorrer um erro. Rnd (Funo) Descrio Retorna um nmero aleatrio. Sintaxe Rnd[(nmero)] Comentrios O argumento nmero pode ser qualquer expresso numrica vlida. A funo Rnd retorna uma varivel Single menor do que 1 e maior ou igual a zero. O valor de nmero determina o modo de gerao do nmero aleatrio, de acordo com a tabela a seguir. PRIVATENmeroNmero retornado< 0Sempre o mesmo nmero, conforme determinado por nmero.> 0O prximo nmero aleatrio da sequncia.= 0O nmero mais recentemente gerado.OmitidoO prximo nmero aleatrio da sequncia.A mesma sequncia de nmeros aleatrios gerada cada vez que o programa executado porque chamadas sucessivas da funo Rnd usam o nmero aleatrio anterior como semente para o prximo nmero. Para evitar que isto acontea, deve-se usar o comando Randomize para inicializar o gerador de nmeros aleatrios antes de executar a funo Rnd. SavePicture (Comando) Descrio Grava uma figura de um formulrio, caixa de figuras ou controle de imagens em um arquivo. Sintaxe SavePicture figura, arquivo Comentrios O comando SavePicture tem as seguintes partes: PRIVATEParteDescrioFiguraPropriedade "Picture" ou "Image" do controle a partir da qual a figura deve ser criada.ArquivoNome do arquivo, incluindo caminhos opcionais.Se a figura foi carregada de um arquivo, seja em tempo de projeto ou execuo, ela ser salva com o mesmo formato. Figuras com a propriedade imagem so sempre salvas como bitmaps (.BMP). Figuras geradas em tempo de execuo somente sero salvas em disco se a propriedade AutoRedraw do controle-suporte for verdadeira. Exemplo A declarao a seguir salva a figura contida na caixa de figura picFig, formulrio frmFigura, no arquivo "C:\FIGURA.BMP": SavePicture frmFigura.picFig.Picture, "C:\FIGURA.BMP" Seek (Funo) Descrio Retorna a posio atual de um arquivo Sintaxe Seek(nmero_do_arquivo) Comentrios O argumento nmero_do_arquivo o nmero usado no comando Open para abrir o arquivo. O comando Seek retorna um valor entre 1 e 2.147.483.647 (equivalente a 2^31-1), inclusive. Para arquivos abertos no modo Random, Seek retorna o nmero do prximo arquivo lido ou escrito. Para arquivos abertos nos modos Binary, Output, Append ou Input, Seek retorna a posio do byte onde a prxima operao ser executada. O primeiro byte de um arquivo est na posio 1, o segundo na posio 2 e assim por diante. Seek (Comando) Descrio Define a posio, em um arquivo, para a prxima operao de entrada ou sada. Sintaxe Seek[#]nmero_do_arquivo, posio Comentrios O comando Seek tem as seguintes partes: PRIVATEParteDescrioNmero_do_arquivoNmero usado no comando Open para abrir o arquivo.PosioExpresso numrica que indica onde a prxima operao I/O deve ocorrer. O valor de posio deve estar entre 1 e 2.147.483.647 (equivalente a 2^31-1).Para arquivos Random, posio um nmero de registro do arquivo. Para arquivos Binary, Output, Append ou Input,posio a posio do byte relativamente ao comeo do arquivo (posio 1). Select Case (Comando) Descrio Executa um dentre vrios comandos dependendo do valor de uma expresso. Sintaxe Select Case expresso_teste [Case lista_de_expresses-1 [bloco_de_comandos-1]] [Case lista_de_expresses-2 [bloco_de_comandos-2]] [Case Else [bloco_de_comandos-n]] End Select Comentrios O comando Select Case tem as seguintes partes: PRIVATEParteDescrioSelect CaseComeo da estrutura de decises (obrigatrio)Expresso_testeQualquer expresso numrica ou string. Se Expresso_teste for igual lista_de_expresses de uma clusula Case, o bloco_de_comandos associado ser executado. O controle ento passa para End Select. Se Expresso_teste prencher os requisitos de mais de uma clusula Case, apenas a primeira ser executada.CasePalavra reservada que divide os comandos a serem executados quando uma expresso em Lista_de_expresses for igual a Expresso_teste.Lista_de_expressesLista de expresses separadas por vrgulas em uma das seguintes formas: Expresso Expresso To Expresso Is operador-de-comparao ExpressoBloco_de_comandosLista de comandos em Visual Basic.Case ElsePalavra-chave que indica o bloco de comandos que ser executado quando Expresso_teste no se adequar a nenhuma das clusulas Case.End SelectFinalizao do bloco Select Case (obrigatrio)Exemplo Select Case Nmero Case 1 To 20 Msg = "O nmero est entre 1 e 20 !" Case 21 To 50 Msg = "O nmero est entre 21 e 50 !" Case 51 To 100 Msg = "O nmero est entre 51 e 100 !" Case Else Msg = "O nmero e maior do que 100 !" End Select MsgBox Msg SetAttr (Comando) Descrio Define os atributos para um arquivo. Sintaxe SetAttr nome_do_arquivo, atributos Comentrios O comando SetAttr tem as seguintes partes: PRIVATEParteDescrioNome_do_arquivoString que contm uma identificaa no ambgua de um arquivo, podendo incluir informaes adicionais sobre o drive e o caminho.AtributosA soma de qualquer um dos seguintes valores que caracterizam os atributos de um arquivo:Const SimblicaValorSignificadoATTR_NORMAL0Arquivo normalATTR_READONLY1Arquivo somente para leituraATTR_HIDDEN2Arquivo escondidoATTR_SYSTEM4Arquivo do sistemaATTR_ARCHIVE32Arquivo foi modificado desde o ltimo back-upSe o comando SetAttr for empregado quando o arquivo especificado em nome_do_arquivo estiver aberto, ocorrer um erro em tempo de execuo. Sgn (Funo) Descrio Retorna um inteiro indicando o sinal de um nmero. Sintaxe Sgn(nmero) Comentrios O argumento nmero pode ser qualquer expresso numrica vlida. Se nmero>0, ento Sgn(nmero) retorna 1; Se nmero=0, ento Sgn(nmero) retorna 0; Se nmero<0, ento Sgn(nmero) retorna -1; Shell (Funo) Descrio Roda um programa executvel. Sintaxe Shell(string_de_comando[,tipo_de_janela]) Comentrios A funo Shell tem as seguintes partes: PRIVATEParteDescrioString_de_comandoNome do programa a ser executado, incluindo caminhos e linhas de comando. As extenses podem ser .COM, .EXE, .BAT ou .PIF. O default .EXE.Tipo_de_janelaNmero correspondente ao estilo da janela na qual o programa ser executado. Se este argumento for omitido, o programa aberto minimizado com foco.A tabela a seguir mostra todos os possveis valores da varivel Tipo_de_janela. PRIVATEValorTipo da Janela1, 5, 9Normal com foco2Minimizada com foco (default)3Maximizada com foco4, 8Normal sem foco6, 7Minimizada sem focoA funo Shell executa aplicativos assincronamente. Isto significa que o cdigo em Visual Basic poder continuar sua execuo antes do encerramento do programa iniciado com Shell. Para monitorar o estado de um programa Shell, a funo GetModuleUsage do Windows API (Aplications Program Interface) poder ser usada. Sin (Funo) Descrio Retorna o seno de um ngulo. Sintaxe Sin(ngulo) Comentrios O argumento ngulo pode ser qualquer expresso numrica vlida, medida em radianos. O resultado estar na faixa entre -1 e +1. Sqr (Funo) Descrio Retorna a raiz quadrada de um nmero. Sintaxe Sqr(nmero) Comentrios O argumento nmero pode ser qualquer expresso numrica vlida maior ou igual a zero. Static (Comando) Descrio Usado dentro de uma procedure para declarar variveis e alocar espao para armazen-las. Variveis declaradas com Static retm o valor enquanto o programa estiver rodando. Sintaxe Static nome_da_varivel [([ndices])] [As [New] tipo][, nome_da_varivel [([ndices])] [As [New]] ... Comentrios O comando Static tem as seguintes partes: PRIVATEParteDescrioNome_da_varivelNome da varivel a ser declarada.ndicesDimenses de variveis do tipo array, quando for o caso.As tipoPalavra reservada para indicar o tipo de varivel a ser declarada: Integer, Long, Single, Double. Currency, String ou Variant.NewCria um novo "instance" de um objeto. Somente aplicvel a variveis-objeto.Exemplo Static rea As Single Stop (Comando) Descrio Suspende a execuo de um programa em Visual Basic. Sintaxe Stop Comentrios O comando Stop encerra a execuo de programas mas, ao contrrio de End, no fecha arquivos e no zera variveis. Um programa encerrado com Stop pode ter sua execuo retomada escolhendo-se o comando Continue do menu Run. Str, Str$ (Funes) Descrio Retorna um string representativo do valor de uma expresso numrica. Sintaxe Str[$](nmero) Comentrios Str retorna Variant; Str$ retorna String. Sub (Comando) Descrio Declara o nome, argumento e cdigo que formam o corpo de uma procedure do tipo Sub. Sintaxe [Static] [Private] Sub nome_da_procedure [(lista_de_argumentos)] [As tipo] [bloco de comandos] [Exit Sub] [bloco de comandos] End Sub Comentrios O comando Sub tem as seguintes partes: PRIVATEParteDescrioStaticIndica que as variveis locais da procedure Sub em questo so preservadas entre duas chamadas.PrivateIndica que a procedure Sub em questo acessvel somente a outros procedimentos do mdulo em que ela est declarada.Lista_de_argumentosLista de variveis passadas pela Sub como parmetros.As tipoIndica o tipo da procedure Function (Integer, Long, Single, Double, Currency, String ou Variant).Bloco de comandosExpresses a serem executadas pela procedure Function.Exit SubCausa o encerramento imediato da procedure Sub.End SubMarca o fim de uma procedure Sub.O argumento Lista_de_argumentos tem a seguinte sintaxe: [ByVal]varivel[()][As tipo][, [ByVal]varivel[()][As tipo]... A tabela a seguir descreve as partes de Lista_de_argumentos: PRIVATEParteDescrioByValIndica que o parmetro passado "por valor" e no "por referncia". A palavra reservada ByVal no pode ser usada para variveis de tipos definidos pelo usurio.VarivelNome da varivel que passada como parmetro.As tipoDeclara o tipo da varivel.O valor de uma varivel pode ser alterado por um procedure quando ela passada para esta procedure "por referncia". Por outro lado, apenas uma cpia da varivel passada quando se usa ByVal. Se a procedure alterar o valor, apenas a cpia da varivel ser alterada, e no a varivel em si. Precauo: Procedures do tipo Sub podem ser recursivas, isto , podem chamar a si mesmas. Entretanto, este procedimento pode causar overflow da rea da memria conhecida como stack, por onde os parmetros so passados. Quando a recursividade for necessria, aconselha-se a no declarar a Sub como Static. Tab (Funo) Descrio Usada com o comando Print# ou com o mtodo Print para mover a posio na qual o prximo caractere ser impresso. Sintaxe Tab(coluna) Comentrios O argumento coluna um inteiro que especifica a coluna da nova posio de impresso. A posio de impresso mais esquerda sempre a nmero 1. A posio mais direita a largura do arquivo de sada, que pode ser definida com o comando Width#. Tan (Funo) Descrio Retorna a tangente de um ngulo. Sintaxe Tan(ngulo) Comentrios O argumento ngulo pode ser qualquer expresso numrica vlida. Time, Time$. (Funes) Descrio Retorna a hora atual do sistema. Sintaxe Time[$][()] Comentrios Time retorna Variant contendo uma hora armazenada internamente como a parte fracionria de um nmero de preciso dupla. Time$ retorna um string de oito caracteres da forma hh:mm:ss, onde hh a hora (00-23), mm o minuto (00-59) e ss o segundo (00-59). Time, Time$.(Comandos) Descrio Especifica a hora do sistema. Sintaxe Time[$] = expresso. Comentrios Para Time, o argumento expresso deve ser um String formatado como time ou uma Variant do tipo VarType 7 (Date) ou VarType 8 (String). Para Time$, o argumento expresso deve ter uma das seguintes formas, onde hh a hora (00-23), mm o minuto (00-59) e ss o segundo (00-59): PRIVATEParteDescriohhEspecifica a hora; minutos e segundos so definidos em 00.hh:mmEspecifica hora e minutos; segundos so definidos em 00.hh:mm:ssEspecifica hora, minutos e segundos.Exemplo Time$ = "11:20:30" Type (Comando) Descrio Declara um tipo de dados definido pelo usurio. Sintaxe Type varivel_do_usurio nome_do_elemento [(ndices)] As nome_do_tipo [nome_do_elemento [(ndices)] As nome_do_tipo] End Type Comentrios O comando Type tem as seguintes partes: PRIVATEParteDescrioTypeMarca o comeo da declaraoVarivel_do_usurioNome do tipo de dados definido pelo usurio.Nome_do_elementoNome de um elemento do tipo de dados definido pelo usurio.ndicesDimenses de elementos de arrays, quando for o caso.Nome_do_tipoUm dos seguintes tipos: Integer, Long, Single, Double, Currency, String ou Variant.End TypeMarca o fim da declarao.O comando Type somente pode ser usado na seo de Declaraes de um mdulo. Uma vez tendo-se declarado um tipo de dados definido pelo usurio, variveis deste tipo podero ser declaradas em qualquer procedure do aplicativo, usando-se os comandos Dim, Public, ReDim ou Static. Tipos de dados definidos pelo usurio so anlogos s varveis Record do Pascal. Este tipo de dados geralmente usado quando se desejar um registro de dados que contenham diferentes tipos de variveis. O exemplo a seguir ilustra um caso simples de varivel usada para armazenar dados de vendas. Exemplo Type Vendas ndice As Long Cliente As String*38 Produto As String*24 End Type Um varivel do tipo "Vendas" pode ser declarada da seguinte forma: Dim Vendas_do_Ms As Vendas Os elementos desta nova varivel sero ento referidos da forma a seguir: Vendas_do_Ms.ndice Vendas_do_Ms.Cliente Vendas_do_Ms.Produto Cada valor de Vendas_do_Ms, com seus trs elementos, pode ser ento gravado em um arquivo Random, por exemplo. UBound (Funo) Descrio Retorna o maior ndice disponvel para a dimenso indicada de um array. Sintaxe UBound(array[,dimenso]) Comentrios A funo UBound pode ser usada em conjunto com a funo LBound para se determinar o tamanho de um array. Exemplo Seja M um array tridimensional declarado da seguinte maneira: Dim M(1 To 100, 0 To 3, -3 To 4). A funo UBound retornar os seguintes valores: PRIVATEDeclaraoValor RetornadoUBound (M, 1)100UBound (M, 2)3UBound (M, 3)4UCase, Ucase$ (Funes) Descrio Retorna um string no qual todas as letras de um argumento esto convertidas para maisculas ("uppercase"). Sintaxe UCase[$](string) Comentrios UCase retorna Variant; UCase$ retorna String. UnLoad (Comando) Descrio Descarrega um formulrio ou controle da memria. Sintaxe UnLoad objeto Comentrios O argumento objeto o formulrio ou array de controles a ser descarregado. Antes de um formulrio ser descarregado, um evento Query_Unload ocorre, seguido por um evento Form_Unload. Quando um formulrio descarregado da memria, todos os controles nele localizados tornam-se inacessveis. Entretanto, todos os cdigos associados com o formulrio permanecem na memria. Val (Funo) Descrio Retorna o valor numrico de um string. Sintaxe Val(expresso_string) Comentrios O argumento expresso_string uma sequncia de caracteres que pode ser interpretada numericamente. A funo Val para de ler o primeiro caractere que no puder ser reconhecido como parte de um nmero. A funo Val retorna sempre Double. Entretanto, se o resultado for associado a uma varivel, o tipo Double convertido para o tipo de dados desta varivel. While...Wend (Comandos) Descrio Executa uma srie de comandos dentro de um lao enquanto ("While") uma dada condio for verdadeira. Sintaxe While condio [bloco_de_comandos] Wend Comentrios O comando While...Wend tem as seguintes partes: PRIVATEParteDescrioWhileMarca o comeo do lao While...WendCondioQualquer expresso numrica ou string que d como resultado "true" (no zero) ou "false" (zero). Se Condio for verdadeira, os comandos de Bloco_de_comandos sero executados. Caso contrrio, a execuo salta para o comando seguinte a While...Wend.Bloco_de_comandosQualque nmero de comandos em Visual Basic.WendMarca o fim do lao While...Wend Width# (Comando) Descrio Define uma largura ("Width") para um arquivo. Sintaxe Width# nmero_do_arquivo, largura Comentrios O comando Width# tem as seguintes partes: PRIVATEParteDescrioNmero_do_aqrquivoNmero usado no comando Open para abrir o arquivo.LarguraExpresso numrica entre 0 e 255, inclusive, que indica quantos caracteres devem aparecer em uma linha do arquivo. Se for igual a zero, no haver limite para o comprimento da linha. O valor default zero. Write# (Comando) Descrio Escreve dados em um arquivo sequencial. Sintaxe Write# nmero_do_arquivo[,lista_de_expresses] Comentrios O comando Write# tem as seguintes partes: PRIVATEParteDescrioNmero_do_arquivoNmero usado no comando Open para abrir o arquivo.Lista_de_expressesExpresses numricas ou string, separadas por vrgulas, a serem escritas no arquivo.O arquivo identificado por Nmero_do_arquivo deve ter sido aberto nos modos Append ou Output. Diferentemente do comando Print#, Write# insere vrgulas entre itens e aspas no comeo e no fim de strings. Write# tambm insere um caractere de linha nova quando o ltimo caractere de Lista_de_expresses tiver sido escrito. AGRADECIMENTOS Gostaria de deixar registrado aqui o meu agradecimento a vrios programadores de Visual Basic espalhados pelo Brasil afora, em especial a Leonardo Mota Barros (http://www.geocities.com/Area51/1380/) e lvaro Augusto de Almeida ( HYPERLINK http://www.geocities.com/WallStreet/Exchange/1726 http://www.geocities.com/WallStreet/Exchange/1726). Aqui vo alguns endereos quentes da INTERNET sobre o Visual Basic: Alvaro Augusto de Almeida:  HYPERLINK http://www.geocities.com/WallStreet/Exchange/1726/ http://www.geocities.com/WallStreet/Exchange/1726/ ZDNet University (cursos): http://www.zdu.com Daniel Wimans Visual Basic homepage:  HYPERLINK http://www.oden.se/~daniel/vb/ http://www.oden.se/~daniel/vb/ Exotech Informtica - Frum Visual Basic:  HYPERLINK http://www.exotech.com.br/vbasic/ http://www.exotech.com.br/vbasic/ Marcio's Visual Basic :  HYPERLINK http://www.terravista.pt/copacabana/1102/ http://www.terravista.pt/copacabana/1102/ Informtica Exame Online - Forum Visual Basic:  HYPERLINK http://www2.uol.com.br/info/forum/vbasic.html http://www2.uol.com.br/info/forum/vbasic.html Frum Access (foruns de Access e VB):  HYPERLINK http://www.forumaccess.com/ http://www.forumaccess.com/ Visual Basil On Line:  HYPERLINK http://www.vbonline.com/ http://www.vbonline.com/ Microsoft:  HYPERLINK http://microsoft.com/vbasic http://microsoft.com/vbasic BIBLIOGRAFIA TTULO: VISUAL BASIC 5 APLICAES COMERCIAIS AUTOR: ALCINDO ALVES DOS REIS FILHO EDITORA: BRASPORT TTULO: VISUAL BASIC 4 OBJECTS AND CLASSES SIPER BIBLE EDITORA: WAITE GROUP PRESS TTULO: VISUAL BASIC 5 EM 21 DIAS EDITORA: CAMPUS TTULO: USANDO O VISUAL BASIC 5 EDITORA: CAMPUS/QUE FEPESMIG/UEMG FENVA/1999 Prof. Hlio Lemes Costa Jr. Pgina  PAGE 77     EMBED Word.Picture.8                                  OBJECT BOX SETTING BOX  0Hd  $ - ^ c z )/05 $%&:<^d@B%'I6CJOJQJ CJ OJQJ5CJOJQJ CJOJQJOJQJ5CJ$OJQJ CJ$OJQJCJCJ`CJ$N01234GHdefghijkl01234GHdefghijkl:^Bc+O|  x y  %&h{"             T:^Bc+O|  $$ x y  %&h{"$ & F$$$"XP2b=0YIz{ 2 L u v x !!žᩢ                                      ="XP2b=0Y$$ & FIz{ 2 L u v x $$$IKZ[g~4678OPQ{x """"####[$a$#%)%K%Q%`%f%&&&&g&m&n&s&''''((((k)q)r)w)*޴OJQJ CJ OJQJj6OJQJU CJOJQJ 0JOJQJj6OJQJU 6OJQJj6OJQJU6CJOJQJ5CJOJQJB !!""$$~%%&&((****:*;*++`,y,$$$$!""$$~%%&&((****:*;*++`,y,z,,----.//.1/1\2]244V5W5i5j5k55555555555555555555555666666 7778888999999999 9 9 9 9 9999999999b**:***o+q+++a,x,y,,,,,5-7-------......3/:/G/N///////218122T2Z2h2n283>3K3Q3g3m333445 5&5,5V5W5X5h5i5555555555555jOJQJU5CJOJQJ5CJ"OJQJ5CJ$OJQJ 5OJQJ CJ OJQJOJQJNy,z,,----.//.1/1\2]244V5W5i5j5k55555555$$$55'6.656?6A6L6O6]666666 7 777777777H8R888889%9999999(:*:+:.:::::;;<;U;^;`;g;i;p;r;;;;w=}===d>u>v>{>|>}>>>>>>>>>>>>>>>5CJOJQJ5CJ$OJQJjOJQJU 5OJQJOJQJjOJQJUmHR5555555555555555666666 77788889999999999 9 9 9 9 9999999999999999999999999::::::::: : :::::9;:;;;=;;;K<L<<<T=U===c>v>z>{>}>>>>_???@#@a@b@c@@@@@@@AAABBBBBBBBB\C^C_CCCCCcDdDeDDDDDDDDDDDRESEUEEEE    `9::::::::: : :::::9;:;;;=;;;K<L<<<T=U==$ & F $==c>v>z>{>}>>>>_???@#@a@b@c@@@@@@@AAA< < $$ & F >? ???T?\?b?o?????????%@/@e@m@@@@@@@8ABAJATAAAAAAAB&BBBBBdClCCCCCCD DDjDxDDDDDDDDDE EWE\EbEmEEEEEEEEEF F&F2FfFmFFFFFFFFFFFjOJQJUmH 5OJQJOJQJ\ABBBBBBBBB\C^C_CCCCCcDdDeDDDDDDDDDD<DDRESEUEEEE"F#F$FFFGG GGGGGGG H"HHdI|I & F, h,<E"F#F$FFFGG GGGGGGG H"HHdI|ImKKKKK9LQLLLL`MNNNNNN8O&P'P(P)PnPPPPPPPPPR RRRRR½mnRjp4s  8F"G.G7GFGGGGGGGGGGGH H H!H"H#H%H+HbHmHHHHHHH9IBIEIKIYIbIeIgIhI|IIIJJ JJ@JFJGJLJ^JiJJJMKTKKKKKKKKKKLL0L6L*OJQJ5>*OJQJ56OJQJ 5OJQJOJQJ CJ$OJQJG7f8fTfUf]f^f_fpfqf&g'g(g8g9gGggghhhibjcjejfjijlj$ & F$$$ghhhibjcjejfjijljmjnjojpjqjrjsjtjujvjwjxjyjzj{j|j}j~jjjjjjjjjjjjjjj¿}zwtqnkU  /  U      *ljmjnjojpjqjrjsjtjujvjwjxjyjzj{j|j}j~jjjjjjjjjjjj$jjjjj4k5kVkWkykkkl\lllm_mmmm+n^nnnnnp$$$ $jj4k5kVkWkykkkl\lllm_mmmm+n^nnnnnppqqrrrrssttuuvvv x!xxx~{xujk   {|wx ,no?D  ,nnnnnnnnooooWo]o^ocooooooooopp pppp"p;pCphpspppppppppqqqqqqqqqqqqrrr rjrnrrrrrrrrrrrrlsvsj OJQJUjOJQJUj,OJQJUj_ OJQJU 6OJQJ56OJQJ 5OJQJOJQJjOJQJUIppqqrrrrssttuuvvv x!xxxyyAzBz{{ |!||$vs~sssssssss*t2ttttttttu&u'u}?}}}}}}~~+,EF./0EFւׂ*+|yvsGH,-"# VLMNjkuvIJ-|||=}>}?}}}}}}~~+,EF.$$$@}B}H}}}}}}}}}}}~~~~~~.6HP€ˀ!1Epvw|‚ق-4 /3y|Ƈȇ·чׇ$&5CJ$OJQJ CJOJQJ CJ$OJQJ56OJQJ 5OJQJOJQJU./0EFւׂ*+kl$%ъҊԊoph$kl$%ъҊԊophij,-mowxږ|}¿}zwtV!"2Z[ce8@NOhijbcDEfg-Z`ь׌}~NTl5;הޔ,3͕ϕQWdj֗ܗ&,4:kmsy,2ÚprWXb"-3BD  CJ$OJQJ5CJ$OJQJ56OJQJ5CJOJQJ H*OJQJOJQJ 5OJQJRhij,-mowxږ|}5$}56dVXbc}~PQqr./\]ޞߞ !m~{xuTBCYSTU45  z|/067InU,56dVXbc}~PQqr./\]ޞߞ$$$ !mDEm  uvC$$DEm  uvCD01j¨Ϩ֨2Geũͩ[}ztq c  rTU  klCDVS*CD01j¨Ϩ֨2Geũ$L$$èΨϨ+,126GNelpxLP}V\]}hj׹ݹºǺw}+- suik u CJ$OJQJ CJ"OJQJ56OJQJ CJOJQJ5CJOJQJ >*OJQJ 5OJQJ5CJ OJQJ5CJ$OJQJOJQJIũͩ[cժ!pL}3;ޭZc<$$[cժ!pL}3;ޭZc<=xyFGU]}~ysp  ˰ef./0{ J   6 W  ͼ*<=xyFGU]}~ڷ۷?@b$$$$ڷ۷?@b~ʺȻɻ3HUV@AijIJ|yvy34<=deo'(5Jf=>-b~ʺȻɻ3HUV@AijIJ$ MN9:$ MN9:GHXYmn~{xu $%56CD_`lm/0stx-:GHXYmn?M[e$$?M[es /EWi|Z[kl [|~{xuAbQRbc /ATfx &4Bes-es /EWi|Z[kl$ [|78 !m$78 !mrsulxjk+89ý~{xu<=J|  qr  DFG o/P.,rsulxjk+89$$$(.FLpxmsu{HNairs  2 3 4 J K ~    ͺ 0JOJQJjOJQJUjOJQJU5CJ OJQJ5CJ$OJQJ5CJOJQJ 5OJQJOJQJ CJOJQJIVWxZ[PQl&%6CDeSTvwqr 7~{xuij|}!"12?PO $%.VWxZ[PQl&%6CDe$STvwqr 7NhEers$7NhEersV_astmn5N~{xu@wxabst0b ~'>.sV_astmn$5Nv }~!! & F$$$Nv }~Syz|tqif5  6^  _        !!4  5]ghgh|~FG ,hz'%Syz>?mn  ]^h & F>?mn  ]^&'L M    Ž{xurojgda^[PlMN_`a    f  g    B  Cb  c    P  Q      "&'L M     ' b    / 0 $$ & F  ' b    / 0 }    C     6      !"#;8i|yvspJ{ X X Ywxy Yde{WoB$fO+0 }    C     6      !"#;8$    ;Vik u{|<B !""$$!&'&(&-&( ( ((((((****{+++|,~,,,,,R2X222n3}333444444 595e5h555556&6C6i6j65CJOJQJ5CJOJQJ 6OJQJ 5OJQJOJQJ5CJ$OJQJT8io{1=K*Vg [gv~o{1=K*Vg [gv~CDoWX~{xug*+>?f 'jx,X7EQs.~CDoWX#V^$$#V^YZlMvwWXYZlm_`OP " G!H!{!!~{xu:;`v23"#()*+~  5z()$,_f.YZlMvwWXYZlm_`OP$ " G!H!{!!!!"%%''********.+$!!!"%%''********.+7+f+q+y+z+{+++++*,3,h,s,{,|,~,,,----..//U/l/m/~{xu-qrOX KT..+7+f+q+y+z+{+++++*,3,h,s,{,|,~,,,----..//U/$$U/l/m/000011e1}1~11111222222353l3m3n3}3e4$ & F$m/000011e1}1~11111222222353l3m3n3}3e4f44495555555&6h6i66ƾ~{xuroli\I      M  }    hifg(e4f44495555555&6h6i6666667777e88888$$h$ & F$j6666666666666666677777777777d8e8l8m8p8q88888888888899&9'9*9+9192939>9K9Q999999 : :::::#:}:~::::::::::::::;;; 6OJQJOJQJ 5OJQJ5CJOJQJ5CJ(5CJ(OJQJV666667777e88888939999 ::~:::::;;}<==='=G=]==/>0>D>>>5?@@/@@@~{xuScdM>RS%;[mnjwOc.8939999 ::~:::::;;}<==='=G=]==/>0>D>>>5?@;;;;<$<|<}<<====&='=0=F=G=N=O=W=\=]=h=u=z====.>/>C>D>M>>>>>>>>>>>>>>>>>>>>>>>>>>>> ?4?5?W?\?k?p????@@@.@/@8@@@@@@@@@@@@@@ A.A 6OJQJ5CJOJQJ 5OJQJOJQJ[@@/@@@AAAAA5B6BPBBBCCCCD*DDDDDDEEEG.A2ASAXAAAAAAAAAAAAAAAAAA4B5BOBPBZBBBBBBBBBBBBBBBBBBBBBBBBBSCYCZC[CCCCCCCCCCCDD D!D&D'D(D)D*D5D6D;DCDJDLDQDZD`DDDDDDDDDDD 6OJQJ5CJOJQJOJQJ 5OJQJ[@AAAAA5B6BPBBBCCCCD*DDDDDDEEEG}GGGGGGGGH@HAHIHHHHIzvql      9  AB  {          pXi2LM)DDDDDDDDDDDD EEE&E)E0E7EEHETE[EzEEEEEEEEEEEEE\F_FGGGGGG/G>G@GBGEGNG_GoGqGsGvG|G}GGGGGGGGGGGGGGGGGGHH&H+H?HAHDHHHIHHjÂU jU5CJOJQJ 6OJQJ 5OJQJOJQJTG}GGGGGGGGH@HAHIHHHHII7I8ILIIIJJJ D $$<0!$HHHHHHHHHHHHHHHHHHHHII!I6I7IKILIUIIIIIIIIIIIIIIIIIIIII JJJ+JpJzJJJJJJJJJJJJJJJKKKKKK%K&K1K3K4K5KHKIKTKVKWKjU jU5CJOJQJ 6OJQJOJQJ 5OJQJTII7I8ILIIIJJJJJJKKKK&K2K3K5KIKUKVKXKiKuKvKyKKKKKK2LqLLLLþ{wtqnkhebP           *  ,-  9  M  OP  \  p  rs            6JKhi&JJJJKKKK&K2K3K5KIKUKVKXKiKuKvKyKKKKKπόόπt-$$T<F( $WKXKhKiKtKvKxKyKKKKKKKKKKLLLL1L2L;L=L?L@LNLVLlLpLqL~LLLLLLLLLLLLLLLLLMMMnMrMzM~MMMMMM NNNNNN+N,N-N8NENUNwN{N}NNNNNNNNNNNO O'O(O 6OJQJ >*OJQJ 5OJQJ5CJOJQJOJQJYKK2LqLLLLLLMMMN-NNNN O,O0O\P]PuPPP,R-R:RRRLLLMMMN-NNNN O,O0O\P]PuPPP,R-R:RRR4S5SHSdSS4TDUUVVVuVV3WWWWW;XXXX Y~{xuеGҶO n>N:MNֻHUV %&RVbUt.(O+O,O/O0O;OaOeOzOOOOOOIPQPTPZP[P\PtPuP~PPPPPPPPPPPPPPQ QQQQ"Q(QzQ~QQQQQ+R,R9R:RCRVRWRXRYRRRRRRRRRRRRSSS3S4SGSHSQScSdSkSlSuSSSSSS3T4T@TTT 6OJQJ5CJOJQJOJQJ 5OJQJ[R4S5SHSdSS4TDUUVVVuVV3WWWWW;XXXX Y/YBZCZUZZZTCUDUKUoU|UUUUUUUUVVVVV3V8VtVuV|V}VVVVVVVVV2W3W:WWWWWWWWWWW:X;XBXDXGXHXQXSXZX]XaXfXgXqXXXXXXXXXX Y YYYYY'Y)Y,Y.Y/Y:Y;YBYJYQYSYZYcYiYwYYYY 6OJQJ5CJOJQJ 5OJQJOJQJ[ Y/YBZCZUZZZ>[?[R[[G\\\\\\]]]]]]]]]E^F^X^^^^^^_R`za{aaaÿ}yvsnkhe'0      *  <=          s  {|        ;Ͳ0CDг-?@Sv'YAZBZTZUZ^ZZZZZZZZZZZ=[>[Q[R[[[[[[[[[[[[[[[\\ \ \8\:\F\G\R\]\f\~\\\\\\\\\\\\\\]]]]&]/]]]]]]]]]]]]]^^^^^^^^%^jÈU jU 6OJQJ 5OJQJ5CJOJQJOJQJTZ>[?[R[[G\\\\\\]]]]]]]]]E^F^X^^^^ڴ@ڬ( $$<0"$%^'^/^1^8^;^B^D^F^W^X^^^^^^^^^^^^v_{_______`Q`R````a/aRayazaaaaaaaaaaaaaa b bb?b@bAbHbIbJbObPbYb[blbmbbbbbbbqcscccjϋU jU5CJOJQJ6CJOJQJ CJOJQJ 6OJQJ 5OJQJOJQJN^^^_R`za{aaa b@bPbZb[bmbbbbrcscccH4 $$<0m"' $$<0"$a b@bPbZb[bmbbbbrcscccc&d:d;dLd2eeeeeef)f*f2fkflftffffDgEgfg}xtojfc=>          P  XY  {      ݨP6GH\ªê      Ϋ      '(  2  Bu%cccc%d&d9d:dKdLdUd1e2e9e:e@eAeReaeceeeheqeeeeeeeeeeeeeeeeeeeeeff(f*f1f2fQfVfjflfofsftfffffffffffffffffffggCgEgLgegfgzg{gggjӍU jU 6OJQJ5CJOJQJ 5OJQJOJQJTcc&d:d;dLd2eeeeeef)f*f2fkflftffff D $$<0D"$ $$<0m"fDgEgfggg{ggg"hhhh)iiiij>jtjjjj $$<0mU" $$<0D"$fggg{ggg"hhhh)iiiij>jtjjjjjkk#kllllmmm n9nInSnTn[nnnnnnĿ{wrmi      '  ./  9  Iwf  _  rs        Dz¤ӤԤYΥϥ`(ggggggggggggggh h hhh h!h"h)h6h=hhhhhh(i)i0i2i4i5i@iEi\icinisiiiiiiiiijjjjj)j+j=j>jIjTj[jsjtjuj|j}j~jjjjjjjjjjjkk"k#kkkkj/U jU5CJOJQJ 6OJQJOJQJ 5OJQJTjjkk#kllllmmm n9nInSnTn[nnnnn $$<0U" $$<0mU"$k lFlWllllllllmm%mDmJmmmmmmmmmmmmmmmmmmmmmmmmmmmn n n nnn8n9n:nAnBnCnHnInRnTnZn[nnnnnnnnnCoEoIoJopouoooooooGpIpPpppjۑU jU5CJOJQJ 5OJQJOJQJ 6OJQJTnnnDoEoJooooHpIpppppp.q/q>qeqzqzrrrrr $ $$<0U"nnDoEoJooooHpIpppppp.q/q>qeqzqzrrrrrssEtgtttttttttttt}xsoj          řƙ  ֙  =gڛDST9:      8  =>    'pppppppppppppppq-q.q=q>qGqdqeqlqmqqqrqyqzqqqq rryrzrrrrrrrrrsss ssssss&ssst t tDtEtftgtttttttttttttttttttttttjU jU 6OJQJOJQJ 5OJQJ5CJOJQJTrssEtgttttttttttttttt uuuuuuDDH$$"$$T<0 $tttt uuuuuu3vNvvvv6wLwjw"x#x2xjx~xyyyOzwzE{{|U}}}~?~~~Nb ,~{xuu 4Cc-= 3P_`6L˗̗4Ox  -t u uu~uuuuuuuuuuuuuuuuuuuuuuuuuuv2v3v:v;v?v@vAvCvIvKvLvMvNvYvZv_vgvnvpvvv~vvvvvvvvvvv5w6w?w@wCwDwJwKwLwUwVwYwZwhwiwjwuwwwwwwwx x!x"x1x2x;x 6OJQJOJQJ 5OJQJ5CJOJQJ[u3vNvvvv6wLwjw"x#x2xjx~xyyyOzwzE{{|U}}}~?~~~;xixjxqxrxwx}x~xxxxxyyyyyyyyyzNzOzVzWzbzdztzvzwzzzzzzD{E{{{{{{{{|||||||||}}&}'}A}B}C}R}S}T}U}}}}}}}}~~&~'~*~,~=~>~?~J~j0U 0JOJQJjU jU5CJOJQJ 6OJQJ 5OJQJOJQJPJ~W~h~~~~~~~~ MNUVYZ`abmz  *+,7DK؀ـ rs KRdevw}~ÂĂςBCG#$5CJOJQJ 5OJQJ 6OJQJOJQJ[Nb ,ـsteĂC$BHTU[Ȍ-$$T<F $$$,ـsteĂC$BHTU[]wx"$?@OQzuplgb  3  BC  ^  `  ij        lj  ɉ  ݉މ         %  '  -.  :  @  ^?}V%$%,-.ABGHSUZ[\]vx!"#$>@NOPQqs~υх ?CQS`abcABd 6OJQJOJQJ 5OJQJj͗U jUX[]wx"$?@OQrsʴʜʜ-$$T<F $$$QrsЅх @ABCRSacBLJ͇هzuqnkfa\      ن@Їч          !  /0  ?  @  AB  c  f  yz        Ո  ؈          1#sЅх @ABCRSacHʼ-$$T<F $$$BLJ͇هڇ߇l-$$T<FU $$$$-$$T<F dkƇLJ͇̇؇ڇއ߇ !"79@ABCXZ_`abuw{|}~&'[\kluĉ͉̉؉GKƊ<Gpy 6OJQJ5CJOJQJjqU jUOJQJ 5OJQJTهڇ߇ "89ACYZ`bvw|~'\]l͉S =½}zwtqnkhebv/ل%&[           "  ()  ?  A  IJ  `  b  jk            & "89ACYZ`bvw|~'\]lττtl$$$-$$T<FU $l͉S =%6@ALÏʏ, $$<0U"$RS  #()459<=HV^ $%&-./56?AFKLÏȏɏʏUV]^cklptv}jU jU 6OJQJ 5OJQJ5CJOJQJOJQJT=%6@ALÏʏVŒ֒גܒ78?ғӓړ{wrmid_  z  zz  z  zz  C{  J{K{  {  {{  {  {{  {  {|,}}}}~~  ~  ~~  ~    6  AB  L  ]E%VŒ֒גܒ78?ғӓړPQhڄlHڜ $$<0"$',ĒŒՒגےܒ %'-/568>?ѓӓٓړOUW`bln}OQ\]kqՕו !-1PQRYjU jU 6OJQJOJQJ 5OJQJTPQ]֕ו!Q`jkr!vwٗI2ɚ|yvspmje  ssPttt9uvvv w w  aw  hwiw  w  ww  w  ww  w  ww  x  xx  "x  1xaxxx  %y  1y2y  y  yy%Q]֕ו!Q`jkr!ht"$$T<0% $$<0"$YZ[_`ikqr !uwؗٗۘHIZi 129:ARVYZ[]`abfyšÚȚjU 6OJQJ5CJOJQJOJQJ 5OJQJ jUjUQ!vwٗI2ɚӚԚ!, $$<0,U"$"$$T<0%$ȚɚҚԚ ![\ӛԛ !"vy 45<=@CTVhjz{|Ȟʞ۞ܞ"#>Dȟʟڟ۟npѠҠ٠ڠjeU jU5CJOJQJOJQJ 6OJQJ 5OJQJTɚӚԚ! "wxy5|ɞʞܞ#ɟʟ۟opqҠ¾{wrmifc`nnnn  n  nn  _o  roso  o  oo  o  opMppppp   r   r r  `r  trur  r  rs  as  hsis  s  ss  s% "wxy5|ɞʞܞܨ $$<0mU" $$<0,U" $$<0,U"$ܞ#ɟʟ۟opqҠܘD8$$T<\ $$ $$<0mU"$ڠ áġšɡʡˡ̡֡ء١ڡߡ  $&'(/023@BCDKLNO\^_`fgijz|jiU jU 6OJQJOJQJ 5OJQJWҠ¡ášʡ̡סءڡ %&(03Ŀ|wrmid_Z  Rl  Zl  \l]l  ll  ol  xl  zl{l  l  l  l  ll  l  l  l  ll  l  l  l  ll  l  l  l  ll  l  l  l  lmm#¡ášʡ̡סءڡ T``x8$$T<\ $$$%&(03ABDLO]^`gj{|ppx$8$$T<\ $$$3ABDLO]^`gj{|/I5¤ҤC{ʥ˥ԥ'(6HIQefn|xsnje  hh  1h  9h:h  Lh  Zh[h  h  hh  h  hi?iiiiMj9kSkkkkll  l  l  "l  $l%l  3l  6l  >l  @lAl  Ol%./67@AGHITag.345BLdgѤҤۤBCJKPQYZhipruyz{ɥ˥ӥԥ&(56GIPQdfhimn}jU jU 6OJQJOJQJ 5OJQJ5CJOJQJT/I5¤ҤC{ʥ˥ԥ'(6HIQefntڄtH $$<0"$ȦɦҦVWX_`ahirtz|}~#$() %)QRYZ]^fhm 6OJQJjQU jU5CJOJQJ 5OJQJOJQJTnɦWist)Ru«˫$stÿ~yupkgb  ^b  dbeb  b  bb  b  b c0cccccc  d  dd  Ye  eefe  f  ff  f  +f~fffggggggg  h&ɦWist)RuڤXD $$<0U"$mostu«ʫ˫#$rtxyƬȬOPQXYZ]^ghpqvw{}­ʭ˭̭ͭЭѭԭjYUjUU jU 5OJQJ 6OJQJOJQJTu«˫$styǬȬP^hqw|pXP$$ $$<0PU"$tyǬȬP^hqw|}­˭ͭѭխ֭½~zupkfa]`  `  `  `  `  ``  `  `  `  `  ``  `  `  `  `  ``  `  `  `  `  aa   a  a  a  $a  2aaa   b  b"|}­H\Xh$$$C$$T<rjv ­˭ͭѭխ֭߭ \phC$$T<rjv $$$ԭ֭ޭ߭  !#)*2367:;>@PQZyz  67AG&'0MNUVY[acdo|Ұذ efgn jU 6OJQJ 5OJQJ5CJOJQJOJQJW֭߭  "#*37;?@AQz 7'Ndfw|yvspmjgb  ]^4^[^h^i^K_u__`1`A`B`C`  G`  K`  O`  X`  _```  b`  f`  j`  q`  y`z`  ~`  `  `  `  ``  `  `  `  `  `% "#*37;?@AQz 7'Ndt$C$$T<rjv $$dfwűƱʱ$MNA|ӸӠ"$$T<0P$$$nopvwñıƱɱʱ#$LNȲ˲GQ³$%178@ALWb{|}-/>Ilmt$%34jU5CJOJQJ >*OJQJ 6OJQJOJQJ 5OJQJ jUjMUNwűƱʱ$MNA|./m%&4d¾|yvspmjgdTTVWNW\W]WWXSYTY  Y  YY  Y  YY  Y  ZAZeZZZZ4\5\  ^\  f\g\  \  \\  \  \\  \  \\   ]'./m%&4dJZd߀$ $$<0"4=cdklpqʷη^dfkƸȸθиָڸ߸ !,0IJKRSTYZcevw HJX^`hjUU jU5CJOJQJ 6OJQJOJQJ 5OJQJTJZdewIJo&aq{|ǽ%&zupkfb]N  N  N  N  N  NO  O  OO  P  PP  P  QQ  Q  !Q\QReR{R|RR8S9S  S  SS   T  TT  (T  8TlTTT%dewIJo&aq{|ǽ| $$<0W"$ $$<0p#&novwüǼ˼̼%&1<H`abijkpqz|ƽǽ  159JϾӾQdq޿jU jU5CJOJQJ 6OJQJOJQJ 5OJQJTǽ%&8[\f%&A#$6e,܌< $$<0W"$$&78Z\ef $&.@A"#56?delmtutx  ),9:;<X[jeU jU5CJOJQJ 5OJQJOJQJ 6OJQJT&8[\f%&A#$6euvwx|xsnid`J  J  J  J  JJ  J  J  K   K K   K   K  K  KK  K  K  K  KKLLL^L_LAM\M]M  M  MM  N  &N'N  JN  \N$euvwxPĘ6$$<\1"$   *+,:<YZ[ɐ|ɼɈ$$$6$$<\1"   *+,:<YZ[gi{|}}xsoje`[  I  I  I  II  I  I  J  JJ  J  J  'J  (J)J  FJ  HJ  VJ  WJXJ  gJ  iJ  uJ  vJwJ  J  J  J  JJ  J  J  J  J"[fghiz}#2jkxy *-@ADJTWjknt~ 123:;<ABjU jU5CJOJQJ 6OJQJ 5OJQJOJQJT[gi{|}klyAk6$$<\1"$$$klyAk2BLM_ ;<>RSXh}xsoje  *E  /E0E  DE  FEGE  eE  gEhE  xE  EE  E  EEE  F  FF  #G  5G6G  @G  PGGGGGHAHkHHH IIIII&k2BLM_ ڀڔd"$$T<0z$$ $$<0$$BKM^_  :<=>QSWXgimn05^cn}%5CJOJQJ5>*OJQJ >*OJQJjEU jUOJQJ 6OJQJ 5OJQJN;<>RSXhinF݄\Xh$$$"$$T<0zhinFGX| BCK:;J{wtqnkh>8?G?H?f?g?  ?  ??  7@  ?@@@  y@  @@  @  @@  @  @AtA*B;B*OJQJ5CJOJQJ 6OJQJOJQJ 5OJQJRFGX| BCK:;J D $$<0"$#9:IJS-2ir~ (.01?@I#%,-8CG_5CJOJQJ 6OJQJ 5OJQJOJQJ[12@-`pz{abv*abk>{½|wrnkheD9999  9  99  :   :!:  X:  j:k:  :  ::   ;   ;!;  ;  ;;  <  <<  <  "<U<<B=P=Q====>>>&12@-`pz{abvڠ,ڬ $$<0"$_`ahijopy{`buv  )*`bjk$%-259:=>fyz 6OJQJOJQJ 5OJQJjUU jUX*abk>{>?Hw(߬ $$<0"$ $$<0"z{|=?GHvxz{X]pu $5:z{+,CD5CJOJQJ 6OJQJOJQJ 5OJQJjU jUT{>?Hwx{,-Do(),zuql  Y0Z0  d0  t0111111{223>3U3V33333345555677  8   8 8  :8  C8D8  8  88  8  9(wx{,-Doߔ$ $$<0"DMnovw{|} ;CJM_bwz%,GOW_ks~ ')+,fhmnjU jU5CJOJQJ 6OJQJOJQJ 5OJQJT(),ghn<ؼ"$$T<0.$,ghn<45Ivwdenþ}xtojfc`+,,  -  --  r-  --  -  --  -   . .  9.  M.N.  k.  p.q.  {.  ..F//////  /  //  0  00  V0% $;<CEJoqx{~35HIuw(/157=?EGOQW[jU jU >*OJQJ5CJOJQJ 5OJQJOJQJ 6OJQJR45Ivwdena}ߌ8߈ߔ$ $$<0U"[bcemn`a|}wxpqx~  -/<=@BOPQS`abd{|jU jU5CJOJQJ 6OJQJOJQJ 5OJQJTa}xyq ./=ABPRSacd| EFW'(5fY½|yvspm")##$M$Z$[$%%+&<&=&x&&'''  !'  /'0'  2'  @'A'  E'  S'T'  d'  y'''(((( ) )z))*!*d***xyq ./=ABPRSacd|LDD$$$"$$T<0 $|  $+-4<BDEVW`3@^i&'45>efmnqrXYbeu{}~5CJOJQJ 6OJQJOJQJ 5OJQJ[ EFW'(5fY~ /ڬ $$<0,"$~ /0923Eqrw CS]^q|}~þ|wrnkhe        $%  /  ?u       =  O P  I!  R!S!  w!  }!~!  !  !!!!"s""&  ".089$013DEprvw  #)BCDKLMRS\^pq{}j-U5CJOJQJ 6OJQJOJQJ 5OJQJjU jUQ/0923Eqrw CS]^q|}~ ߜ`$ $$<0,"~.>HI[W89:;JKڨ$$ $$<0"$.>HI[W89:;JK}s}ume]Z    f    m    e        78GHIJ+      '  9:  D  T"-./678=>GIZ[sx%ELOUVWqwy#7;IL01nop GHI{|}5j5CJUj5CJU5CJ0JjU jU>*B*5CJ 5CJ$ 6OJQJjU jUOJQJ 5OJQJ?}s'9:u & F h! & F $$ & F  & F GHuvwDE~23WXYqr}~OJQJ5CJ 5CJ$jU jUj 5Uj;5Uj5Uj5Uj5U0Jj5U j5U5 5>*B*9'9:u/289:>?@BCDEFH     H  I[ ! #DEFHIKLNOklnoqrtuwxz{}~%$89?@BCDFGIJLMOPghijlmoprsuvxy{|~|w jwU jpU jnhU j`U jXU jQU jIU j5AU j9U j2U j)U j!U jU jUj$S7 UV jU jUU j=U jUOJQJ0J&OJQJmH 0J&OJQJj0J&OJQJU CJOJQJ. jRU5 jDU j;U j,U j U jU jU jU jU j!U jpU jU jU jAU jgU j~U jyU jԖU jώU jU jU-$&P . A!"n#n$n%un`3ɼGFPNG  IHDRX.gAMAPLTE """)))UUUMMMBBB999|PP֭3f333f3333f3ffffff3f̙3ff333f333333333f33333333f33f3ff3f3f3f3333f33̙33333f333333f3333f3ffffff3f33ff3f3f3f3fff3ffffffffff3ffff̙fff3fffff3fff333f3f3ff3ff33f̙̙3̙ff̙̙̙3f̙3f̙333f3̙333f3ffffff3f̙̙3f̙3f3f333f3333f3fff̙fff3f̙3f3f̙fffffffff!___www˲𠠤X"NIDATx흋*EkY P1̌MK+ fVJge1=*RKYBts)8OJwMtw^|@K tQ ?;\J:ha\2`;J1yRHuj!$sSɶo߃T`5K`yc?A3*W=,*h^7eGQɶ}/(}їvTϬdF0;6fy~/~CwYM&NVzA<޻N?FxE(~(s)qn8'{>Sק)>զw (>ݡӿYLoT!T߾j;ӿ:;ӿ·*IUguwVg_PΤjܕJge(w&/T:.D2L/t&]VixUL) -AL[4 HW 2'-IUs}D*iBLj~dϮA@?T}&~WQ#Ϩ>i8=z.̽_L)~lqg>}#7^gV c_4{?>6O'XU)׿pZ}[fϬ$ӻ韬lZY鷦wۿG\uWPp;\3NNNNNJ驯㻎RftuR}8wR"}5_LyT_MY)3ӿm-9>R"'RnsjA_Pd}_fџig븍7{{yEi>]F@B/k~_SAW9|>7"}=?춟Y>=?"} ȾٕB_uY Ϫ$?;Rv7*IU }?K- \ndhuJ_6!#KgeH_Z -v(Ϲ+/@_{mӗvkx/Y>T~Jω+_E3՝~i|7*IU_qguwVguwVguwVguwV*Et&]VwN_5|U g?6vN>%җ!L6P$bӎ8'٣ ]ߌOߡϣ$*d*,L/VBG{@_|2bAGm;f)?:>M<j8rE&$i5>Yy>A"r$Xvh^>}?˭]]Z YN-h^k)vO_2/}JkLb:,-auqr7<2hoCL__ϡ;aqpџ#_go({6|'C(++>SM>Ko@+w(u&ܬlм3-WhT-|K{lh#Ľ;\>}^>o^+ğ7öoB@޷QlŇ Qg ~zӜПC!;}&j}GӚf۾B8AA+/a\Zck֍zwWzbӏ.wGO@AR$1?1Y} ;N_Z y~]auxOA1FM7ppIU%<,je~8+BauZY{~soC<; w.[j">U"s"e?ӯD$hE2L}[[JB9J~H_5~}\9}u Wzz<}@*9p|Zo8יC ? Nu/~.d3iGHq@&yǕRp1aqDFk 9X>f}}g{C'I_GG-F2OA.ߍ3}&%~i*i#_Tx @/e˹}sl}O(ÉߝfF< E#bC?p8k}d?[Qk@MP<^7ٍ._p&Ws!q@_u^4& e_]e{{56* =Yx0}fslMj|1 3?g_ -h>u2Kƅ/?eȩR3bItG/ /> >~47~!%6F?%׾ߋg J /p!Wͽu[m~30v>Bː~D_<ηF@Arf/?U{:ԙX9uS&>nз/[ ;^K"%scp<%~NpgOEBUj4*_耟DvmھJ M f/ZD/zA,Fߵ cwaV&AGӉi_23eHw|eVX!v4[ LM?&*&LO$S/ZͯꥏTgG+WqKͦy}*0?:G8ƧT3ov5PpvʝAcj&JV۠uLm&J}u5Pt3US3 UJ`~ۯf2*%<߀5/dB&+t)xoMY5>1\_/^{GNʹ8+ڤ=n=_.l|_ϛqM <Ʒ, c|h 4!tOd秡>[uw#t{DnxMDc_8?y;\y 8ҟ(>?a)8Wx؋7}bjVji>ox~:#} O-Ҟ߆zEH4ɿh?7gGyOV{5᧌~2 ssuowFwZm)Dbj~J+P3LBZ[[IRIRIR[kxW3 UY~ }jw^dD3fodޚXB}zVkяԚX640yA7_7\".yh`5G_DIqAU8 >$/:>Z"ot/\@ddTqf?>g9l?ZW>]]+}ImoةJc^{fYxίnLz=ӠM)4)gȳ۹}z_&KHbL"QdE bZM²2}@[ Q6Ih}[Q}y d0D9w@sx*1IJBV}n/g_EV۴ۉ:__@dz 50 7\}n`ҷN݅uRJEf?.[y2LJ}W,˓:bqDFm%/viZU>a N!+p_0x9 WY~Q=Q3F :9} ؇f2*H#@K*BݦG~TIENDB`n#JMCe>PNG  IHDR]gAMA IDATx镴F d23AdLĎCTW^UB3ԫyZ H#K19y/t_l|0J__e/B# 2,Ty!RJc@*OJ3A6,Biqe_M'aUW1p_LRkZeIJ׼yaYs[8Sܴ KRJ).V*J7aPJ ׯVy4ң_KO]E}\pwL+ۊ_ZK)e.֒1-M+-׌rUlYa]u=˫M򱅹rM0'8/{X*KlDk,\9^:+slDnkVWkcfE_%:c/9_h˵2-w,31{5-c/C)e`y1KܬnI1'Um\Jc !Rr0*[lK[p(McAgyꖪ1s(qd_F+^u42z۹5xgRЌ[L^EVOWJ\{ [So]=ܨ XIL}UkR˱R\vD*plm^Jϭ9U`^heSmI RԖVnJ/xൠeJ2h%@ Z P(V)e94M' *E qԞ!\>sEb/;ޚ oOF~1e>7Gۜ|fv#{HO礋! #<<8Lpk6*aJR٨iwiԡwLw5J^5҉mUREKz)ShźE'jFJւVBNYO Yrɿ6/@S0|m:٘#-Ž =㼖QvdLNX2_+*niq߄?z?|*jfm%`WtJZwZ)xɓ<E$S-JxDIb{g.Ք[~wis#1hq,Z+?R<-8XEܔ oI Įyu-鎱y`lv};:(u;]2/HП{#[ :wG&UV oaˁZis/Wg<^nځ6y8iw$ʵ~cJA-KRhTa]?Ѩj|ҞNjv(Q)RݴEWl[P!"Qyy^reze;7zXT닓 Rluȭ vLMn Dڒ65ǩZpMvoFJӤ=-6z[#x(kۤlhR9(w<=B>y=Dz$'-Lfӵ&€aI-Ū$av{}B=Wxt6ZOӴ*󈾓k]ܯ=T f- QYUsŦ ^XcN80 rUf.oY{~_e9^ou>kM2Pcfrв,B B,yc\k?B)D<4O!Wڕ 0%V ْ e .09˴2/v8  F.A iF^"lGLSF#柙NO3XPZgVPCZזdGܽwrwDHZ88Zڂ[8NWjtBoe^+6PB{]=}/[}*k/keD ]}.۸E-J@CqpJsՁYޥTX}=t]dM.0URYQ߭_2+O&clVtN㸪ct1miBO-h?}mtC":Jk/ ;k06һVXI[љZ{E+MK]2,rڱvw,:;k:X{*WJ2BvIwm݅}ݮvghc2dvOs,]2?l,zox80l}p9=w2: ?TM; v{gi)EJ <Џ~LmCG%p Nmw>Zda&1 q'sbϿʰ 'Sa3˲<[HTQq{Ks:d|V-X;t[L:ܔJ#Z?/akkQ6kw`lZTm%Tf'5-(eB C$ȲL}YJV˸؀ nIڙ\L4^aKU4d=X[he%?M߂x}%t$ Zh W ӲX Գ+{H'tdl|-*B=F K1ϳP_Mn%z0J([E!sبvic8zuތtc`4ih)o_Y}Q3rAkFm,y|tbNnZEJc.4kڳW*Ԝ(+c$<8x'DZVc6N˰ٕ2VwY:M@t;3JYG|Vnqqp؋ࣔbN.qp8O+Q~>:AQZ T2oHF8I+QoԎtJ9E\#<{VGzp$|'#ZPf)Y?f$r=8(!M,_[?Ų?1D5r 4abmNB,m{aI)1V^tNփvc5%#s0 xPF1M9 swZ~d[XoP*5F~Xr=@ 06wrTGI*, tV[^k ~ie\jX+pK4!Û}[H#"?4q΁c;ḫj|R)/SU5L4 ,kBYͩ=Q>Ӥ-|EFP]s xDZgKg]*+AC^ذ^r">2>k`/>`3y ʨ !yғ?>W JRð50}#l#Vg<°آoQ$^G0SJo5/|*]6&zXi59Ԟg&% ЪIvY"Nm;m^#ˌ!"Ueq6VqIB5vB)P(MܽtvnUe,ξs4Ҷ;x 6wO)v.-ǂߏ#ؾ3vR}JeYa8k֏&?{lAdEVnŽL6_3ц #wݭK&`*V*q}Hj)K}}{1hq̜إoք;sV !&|Ro噼ְ<5zd=m 't؋z+U}ٕ]P=JJqLgvJ.J[?J(19ph8N.a3A^\1-y=S.]ng;R9o1tt(bDp_J,^aN 5 ^™sR>fK2KGZR<,m#-Lt1#PJy8Bbouo#S5V-@taW4a3vw2Į6T*L B,"7(q_/M E*5b33j#p_zJG+*zB|> wJYȮt+P`ZmѮLH+=\|Ů a ÀPkW~>hԮ4=$tBZ W$ Iex JߐQ]4*i{ЅV*ܳpţm+z ܋e{ҧ9ͤ{>(Nn".] Jq\(W͑EyVTR 99Z (O.N$UIWyVD33WQut8?U]a>-, Z7Zk3W؏~f"Jo6; ]2Wa3BS2Ѻ۲rq39 xJ;Kuk=5IDEs+$5P|&]QEhRs)&9Z)R,Fg^#RVUV%ҜTFg_莄J0B)c#*2۪lGl2Svߖwls&kh@-]rJηװ!BeY\2BV )]:Tÿd$Ln4tQdƒhH<ЮZkѾZj-2TARS.@SiqڌޫRuuVhG+2p i|h?ƬO}=h*L\?nCK)k1(2. ]GKdRxJ({8nk g ׿K?0 ?o)QC[  |81uu-@h2k<2#@}v ,˂] pC/=l[Ja[<ۖJ,(Wnrw>16{u(,ڕv!cVn?]g\qؕw9ZY3A]qm'P9Z+c*Lٶؕw+˲h5iyIQ.m0Ϝ!FhW^IJrvA+g@Ex&`23A%M`ls)?-Eiؕ7qn (cQcъ\ؕ79sv$* ] pS3#}.vc)9I m] pSkn[ՌGOGOo`/J!Y5x^ʧ=jB?veOc3jfؕ88v+TBzè43^0N++JXFg=NR+ZY[yS5+B_s ˴,zsO)4MؕG8t/='sIؕw/3+v%] 9%.\oW92ߏ qVEzĮ.R(KD5#Jpq~e`WK/veo/J2]hZdW5jX?S !ԙ@\Ez7sV5m#IeR;V3Ixldjm= !f5Oj=r%Kx]8h9ۘgk^l _Rb%y]yye(JMCI,B %C ~JbP2qঠ"%%״w %QLܗ 3(PNg^E(nmpRaCBiݹlr)gڕpS2gd*^)!^˽"3A+1ccnw.2n+b)!Tϲ,ʉؕxB|7jALbe)< Ptve#Q22-b5B)brF+IٕӔR(F"ӲBaq he#)r#V.J@+9®4D(l ҀPZوH3Ch_:qF\[hWNsF-iVmؕ0/!ZYsVYyDOld]iDnT|$l>"iK~X[ p ZوP}> k>E)v _p=tKZFk<ŗyމRt he#v\Jqp#uڞ{Nk  f C*l4- xَ^-l. ⾢@x)-ez7WGBy+V|YfBѠQShwR.SyC8(|*FeZDn~,]"{&qd?nז+?Gqg޽\f4 ,ͫld]9 ڇp'-#y;襌L+q[ȠοZkG (Lqp!80ؙ FkPYRJV{_<0haW6R+zZAFj"ute@ʈ«@+,.j.{gal Z P(VA+ʼ}0 Mm=WgX^{[RPuS $U/ruF3ۚJ+yjCꣿdr>i̇y/풁Kaoep2~ i}oSUTR~nW6;cKvֆ4ͼ{8[%O{7C+w+yv5Z0pR%ūL"-֧4M=ƚ}M:DRE1*9Qk6q4[yIZUPQ[W颺-6}̋i}vlӵIL&'mwϧw362^\~Q.εx6Heխk^okz64MK=]x.im ]㜡AW6nTRi\k1/o[ͬ@JiZ34>m_^J\ xoK CyAU f{믔Rz6↭נvI'3÷c!uhwWR]W?UQ2SqULk3=59F]\]:dfӶ su{8.hxSLP\-|O+ܑQo'p]gx Q[~8߮JUtjuWqp`\nrh%&C- 1oJ+y,ym=?6ųokVk6/e|/F^[u-ymel Z P(VA+ʠeJ2h%@D,'Zj$0UpIENDB`n37=-93R*PNG  IHDRKgAMA IDATxk*aQm8t@Z " =^OPTj84MB^5)ϧkexO_Ӥ;Uz7[TMU %R0*eΟXJ,K&K&i:P \Kv n{沶Z'?c 4U]52+y}ȯ]Qrb|~2+iOG\3c-շɫYvYes~?&s6@{"Ze~ތMd $+ZQ&w[a>康x8nH%heR*d.1le펻q'qD#32sM4M='}Z XJ,BJ!̡韣*:KשneP V(m\(󕻩PKom{\4!jRmù3jlc'~7mjurFߊ;Ha]N8(؉3cCJtz&Z g0]r֘3M;b鵌=a_I}wv _6]r*fhVޜ#Fc8a]9lhXf}6/M?#!ޏHfcRJ6Xkt8nnNV8D;5Yl( Aso*&G\4gjG=Zk[u_q{O,^6x]K'dk{u]ThW|Xxkg7GGf*}[l3:ƓaI&~‹ŀ>i' |sfxP/̣^9RjYwt-^I)U| Z4 K;n{W=+-kbzt8r~\?K(m ^ x$,p`:9 +.Oܫܛ!q4'X=z^dXѿWuuk/X: ˶i6Vs @gg5Ϋ޿^ksOs; h;bz+(ieR_V<}>fE8r lr,|`' WsqPr,;钖eR|0KyOBh)2_s.^P9̼J . vN_yWo?@J'i2B{ͳFrKR:?eEKo:J VWv!{j~?/ [{uf1﷔amLܚ)3\_lz  :Ziy4R'nhw&n:}E=kBI1 !wx7L_9@%"r '=Hݙ9ijh4AٝʼSO4srܒ^h{\hfF$-N+9[3i JJ)Cf(Nf`pƦiL]Qf~a$B ~?)#JbI_#wg-'% ȵH\X̏b^sPtJ'7Oy*Q۾qk5I¼=|k`Q{jhzN!5~Ef XalmmZ/v5l7|+6wt Ðl !TB={!{W)5ϳ69g_%6q;#c΁c~Y [n$'['!+ɻ,?RZGlP6J|u0lr7gWRӧ7c4MSFz΢H fһGhwV쬹+%t[;_&b2I&bjE[2TDzR3× wnNPJ)-}EFaN4mߵ U `uf[lN2{߉K^{+Ұ$}E2dv O{]E@k5l/t$_mԪBKtGhm_\kn!@vFǕ#+Jw2!<7R{ݸx[wԭVǀ[oTik5{6-L_ #lUO{?[ .>L9Y щO6W|^ o|^eWݳWBdޅ7H_Ѩ|hĢm[w`8bG'\ϿE0{rk|/nPhzdEUpcaεZ]ýDSZ*)ʪq+>bXN_vݻ1~?s~MZEZ炬_}5q6>mF# Vk ly10qUåU !DWsz9:ưwo;&u9cbw豩[ ߡ?0quP>6 k؃9b'A?NRª?=|B'Kf wxT}=vhKjRܴؓjI?ǀ9ZCGat:[5zo^h7q-{E=ErkNAҴ@,n9:~2gə2JgցKlO+~u~+*Jk9u~H_DmͱϵG,~Ou 8ڦv)lٸPiu;Qظ8v[RiuP2q9~ f9(RV`}cp?A4M˲^#tP[*JkpsC;pu_+=k)<+iuK:GϞR($=v[=Fh>P'H9O>t㿄o:u,nD{p_S0&,}c>;I ucY3-H8g9T)|hk{җ >ٸeOx2puS&yNlÿތa{Le]q<"T-"rs/澁-E99{N4y7gܠYcp^kX~$XEAxlȋнgmvF>+xZ53?J.z|<~;(Eq{ɡKƥzW8C.!n|o7nDطB BjZ&J֒5=MLR7ZKn ~ 8Eet4AfUO-:,8T^  ͻ9^h?XQN9L\Wcˡ܅WEE)Z)?8L7Q֋o@ֲhslGC.2GZri޼qeuƕeG~"nH%hDOӴ#3͆gp%P4^F%J;RN9cb{Z= 、V̗?iq2D @Gl7,^,RFU(zWW;3MֿekFpAFwUP6gp|7eڶ,\mJ2CH) ~IX3K)%Lnchd9AGgASdpm_Sr{kgUPN9ߌr-_MxQ} [1Q18<9/Nlx,_.ĺo\& %]}6]Өɞƕ~<F)EBL Y sx}4;՝N ūԳۜ3}| &qZk) 9l=St,q2ی雸Bu&@P= =gAGi[ҏ0kF|Qg ]L2unG8+{zpQc-˒{Dbdg D z*=\=/FC zoSz4,Mjzh))J-stъ?6 ư〫UHؕ﷚g/[v##>۾#1MN3^rsED@g76g;k>*{#MT4MuiZx5 O>aEOPmTYխ(h)rD}/ μyQa݊YV3Fo鯥b׆խq0xsWq6c!bp΂M^Ӆ|| xngz8MGÙ7^`(q6{6 `ع{6lՖ:3tvݻNT]׎ ^̖=i-`sھB+suJJ_ws= PYrL_;XO͖[ٶP6Z^=ٶO@Ԟ#pTsnױٻWFoW389~ܹ-|;yuݝz|mG 3jÞg{ >o0xG)mٓ[iPp&{S4(<7<<\s?K }wg|*=3ΉFo-]~g7B1.h@_G+` c-`: N9pKO` `:s!C XJJZ;RN9C.`, q}e^cػ/h%#$pK C`:xz6ޑr)"5 q8৷ 4RF.tzEqB,5 B_.h: `z]#6ޑr)"k``bdl*zb0p!w]ЌJ|G9'aI)ڶ))ir}.κnp$~^^Cu7Sv;"4= MÐLFڤlu>]`V5#<}xvmڥ꣍wrʁ(brmܦqu \~x』^q6nZ{_tR^00&ɜ.<,fxnqDn/+OHDB(܎`:xz6ޑr)"k1 ڌ;t@ @0tm#S<〧kq8ÉX6'NҠpc;㙲nGi&5 3:M/./`VNƶIDAT7ǀ czi8#|>;gzMc:>߳@;ؤJ껠ey|F6 sV4r3üK=wGm^Vx"op;RN9]`W8M2%u^'oWtgw3}EsvwL9唏S>b^ItdO-o/D3+rשּ6߷ׂ. K>Hfl-2`N Űbcܐ 6]RG%D5lcLӔ6ׂ*r:mhݮÏsOuKӄKp7٫+cEB@hdM9Kxhnzk'w7E0{U\ǀvX(qʯ~kTo/Ms?`.)=/[tAA瓰^ڟXAP3aj Yr&;bq(%F۩ǀrs6ޑr).ǎ+kup VgAwub、k[q'*{]"^&\Yޟ.t4];>XN%@|=*\D̅ؤ߳^o5?Zԋ> ]Ds.,J<^ut56I_ 8Zc `xZkIUZ 0y{W?G~r,m_~a0pZ \bR\n3d40dt !R4* ,u|ݐi^09qhA~PSubPN9_ɛDw]7?SYnwxNҽT)r]z%]e'aԘGsK 79l-lR;لdV>7AM}ۥ]ZYMMn^=E%6+/rలg}%o*t vn7aӳc^PؾY^ʆoYTJ{`N)dgn sbuFo,o˥joTx))% `d688^廦lv{=^vJ)J2Bgգc7arJ^ueV86kmdwY&wpIOnOr)|p^m@4v^op9$nwi -4&֓n̨Or)Pa*ke&ir{?6EٖK)M#%a%%n8{JonH۾owrڻkϋ{#wkϋǪމ=&8]^fꀼZl6ao- l_c3s{ l{+:*_T)|rzi2 \JXGZ+ǾdNƧW~mW8c~g2gZ N0/lX= K/J}?I_tB|dw-NRt<{,h%jﱧ~s&+D
=`?6GM+wD*[+O/j@ډ._;eט6[0Möqr]a?ڎiֺܭ`w=d4K6? "ݎfEC˽&' {RZY^yؿk _Z@8%H(-uXh<=Kbʋg+9:ZN5 aSN9hJ]AmXk=M5}><)g!4kAj ܅~gdOR~$]z?0}_4WYx<.Vh^oQdv KUp Qt[%n'b&# JL]q56}Eb3qp>~!7 65Oj-)zg_oC\Tpb,9J[ y y;1`4UI9n~ .ht0p?` ο0 ye+ /-siO8hϹJ1 mFȦPʷ]H\Wɱ'ﲚO %^yz1ywNXNVs6E8 OnN|^(bӴ^Wa&$?ܘז[,4MQcm6޵@&w۟5-E{g2Xw44575s]βTY&n#ˢIϑ#M|Ƹ!H(6K + 7}"lL xۯ"/۾yy p]ZOs,ﲐ,\aaWFI_쥯9 a bhz;HJٴf03cKV;|PFF6i4Qp)J?+%Tj]´}I_F _ gz]q Yh~`: yv+?:P.h: @HpY}޸ۓ֛4kl֞,aVJeNrMͽBwb\n ''%g&śxsr7\6JBěK l+>NL 0DUX2U$ YÐe˲Xb3\I_ebYyRJ)JD, `LY+Y+gYgA'wYrY vX/+]˟ ^EJKf/p^H6=ϙ9+!΂^9{ZBJg]I)ϡ0M_!PB*!h۳<9}RVUb)-B 1;~ .E ANPzV:c h(nHMu5(nƴ=m_+)gB 6lCʍgޣ]7p.z͙fm3\`mV/ _Qzu5&&Δ>Q?BjM9zˉ^f+\{so"\QtƵx!/pm'\iyӶSJןy=m (DI<^o]IbTJEl\ z=Vb,]_ &4,ƠXZsEd?Ӕ.{?M.6z7W"nyBds8\ZXi-~̷Bd|0 =ftvB?2`fm jض{x -` q?&@yvgwpÐ\< mÒ3{`04ڲ]9 Y" -Q4ϳ{rUt3FG@eYzWެ+a @0p ~s1s* p Dad0O`IXt@]Vg#Wܧ!`@|Θ tA-`@J)<-`: .h@ !)ug23h]t@ @0t@ @0p!@ 8-`: %2zF4t@ @0t@R 0@!y]g!~t=/CO`pB=#xRyK;Z{ֺm(4ZH:jG{Ϋ(٢Gn1[k/T-ߩ4Z~#҃pZW XK}H)uzo^9m(ZU\RJ?X~8/Rۡ_I"{Z(G%^U+:_/rgneJXWRJE8_ IpTy^I `4P |ܩ-$:gy+TĆm[0^90+ƀ F9ym*z`Zkj9\W`]PT>l녴ƜƀZa?)>)Z Z55TJzqi*AW_/IHJQpj7o? =鈔gcXgξ[Wz##l|*'T|Tfg!\>ݫZ%S_"@n};*2u>4Qy4jCMUT.vžmے=z+ sJy]9?{ >T d"W3D(j7]Ԋ@ob`|e.9[Ե'b—%jKDMDWT!g)Nw4YMx$ ׿R!u՝XE.*>*>*>*>BQ#L~TޖP6ԫ ;\}Ño}{7ЇqAwS3MjUTww)մ}'3     {"$BPwڻL</yndk _.4WOk"/]3$/"p i;bHlNK*gn:~%$j89u)_ܥ}?AW=IBn%%ܾ\;{"BGBGBGBGBGIum9 ]DߓG: ߱3 t[1? c*ZSpm uClۆXV T#RYJʾ:]=t>-cSrJ.|Rp{2֝-:A_*PYDeA_*$}?_-:g^yVix(yE|Gznj۶.RrkSѫ~ 䚂 zg꫇{<##濫W#Z#Ti1ƐOHdxI⇶?N`݃.jJʳ_ݮFU]*Xg߱R8Վ ,yfit+|[߶ Yej[e.'QmpR^_AUbPk=z0!klH}ag####gz1Qs.kHojBEox}H=iY_Q ڤ \ղ,nY N"]׵"gqL T۶u?\lTq]zلj0Hˢ.YiBsy4JBJ"jZqOC *DZ=]\F9HHHHHHo2 WZk}M'@l*N>JHR\98 T^k bNG ʆڻxlal(?ӳQٰ^%H>^tlx(bbӅL)KUjQc gZ{5mR5赁ݧ&PPPP}G׊_I [:(ԭA + H.Ta61t;.48h5i*U?RTLqWeпWJ)U׿Hw{9Ƀ!00Œ1@Fg Ӄ30^bE9&s1b-qxV09WO~Xs4\$Pu=+ +:$]T} OT\`kO_"3K63fJc_]#0=?880^0ٯ#ngLhQxt.B-jH9 Iu]}[W4! SW+(¬%#|$T|$T|$T|$T|$T|$T|$T|$T|$T|$T|$T|$T|$T|$T|$T|$T|$T|$T|$T|$T|$T|$T|$T|$T|$T|$T|$T|$T|$T|$T|$T|$T|(#H`7IENDB`n0V,$Ρ4 0sPNG  IHDR>}SgAMAIDATxQ*Y,2; Q!6dJ"=ϳ`Ya~e&d~RƘg3 u0Ƥ h_r1 V.\_bC@^3KmZ|a^ar23N8*\wD9t؟iV?w P|9g"ѬC߆ыVCcvİ)0l̒<fM9VҬ nL?k"&w $Z!4Dz׶α"YM0mn|Zcuó %s-,s/p|K`7UWQ[ъp>|8AU!DA5LsK[asA s9yX>U bXQþ Y y؃ư3\G2bXM OQtk#^|Zbv36F9w!qTGP *ӷag*cm1}:6]80 t6>,lh j؅=^7q]ad9pH}*?swõd8F7j^tp 3Z[{|taZ!ٳaZ@}Ѯ?u/ VO?V{Yv7[\-򉍄Z;MeewvMIl  F7lǏ}3Ǿib?:aGi`H>Oc~eQJN$TcH=;~0w8 ò0N_#鮒i1Ϋh(Өa]_6!YsR.wVRjY9Vw? UzZ0 diuǿWdXN1}EݴZPez/O4̽ý6es~)=wԎO;bN*qw ~ܓϗaz2,KlCWbZ<xa|?se[~Gn:||V5=0U^dsCʻ= ݡM0QOSz) iL/B Y0 d0@ Y0 d0@ Y0 d0@ Y0 d0@ Y0 d0@ Y0 d0@ Y0 d0@ Y0 d0@ Y0 d0@ Y0 d0@ Y0 d0@ Y0 d0@ Y0 d0@ Y0 d0@ Y0 d0@ Y~y^VMD 3Thp^Hxq.COtI2Z4 DXx{C~͇D4}]s'':s殳v]f9 wX-6 z~~4MWsT $~?l?0'h^iṙD|78|Ƿ4t@fzG>}A S~eh oa|wn{#?O`$*ĊzK99/ɭm| _D¹Yf?w7p81qu2,s{[ׇ?v0Wk8L?0ǎ$Ϲ|>ׅo9\|?o`[G<nw.% ~dzn|W_% ՗ vgg՗µ{ߺqMS}ʻfO>y5[z>߯!Oon_߽ eW!C"͇D4i>$u~|ƞi>$|HH!C"{\^'gχj@C"͇D4i>$u~|ƞi>$|HH!C"{\^'gχj@C"͇D4i>$u~|ƞi>$|HH!C"{\^'gχj@C"͇D4i>$u~|ƞi>$|HH!C"{\^'gχj@C"͇D4i>$u~|ƞi>$|HH!C"{\^'gχj@C"͇D4i>$u~|ƞi>$|H:kv+ 2a:Zv>$u~{0l/w=μ;u%=(Dj*gH!C"{\^'Pm4i>$|HȞ/{>ЦH!C"͇Dry=m4i>$|HȞ/{>ЦH!C"͇Dry=m4i>$|HȞ/{>ЦH!C"͇Dry=m4i>$|HȞ/{>ЦH!C"͇Dry=m4i>$|HȞ/{>ЦH!C"͇Dry=m4i>$|HȞ/{>ЦH!C"͇Dry=m4i>$|HȞ/{>ЦH!C"͇D囧iz^joq.o[u?p̞=T\4i>$|Hu%.XxWWli>$j TIENDB`n `p@ܖ팋Z!PNG  IHDRsgAMA {IDATx[(EqbVVf`$=Qa#o m}^R^uKϭ:8703:y@^#s]S8]C^п%xyŋB=ʰhD[a,'X/*V`Uv8A{+=T߸m'bB@|*IvKC-g{3vm 'vLZZD" mdm9A^r8Z9mr1} xmo k \SH^90>۶= %^vx|~h qϛgRCC,fhk,h簮nCNL93iU C^8AGWv@#5i0Uأi5+씌bex;,.A1ԛ).M4CWeMx ?}.n8+,I$S~EM=B0E I-;G`«J-y+zmѡ~"+s /c9.N Lڶ iς`34@G5!yIx yyS!܍foCK-ٹ(V^k*e 2C83uSB4 H3r܃c+#(86l0 c5$[f.qP? mgs,p6vLI;|-h> Бƾee8R-A2)6o`@w&iHYx8Nz 6T'q?1R6IMJ9{ J%MسɱGp-AV:}­m(ZR vSJG`)4|ag@YՄ&cGy̴kgb^׌.cz~w25qͣs9^0SBUO Z;s]|{+hPC~<] @^6;6ss,0Bq(pA Z"jl,В2̥SجWAq&{a5׌<ũ?as\(ͽc*9&O;축5\s#e6\XΑU gU~mo4 5;i7dW+(82$ }.h)r |PD"X"TdL?NuE!wZe`RY@ZyaSsj9Xk67ͯ<`l;a(M .oA^th}ڇI\S@ ) J_fez30s26s+nO$G'IK+DkeUklӃP.HLKXQ PP!41=L.0gJ}Jԍ?gTB+P5&N#@Ҳ!e}6iӪm3֪?jOfhe`I4~%8{`<٦u2Zr&ą;!~\8?c\@׿ A9t'p9r<Z/o)۳mZ/Aa3u`]{h24kp,k g|<#t2{[k1<Wo?˚7,kDjMldknF]uM^e3 '\jUFIwMo^f'|кkMa{,\jvn\ș^T &z@X)]nX81Xsi/+0mm٘rs|n'mwZJ^۶=eyN Tll BV^ma=BI\h,VS `jcG"8Δ1^جWb{Hsq:6J1"L^+xo^g094x;!:y@^#WWsLK,ֹRI8oրJI w-!snOdbιoE&!$6rg5~! -L/'#*Vr EK$'Ǧ(x>d-patxطi )\64!6`hBA iS5=؁؋څ':\^c&D K7Z5T^v =%+ģ@+oDsPü5Wjbb#-jЍ2ݚ1:R[j> Aѿx|EKjЏts#6Px\TK2r/\arjD_yPli3?L!Zuك"Z7Izj9 JY7qWh֫xfR_{"7:kqMNCLz{b‚q.2'dÂ82aF TYIiT Lq2L2(Ypl]mW7[.3r&sh2/?4xR(Pyly `m춙a[ *ȵ5^yrWjk2#5u2K}\RLl֛a $Y/\v"F}Ђ Nct+r e@zڼcK(@͖sn ں86AG /q]A:yXҬIENDB`n,"4ḍml{PNG  IHDR@JgAMAPLTE """)))UUUMMMBBB999|PP֭3f333f3333f3ffffff3f̙3ff333f333333333f33333333f33f3ff3f3f3f3333f33̙33333f333333f3333f3ffffff3f33ff3f3f3f3fff3ffffffffff3ffff̙fff3fffff3fff333f3f3ff3ff33f̙̙3̙ff̙̙̙3f̙3f̙333f3̙333f3ffffff3f̙̙3f̙3f3f333f3333f3fff̙fff3f̙3f3f̙fffffffff!___www˲𠠤X"NIDATxْy3"* v̱-Nmtw'KXU%.*B (G Pxÿ@@ QDIW$K&@932lr/xE{zL,WHJN&i㗓?U kXd$z}&""5%=!\s#_i(8" {tz$J dR$Z[7S5ٌn1qmS9@4u6~1G_ Ԍڼ@63Ol$vk$ tϠ~ļCk-TMi 9:&ȤSSd*?/fNUqBY+3&ǿ|u&S~_̬@^~u"T[ʏKUMqm3{qc?? /b*Lt"h ІrR?@\!B\B@ A!B @ aAk(,@Z(>usݛzOV\w ߬SIrBt?\~k (b}z f#5u?y}R#)Reӈ҆LzoC@'fIPvd ?_ͦ ti!%Kc}έ^͟k)l RUazauHsR=R5_hxK'FT:>3N|K񣇰e_@rU S3=öl(Þ# ].X6hUN-  A!ΰގ$7@ A!B @ @ A!B @ @ A!B @ @ A!B @ Fkb~oK͇~Dӏܲ6A0|4y(+jbA tc>n"8~6d>.s'rL?@]@iz;@ODCqV $~apL,*~wLrĩN̩C5V!ɿ-4L"}QiۥI{.b_=PMTIQL@y1u()hC:rMG\DۗT—w .Cmm"nNm\;5yۙ)~eQ5tF2[#uRӹH]\l4*PӲ@zyr蜜@t̷kY wF _Nm\gm 'ǖs 3\R:u_♢E@cK( v)87|Q3Warn?WN:05HmM= =N#!̿ ;Сecs%|s@A @ A!B @ @ A!B<-/|#y| ߬IN_l ۿ? ]Xh5t=]y l#6Kw ɏS}ǽRӆT>egg 3j(ww 'ZټD^rqV@.PinԀ|B f3U1nclU#XFh@"-QYb3jv~2[u^UDeYO EuWV d23PQ@z*U@ 4]503)]Td!#s73(@NՠGcuq\l$'֮9QVų؟<1 x8,PHt΁@@(Bw Oo~9L  N8Yi @Ld}4[xl"CW k{ok%Q%߿} tӧ9wg? }@wgz'7v۹5W;#u ŗoco'/ 4!H,K U!٭Nr!lasVd@; T [Wa9Po$Ev6mSmи@J/HD6-]'l蠩mN~T~$oVM1ݳ-@@/pVlđ+RkTrȲU4NXJ4;d Wc[ t7M{ Ii d"gׯD+%}[h%jwڒl򌱛H$t]@nmҝy(j4W<]%eqQhڤWaѫG¼wd6H>H$ءU~^,]ݝ:c;y#4:Z#/PW3l~F[twMɑNα+Ս6J.eF5{^\g'P*ot/͓T4ϕcْ}TU]vcn<?7TsMu-tœ2Ϊ#~Oe#нn64RE~YS@(Ʉ%n}5h,;TD"џDO*?Ue|=f5̛I*dw8@kHzT(TьKeLM]^2HHθ"YT~"~!@٦3 D`2ɗj"vg )"Q^u.kf`GrVsde& [8*~](%NS[5$?<egIȷL:%NS*TM/5fOq4a#Wa(Pm?N7Zt܊7M\o4MŠDDDDq.wb Vδ<6^}*IJ%yIp MU~ehUNjWj$SZ۶1%8.[1D5'?xEbm- O ;eoxTRiA /qmm ij\ki]M{?ז3@Ir}@9>%7N&9t24CkٶaEmYD TceuzHRl 2Mq;ÊD[MjW4A B@5ۈIգuFju;鄲Muρ#"~NUXݺeuDQ۶7G,o0meU[]dPG $.0]U%w*, 8hGTq=?ghhڐYQP9@f"B"B"B"B"1J[ߕl㍛kc6)S' 9يD/GX{@onV$M =͹)Sw 4"10<F=Rl\fy_SZ螪{X,DU'LMMMQq+'7PXD햦R ʲͮv]r t#eZo@ 1=\J"U-"UgF m~ss;: dRdbVj?;eaEw49Tۺr5_KVLTo6AF G$wS68vEb'n͢e4r*UV%0YK`nYW@@'&ZxO Iio+3v=)P3"ZN+HHHHHd^>}p y'7[lǮHflLR'E]c4Y/wGmR܏] G ΊĬ_wg1_%JYqdzhIUaڧ*VrwajQMS8OEUXt1()3#𨿬k8|=89I=9:8KI٭%$JY6Ijɵ:IB1HHL{ HT> h#;W"tG6oWO d7u;_)6$9Z'g } nK)QBGQR#W$ Jv ט`z ~)Pn $Kwk  ;3Pj"]^iGU9ck-t*8TԌ]².i/+a8xEPc*L!-j5$wl$PBOB@)D%( T H@Fw@ >fFyc0}NGq"Mi )x@!B @ @ A!B @ @ A}xOztx!B @ @ 7 ~!e}@s[{HY_."G@hKAxY% P,Zr#<#mqԂnh>ek 0 NxicshB<=_~y8<Y)x͍o''/ԸȹL\D ?zuǏqq~5#Nr@+6/)?s?ǿ>Ï C}|V^?"$V=G"?md4NϏ߿_>w|>>~ypsr+*k\t˾^}}leK]s7'??>v=w//cOl2 'hQcO-FU+ DU@G^P9d`?}μQNY? 0fa5>X|~=%%go4sIy&_++1APt[RGg}-u/(=s ߱diWN%K<߉}]䌵L]{/jg{1_#fInLwͽ; hi`eOsl:?d.h|=O,J8^#l`sɇfT,\$ gX4 k̜J'hjkW<3=M?cf'9PǞm!-f;s՚:sWؼ : ~o"D*P9ι[޹z/_9OϦ7y})gX?r_RXlVױ&;f*ә4믂HR,Obr3XieYmݱ\hYo2נdzc>7z܌-~7c?NS ns#jySX>TJ(s8ɵ3{Il&D {$U#;si9\*vP=T8<| uJ \g5ԪV 졞"=qCts6gB ˪=qEk=tIy{dHcϬ %=k̓={6Pj+xͽPbvF}O('Sk'{R=hse-Z|{`͎L&i=)]aHPI1+=;ڳxɊ);1-=$= Ha01 Ka $yO 8F .I֓Y!xp ƞ0RJ-b"QHWI Kř$q${=~t?|vs}e~L/@[9\jYb۴5.~R+:М{= ss}5{, uI];_s'V>gi;8 @~XBKk]r.;Rq{{djX?q籧!fgu 5ss*?rsm.+9S&rOz}\PK/]#=KfF-b =@'hp?|ͿӹCsL[BCB oNo[{_8|א|[/[~f'M!Г&GNăMx$==yqۍ[)1h'Ѐ4g밞yO gu6wd B7scOFZI%ɮcW)S%JCq枅yO l$gI2SqScO^g Dazr'=TpgSr! IKE.p +ScH}#$ScVDq&'Lx]QRY4ĝ sH}H!=Qr{1{j,ي7,ƞhϞKE ;Bs&j,oBR71'R$1[hAzh҉5b!=ўk,7ƙ;sz?)>VlIqƞ#k,%M#=qgXrVYyc{1XJ3Lw1D{N;qHO4K[E'B%Đ@  'h0&j,ɷܯӃ~msB%'ڳRp۬H"Sc)]IR$)m,SPaV?D=qgwk"IL[<7 Ez$dߥ[$I>6Lw3=&:/C vJJ4ay''Ǽ';$mBS1yA=ў=5IVI, j;ϋ =$uE5EƾG*Sƙ;hAz 'hpMRX|F-qHOG]cYYzE11{j,9d4zKǪ"~{ΜSo=fDq`JUĝdhP113F 89CŬAbNzϼ'f%Vؼ#`Yimn=u%'yUbHμ*zyahƒdf)`$8LVt?gؓpO=@'h0 k, -{hϑ5f+clt$fJKNP cO@ofೱ} 6==a%Tpt/0]cOpT$*-]Uk,ewH=WKBRRp=5œ64qc{S(lIO:,qLqJ.5w =@DczKbhf#bcOA6S܈3A3:;7`)俓^Grtv'ZdF&7gB34DgǼ'ZO"Ttv=q'D'Dzy]n3w4&}}iȯ%#Dz-]!=)e!=f-q'% R7'hAz 'hAz 'hAz 'hAz 'hAz 'hAz 'hAz 'hsgs^=h&%=<0 b''Y-@ 4tK{x:?(%3%.u)d 4HO~Og7MӲ,4Muݒ#wwf_Bni puuo2)/_لQ@E陵{.(or_$--Y9lzNghiioi{n}6aIKKhXD榧yFz0`IKK+o`L,}f:;tq<+"iiijlٴ,s{μwD{>b"LŊN {2-{ƞ74_%ƞ;[*, =yyOU;=+"iiijXDsL~>%sD=7C/vS,=tؓV -K<:3b1뾲Z'-l1dt 3גI\ iiioAZi2}Fe?M0 http://www.forumaccess.com.br/\D/<KP(LPPLPLPMPNNPOQ d1DN< Q3QQQ  ^^ Q ^^ùQ^^wQ^^ +Q^^ Q^^ D<C aXX XX  !XX"#XXc$%XX&'XX()XXD<Db*mm+,mm-.mm/o0mm1\D<y2DD3F4DD56DD78DD9:DD;DV<&.&L&<mm=&>mm?'@mmAD^<-,OmBCHHDEHH FGHH!>HIHH" JKHH#LMHHD <D$bNO00%PQ0&RRS0'ԮTU0DyK FC:\VBGRBG.BMPDyK FC:\VBGRBG.BMPDN <(V WX)Y Z[*Q\ ]^+_ `a,b cd- e fg.q h ij/9 k lm0 n op1 q rs2 t uv3w xy45z {|5} ~$D <6v v 7v v 8qv v 9>rv v :rv v ;sv v <Ztv v D <z{=5{>{?k|@8}dD <:AXB߀CDEFeGnH;D^& <S { I   J%   K   L[   M   N}   D^/ <O,,,P,,Ql,,R,,S,,TS,D<_UmmV,mmWmmXmmD6 <PxYXXZXX[XX\zXX]eXX^PXX_]*XX`H+XXa3,XX\D<11b1''c2''d;3''e3''fq4''D<7"8g@8h8iv9jYD<k=PPttlPPttmAPPttn PP ttD  <Jro jj    j]pjj  j]qjj  j]rjj  j]sjj   !j"#]t$jj%  &j'(]u9)jj*  +j,-]v[.jj/  0j12]w} 3jj4  5j67]\D<PP?tt| S@PAttDV<mVV}VBC~:WDEWFGDV<.LHIJKLMdD<A_NWWOmmPWWQmmRWWSmmTWWUmmoVWWWmXWWYmmZWW[mm+\WW]mm4D  <W...^11_1.`.a .j/b11c1de 0f11g1hi T1j11klm  1n11opq  2r11stu  3v11wxy  4z11{|}  _5~11  6611  DV<ooppBqD^<7r_r}rz  rz  msz  sz  gtz  tz  \D/<P|x||}}~@dD<{XXHXXXX XXôXXXX{XX XXD/<_MD/<gYYY4ZZV[ D/<8`~cD  <Ai000r00\D/!< >,,,,t,, ,,r ,,DV/"< 9 W ,, ,, ,,DV/#<rrrrrr=DyK 2http://www.geocities.com/WallStreet/Exchange/1726yK dhttp://www.geocities.com/WallStreet/Exchange/1726ADyK 3http://www.geocities.com/WallStreet/Exchange/1726/yK fhttp://www.geocities.com/WallStreet/Exchange/1726/DyK http://www.oden.se/~daniel/vb/yK >http://www.oden.se/~daniel/vb/DyK "http://www.exotech.com.br/vbasic/yK Dhttp://www.exotech.com.br/vbasic/DyK *http://www.terravista.pt/copacabana/1102/yK Thttp://www.terravista.pt/copacabana/1102/-DyK .http://www2.uol.com.br/info/forum/vbasic.htmlyK \http://www2.uol.com.br/info/forum/vbasic.htmlDyK http://www.forumaccess.com/yK 8http://www.forumaccess.com/DyK http://www.vbonline.com/yK 2http://www.vbonline.com/DyK http://microsoft.com/vbasicyK 8http://microsoft.com/vbasic_DdG )  <  C Ab*9)ub"n*9)ubPNG  IHDRGH#Rt*}0VYKCUf訾H9m(?^mǟk4:CtT_{??B`n4MjUa_Ť"Iy'U!{H<1Txz z zfA>M#WCriRjT rSMu]Wc=R=[S4T@W@IU#UУP˄H˾8&&QGGGGGGG, BUУ;=멢}z z z z z z z|7K-Re겕*"uC/Nc(Uw߱6Eƣ H&*`#j%IENDB`Dd< 5 C A$b7o"?bVbðzdn\7o"?bVbðzPNG  IHDR pgAMAPLTE """)))UUUMMMBBB999|PP֭3f333f3333f3ffffff3f̙3ff333f333333333f33333333f33f3ff3f3f3f3333f33̙33333f333333f3333f3ffffff3f33ff3f3f3f3fff3ffffffffff3ffff̙fff3fffff3fff333f3f3ff3ff33f̙̙3̙ff̙̙̙3f̙3f̙333f3̙333f3ffffff3f̙̙3f̙3f3f333f3333f3fff̙fff3f̙3f3f̙fffffffff!___www˲𠠤X"NIDATxM(Eid-YӮYT7=%  ; 1S y>J-jS4Kj*o+Mx+fk"^M묨OO9kձ9 ЬY5g]k)kV"~a3Oiץ{s'K>?47XӼ{yP~p/N^]UHbيzMsZͦ6:EEͱY5/y굚N]vE5GB}{4kn'Qs$Pi*`4yy 6Uy͑9wloHv/OsٚFjϵGopmo= 쌹ΦQ<5'fxmrBsk+zP3O1<ͳ[5IUTJO2T3doVfa\FM׭~[*@vk^»UZ45{!0̵,׬eʽ8hDEo6cބ48ŸYIUB4kj[sd٪BtlOh͋Y)VR#mʬ\̫[e4Lx+MKe4+=P4:6/QPN#9?Ҷgpw~#mCϓ1`';QfxM+zBsk+zP3 5w1VGWJPM5H[ ܟwߛfQ9x_2;-E=ŞޗPWQ(i>Z7Ξla/YK2t'F&͉z[myQA9RXĨ!J),vR,Lf?eӖQbMSٴU87>[JEo_mv8CFAgj-%S ZƍKt_9Iq%\5rE)QDQpGϖEsE){GOdUԔrCyy(S;o\RS桴h>GcS泡nPJͳ9BҫW<>ĕ5:{}KL+&'C@P3 5C@P3 5C@P3s`__% m˜ceH4AB,nm٫P;ic2ًɺD̵U[[[' jf/f.gͿ+[Kz|{ypE{& 5v٘fnVIխ?\6PfekA,n:Q|sY86'b90SԦ865+L#bGkCWXo/Rғ1Ӕ潭ًj^04[+XE%kfYPuFGKŻ[}bEE<@?#Cg5 D?u .uf3ŤZ󡀉~ǔ41;i^)ԬO*އDc:T֏LĴa=6a{=mYz{s45i.mMךmG)g3pBN2a- kLA. j!fj!fj!f@s?DIfSЬc(h&τ!fj0KĸQʌ}y#M^s&O5Մ15oV.gm\rܫ1j@}# 5T\M 5f-iм+][|KDb"4_eO+b6,I:i9wӜq{f!2VU9PS}ZMi]mil3YQhVUU3Ns(jۚM8:fӊM4Uo5Qs?,?:O-1_՘2wQC5{(wxexZ#\>6Ӡم]ivk&t֜}Z#csyk[ ri^|}Լvj]l֬ޱ\ph>ʽgܚEG-uЬy:mW*:V`/Ff=2l^7t}OhkwT4~ R2/l&`^ץ2[nTۯtSnUwvB|u b{SWH|[t{^!c$c3uj ]f3Y]3jX~`".ۺ{ROnSCVt˻KwGF?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~Root Entry(N t 3   FQhk?!+ Data3 )w B x S DLWordDocumentH y #  ! +NzObjectPool *?!+_939021092 F*@*1TableCompObjkObjInfo [(@(NormalCJmH6A@6Fonte parg. padro  l,b$`|$`7=S5!;:* @n(  6   AB S  ?D\t@B@GTimes New Roman5Symbol3& Arial"ff!0Ribamar Ferreira de SousaRibamar Ferreira de Sousa  !"#$%&'()*+,.  FFigura do Microsoft Word MSWordDocWord.Picture.89qOh+'0 ( D P \ ht| INTRODUONTRRibamar Ferreira de Sousa0ibaNormal LABORATORIO DE IWordDocument SummaryInformation( DocumentSummaryInformation81TableIbjbj] SSS]______$NBS1"SSS]M]]]S ]S]]]]] `Gt߼]]  jUmH(&P N N!&"&#&$&%n`|$`7=S5!;:PNG  IHDRlSzgAMAPLTE """)))UUUMMMBBB999|PP֭3f333f3333f3ffffff3f̙3ff333f333333333f33333333f33f3ff3f3f3f3333f33̙33333f333333f3333f3ffffff3f33ff3f3f3f3fff3ffffffffff3ffff̙fff3fffff3fff333f3f3ff3ff33f̙̙3̙ff̙̙̙3f̙3f̙333f3̙333f3ffffff3f̙̙3f̙3f3f333f3333f3fff̙fff3f̙3f3f̙fffffffff!___www˲𠠤X"N pHYsttfxoIDATx 0D2+8X i M+I 1da<,(kY,_)^~:} U{7뎵?(ڋZIENDB`Oh+'0|  8 D P\dltssRibamar Ferreira de Sousa0iba Normal.dotrRibamar Ferreira de Sousa02baMicrosoft Word 8.0 @@>l߼@>l߼      !"#$%&'()*+,-./0123456789:;<=>?@ABCEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~՜.+,D՜.+,0 hp  DNOCST   Ttulo 6> _PID_GUIDAN{FF5A2460-4AC7-11D1-A9E0-444553540000}A%bS/A\e$aQ\4/fn'/A\e$aQ\4PNG  IHDRlSzgAMAPLTE3f3333f33ff3fffff3f̙!3f3f """)))3333f333333333f333333f3f33f3ff3f3f33333f33̙33333f3333333f333999BBBMMMPPUUU___ff3fffff3f3f33ff3f3f3fffff3fffffffffff3ffff̙fff3fffffff3fffffwww|3f3333f333ff3fffff3f̙̙̙3̙f̙̙̙3f3f̙3333f3̙33ff3fff̙ff3f̙̙3f̙3f̙f333f333ff3fffff3f̙3f3fm pHYs 1IDATxR C! C:qB( Ų|"tdTP7x7')< ƻjXj&yi=jRy_PX3^B2yQC/Di|ϐv2&n>.5]ia;ޡ#8IENDB`yDd,no< 0 C Ar{[1\CRtIz{[1\CRt(ʦ """)))UUUMMMBBB999|PP3f3333f333ff3fffff3f3f̙f3333f3333333333f3333333f3f33ff3f3f3f3333f3333333f3̙33333f333ff3ffffff3f33f3ff3f3f3ffff3fffffffff3fffffff3f̙ffff3ff333f3ff33fff33f3ff̙3f3f3333f333ff3fffff̙̙3̙f̙̙̙3f̙3f3f3333f333ff3fffff3f3f̙3ffffffffff!___wwwDd,P< / C AruYL&+/KxQ´zIYL&+/Kx(ʦ """)))UUUMMMBBB999|PP3f3333f333ff3fffff3f3f̙f3333f3333333333f3333333f3f33ff3f3f3f3333f3333333f3̙33333f333ff3ffffff3f33f3ff3f3f3ffff3fffffffff3fffffff3f̙ffff3ff333f3ff33fff33f3ff̙3f3f3333f333ff3fffff̙̙3̙f̙̙̙3f̙3f3f3333f333ff3fffff3f3f̙3ffffffffff!___wwwDdDP< . C ArugJKHGQǼzIgJKHG(ʦ """)))UUUMMMBBB999|PP3f3333f333ff3fffff3f3f̙f3333f3333333333f3333333f3f33ff3f3f3f3333f3333333f3̙33333f333ff3ffffff3f33f3ff3f3f3ffff3fffffffff3fffffff3f̙ffff3ff333f3ff33fff33f3ff̙3f3f3333f333ff3fffff̙̙3̙f̙̙̙3f̙3f3f3333f333ff3fffff3f3f̙3ffffffffff!___wwwDd88ii< - C Ar= 4SPYYz 4SPYY(ʦ """)))UUUMMMBBB999|PP3f3333f333ff3fffff3f3f̙f3333f3333333333f3333333f3f33ff3f3f3f3333f3333333f3̙33333f333ff3ffffff3f33f3ff3f3f3ffff3fffffffff3fffffff3f̙ffff3ff333f3ff33fff33f3ff̙3f3f3333f333ff3fffff̙̙3̙f̙̙̙3f̙3f3f3333f333ff3fffff3f3f̙3ffffffffff!___wwweDd 8< # C Arڤ q2Ű-Nvzڤ q2Ű-Nv(pʦ """)))UUUMMMBBB999|PP3f3333f333ff3fffff3f3f̙f3333f3333333333f3333333f3f33ff3f3f3f3333f3333333f3̙33333f333ff3ffffff3f33f3ff3f3f3ffff3fffffffff3fffffff3f̙ffff3ff333f3ff33fff33f3ff̙3f3f3333f333ff3fffff̙̙3̙f̙̙̙3f̙3f3f3333f333ff3fffff3f3f̙3ffffffffff!___wwwDd,8no< $ C A r=oŪlNg zoŪlNg (ʦ """)))UUUMMMBBB999|PP3f3333f333ff3fffff3f3f̙f3333f3333333333f3333333f3f33ff3f3f3f3333f3333333f3̙33333f333ff3ffffff3f33f3ff3f3f3ffff3fffffffff3fffffff3f̙ffff3ff333f3ff33fff33f3ff̙3f3f3333f333ff3fffff̙̙3̙f̙̙̙3f̙3f3f3333f333ff3fffff3f3f̙3ffffffffff!___wwwDdDP55< % C A  ru彿E[݋gĩCWQzI彿E[݋gĩCW(ʦ """)))UUUMMMBBB999|PP3f3333f333ff3fffff3f3f̙f3333f3333333333f3333333f3f33ff3f3f3f3333f3333333f3̙33333f333ff3ffffff3f33f3ff3f3f3ffff3fffffffff3fffffff3f̙ffff3ff333f3ff33fff33f3ff̙3f3f3333f333ff3fffff̙̙3̙f̙̙̙3f̙3f3f3333f333ff3fffff3f3f̙3ffffffffff!___wwwDd,,< ' C A  r!_CXz_CX(ʦ """)))UUUMMMBBB999|PP3f3333f333ff3fffff3f3f̙f3333f3333333333f3333333f3f33ff3f3f3f3333f3333333f3̙33333f333ff3ffffff3f33f3ff3f3f3ffff3fffffffff3fffffff3f̙ffff3ff333f3ff33fff33f3ff̙3f3f3333f333ff3fffff̙̙3̙f̙̙̙3f̙3f3f3333f333ff3fffff3f3f̙3ffffffffff!___wwwDdD855< & C A  r=fb]BGzfb]BG(ʦ """)))UUUMMMBBB999|PP3f3333f333ff3fffff3f3f̙f3333f3333333333f3333333f3f33ff3f3f3f3333f3333333f3̙33333f333ff3ffffff3f33f3ff3f3f3ffff3fffffffff3fffffff3f̙ffff3ff333f3ff33fff33f3ff̙3f3f3333f333ff3fffff̙̙3̙f̙̙̙3f̙3f3f3333f333ff3fffff3f3f̙3ffffffffff!___wwwDd,D< ( C A rYFi=gUc5Nz-Fi=gUc(ʦ """)))UUUMMMBBB999|PP3f3333f333ff3fffff3f3f̙f3333f3333333333f3333333f3f33ff3f3f3f3333f3333333f3̙33333f333ff3ffffff3f33f3ff3f3f3ffff3fffffffff3fffffff3f̙ffff3ff333f3ff33fff33f3ff̙3f3f3333f333ff3fffff̙̙3̙f̙̙̙3f̙3f3f3333f333ff3fffff3f3f̙3ffffffffff!___wwwDd, < ) C Arr389KAٵh]7zr389KAٵh](ʦ """)))UUUMMMBBB999|PP3f3333f333ff3fffff3f3f̙f3333f3333333333f3333333f3f33ff3f3f3f3333f3333333f3̙33333f333ff3ffffff3f33f3ff3f3f3ffff3fffffffff3fffffff3f̙ffff3ff333f3ff33fff33f3ff̙3f3f3333f333ff3fffff̙̙3̙f̙̙̙3f̙3f3f3333f333ff3fffff3f3f̙3ffffffffff!___wwwʦ""Pf3fDdD,55< * C Ar!ldjQVmfjzldjQVmfj(ʦ """)))UUUMMMBBB999|PP3f3333f333ff3fffff3f3f̙f3333f3333333333f3333333f3f33ff3f3f3f3333f3333333f3̙33333f333ff3ffffff3f33f3ff3f3f3ffff3fffffffff3fffffff3f̙ffff3ff333f3ff33fff33f3ff̙3f3f3333f333ff3fffff̙̙3̙f̙̙̙3f̙3f3f3333f333ff3fffff3f3f̙3ffffffffff!___wwwDdDD55< + C ArY=铄AQ 5} z-=铄AQ (ʦ """)))UUUMMMBBB999|PP3f3333f333ff3fffff3f3f̙f3333f3333333333f3333333f3f33ff3f3f3f3333f3333333f3̙33333f333ff3ffffff3f33f3ff3f3f3ffff3fffffffff3fffffff3f̙ffff3ff333f3ff33fff33f3ff̙3f3f3333f333ff3fffff̙̙3̙f̙̙̙3f̙3f3f3333f333ff3fffff3f3f̙3ffffffffff!___wwweDd 8< , C Ar’j~L>fz’j~L>(pʦ """)))UUUMMMBBB999|PP3f3333f333ff3fffff3f3f̙f3333f3333333333f3333333f3f33ff3f3f3f3333f3333333f3̙33333f333ff3ffffff3f33f3ff3f3f3ffff3fffffffff3fffffff3f̙ffff3ff333f3ff33fff33f3ff̙3f3f3333f333ff3fffff̙̙3̙f̙̙̙3f̙3f3f3333f333ff3fffff3f3f̙3ffffffffff!___wwwDd8899<   C A r=vq@ 4*,u Fzvq@ 4*,u (ʦ """)))UUUMMMBBB999|PP3f3333f333ff3fffff3f3f̙f3333f3333333333f3333333f3f33ff3f3f3f3333f3333333f3̙33333f333ff3ffffff3f33f3ff3f3f3ffff3fffffffff3fffffff3f̙ffff3ff333f3ff33fff33f3ff̙3f3f3333f333ff3fffff̙̙3̙f̙̙̙3f̙3f3f3333f333ff3fffff3f3f̙3ffffffffff!___wwwDdDP<   C A rurmFHsqwQzIrmFHsqw(ʦ """)))UUUMMMBBB999|PP3f3333f333ff3fffff3f3f̙f3333f3333333333f3333333f3f33ff3f3f3f3333f3333333f3̙33333f333ff3ffffff3f33f3ff3f3f3ffff3fffffffff3fffffff3f̙ffff3ff333f3ff33fff33f3ff̙3f3f3333f333ff3fffff̙̙3̙f̙̙̙3f̙3f3f3333f333ff3fffff3f3f̙3ffffffffff!___www Dd78 <  C Ar qƽ2*} Ͼ# z qƽ2*} Ͼ#(7ʦ """)))UUUMMMBBB999|PP3f3333f333ff3fffff3f3f̙f3333f3333333333f3333333f3f33ff3f3f3f3333f3333333f3̙33333f333ff3ffffff3f33f3ff3f3f3ffff3fffffffff3fffffff3f̙ffff3ff333f3ff33fff33f3ff̙3f3f3333f333ff3fffff̙̙3̙f̙̙̙3f̙3f3f3333f333ff3fffff3f3f̙3ffffffffff!___wwwDdDP<  C Aruۮg~.BQzIۮg~.B(ʦ """)))UUUMMMBBB999|PP3f3333f333ff3fffff3f3f̙f3333f3333333333f3333333f3f33ff3f3f3f3333f3333333f3̙33333f333ff3ffffff3f33f3ff3f3f3ffff3fffffffff3fffffff3f̙ffff3ff333f3ff33fff33f3ff̙3f3f3333f333ff3fffff̙̙3̙f̙̙̙3f̙3f3f3333f333ff3fffff3f3f̙3ffffffffff!___wwwDd8D98<  C ArY9eǂяx5©z-9eǂяx(ʦ """)))UUUMMMBBB999|PP3f3333f333ff3fffff3f3f̙f3333f3333333333f3333333f3f33ff3f3f3f3333f3333333f3̙33333f333ff3ffffff3f33f3ff3f3f3ffff3fffffffff3fffffff3f̙ffff3ff333f3ff33fff33f3ff̙3f3f3333f333ff3fffff̙̙3̙f̙̙̙3f̙3f3f3333f333ff3fffff3f3f̙3ffffffffff!___www Dd[bDNK<  C AbJ 1bd9#& n 1bd9#PNG  IHDR[bTzgAMAPLTE """)))UUUMMMBBB999|PP֭3f333f3333f3ffffff3f̙3ff333f333333333f33333333f33f3ff3f3f3f3333f33̙33333f333333f3333f3ffffff3f33ff3f3f3f3fff3ffffffffff3ffff̙fff3fffff3fff333f3f3ff3ff33f̙̙3̙ff̙̙̙3f̙3f̙333f3̙333f3ffffff3f̙̙3f̙3f3f333f3333f3fff̙fff3f̙3f3f̙fffffffff!___www˲𠠤X"NIDATxv8 u_^e^lC%csf ZEeB`s}ldfl[w-^[B_'7;ױWb>[a_c^/00ݖYmbA\frgb dlh n6q.; 趸b=3pn`p]7{ݰf3P讳nG;Wj)u;66MDwpK'ug]w9v BΎA?oki@a|1fabqIᎽN|Rĉ On`l^̭~ &]SP.'[Az޹NwЛtWJJaO7+jk6?uԲCK[kd&v&l]r 7N\P)Yoah `>\N>Ul{rFq24.٬?h2 쥴d9[R.2yG]lBPkzj8?^-u46A(2FaSK"gɶuثuw;A`nu6lvD":;T *qE BD|8mx\8i`_O.̓n>''BS N5lwtܹmc>}75˶/(&DoKOʥW1+eF NnVzem!K Pمn^6DBn)Mp2 63{v>̋ʸl]o)q*iUO0;+XhQNٺjU,eAUlEȱ.AODy>qNt٦`=/ul$]^N8Unvp-N!Iztu\kDWZ^`6.c3)a?5`^#%O'ӑȆbRx?)}uB4cC`c7.XS6$6өӝ͙J>h> PNY<7weucGKJt7C7fqRce.Ԭ붷p,gn?ç| 3*w{GeA[dgʶwoI1NJc65NƸҗ⻴FgF٪Oʞn^rķɋ 476oQ\~?r;$ vH&Vm[2EwܜI0|HtCZeꏦKVh7?-g;Ws8TWZ_Du't;|>|ϸc!wn*̞{c޷fCp};W7ͺWQY,'T\M&KؘZ7{'tgJYdBI'q;؇lOx Bizk$j tkz˼B\+5c{-\ s9$;wyW_fe8֍\Mf‚؅;uW`[7AvKY1g4v3v'Ud\>/BҸfgpW ٞofWctI6MasVF)xOeSٹeMQodFM=qrK681+yu{[6Ub` t}WXsǞln=NlAuqqn MO>ug㽑Im'ʁךI9tل¬bgab]=-V1yjIz c>>q[{OkeO@*$RW_yeǚFu'qlTIYٱl\dݾi[a_c^/00ݖYmbA\frgb dlh n6q.; 趸b=3pn`p]7{ݰf3P讳nG;Wj)u;66MDwpK'ug]w9v BΎA?oki@a|1fabqIᎽN|Rĉ On`l^̭~ &]SP.'[Az޹NwЛtWJJaO7+jk6?uԲCK[kd&v&l]r 7N\P)Yoah `>\N>Ul{rFq24.٬?h2 쥴d9[R.2yG]lBPkzj8?^-u46A(2FaSK"gɶuثuw;A`nu6lvD":;T *qE BD|8mx\8i`_O.̓n>''BS N5lwtܹmc>}75˶/(&DoKOʥW1+eF NnVzem!K Pمn^6DBn)Mp2 63{v>̋ʸl]o)q*iUO0;+XhQNٺjU,eAUlEȱ.AODy>qNt٦`=/ul$]^N8Unvp-N!Iztu\kDWZ^`6.c3)a?5`^#%O'ӑȆbRx?)}uB4cC`c7.XS6$6өӝ͙J>h> PNY<7weucGKJt7C7fqRce.Ԭ붷p,gn?ç| 3*w{GeA[dgʶwoI1NJc65NƸҗ⻴FgF٪Oʞn^rķɋ 476oQ\~?r;$ vH&Vm[2EwܜI0|HtCZeꏦKVh7?-g;Ws8TWZ_Du't;|>|ϸc!wn*̞{c޷fCp};W7ͺWQY,'T\M&KؘZ7{'tgJYdBI'q;؇lOx Bizk$j tkz˼B\+5c{-\ s9$;wyW_fe8֍\Mf‚؅;uW`[7AvKY1g4v3v'Ud\>/BҸfgpW ٞofWctI6MasVF)xOeSٹeMQodFM=qrK681+yu{[6Ub` t}WXsǞln=NlAuqqn MO>ug㽑Im'ʁךI9tل¬bgab]=-V1yjIz c>>q[{OkeO@*$RW_yeǚFu'qlTIYٱl\dݾi|țkqX׻$V(kdw:Xy#VH{yx2[׬X,m(KYYs`rK5;Mߗ˷ -j3]jx۟*ȥS\kHŻ!ej`]{`q v_NmqX)_bنXtNbdf*gg핌ٴX2֘pZe)TUoUK5Vd(ybԵ6nUnj?N2=uhl #;5Ww㧟UivfKn٘i.4mC,s&9$䯡/ֽtĺW5YX{t-sLɫr*8jo:eu'pʩq[0;:59S2SUX~}>΂鑖bђ^,vpziZ:&3iZ:&ID%;CJ:^(m"t{G8_gͫ,}K6O{ێECbR(gx)#4b5yG('uh>QkڷMEmKlqu[arAp7{1ni3'Nm-L_qa6U咶Lz{~5Ab-c_z҉ϣ5m/cձUzk~|F)(bE^V9M3>_9BnZ"QVjV1kbpKXQwڵ_ۇEKs̝!],](XgwtX[-V'Yku+6ٴ^@Nޕ8/-rv/ܝ(kb%ŲWC[5V+]7/Zp۬LnjVH1p>k)VRC#֐xhEif<$c3L+w%箱DZ\.ovU݉r@-3l>mnJ1Eh+&q^^CWmCbvw8B;y?҇fq^_Wdk|Xk _!B8o,Xn?зPEyYqVW}k- HVAb,V  $ H@,X @b  $ H@,X @b  $ H@,X @b  $ H@,X @b  $ H@,X @b  $ H@,X @b  $ H@,X @b  $ H@,X @b  $ H@,X @b  $ H@,X @b  $ H@,X @b  $ H@,X @b  $ H@,X @b  $ H@,X @b  $ H@,X @b  $ H@,X @b  $ H@,X @b  $ H@,X @b  $ H@,X @b  $ H@,X @b  $ H@,X @b  $ H@,X @b  $ H@,X @b  $ H@,X @b  $ H@,X @b  $ H@,X @b  $ H@,X @b  $ H@,X @b  $ H@,X @b  $ H@,X @b  $ H@,X @b  $ H@,X @b  $ H@,X @b  $ H@,X @b  $ H@,X @b  $ H@,X @b X'8 X^9q)źXYI'^m $ H@,X v]y{B Povw+jkĚAHBg08bqnϗ}Ċ\OT)y 0nnbEB2S+ T Dnׇ +ݰ6ڔ+߽-.VF9#孱گ.KXJv0̑.UpЇקbYX]+s|B. $ Hz-=Xݎ}yb b X^_D$u.5jJIENDB`DdxTT<  C AbWU.h*vX#3pn+U.h*vX#PNG  IHDRxL\AgAMAPLTE """)))UUUMMMBBB999|PP֭3f333f3333f3ffffff3f̙3ff333f333333333f33333333f33f3ff3f3f3f3333f33̙33333f333333f3333f3ffffff3f33ff3f3f3f3fff3ffffffffff3ffff̙fff3fffff3fff333f3f3ff3ff33f̙̙3̙ff̙̙̙3f̙3f̙333f3̙333f3ffffff3f̙̙3f̙3f3f333f3333f3fff̙fff3f̙3f3f̙fffffffff!___www˲𠠤X"NIDATxa@ImބlU*UGlZ"Z=;R  +}L\-^.߃)` ̉mPg0'6j ޿fܛ-A/W7$΃%eg6ZEfafSoMi~*#3(ϊxWJ'WхZpx;ߙNv}_#x,˃Rk^5 2(m}j2Re'.>19,Et`JRrӭ\\DmZ{35mBj/(txef~CSyW#O>MڮjkkTi|zg֜el/dִCwj3X{G,Wŕ )R(=ߢѓo*♻V)Fey{}wiW1a)F?6>)osO݆'ȲCbiMtūָGk9V?ăWW4Ҷ~sp2.<]-x . x xKxB_B;mPbR UӲP7gL ߆Y[{ bEzJDFay_jkFɼ źx>ORă Ϡ/=jWx2/x EnlV ;/Z<#ag2"@p\@Rdx. ⹀x! x.4j ̤'o6xM<&|7x_-X suGo:V6xA /}JSIy&\CoyGА7T} xxU sbM<}n\+.="ApRL8SqP-ųz9C<'ڷq-eńB,؍xI8}X&߁w,Z,x ܠnE;Z[}/HZ)Tkv{#xn'#@<Ⅸ4Kp1 QHE^Pwq_BM1+6 S . x Oin)^ƌ&qo4ou ٱNƺTxK񦭕cFtu յ87ϸba\4&ZL!p*bxqx+)Neʅ[>{SjVga@D=#m(B;Ew RLՍ2B'!ޡ/oPx/:w}icia9CUE3F:&dAS<  !el` HGp>j:[O # | D<նP[TJ OyO^e0ċբ VEb&kQ0.y.F:C EY>̈́ϼU<賽ĎSmz-8 /Ejx)⛏xgWV.ĸ.1dx8i|>_-ŋRP˼ݢlųsżxs0>1 OxE[O\fk, 88⽂}[G[Vy)MʜlC#|ӻWAm(}c#0qd{zELÓ;?}Ј'O_2^)`/Dl匸+__4O%MK'6 xxʷxt;3oϩv?CBQf^b$l#%j }B5K"%u?5B݀VR O>:_(D<VٚnoZ膈> `Xx<%ƍ9%ͨSN\X%*)2cj" ԱG,eZx?6Cq'D `Xx<%֍xbv%)2>z1HSuēVūFTJ]\l &kQuh;oSrX$7+Z2,7%Uś uz1Nċ'R^lWjkrSm>{e0ʵ+ "*E<}:xiѶC9I[r}o Dڐ:ʩto)& Ë/B[ MfςBLGYx7xqx—%&SunG9{wW UjUv&ɥ1[PtVYrnxSxڍ"yŘ]!吏=KmgҼ^>k3PxGW $z}K8u_4鹸Y2=M}[c4K +'Mn.,:*(86Ӡ2A7+h[{=%^'c-BxΪ"2i}5.<|-) . x ;̈7Tfă. x . x . x . x . x» ?o\@O=[<`ŋc9N<3xoNy$s/6ȏFbp>. x . x . x . x .wqp0U=ոIENDB` Dd X<  C Ab0  n՝n+PS*H P%\}ʠhZAIsV"u(c༝Ju?N 6AA/#'(莵ikmSE 4ZjO)k݁k *#*#UXTNn"O@OA䁦g_nhh ^Z f^և2#k>(OA;и lP^^,ݷhLjtUrAk:zY2U2贂u P; uPbsiPTqD)(Q譩TR ʠл< #T;<\Ӓo",aݞ]]ßK6 ~>RоU ߺך@Ams(@ vHk}TUBmطM/()] ()Ǡ XBj=ufPaz%4砢$^ ʠ :Aӳ$P3$K?Tsh amM݄48i&&f𞸝UA-L$՜o;t(~>Au dADxDdaJETϽivm" f0y7Q?^CJYˆZHLjbHN8b5]{f%OͶdZ, -#*l2;FFiԞn9GAtlQ 2;4) ¹c&ų!tN#2#PJNan6hX*(6F4E4nC^቙Yɩe9(9ƈj1t#y >^GO %`cPj PcT5nH"I.hc2Pv]nMז RiT'9#2jxLJѱ9)#:t72JFv~&h~a@aE1V'AtA>|ߨnnBe)fyOPa\F7K5gӄO pLAgxɨ Zލ\{0Vw.'SIQdNtx׹P9}}zLA.>?t\XeE P o3nC5AȒjjO5z(gP[}B}Pǩ6}%P 7î *P@"tn׆=PgKC]k؛B8 PŒ+@#MbokŚ~tD~+4(* Zݒ(NP+ DD/߿*_ J!@7UV*A;3]ꝘLTPy;: 3_Y Cz3u){bT \B^Œ?dPeQ=#TeM /WA7Te@}̐ Po߹DC64=⏒(R:FVWt1Zp=z4z[?PhK)`PR?vR5e+ oEأSA )TST 3RWS>Py/+R0 {5BR`Tvj )W::'וJ)?{~^G񺩔g2cwU%n Qjzx'EΗº֐ǯWR=Вq(iC6JZեO=9΋J(h dkv)zQm@ጆ=qYyL2V($4E@hiӧhۣ9#t YB^JF峥OPt/B0tXR>Ejа7/:%7--HjڰfGR%@|JF>R,3v*7FzAy( wXvx4_! cJ5 (󭸞@ɠ숼 s#@+(Zh""*+XjP~'c [Fv.f2Tɜ^Ԣyawٳt<(qPhPc k ~d̓bB_3 5={B '*7@UUM^5Px6Cz{()h伻y!8T+__[(K|Z*xBSByo(Vnv~on(5lP>kڟ7CM>!5ߧ~;)ZtJ<_eQ Aק*I fF)دO!AaH0m*BqG?Ojg؄*A&RuʠÌJ;R3v*7F(5?׾E(>hJA4RmJRW,yW,$4+U|zxiޞ|M6"N)19G* Cu*)wqPr:_W-wQ*HP A%c+rOA /-n n jWhS6hsC=JyD񺩔gcwU%n Qjzx'KRaJ9!"<fQIPk4ឤDU vp[Pew(U0[OGPnJYPGPs??{Jč}>J͏U9FWziG7y {QTemlOڼꔒ"y T*n?z^eyIufJحy&A)P(@ɽۆ_CTUXS exI.*~aǡާXnsUuCThA/0~J͡EUOyT=á"?60.QYLNP#JMHJMuS)ϼKkiW8n)~iP(^GJN~{P( _-4trwAYZғPLhqS^BBP(lZrqqq?aG#FyHRqǰ.3m|BPx 4ȮM#^Fl8 WAomݒ\7VQ"L+ A7k_b/ BW{ͻ׺oE7f=֎>@P(|l6޺Eؔ|jymtBP(KK6Ziٺy]7 —ioN Bu, /tVV( ν'GV( E)E)z+ C 'QJK BYFowBP(<&%z+ P( /BP(@^WǏ} Bl|wrܗx]zp+- ;}p^(!IFnr:6Xh4 吆"nγ g_oX#2pܑSGup=U|G"+EOa17ۇgxzːeg}1#n' v70 nHv7*D@" 5/$mXuiw0'XX)S0⶚GD]S4dnOҩE#/^d&;(JmH9%ϨqliB|G@ѾqL"6M< <`CPmr|rۣ{6 }wzίW75NsjE$ɣrFTR*DE ^jLkl,dѷ:Guvވúm&ĕrf]QWb[_RW [GVV7E%crR0# )8&t5vAIDkl8kulܺC?|xg7T,gXۀ!r#aI'U Lgy:FPm8xwKa~=s}'$h[Wl Td0)4!iLfۗkGMXF}>vHVkVW0PR6&NQT$Ps`nnYՁe ĂB7a[cnunw@aǼ~[&bCsq^ؔ0\VUqQv9y]ًdqk=KKi8[%S@56i6S/)>3JN-/t<1V|`ckb4RZҏvHNfT2wFGNJ!A L$WFh`i.@6PI+̞AϷQux9'eN=0 `b? iٺ2'7\iqYk"4v|1B1x F1+> 3ɴq\ف rRl2`'DV1amCtAM1{$?{p]֯טYw꯱i}zՒnֵ>œH5ҊՔ6LTkpm1֋˜ϞBby`r:Sfl /0Ñ˘/W7 TpH#I; '2DTONQC"E(Eǝ9T6W khB3~*92 jxt"bЫuI-dOWiMQZe@D3Y pb 3bPGV F*$B\$ RqJ}rt9aD 1^qC9cLI! U=|%juĪHr\ݲoy>[w-ΤHH ^i`kK"ElRZ$b36χM;$g`09]s [h:ɃNS02kU''Q/9lҷΐ7iGZ H/K!*$N6=`*,g,sn?6<FUhZհ?޾{Oo>~}qT>z.mk\eʼ[H r9Qʶ {23˟=0cn!xqՍǔ>U7F8bI6J|`FB5\TVa05f$ s.ӴܘjGqlB!sol\̗MC7tJz $\GV<3C;FxD|'G~aIᚅ_[Y޵ ~!N'ϳȌD ^|jGoݕ>GI#}h۸W]2 4E5AMHōgνrVj.X|p=SD \^^fϯ'N_b.ka1tWR+Եi)%S5>"ajRN!;oXAҤ=0̿ݻ~p8</U4mS73R]WW,e#"7Y頙/]p'ǦYEV@i#VWGpQY`F2Sq5{m;ͽjQ닽K꾩zkdHn[UZ- Kiқ< tzݯS&G vemm&d_^YvKmLM?P'K9xͯW s;JK|HSnp9b+m0m_&SwTL¶j׬8晶 EhX),"hIN]ސqɟtg_~!F?#| 5 OkӉ(51-_IԨ !u}5KcN;Q?ۿp8|oIAr 0r Ggְ&x,8&@F&6E߰wdc: qR<7 d2xn)5XT2lY1Y4:smsog3{ FIUl}jIr$^ict3jZq _87յ\6&'ÿ18$Qi 0O'<ęC`X 0O3/Ջ$l}()˒5E[+Z()z1EFmet ?l恑dNod4#9~ @ mEoCHҏUxL-U; ^aa,ϭ4M4;6e+& jy߷ J :^Fo N /zUpDXfHLJ"F*R1 N *8RW+޽.f~A._vmn w*85זuCn y HD[Juo6VcYFTF636k0֪W4S,vk6h7@[Xn(Y*K[\v6'ѕ$Qlk.lvok9&]\W`!"SI!^V_Cȭfoao!޷If糽tw`%Q28xti,4;0y=|N(JofZf&poG0,6\};9!&pk\=bO༠(zaLRhW+o|DߡL!t쟐VbIMJ̌ rx0O/- D"\!#ѿ4)~KJc9hQ̴ߕm׭_̟m= #kMV7",mYcRց:[ݥղTgOW2l/NLlᴀlJw7*n66ue4/b B*}:( ȘYM)b4*ݿ :o6Mhw4>`fϻ+fc}^i?wyƼMbg- Z.\[>1; V-$*])Fu.! !W=SHie7j2V\}7q_Vs=(MOOgw[ǩuID$Q]t2Qpt4aOT'oM~}u~f3hDogqOҝ!cw=}{hBg4wūt00?p>~;$idh^/g'QOppxg7i4=zQDz""zԇE3%-h `6&u:# :)/.˥Y\.eԈE=YAnZVdA>V*eyE7Hʯ̟ ݕ39g=[i %]PJ1۶wLЫʺd3 HmN5֗0'`xBSL鰙ϝ p^J7zpW?ry |(Cq%Ӏ+'&*(/( LIxֳI MlRyO]i7IèC,Ȓ;D< #͢i@keq 7ы=;L?M3k9}:&I.:s <[22EQqnز/ыO% f8x"Q94ΰr\u{b{wo|9[G7}$[V=* HwFJwFɻdX.gxg([ (R7k77Ѳ䴴 B-_cS#l,$F-(cayH,h)E5o#-߂y"u(.^/w#⺋owBnw)r%no$BVbQ? Z@PW IlB-9q0hG7i-4kB 6[mO6›o_hAiȹ/5$*>ժmQH2p Q@QIB1Ѳ #Va6`)| 6ۦ`UU,N]oI(M)8"e14NGu6 &MI`LP\I'm^j5oDHH1Qkn@:L `+Iԋ,L__,e3t-boD)v T>˾afnsCV\y,tl0TRHUL`Sa3"0k?4"&5:#aY]ąhGc*sEe~(uќff]y~.'}6np`( f8u\I9>X* Y$2t6tknLljy(]ݴ:ub T '86^J;ٌmrJ7G^qx'3P6UζAn[Z XRA2mI`068z"bӑJ+@Rk hN b2 E ࡤeCf3$}i=y}u6#;L^ŲFLQgd|S S]=`[m0Xc @\7b2p@@ABǎsAut$`SyAԈ|Rs f!‡:˭64< I Z7$aO}|c?۸Uu#Nm]0zl:O*uܖCP+> @WT= Z+Q޷&Nu(;Vc IDAT{); E*f\5m׌UBcu6@+N f_SͰo+ߞ"W6Bvc8o9T 6 p>CTI4@ K쵵׶;@tҧc٧ ,m݋1X%ekq>eP$:ϊ PtlvtUHϭp~^ݰ;×?tOG]DbpPUVǁPT_UMEs 5A2ZM¦)BǍlP~J^$9u,r>zgP8(6PmyRߡ?3jcBR3Z DFm'HO=;8셸I U )q蘖k՗/E- {cJ+,Ie*Np4 ůo}@Z$m ۚo+ksc'Z;m/Éy}3 #R@{o@Plr8f P9=z`(ŴJWR繶Β_l9 ,ռ +SF$Wz5eoV+V 4A_\U>Ԧ2Hv9;p9E݆"[CF6"(m퍆EN8Ixp;s2,0N[Łq؍4`|D7l%=FxS;G8N|6 \g?z74EnA]Ov4tk`I'RToϼ|\o`õDò<,yş~iN*%/yic&}s _˃go߼yӏ"4ò3`.W|DAdWWe~8hDHF“&ZZWkVLW{V`_: 2>:m :ld- .HLCFp%aeF0@z9T$J kܭ~z%bafk>C~rwFm- IJBqϹin7K>lodxRܣ gN4MIBP6F`%d=?p sZl Wmvwp+jak0úECDk; } $:RP1[#cU".QڔhR0bf@7C_|J}^p|lQ:Qgo߽=y#xYrR]UEQxy,'fyo/~ d>⺚_^fd?o3kok#4W* d? -1s#gaJ \vQԝlǐ@y3 ѕ684 jh 3ѯ:qW g%N'J>nock[XsVXɜ9 uw^%CSoW (CD&,]%cFnMXLXʐuqdTi"R9t^rܪ| ݷAd_Kpfdc>jgu/ͅ T`}@|k6|oz$dh[e^8tIMҚRǰICuaAeki< ƶvt~ enKQjH6T6/1nFCG&Vhm` ďCJ߾*˃@5_NzY{_?(y|6}eTNYu2_߽5ZPB\B6G/dC7;(M˸tEOMU/O+[n}X\^̽-+MsȎ-eO95ry7\ks+:Eۆ+A2]Uꊫ}SXǓf/7 b_|&D8v~,44*}XWX<'G [cDž)nɎ] l!ʝam݇>5_|<[ur1ZH^L+|pFm7+ MH[''&%7~쨽FeX6^&' (/ 4xFpk4f|)!섛43 nsTiCrCŔi_y6$p]%pi՟ pءnUCf~j |nJ3/5J~C"/#3 5@vXLQر՗뺮ә,jQU(ngn?Ϫϳ.͓ˤ뺮 ;y0O^-]/)15qW(HnU YmdW 3@I4@RiQ ?mbL%QU +pRpRb2/b ;Zgm4fW_pSt7btQ> 1=T 6Fxre@я<4Xf:;Xr_x}p[urƷY=X92 2o' ?n$yqr &>[=W^ihn]u%2cCfM]An`ݦp3za¶ ..bmH`Rx_:?W釷ܓ\+)v[%ki;p?m$^a Jڞ\#FKdXVho;'j&^~^bQG5ͦmw) tB7Y1:cZ`Lwkmy|=M2e.;3!V.*;VWMQb'IrrhvP8; e~ BpXIh_tmCwuLfYաZF?T¥fz~3z:/d|ߕeܡ R"s 8&Fe@ȞIM=1##Е64#uAAg@32&3\;썥FSٯ`5{U,+*뿫#% ' 79AtYȅhs_,ys)*{5e*6v[[.2i;Xsg|=wvD&M;}m@SuW4D8 mV=#m d)&+-= Yَ~񐄭]P-}P{TY?`ө2BsjvDˌk9:`r _sQ;1l=n?mln#dW()AvPCNPCNѼA͠AMQנh~Q43Fo,HWҹLEJlə7odВkIm}9)Hnlm7s =F0JYaq ذ8Wr!ܚz%;\YXz_$`~3JmRg|~3mN&Qך?ɳZp rx[4ήt\T}:"wAR }qFrHm9 9@Ü:49#ȭ\sa˵3x.8C(YܫA<76fgl=(16?i vJCJVLڳڑo!V jsTE$K%y5 | dITTJqPiv]E%$ طiU}.;VJ \a.y)(\I{\*NtjMT%Aj}prd p+ y9b-E̻~D-<%%:wH?`g{P]|@96QDtd0ؠD5GA7 ̐As~N1ר}Iٺ6 (c 2(Ȕ)a H:Խ ʗ7l@QX٪mPhe UP0tP3[TKUMѰS g(U2AB8On?okxdO[pԊg|uKf_ Ik6IbYeAIb&+p8B]ѷ(<6f.R rI]i?NYGI*J@!cA 6@)@DLD*yWN_grȓҬ(sVt؄9;o*xBUe֓.Z=ሔ W}+*4JtroÑzw

}# YSƜH/UgÈAR<=?n$I^<./V%^;bx&xɋ%@_I0g?n'yW瓋҅FS0~5~$vMm'&=oYܚYYBafTPgb68x?G6=NRsHk\.UzdѪGty^6e6-R7Gsw\o~<ӫ"5U!"zg|q}_2j9Bpp@pN̸WɴOw]GHj 2wlc:yO?'͗6umV>VW(uŲjuZVgi+m%έp\Ru!V RևQάW H/Zɇ~/8cL0fYl>+IS\/bc|h^@*k[c W0'8 AסJOm$Ityv|B a_A;N_8Dy 'CxS; @=0skyU/j>m~:Pu2??wV"\"WW~@`PVL!ln5nzjuZ^J@TB/,I,{$.#BQ쯧 X)H9VJisW Ȋ~bVEJ[ p^zOLS:څpX7  Y_') 8ej|$Gc[j9nS&ǃy.)7Ŏ.4wa3>~~]M{pRpty]GGO63sWQt`]so  ;8::ͯӸuϏ_}\b/.<%nfʹE!O%ON?Lml- /]:?aմ>涃QꌭOZ`'8R,-('Ŷa$\,`VV,Vo-Qnde!b1L?=7ݤ-PR޳ wU܊GY;crdezYcu2[eS~ U^,o C8@qݙD񧖧! 2 IDAT3}%~`xj|q P#)8{}"'^ĭPaw[Sacf6YgƤR"8FZ*ɳsUso[~7}l0:=AaRSI_%gL?WWM2ѭKTSTǽ}_tsvaôAߞ|7xr6[6*Xc(H,6{ I`b(UQ],KJ61KC (zڱBG@FSDH}ia&WL;=&[NvՒ\fv'oQX Eu#5<,i>=NJ{jvr|$}++ ȮG-*e@oç#,yZK-4\I>3M-,ЮK<|aoAo-!'/NJ2(xɶ*1+ivP[ext|Jv=$Qx8[%d 0vvx4<*I12vh@_^JZذ)KV)ծYk1&H6x)lN[oc&jŲNਸ਼`R1mT$T;1U6f'6,Z_,26vm"Y~5$w.Z!!!LdpaoÑ^ptk{U6,QF]?z1],ԕ^ד*PJu+pv zPtC8KgbTOL{W ݶl/*E% JJRRT8IeIeUb*TT"+ەrETBU X`$Jvr?'<H, 3sNkn8@*.L鰴'o5ק'^O<=yGSL7DYrGDEMԜbOE@Ź<(!%5,'ŵl>|4+q oI*rou*E5׭ HjՔ[(uIX$S^iӿni6fVKӀ66JJ ݰ .v}T` wqJ#㳬6@qh570ۊor=c0{z9vڸt? o6=Wԛ {#p両@GDQĖ?6,#Y3Ȓj*lS:O^Ojltʇ32imBg$t|h\2 H JTCf]ف(QRK ۸fbqnOomg>os9em5k|: V {SP7٠ 'Wx-]$Eyr<~\ݵH_jj )G'(#r6o"b%ۙζ/TrpϹMQJlz)wP`1"pEJ،6y?_[Z)wY"5_͖g"[/þ ?17I_#g( TběP{d(.F'S1ʁ[UI6<9*_+m@YV2Vʏ &*z( Mҕ}T-oeJb'qdP$ۺ.l+%i6npQ샣b ]pE|jٞO֭M۱bX]Nq+vő*qq?t*fdž,P[lIܱycs ;3=}5n6GO hinνUZF{NfǠˈ $?bf(/^+ oE.8QxX|yGWPil|E˰ : ꋌq&NN%S>aQ4 Tފ8d0CfYN7P(`Ip8@ QɓF+&, @azK\=/VsZťQM(3]B017nc-V֠nR% y[,pQ*.c[)eL>\I,S`-pie IBxu~WocYN8g;ynlzsڙhu2/4›luuDJ:mb8۸;V>X9;9m.Qgⅆ~o/Wo!ΚdF)nQk㭠~S5`Km-ٶa9$O䶁LJ(&I)6d|ŁSjtv`Z = oC&q cabv3c= 7):`<1F[ͥ4m[ӟ_7nq~v60vǧgGGn\J~OG,DqyGw<=:|>JE_qЄppM3|7\CBr}8P)y{=%qRZX@ [璢Hc]ƕ~k\uOR^Q>7REYҥj;\νݞfIyeX?Q]JGj[SUGbG ONCht<(skYi9[ubf*K8 d5%K1c"=h.&e ԐJV$KTb~inkʭŋTmQUI_vYZuFjn}!9Y-+`.NsP&~)-B^aY\6*Oy:\<0hOsc=K$4k pq6᪪uWf5V(w¨&T,l2..PTʓu8(sCү`xhŠu 0[]|9Nx@vJ=uxm~&Q+ ^gK _M%40I~:6߭уդ$Ks:d%±0rR6y).LDNO} ktFBX6 5: ːֲat&*WLI`T@ww Z?&LUdgURCj֕jћ8GB5M̰RkIM9Ȇ*W"9/Y}E*'{+bœj˰&G^52 ]GkESEd=$3B7/Q-\_ȧZ["rڐ:d-]baem>+Oi-s P;:MtHxP,6e*O<)$/K?sTj=#)ӷZ'$R t-\%ȣh$iI-kU=-wBw *YwE)ɬx.RពC@?2zIjh R=$Mv45e$o<Zlw{_4}a|t gvR@3 44o=iQ{ia{?}=J锰'?v-9{OR9mzWkkwIf/O5E,ti!]OLG rnz{x'3Iu-I@ 2OnGB5UjvϩZQz+$2ZfnZzju(7-QzǻW$}}wK+8&IgY{j~j,BhoNo)| jSX8MV$2>3( x8B}~vRWK^ZjRߵԐ3 \ %H} %Ut3@րt{sU# rۇrA{oMfd$yXZfF2+Z/ ]ƍ:޺] i=_-F&_W]=f` *jy (]tDdsJר|c3,{FMM]&#HxHm9U9Yַ &؀nկImw iQE +NXa\kxP讍_e bb(,lPxNUA/NgTDcUD4cB5Hek+u8b♡2g"n.rmT&"rlqűK$y i[ W'Wn&Tթ KgY!󥭅1_| #7Վ].&CQ|@ !=܉(Ć8ZfT봛[AZ IDAT{_eҜ+4 N\֯%*O!Gej[,2ڶdpN6.Cp5yMϩL%deTgO6)|@w*۠mTAZTl 1)d3I5ρ\hƘhWZ9I4Badrq>yAR3%#AvYRt2ITOX8(a-3A.lrǦk3N+|Q.Fތ``#SR=eu"&2ys!NPrqITF=Jm2)rh ISm _7h4aF_^s 7$6$^TtnѳഅX6@J6ޅlB*"gOjJ-m*/rar8ߦfV.G r=N6q nbp.%v6/§zwֈ{5~[&xvÌ!BgajbF %na*{>;2ݗaR㒷鞎FVKqXg(m7\)w¾.!C8K=ܗ{5>T"ѓD )-!'hy! ~6/ R0"^xgθpNoDa${NԨQ7O߳zic˙$7]g ;[P$j &k_~SSSUuϬZ OE-.)SxOu󩘧0 IÒ!h6&2*؇LQ՘յ遭]vJjYyA} U=vd}V5d,˴3)ZB>w5zR;ߵ %ژdаnydew'o+a|p~a|&0 0%o 0-aa7af >89? 01ٳg/_o+a *y" ?ٳзB݋>3 \r27]aaZ^&kF޷ 0aB>R>S?0 !|b0 l,?˗< a^fȧ;Uk72 ||uSw^eJRaPanín>4#1 ܆ێp2_|KnĒьnM`ub݊ӳ_Vd󧰓afCNMi.ڵf/EM/b\mdiY2sڍWwSa6y w[^0 |Fޮwf-o̶] 30rgے0R C:?Y9f3 9d [9y6w[yZ]uWvn8alVY;W듭H'?0zq^ 뼙!ba۳vŸկK]Gĵ~|`& 0~c0 lv/|ja %afC$0 l6ۄkGGGlS 0⊘6x<m0 Iaf ayca7af ayca7af ayca7af yo仡6 36Xu#'\t56oC\z|'P6XpI7MvnjlpB4*%\oX&жm1t7KdlȎ8n~Bqm!u1z ˥ [o<1ێKzd۶rQ-D wl sxb\.z4:'׊pu]ks.pPw6mr8N_*{O9m뚦pz#ʎѵkYul;ϟٚjIMFm}pKL 0o!piqڭf5Zҿ\o2}mhԉfܼX?EEp5b۵eȹ#iN {Jl.[m4IJqwx믿_r.hҝNֆl !HFzswzZV'7ٺot⏨-p O Ɋ w\.CK4'm0s32ʶ¯c1yXmH2kۆIGxo2$w}*].rpO'bCԍMݽSIۮj]>ێom; 8]CKPjW=xuGT^CD ] a8_[KC~Cf[2Uk8Z{В9Wwn /s40$֫?޺ֶ WOۻz:Nd[epklZP[3 ꏷQ-l?>߰϶uT;NMӆB\zmk?:ޭ?~I^aS-9Z{w>FBJ5ꏷt:!mS*3ʶ?9חl]#m -ˢn#J¥oCNhl$ޣ{KnD=u<勣g_=VӜm>`l{u5M m w8Yi?]wKl~N$]1۽%n}tl:fgoٶlF=dtk[mqki4x~IV&VDz'mֈ(`;ɶ'ߗuKd[agsnRM߬$os|l{L=$)l뺸spʋ75 si]=q/%k49}liv^o{y=yٶxI5oUKz>lhnjo!ۭ&?3D'xB m74lgYa[Ϯ;M>nxn>Lm덁xνwJ95M;;O>gO5M4s" x֫,M.>i]"Y[R)EYgm_.kO=mv^RZ/U'=fpp^Zo}wOc`vzz ;<>[b\wzQmϽM3lgzk=r+iQPъXA}5>a)~lzw ]yC{.Z{ʨofNa׈p+ކCeMK;Zhâ-gݳQ?g\eߧs60/9V2-۞{[:Sߋfzg->y3[xJz-Ѯ9|6\L5  uzm3Kkx h:ZmG{k~_?ʧ.歷h,=4;}Uk"KCBkKx۹>oc E^e'ERM4۞<ZYMڒD?^gcdNJƫnϛ<|e4mGm v|{[ s=ֳpmtMǓҟY3 -Zoi;}'vqגW]$ FW gFNvgV4ʷܧ{~ O*heeUemjb%mvl{גΝyF4ښ_t7A?}#^qE+ͨھca9ׯaiUKMot%i99LL͖p ƕIۿ:N`HfdS~z'}Rav5.aF>^d'Pwzezӧ1aϑg*;FN.K,4di=gOLLϜ8lSY-ML#Т=;YU+'fDK ݼ55q?8vϜ{ o xyNZoo"ܞIlz}We? {l7r !AQ Ͷj7MOg|tSxuU%j5ܦ$EF}و-q0SKw3淦dFwA7+b [Rҥ|swI$wқ8wZF4;Otonɴ6KnN#@l-}o#:' tl#MfV{|Ovm;׻t[Z@xX<%'IgK/vM |z}Ś;l[Xe.)E}yYYOB 7*$xB 7*$xB 7*$xB 7*$xB 7*$xB 7*$xB 7*$xB 7*$xBGi> Q\*Kx}z1{x=]|p P\*K؛"-]ij!Eq,X.˥bIMM$tso,a?IrX.cOJH{_!K*KrRj 1%˥bT=(>b?uR<~>P*KrRU=`8E+X.˥bD#'_:cX.˥b<護(R\*Ɠj=v U,R1>x !ҦiK*KrP] O|`DU|GQǒR\*'oKtD5 !\j?T,R1vx}֛3zttUV\*K؛"->`F Gݑ"˥bT=8ޅ=^CT,R16px>EkX.˥bT񝓏kӄ ˥bTש$_:ziµ]kDs,X.˥b|VB˥m5SB{E9T,R1x^6r !\#E*KrQdB!y8iB\gR\*ޔo+GQR\*Kء. iч"B4ˁ^rX.cʋ^G԰xmǒR\*o_D?cǒR\*~oSr^$RTR\*otH|  1"˥bT'z}#C(z=QbT,]R{8݋CE=˥bTw6z\*KrQ[$@oTHP!@6foOl&+Y?x5E[a^ _ꁥEATeݣ;oD̽4þhz&]׍Vq*ƧlzxO'Qoc6.D}}x>ޝ-D =}a}ZC)f^ٽ($^*5 }S16egwCe}le.)3L[rkaxh*Ʈl>r2?_cnb~w+g[s5gJuhv'/hgx cov9Ao-ϒ{; nWrmZ /bbG񶝍 Y 7󖑶]}IR1x|<d^R&Qݵd]vڃ怼1+y칶3}{h8h*=P3QGN. 6Kˮg)W>t^5hvgXJ=*+xwͥ9Lڤl7S_SMV}ΐܝC*FAv9 "x& 7*$oʵtPA"|sck.W KZBo!Ϻ9e5 ^A*6L-579I jv֊[~.ͥhiDžxe'>mzOW~wjT Gf<ϚpKOKA}tizRKVr)Pm8=- v wSDKŎ;ݩ=TAQ@9KxO9vpFNRZ¶{]V7@J~ߝ.X~}&Mpڷd[MAKÜFCOƋSџ{:a~:{TzKGӋ\s5}[ hfu-J[3x`_b` gvvѕ{*8J@oTHP!@{a@֕1/jx~y#iwVvzz{~RxK{{~I|4V}y7@v99+ y/e@AJ7Ϸu7idw>jkiOok.z6yP=vNNQ7Ĭ$VWzm) ~1zwh3߀, IxxB 7*$xB0vdU[۶ϯ^8@oTHP!@oTHP!@z-OoB1XxDuބkf7|q 7*$xB 9 P!+x(|#m#9 Pi}}}aJO N} i7j +h7jͻD<%9 P܈*=bZoss pjj-9 P8y+%PQ%J/R Pt>>zwb'T $$ -OP!@2`+ӛp\ `M|zM$zx7*$xB 7*$xB{xM(C4]#(6ᆓwmZ"THP!@oTHP!|>sq`' 3  tNdf___qc@h[7J$:-ߧ3)*襼RPi뱕n>I4㌜(ɴ%6h+%PQ 6Hٕ,D <К7wN$oTHP!@oTHP!׽lv}zM^4ބoWm>*oTHP!@2rNӧ7 Ml4TlewmZ"THP!@oTHP!Prb oTHP!w-\9|X@'Zt %ośMgx\$g7U8Iy"i,ZrFN;K~y& W/o;rZphxB 7*$nބCo4ͧ7:ھ νP!@oTHP!@oTHP!@sIwDxsk 7wPνP!@oTHP!@oTHP!@oT(@WIDATuK5߆Ӷ/`o|zM<ywesr͏=ݰş9o+vxnYb5lO!V>œMgۧvKVВs$8<4?5+qK$fݘģ]K %5]SŗuXι-vd=ONJ ?ϓgWxƴ.01f$=5Ϯd/3y7l_ `d_<^6z]ng}߀'[-w7%ۿZo3ml^mx QkWro{E7uNnКSD/٘Z'j`YZröjޘ#fJǞqy>tѣw&^lw׼Қ!gO9ݰ ȥM}/kN썵ntJ/,Qe(@v^Smߵ1`A-x|~z$e$9^BP!@oTHP!@oTHP!@oTHP!@oTHP!@Bhӛ@q3IENDB`SummaryInformation( DocumentSummaryInformation8 XCompObj-oNFORMATICA9BOMicrosoft Word 8.0R@J@52@E@1!H՜.+,D՜.+,< hp  DNOCStsN   INTRODUO Ttulo(RZ _PID_GUID _PID_HLINKSAN{DD73DDEB-4929-11D1-A9E0-444553540000}A`Tx!'http://microsoft.com/vbasic^^$http://www.vbonline.com/z)!http://www.forumaccess.com/J.http://www2.uol.com.br/info/forum/vbasic.html[*http://www.terravista.pt/copacabana/1102/\"http://www.exotech.com.br/vbasic/$)http://www.oden.se/~daniel/vb/o93http://www.geocities.com/WallStreet/Exchange/1726/Y2http://www.geocities.com/WallStreet/Exchange/1726*  C:\VBGRBG.BMP*  C:\VBGRBG.BMP&dhttp://www.forumaccess.com.br/[[ftp://ftp.microsoft.com/[[ftp://ftp.microsoft.com/  FDocumento do Microsoft Word MSWordDocWord.Document.89q      !"#$%&'()*+,-./012( [(@(NormalCJmH6@6Ttulo 1 $$@&5CJ.@.Ttulo 2$@&5:@:Ttulo 3$$@&5CJ$6@6Ttulo 4$$@&52@2Ttulo 5 $@&52@2Ttulo 6$@&5CJ:@:Ttulo 7$$@&5CJ2@2Ttulo 8$@&5CJ2 @2Ttulo 9 $$@&56A@6Fonte parg. padro4B@4Corpo de texto$,>@,Ttulo$5CJJC@JRecuo de corpo de texto $W@!Forte5(U@1( Hyperlink>*B*VR@BVRecuo de corpo de texto 2 $5CJNS@RNRecuo de corpo de texto 3 $ <P@b<Corpo de texto 2$5&/@r&Lista *2@*Lista 2 6*3@*Lista 3 Q*4@*Lista 4 l*5@*Lista 5 80@8Com marcadores  & F<6@<Com marcadores 2  & F<7@<Com marcadores 3  & F<E@<Lista de cont. 2 6x0@0 Recuo normal ROREndereo abreviado do remetente!,@@", Assinatura"$O!2$PP Linha#2@B2 Cabealho $ C", @R,Rodap % C"0)@a0Nmero de pgina@Or@ Blockquote'hhddhnH &),/258;>ADGJMPSVY\`cfilorux{|}~nhgfeZ[\^]_`abcYXWVUTSRQPONML$& A!?owty" &),/258;>ADGJMPSVY\`cfilorux{|}~      !"#$%&'()*+LLLOI*5>F;MuTdnvsx@} j6;.ADHWK(OTY%^cgkpt;xJ~$dYȚڠmԭn4[B_zD[|  "(*+.18FS_bdfhknprtw{} " y,599=AD|IPtVW_7fljjp|.h5Cũ<b:es0 8~.+U/e48@GJKRZ^cfjnru[slQ!ܞu|­ddǽe[kFw/~  !#%&)-/24579;=>@BCEHIKLNPRTVXY[\^acgjlosuxy|~"!9ER1^gjx}[7N !m/6@IL Yafgnt,Qه=ɚҠ3nt֭w&h{,  $',036:<?ADGJMOQUWZ]`eimqvzZ7O3Jxxy&yByRy0oH{GvD2Xq~XXXXXXXXXXXXXX?FIO! !#:b$`3ɼGF&b$JMCe>#@b$=-93R*;7 b$aAyP8ޟ