5
Microsoft Visual Basic 6
Introdução Quan Quando do se pens pensaa em Wind Window ows, s, algu alguma mass pala palavr vras as nos nos vêm vêm à cabe cabeça ça,, tais tais com como: inte interf rfac acee gráf gráfic ica, a, obje objeto toss, ícon ícones es,, jane janela las, s, mo mous use, e, botõ botões es,, etc. etc.,, e, como como o próp própri rioo nome nome diz, diz, jane janela las. s. Aliá Aliás, s, um umaa verd verdad adei eira ra conf confus usão ão de jan janel elas as:: maxi maximi miza zada das, s, rest restau aura rada dass ou mini minimi miza zada das; s; poppop-up up’s ’s,, mo moda dais is ou nãonão-mo moda dais is;; caix caixas as de mens mensag agem em ou de diálo iáloggo; jane janela lass mães mães e jan janelas elas filh filhas as.. Logic ogicam amen ente te,, entã entãoo, o pon ponto de part partid idaa para para a pro program gramaç ação ão em ambiente Windows só poderia ser uma janela, pois é através dela que o usuário vai interagir com um sistema. O Micr Micros osof oftt Visu Visual al Basi Basicc é um paco pacote te para para dese desenv nvol olvi vime ment ntoo de apli aplica caçõ ções es visu visuai aiss para para ambi ambien ente te Wind Window owss base basead adoo na lin linguag guagem em de prog rograma ramaçã çãoo Basi Basic. c. É orie orienntad tado a even evento toss, o que que quer quer dize dizerr que que trat trataa ocor ocorrê rênc ncia iass que dão início a alguma rotina de trabalho: o programa fica parado até que algo aconteça. Quer dizer também que ele permite o uso de objetos, mas não a sua criação, pois não é uma linguagem orientada a objetos. Obje Objeto toss são estr estrut utur uras as que que comb combin inam am propriedades e métodos. As propriedades são características dos obje objeto toss, que que podem odem ser aces acessa saddas e/ou e/ou alte altera rada dass pelo pelo prog progrramad amador or tant tantoo em tempo de projeto (qua (quand ndoo o proj projeto eto está está send sendoo dese desenv nvol olvi vido do)) quan quanto to em tempo de execução (qua (quand ndoo o apli aplica cativ tivoo está está send sendoo execu executad tado) o).. Já os métodos são rotinas internas ao objeto que servem para executar determinadas ações. Para exem exempl plif ific icar ar,, pens pensee em um umaa bici bicicl clet etaa azul azul.. A cor cor azul azul é um umaa cara caract cter erís ísti tica ca da bici bicicl clet eta, a, ou um umaa prop propri ried edad adee dela. Já um método seria o ato de pedalar, que é a rotina necessária para fazer a bicicleta andar. Para programação em VB, usamos uma versão da linguagem Basic estruturada para a construção de procedimentos e funções que podem estar associados aos eventos dos objetos de sua aplicação. O VB também faz uma verificação automática de sintaxe dos comandos, e possui recursos avançados de compilação e rastreamento de erros.
Iniciando o VB Clique no botão Iniciar do Windows, depois em Programas, e procure uma opção chamada Microsoft Visual Cliquue nela nela,, e será será exib exibid idaa dura durant ntee alg alguns uns segun egundo doss uma tela tela de apre aprese senntaçã taçãoo do VB, VB, enqu enquan anto to o Basic 6.0. Cliq soft softwa ware re está está send sendoo carr carreg egad ado. o. Depo Depois is diss disso, o, apar aparec ecer eráá um umaa jane janela la onde onde você você deve deve indi indica carr o tipo tipo de proj projet etoo que deverá ser iniciado:
6
Microsoft Visual Basic 6
Para ara inic inicia iarr um novo novo pro projeto jeto,, esco escolh lhaa a opçã opçãoo Standard EXE na aba New. As demai emaiss opções dessa aba inic inicia iam m outro utross tipo tiposs de proje rojeto toss, que que não não serão erão abor aborddados ados ness nessee curs cursoo por por trat tratar arem em--se de pro program gramaç ação ão avançada, como a criação de controles ActiveX ; A aba Existing serve para abrir um projeto já existente; Fina Finalm lmen ente te,, a aba aba Recent cont contém ém os proje rojeto toss mais mais rece recennteme tement ntee util utiliz izad ados os,, e pode ode ser usada sada para ara abr abrir um deles de maneira mais rápida que na aba Existing.
A tela do VB Ao se util utiliz izar ar o VB, VB, temtem-se se a impr impres essã sãoo que que esta estamo moss “esc “escul ulpi pind ndo” o” noss nossaa apli aplica caçã çãoo dire direta tame ment ntee no Wind Window ows. s. Isto se deve ao fato de que ele não possui uma jan janela ela que ao ser maximizada ocupe tod toda a área de trabalho lho. Na verdade, o VB é constituído apenas por uma barra de títulos, uma barra de menus e uma barra de ferr ferram amen enta tass (vej (vejaa a fig figura ura na próxi róxim ma págin ágina) a).. Dess Dessaa for forma, ma, quan quando do con constru struím ímos os os noss ossos form ormulár ulário ioss esta estamo moss vend vendoo exat exatam amen ente te como como eles eles apar aparec ecer erão ão no Wind Window ows. s. As jane janela lass auxi auxili liar ares es,, que que pode podem m ser ser a caix caixaa de ferr ferram amen enta tas, s, a jane janela la de prop propri ried edad ades es,, a jane janela la imed imedia iata ta,, etc. etc.,, apar aparec ecem em “flu “flutu tuan ando do”” na área área de trab trabal alho ho do Windows. Os principais componentes da interface do VB são os seguintes:
A janela Projeto ( Project) No VB, sempre que pens ensamos em uma aplicaçã ação, pensamos em um projeto eto, que é o conjunto dos arquivos que que comp compõe õem m a apli aplica caçã ção. o. Esse Essess arqu arquiv ivos os pode podem m ser ser form formul ulár ário ioss ou mó módu dulo los. s. Exis Existe tem m outr outros os arqu arquiv ivos os que que comp compõõem um proje rojeto to,, tais tais com como cont contrroles oles cus customi tomiza zado doss (Custom Controls), bibli ibliot otec ecas as de funç funçõe ões, s, etc. etc. Entr Entret etan anto to,, este estess não não são são part partee inte integr gran ante te do arqu arquiv ivoo que que o VB gera gera.. No VB, VB, cada cada comp compon onen ente te de um proj projet etoo está em um arquivo separado, que pode ser visualizado e acessado através da janela Projeto. Forms) Formulários ( Forms
No VB, as janelas são chamadas de formulários. Sempre que se começa a desenvolver uma nova aplicação, o VB nos fornece um formulário vazi azio como ponto de partida, e atribui a ele ele o nome provisório de Form1. Pode Podemo moss ins inserir erir dive diverrsos sos tipo tiposs de cont contro role less nes neste form ormulár ulário io,, con control troles es este estess que que estã estãoo repr repres esen enta tado doss por por botões na caixa de ferramentas.
A caixa de ferramentas ( Toolbox) Proc Procur uree na figur iguraa a caix caixaa de ferr ferram amen enta tass do VB. VB. Ela Ela ger geralm almente ente está está à esqu esquer erda da do form formuulár lário, io, e cont contém ém os botões correspondentes aos controles que podem ser adicionados a ele.
Controles Os controles são arquivos com extens ensão OCX e constitu ituem a base da programaç amaçãão visual do VB, VB, além lém de poderem ser utilizados em qualqu lquer outro aplicativ tivo ou linguagem que aceit eite objetos com com esse padrão. Existem dois tipos básicos de controles: internos ou padronizados e per person sonaliz alizad adoos ou customizados. Basi Basica came ment nte, e, os con control troles es padr padrooniza nizado doss faze fazem m par parte do “cor “corpo po”” do VB e são são dispo isponi nibi bili liza zaddos na caix caixaa de ferr ferram amen enta tass quan quando do se inic inicia ia um novo novo proj projet eto. o. Já os cust custom omiz izad ados os pode podem m ou não não ser ser forn fornec ecid idos os junt juntoo com com o VB, VB, depe depend nden endo do da vers versão ão util utiliz izad ada, a, e prec precis isam am ser ser incl incluí uído doss no proj projet etoo pelo pelo prog progra rama mado dorr - quan quando do se incl inclui ui um cont contro role le cust custom omiz izad adoo em um pro projeto jeto,, apar aparec ecee um nov novo botão otão na caix caixaa de ferr ferram amen enta tas. s. Aliá Aliás, s, qualq ualque uerr pess pessoa oa pode pode cria criarr um cont contro role le OCX OCX (o próp próprrio VB perm permit itee isso isso)), exis existi tind ndoo incl inclus usiv ivee vári várioos dele deless que são são comerciais, desenvolvidos por software-houses especializadas. A util utiliz izaç ação ão dos dos dois dois tipo tiposs de cont contro role less é rigo rigoro rosa same ment ntee a mesm mesma: a: ambo amboss poss possue uem m prop propri ried edad ades es e méto método dos, s, resp respon onde dem m a even evento tos, s, apar aparec ecem em na caix caixaa de ferr ferram amen enta tas, s, e são são mani manipu pula lado doss da mesm mesmaa form forma. a. A dife difere renç nçaa é que os cus customiza izados não estão disponíveis enquanto não forem exp explicitam tamente incorporados à caixa de ferramentas do VB pelo programador. Mas, depois que isso acontece, tudo fica transparente.
A propriedade Name A prop propri ried edad adee Name determina o nome de um objeto eto. Todos os objetos dent entro de um projeto, incluindo for formu mulá lári rios os e cont contro role less, prec precis isam am ter ter um nom ome, e, pois pois é atr através avés des desse nome nome que que nos refer eferim imos os a eles eles quand uandoo esta estamo moss escr escrev even endo do o códi código go.. Quan Quando do você você inic inicia ia o VB, VB, o form formuulár lário apre apressenta entado do receb ecebee o nome nome gené genéri rico co de Form Form1; 1; da mesm mesmaa mane maneir ira, a, os cont contro role less rece recebe bem m nome nomess gené genéri rico cos: s: Comm Comman and1 d1,, Comm Comman and2 d2,, Comm Comman andN dN
7
Microsoft Visual Basic 6
para os botões de comando; Text1, Text2, TextN para as caixas de texto, e assim por diante. É recomendável, porém, que os objetos recebam nomes mais descritivos e de fácil memorização e iden identi tifi fica caçã ção, o, espe especi cial alme ment ntee aque aquele less usad usados os com com mu muit itaa freq freqüê üênc ncia ia,, como como caix caixas as de text textoo e labe labels ls.. Em caso casoss espe especi ciai aiss – barr barras as de botõ botões es,, time timers rs,, barr barras as de stat status us e outr outros os,, usad usados os mais mais rara rarame ment ntee – esse esse cuid cuidad adoo pode pode ser ser dispensado.
As janelas do VB
A pro proprie prieda dade de Name Name de um obje objeto to deve deve semp sempre re inic inicia iarr com com um umaa letr letra, a, poss possui uirr no máxi máximo mo 40 cara caract cter eres es,, e pode incluir números e o caracter sublinhado “_”, mas não pode incluir espaços nem sinais de pontuação. Existe uma convenção usada para a nomeação dos objetos, normalmente adotada como regra pelos prog progra rama mado dore ress VB, VB, que que dete determ rmin inaa a adoç adoção ão de um pref prefix ixoo de duas duas ou três três letr letras as minú minúsc scul ulas as iden identi tifi fica cand ndoo o tip tipo do objet bjeto, o, segui eguiddo do nome nome prop proprriam iamente ente dito dito.. Por exem exempl plo: o: se você você quis quiser er cham chamar ar um for formu mulá lári rioo de Avi Aviso e usar a convenção, ão, deverá dete eterminar para a proprieda edade Nam Name o valor lor frmAviso, pois “frm” é o pref prefix ixoo que que iden identi tifi fica ca um form formul ulár ário io.. O uso uso regu regula larr dess dessaa conv conven ençã çãoo ajud ajudaa na docu docume ment ntaç ação ão de um proj projet eto, o, facilita itando muito sua manuten tenção ção. Veja na tabela a seguir os prefixos convencionais utilizad zados para a propriedade Name dos objetos mais comuns do VB: Objeto..........................................................................................................Prefixo..............................Exemplo
Formulário......................................................................................................frm.................................frmMenu Caixa de Figura (PictureBox)..........................................................................pic....................................picFoto Legenda ( Label )...............................................................................................lbl.............................lblResultado ..................lbl.............................lblResultado Label)............................................................................. Caixa de Texto (TextBox)................................................................................txt...................................txtAviso Moldura (Frame).............................................................................................fra..............................fraConceito Botão de Comando (CommandButton)..........................................................cmd.............................cmdApagar Caixa de Verificação (CheckBox)...................................................................chk..............................chkNegrito Botão de Opção (OptionButton).....................................................................opt...................................optSexo
Microsoft Visual Basic 6
8
Objeto..........................................................................................................Prefixo..............................Exemplo
Caixa de Combinação (ComboBox)................................................................cbo.............................cboCidades Caixa de Listagem ( ListBox ListBox)...........................................................................lst................................lstClientes Barra de Rolagem Horizontal ( HScrollBar )...................................................hsb..................................hsbIdade HScrollBar )...................................................hsb..................................hsbIdade Barra de Rolagem Vertical (VScrollBar )........................................................vsb...................................vsbTaxa )........................................................vsb...................................vsbTaxa Temporizador (Timer ).....................................................................................tmr...............................tmrAlarme ).....................................................................................tmr...............................tmrAlarme Caixa de Listagem de Unidades ( DriveListBox DriveListBox).............................................drv............................drvUnidades Caixa de Listagem de Diretórios ( DirListBox DirListBox)................................................dir................................dirDestino Caixa de Listagem de Arquivos (FileListBox)................................................fil...............................filArquivos Forma (Shape).................................................................................................shp...........................shpQuadrado Linha ( Line Line).....................................................................................................lin................................linDivisão Caixa de Imagem ( Image Image)..............................................................................img.................................imgCarro Controle de Dados ( DataControl DataControl)...................................................................dat................................datBancos Grid.................................................................................................................grd.............................grdConsulta Menu..............................................................................................................mnu...............................mnuEditar Banco de Dados ( DataBase )............................................................................db.......................dbContabilidade ....db.......................dbContabilidade DataBase)........................................................................ Conjunto de Registros ( RecordSet ))..................................................................rs................................rsDespesas ..................................................................rs................................rsDespesas Conexão com provedor de dados ( Connection)..............................................cnn................................cnnDados
9
Microsoft Visual Basic 6
Lição 1: Primeiros Passos Nessa lição vamos criar nossa primeira aplicação no VB. Precisaremos seguir os seguintes passos: 1. Criação da interface com o usuário: para para isso isso,, você você vai vai usar usar os cont contrroles oles da caix caixaa de ferr ferram amen enta tas, s, que serão inseridos nos formulários de modo à “desenhar” a interface; 2. Defini Definição ção das propri proprieda edades des dos objeto objetoss: após a inserção dos controles, você deve definir as propriedades com as quais eles devem ser iniciados quando o programa for executado; 3. Codificação dos eventos: escrever a programação Basic necessária para que o programa responda corretamente aos eventos que vão ocorrer durante sua execução.
Criação da interface com o usuário Vamos então para a primeira etapa do processo de criação do nosso programa: criar a interface com o usuário. Para isso você vai precisar dos seguintes controles: Pointer): esse não é bem um controle, e sim uma ferramenta usada para inserir, Apontador ( Pointer movimentar e/ou dimensionar os diversos objetos de uma aplicação. sua funç função ão prin princi cipa pall é exec execut utar ar coma comand ndos os quan quando do clic clicad ado. o. É, Botão de comando (CommandButton): sua provavelmente, o controle mais usado em programação visual. adeira ira ou falsa, Botão de opção (OptionButton): usado para determinar se uma informação é verdade somente um botão pode estar ligado, num dado momento, para cada conjunto desses controles. Label ): serve para exibir um texto que não pode ser editado pelo usuário, como uma Legenda ( Label mensagem ou o rótulo de um campo a ser digitado. ibição de figuras e o agrupamento con controles les, tais ais como Caixa de figura ( PictureBox): permite a exibi botões de comando, em formulários do tipo MDI (que serão estudados mais adiante). Bem, mãos à obra: 1. Inicie o Windows e o VB, se ainda não o fez. Na janela New Project , esco escolh lhaa a opção pção Standard EXE da aba New: será exibida a tela do VB com um formulário em branco; 2. Insira um botão de comand ando nesse formulário. Para isso, você pode agir de duas maneiras: dar um click no ícon íconee CommandButtom da caixa de ferramentas e arrastar o mouse sobre o formulário de modo a defi efinir o tamanho dese esejado para o botão tão, ou então dar um duplo click no ícone (nesse caso o botão será inserido no centro do formulário com um tamanho padronizado):
3. Usan Usando do o mes mesmo pro proced cedimen imento to,, ins insira ira três três botõ botões es de opçã opçãoo (OptionButtom) e posi posici cion onee-os os um abai abaixo xo do outro do lado esquerdo do formulário, de modo a ficar parecido com o exemplo a seguir:
Microsoft Visual Basic 6
10
4. Ao lado dos botões, insira três caixas de figura (PictureBox). Desenhe-as como quadrados de aproximadamente 1 centímetro de lado; 5. Insira agora três Labels à dire direit itaa das das caix caixas as de figur igura, a, indo indo até até pert pertoo da bord orda dire direit itaa do formu ormulá lári rio. o. Seu Seu formulário deve estar parecido com esse:
6. No menu File, selec selecio ione ne Save Project . Como é a primeira vez que o projeto será gravado, aparece a caixa de diálogo Save File As, onde devemos informar o nome que será dado ao formulário; 7. Digi Digite te “Hell “Hello” o” e sel seleci ecion onee Save. Seu formulário foi gravado em um arquivo chamado Hello.FRM; 8. Aparece então a caixa de diálogo Save Project As, onde devemos informar o nome que será dado ao projeto. Digite “Hello” novamente e selecione Save. Seu projeto foi gravado no arquivo Hello.VBP; Meus parabéns! Você terminou a criação de sua primeira interface com o usuário no VB. Vamos agora passar à segunda fase do nosso programa, que é a definição de propriedades para os objetos do formulário.
Definição das propriedades dos objetos Ante Antess de com começar eçar,, veri verifi fiqque se a jane janela la Prop ropried riedad ades es (Properties) está aberta. Caso não est esteja, ja, você pode abrí abrí-l -laa pres pressi sion onan ando do F4 ou sele seleci cion onan ando do a opçã opçãoo Properties do menu menu View. A definição de propriedades é um processo muito simples, basta seguir os seguintes passos: 1. Dê um click no objeto cujas propriedades você quer mudar (você também pode clicar com o botão direito sobre ele, e escolher a opção Properties do menu de contexto); 2. Clique Clique na prop proprie riedad dadee que que deseja deseja alte alterar rar;;
11
Microsoft Visual Basic 6
3. Digite o novo valor para a propriedade. Algumas propriedades possuem uma caixa de com combinação em que você pode indicar car sua opção. ão. Outras abrem uma caixa de diálogo, como a propriedade Pictu cture de umaa caix um caixaa de figu figura ra – quan quando do isso isso acon aconte tece cer, r, será será indi indica cado do por por um botã botãoo com com reti reticê cênc ncia iass “... “...”” ao lado lado do valor da propriedade. Seguindo os passos acima, altere as propriedades dos objetos do nosso formulário, de acordo com a tabela: Objeto
Formulário
Nome (propriedade Name)
frmHello
Outras Propriedades = Valor
Caption = Hello, World! Icon = FACE05.ICO (obs.: os ícones do VB normalmente são encontrados na pasta C:\Arquivos de Programas\Microsoft Visual Studio\Commom\Graphics\Icons, e o arquivo citado está na subpasta Misc) Botão de opção optHappy Caption = I’m Happy! Botão de opção optOk Caption = I’m Ok Botão de opção optSad Caption = I’m Sad Caixa de figura picHappy Picture = FACE03.ICO Visible = False Appearance = 0 – Flat BorderStyle = 0 – None Caixa de figura picOk Picture = FACE02.ICO Visible = False Appearance = 0 – Flat BorderStyle = 0 – None Caixa de figura picSad Picture = FACE04.ICO Visible = False Appearance = 0 – Flat BorderStyle = 0 – None Label lblHappy Caption = “” (em branco) Font = Times New Roman, Negrito, tamanho 12 Label lblOk Caption = “” Font = Times New Roman, Negrito, tamanho 12 Label lblSad Caption = “” Font = Times New Roman, Negrito, tamanho 12 Botão de comando cmdExit Caption = &Exit Style = 1 – Graphical Picture = TRFFC14.ICO (procure na subpasta Traffic do diretório de ícones do VB) Note que usamos o caracter “&” na definição da propriedade Caption do botão cmdExit. Fazemos isso quan quando do quer querem emos os habi habili lita tarr o acio aciona name ment ntoo de um cont contro role le pela pela tecl teclaa ALT. ALT. No form formul ulár ário io,, o rótu rótulo lo do botã botãoo é “Exit” – com a letra E sublinhada, indicando que podemos acioná-lo através da combinação de teclas ALT+E. Verifique se você fez tudo corretamente, comparando seu formulário com o exemplo abaixo:
Microsoft Visual Basic 6
12
Bem, vamos conhecer melhor as propriedades que usamos nesses controles, e algumas outras interessantes:
Propriedade Caption Uma Uma boa boa trad traduç ução ão para para Capt Captio ionn é rótu rótulo lo:: para para um form formul ulár ário io,, Capt Captio ionn dete determ rmin inaa o text textoo que que será será exib exibid idoo na barr barraa de títu título lo,, e tam também bém abai abaixo xo do ícon íconee do apli aplica cati tivo vo,, se ele ele for for mini minimi miza zado do.. Para ara um con control trole, e, dete determ rmin inaa o tex texto exibido dentro ou próximo imo a ele. Quando um objeto é criado o conteúdo de Caption é igual ao nome padrão atribuído pelo VB ao controle.
Propriedade Picture A prop propri ried edad adee Pict Pictur uree dete determ rmin inaa o nome nome de um arqu arquiv ivoo gráf gráfic icoo para para ser ser exib exibid idoo pelo pelo cont contro role le.. Como Como você você já viu, podemos escolher o arquivo gráfico desejado em uma janela de diálogo que é aberta quando clicamos no botã botãoo com com “... “...”” (reti reticê cênncias cias)) exib exibid idoo por Pictu icture re.. Os form format atos os gráfi ráfico coss supo uportad rtados os pelo pelo VB 4 são: são: ícon ícones es (arq (arqui uivo voss de exte extens nsão ão ICO) ICO),, Wind Window owss Meta Metafi file le (ext (exten ensã sãoo WMF WMF – o form format atoo dos dos clip clipar arts ts do Word Word), ), Bitm Bitmap ap (extensão BMP – o formato dos arquivos criados pelo Paint do Windows), e arquivos JPG e GIF (muito usad usados os em págin áginas as da Inter nterne net) t).. No cas caso do botã botãoo de coma comand ndoo, Pictu icture re só tem tem efei efeito to se a pro proprie prieda dade de Style tyle for igual a 1 – Graphical.
Propriedade Style Essa propriedade indica o estilo da aparência do controle. No caso dos botões de comando, os valores poss possív ívei eiss são são 0 – Standard e 1 – Graphical. Na prática, a diferença é que, alterando o estilo do para Grap Graphi hica cal, l, ser será permi ermiti tida da a exib exibiç ição ão de ícon ícones es,, enqu enquan anto to que que em Stand tandar ardd some somennte CommandButton para texto poderá ser exibido por ele. Vários controles possuem a propriedade Style, sendo que os valores possíveis variam de um tipo para outro.
Propriedade Visible Como o próprio nome indica, essa propriedade define se um controle deve ou não estar visível em um determinado momento. Ela só pode assumir os valores True (verdadeiro) ou False (falso);
Propriedade Enabled Não Não usam usamos os essa essa prop propri ried edad adee em noss nossoo proj projet eto, o, mas mas vamo vamoss citá citá-l -laa agor agoraa para para evit evitar ar conf confus usõe õess com com Visi Visibl ble. e. Voc Você já reparou quando abre uma janela qualquer do Windows e aparece um botão ou uma opção ção de menu cujo rótulo está com uma cor mais “apagada”, indicando que aquele controle não está acessível no momento? A propriedade Enabled é quem faz isso: ela habilita (quando True) ou não (quando False) o aces acesso so ao cont contro role le em um dete determ rmin inad adoo mo mom mento ento.. Um exem exempplo: lo: você você cria cria um botão otão “Ok” “Ok” para para ser util utiliz izad adoo quan quando do forem orem for forneci necido doss algu algunns valo alores res nece necess ssár ário ioss para ara se real realiz izar ar um cálc cálcul uloo. Você Você pode pode usar sar Enabl nabled ed para para desab esabil ilit itar ar o botã botãoo Ok até até que que o usuá usuári rioo tenh tenhaa forn fornec ecid idoo esse essess valo valore ress, pois pois só depoi epoiss diss dissoo ele ele pode poderá rá usá-lo.
Propriedade Appearance A propriedade ade Appearance define a aparência do controle no formulário. Ela só pode ser modificad cada em tem tempo de pro projeto jeto,, e nor normalm malmen ente te só pod pode ass assum umir ir dois dois valo valore ress: 0 – Flat lat (o con control trolee ter terá a mesm mesmaa apar aparên ênci ciaa do formulário, não haverá destaque) ou 1 – 3D (o controle será exibido em perspectiva 3D).
Propriedade BorderStyle Ess Essa prop ropried riedad adee nor normalm malmen ente te é apli aplica cada da ao form ormulár ulário io,, e, como como o próp próprrio nome nome ind indica, ica, def define ine o esti estilo lo de sua borda. Existem seis tipos de bordas, sendo que alguns controles também possuem a propriedade BorderStyle, mas não todos os tipos. Os tipos de bordas são os seguintes:
0 – None (Nenhuma); indica ca que que o form formul ulár ário io não não será será dime dimens nsio ioná náve vel, l, ou seja seja,, o usuá usuári rioo não não 1 - Fixed Single (Fixa Simples): indi poderá alterar o tamanho no formulário em tempo de execução. 2 – Sizable (Dimensionável); formu mulá lári rioo não pos possuir suiráá os botõ botões es Max Maximiz imizar ar e Minim inimiz izar ar,, e, além além 3 - Fixed Dialog (Diálogo Fixo): o for disso, não será dimensionável. É o estilo da borda das caixas de diálogo do Windows;
13
Microsoft Visual Basic 6
4 - Fixed ToolWindow (Ferramenta Fixa): esse tipo não possui o menu de controle e os botões Maximizar e Minimizar. Não é dimensionável, e mostra somente o botão Fechar e a barra de título com a fonte reduzida. Além disso, o formulário não aparece na barra de tarefa do Windows. 5 - Sizable ToolWindow (Ferramenta Dimensionável) : semelhante a Fixed ToolWindow, só que dimensionável.
Propriedade StartUpPosition Apli Aplicad cadaa ao form formul ulár ário io,, essa essa prop propri ried edad adee dete determ rmin inaa sua sua posi posiçã çãoo na tela tela do comp comput utad ador or quan quando do for for acio aciona nado do.. Os valores possíveis são:
0 – Manual: a posição inicial será a mesma que o formulário ocupa em tempo de projeto; posiçã çãoo inic inicia iall ser será o cent centro ro do for formu mulá lári rioo princ rincip ipal al da apli aplica caçã ção, o, quan quando do temo temoss 1 – Center Owner: a posi mais de um formulário no projeto; 2 – Center Screen: a posição inicial será o centro da tela do computador; 3 – Windows Default : o Windows determinará a posição inicial do formulário.
Propriedade Font A propriedade Font permite a formatação da fonte usada nas propriedades Text e Caption. Quando você clica em Font, é aberta a janela de formatação de fontes do Windows, de modo que você poderá aplicar fonte, tam tamanho anho e efei efeito toss ao text textoo das das prop proprrieda iedade dess cita citada das. s. Ess Essa pro proprie prieda dade de não pod pode ser ser alte altera rada da em temp tempoo de execução, mas para isso o VB fornece algumas propriedades relacionadas a Font, que são as seguintes:
FontBold (Negrito), FontItalic (Itálico), FontStrikethru (Riscado) e FontUnderline (Sublinhado) : podem assumir os valores True (liga o efeito) ou False (desliga o efeito); FontName (Nome da Fonte): indica o nome da fonte a ser aplicada ao controle; recebe be um valor alor num umér éric icoo refer eferen ente te ao tama tamannho a ser apli aplica cado do em um umaa FontSize (Tamanho da Fonte): rece fonte True Type. Obs.: com exceção de Font, essas propriedades só podem ser alteradas em tempo de execução.
Codificação dos eventos Essa é a etapa na qual vamos agora fazer nosso programa funcionar. Como já foi dito anteriormente, o Visual Basic é uma linguagem orientada a eventos, o que quer dizer que os objetos respondem a eventos que contém a codificação necessária. Cada evento contém uma subrotina (ou procedure) associada a ele. Ou seja, a codificação será feita em procedures de acordo com a ação ção que o programa deverá erá execut cutar quando um determinado evento ocorrer. Ante Antess de escr escrev ever er um umaa proc proced edur ure, e, você você prec precis isaa dizer izer ao VB para para qual qual objet bjetoo dese deseja ja escr escrev evêê-la la.. A manei aneirra mais simples de se fazer isso é dando um duplo click sobre o objeto eto desejado, e a janela Código (Code) será apresentada. Na janela Código temos três destaques: Quan Quando do aber aberta ta,, a jane janela la Cód Código igo apr apresen esenta ta a proc proced edur uree corr corres espo pond nden ente te ao even evento to padr padrão ão do objet bjeto. o. Por exem exempl plo: o: o even evento to padr padrão ão de um botã botãoo de coma comand ndoo é o Clic Click, k, port portan anto to quan quando do abri abrirm rmos os a jane janela la Códi Código go de um botão de comando o evento que aparecerá será o Click. Porém, no caso do evento padrão não conter nenhuma codificação, mas outro qualquer sim, então a janela será aberta nesse outro evento; Na part partee super uperio iorr da jane janela la tem temos duas uas caix caixas as de comb combin inaç ação ão.. A da esqu esquer erdda, cham chamad adaa Object, cont contém ém os nom nomes de todo todoss os obje objeto toss do nos nosso formu ormulá lárrio, io, e da direi ireita ta,, cham chamad adaa Proc, uma lista com todas as procedures associados ao objeto atualmente selecionado; Existe uma opção na caixa Object chamada General, que a princípio só contém uma procedure, chamada Declarations. Esse não é um objeto, e sim uma Seção: uma parte do programa onde são escritas instruções especiais, como declaração de variáveis e funções de uso geral. Quan Quando do esta estamo moss prog progrraman amando do em VB, VB, é freq freqüe üent ntee a nece necesssida sidadde de se mo moddific ificar ar o valo valorr das das pro proprie prieda daddes dos dos obje objeto toss em temp tempoo de exec execuç ução ão.. Para Para faze fazerr isso isso,, o VB refe refere re-s -see às prop propri ried edad ades es de um obje objeto to da segu seguin inte te maneira: Objeto.Propriedade Objeto.Propriedade =
14
Microsoft Visual Basic 6
Mas Mas vamo vamoss fazer azer a codi codifi fica caçã çãoo do noss nossoo proj projet eto. o. Come Comece cemo moss pelo pelo botão otão cmdE cmdExi xit: t: para para escr escrev ever er o códi códiggo necessário ao seu funcionamento, siga os seguintes passos: 1. Dê um duplo duplo click sobre sobre o botão botão cmdExit: cmdExit: a janela janela Código Código se abre abre no evento evento Click: Click:
2. Escr Escrev evaa o seg segui uint ntee códi código go:: Private Sub cmdExit_Click() cmdExit_Click() End End Sub
A prime rimeir iraa linh linhaa da proc proced edur uree indi indica ca seu nom nome – cmdE cmdExxit_ it_Clic Clickk – e sua sua clas classe se – Privat ivatee (priv privad ada) a).. A últim ltimaa lin linha indi indica ca o fim fim da proce rocedu dure re,, atra atravé véss do coma comand ndoo End End Sub. Sub. Entr Entree o nome nome da proce rocedu dure re e o coma comand ndoo End End Sub é que escrevemo emos a codificação ção necessária, que nesse caso aso resumiu-se ao comando End (que nome sugestivo, não?), cuja função é encerrar a execução do programa. Vam Vamos ago agora tes testar tar nos nosso prog rograma rama.. Para ara isso isso,, basta asta clic clicar ar no botã botãoo Start da barr barraa de ferra errame ment ntas as ou entã entãoo pres pressi sion onar ar a tecl teclaa F5. Test Testee o fun funcio cioname nament ntoo de seu apli aplica cati tivvo: se tudo tudo foi feit feitoo corr corret etam amen ente te,, quand uandoo você você clicar no botão “Exit” o programa será encerrado e você retornará ao VB. Uma Uma obser bserva vaçã ção: o: quan quanddo esta estamo moss cria criand ndoo um form formuulár lário ou escr escrev even endo do códi código go dize dizem mos que esta estamo moss em ; quan qu ando do esta es tamo mos s exec ex ecut utan ando do um prog pr ogra rama ma dize di zemo mos s que qu e esta es tamo mos s tempo de projeto em tempo de execução. Essa diferenciação é importante, pois existem algumas propriedades que não podem ter seu valor alterado em tempo de execução.
Planejando a codificação Planejamento é a palavra chave para nós, programadores, quando chegamos na fase de escrever a pro program gramaç ação ão do apli aplica cati tivo vo.. Ante Antess de come começa çarr a cod codific ificaç ação ão de um pro program gramaa você você preci recissa sabe saberr o que ele ele deve fazer e quand ando: identif tifica icar quais os eventos que podem ser acionados pelo usuário e como ele eles vão influencia ciar a execu ecução ção do aplicativo, para ara poder assim programá-los de maneira a chegar ao resulta ltado desejado. Vamos então planejar nosso primeiro aplicativo: Temos em nosso formulário três botões de opção, que servirão para indicar nosso “humor matinal”; Temos emos tam também bém três três caix caixas as de figu figura ra,, inic inicia ialm lmen ente te invi invisí síve veis is,, cada cada um umaa dela delass cont conten endo do um umaa “car “carin inha ha”” diferente, e três Labels que não contém texto nenhum; Quan Quando do clic clicar armo moss em um botã botãoo qualq ualque uer, r, a figur iguraa e o text textoo corr corres espo ponndent dentee a ele ele deve deverrão apar aparec ecer er,, e a figura e o texto dos outros botões não deverão mais ser exibidos; Voc Você já deve ter perceb cebido ido que o evento que vamos trabalhar é o Clic lick dos botões de opção, pois é ele ele que vai gerar as ações necess essárias para cumprirmos nosso plane anejamen amentto. Agora que já sabemos o que faze azer, vamos escrever a codificação para isso: 1. Dê um duplo-click no botão de opção optHappy. A janela Código será aberta e a procedure optHappy_Click exibida; 2. Digi Digite te os os coma comand ndos os ind indic icad ado: o: Private Sub optHappy_Click() optHappy_Click() picHappy.Visible picHappy.Visible = True picOk.Visible picOk.Visible = False picSad.Visible = False lblHappy.Caption lblHappy.Caption = "I'm going to Disneyworld!" Disneyworld!" lblOk.Caption lblOk.Caption = Empty lblSad.Caption = Empty End Sub
Microsoft Visual Basic 6
15
Obs.: Empty é uma função do VB que retorna uma string vazia (nula). 3. Dê um click na lista Obj Object ect e escolha o objeto optOk. Se a proced cedure exibida pela ela janela Código igo não for a optOk_Click, selecione-a na lista Proc; 4. Digi Digite te a pro proce cedu dure re:: Private Sub optOk_Click() optOk_Click() picHappy.Visible picHappy.Visible = False picOk.Visible picOk.Visible = True picSad.Visible = False lblHappy.Caption lblHappy.Caption = Empty lblOk.Caption lblOk.Caption = "I'm Ok today." lblSad.Caption = Empty End Sub
5. Selecione Selecione agora agora o objeto optSad optSad e a procedure procedure optSad_ optSad_Click, Click, e escreva escreva o código código para ela ela (você pode pode usar os recursos de copiar e colar do Windows): Private Sub optSad_Click() optSad_Click() picHappy.Visible picHappy.Visible = False picOk.Visible picOk.Visible = False picSad.Visible picSad.Visible = True lblHappy.Caption lblHappy.Caption = Empty lblOk.Caption lblOk.Caption = Empty lblSad.Caption lblSad.Caption = "Goodbye, cruel world..." End Sub
6. Pres ression sionee F5 para para exec execut utar ar o prog progrrama. ama. Se você você dig digito itou tud tudo cor correta retam mente ente,, o VB exib exibir iráá seu seu for formu mulá lári rioo na tela, como no exemplo a seguir:
7. Dê um click click no botão botão com o rótulo rótulo “I’m “I’m Happy” Happy” e veja se o resultado resultado é o esperad esperado: o:
16
Microsoft Visual Basic 6
8. Verifique o funcionamento dos outros botões de opção. ão. Se algo estive iver errado, con confira a codificação e execute o aplicativo novamente.
Criando um arquivo executável O últi último mo passo asso de qualq ualque uerr proj projet etoo é a cria criaçã çãoo do arqu arquiv ivoo exec execut utáv ável el.. Ou você você vai entr entreg egar ar para para o clie cliennte os arquivo ivos que o com compõem? em? Além das razões monetári árias óbvias, você não vai correr o risco de um curioso qualquer alterar ou copiar o código que você tanto suou para criar, ar, vai? Além diss isso, se você não criar um exec execut utáv ável el,, o clie client ntee deve deverá rá poss possui uirr um cópi cópiaa do VB inst instal alad adaa em sua sua máqu máquin inaa para para pode poderr roda rodarr o apli aplica cati tivo vo,, o que não é lá muito prático. A criação de arquivos executáveis é feita pela opção Make .exe do menu File: 1. Escolha a opção Make hello.exe do menu File do VB. Uma caixa de diálogo será exibida, onde você dever everáá info inforrmar mar o nome nome do arq arquivo uivo exec execut utáv ável el,, caso caso queir ueiraa mu muddá-lo á-lo.. Após Após indi indica carr o nome nome,, cliq clique ue em Ok; 2. Crie um atalho para o arquivo executável na área de trabalho do Windows. Veja que, como ícone do atalho, será exibida a “carinha feliz”.
Package and Deployment Wizard A cria criaçã çãoo do exec execut utáv ável el,, apes apesar ar de imp importa ortant nte, e, aind aindaa não não é suf suficie icient ntee para para a dist distri ribbuiçã uiçãoo de uma apli aplica caçã çãoo desenvolvida em VB. Como você sabe, o Windows é um sistema composto de inúmeros arquivos e programas, cada qual com sua função específica, sendo que alguns são neces cessários para a execução de aplicativos. Além disso, o programa escrito em VB não tem o poder de “rodar” sozinho, mesmo após a cria criação ção do mó módu dulo lo execu executáv tável: el: para para func funcio iona nar, r, nece necess ssit itaa de algu alguma mass bibl biblio iotec tecas as cham chamad adas as de run-time, e dos arqu arquiv ivos os OCX OCX que que estã estãoo grav gravad ados os no dir diretó etório rio do Wind Window ows. s. Cham Chamam amoos a esse essess arq arquivo uivoss de dependências. Mas, como saber quais são as dependências de um aplicativo? Um dos dos util utilit itár ário ioss que aco acomp mpan anhham o VB em suas uas versõ ersões es come comerc rcia iais is é o Package and Deployment Wizard , cuja cuja funç função ão é just justam amen ente te reso resolv lver er esse esse prob proble lema ma.. Ele Ele cria cria um prog progra rama ma de inst instal alaç ação ão para para sua sua apli aplica caçã ção, o, que que vai vai copi copiar ar para para a máqu máquin inaa onde nde o pro program gramaa for for inst instal alad adoo todo todoss os arq arquivo uivoss de run-time, DLL’s e OCX’s que ele precisar, da mesma maneira que em um aplicativo comercial. O uso desse utilitário é muito simples:
Microsoft Visual Basic 6
17
1. Na caixa Select Project , selecione o projeto para o qual deve ser criado o programa de instalação; 2. Cliq lique no botã botãoo Package para iniciar o assistente; 3. Você deverá responder algumas perguntas (por exemplo, o nome da opção que será criada no menu Inic Inicia iarr do Wind Window ows) s) send sendoo que que para para a maio maiori riaa dela delass não não é nece necess ssár ário io faze fazerr qual qualqu quer er alte altera raçã ção. o. Deve Devemo moss porém destacar uma delas na qual deve-se indicar, se for o caso, o nome dos arquivos externos ao projeto que tamb ambém precis cisam ser copiados. O caso mais comum é o de arquivos de banc anco de dados, quando da primeira instalação do aplicativo; 4. Depois que você responder essas perguntas, deverá indicar em que unidade e (se for o caso) em que pasta asta ond onde deve devem m ser grav gravad ados os os arqu arquiv ivos os da inst instal alaç ação ão.. Se você você ind indicar icar um umaa unid unidad adee de disqu isquet etes es,, o Wizard criará os disquetes de instalação automaticamente; 5. Pronto, Pronto, o Wizard Wizard resolve resolve todas todas as dependê dependências ncias e cria cria o programa programa de instala instalação ção para para você.
18
Microsoft Visual Basic 6
Lição 2: Entrada e Saída de Dados Entr Entrad adaa e saíd saídaa são são dois dois conc conceit eitos os impo import rtan antí tíss ssim imos os em Proc Proces essa same ment ntoo de Dado Dados, s, pois pois envo envolv lvem em a inter interaçã açãoo do usuá usuári rioo com com a máqu máquin ina: a: por por entr entrad ada, a, enten entende de-s -see toda toda soli solici citaç tação ão ou forn fornec ecim imen ento to de dado dadoss ao comp comput utad ador or pelo pelo oper operad ador or,, e por por saíd saída, a, o reto etorno rno pelo pelo comp comput utad ador or do resul esulta tado do obti obtido do.. Ness Nessaa liçã liçãoo você ocê vai apre aprend nder er a implementar esses dois conceitos em seus programas.
Caixas de Texto Em prog progra rama maçã çãoo visu visual al,, exis existe tem m vári várias as mane maneir iras as de se perm permit itir ir a entr entrad adaa de dado dados, s, mas mas a prin princi cipa pall é o uso das caixas de texto (TextBox). Seu evento padrão é o Change, que ocorre sempre que acontece uma digitação, e a propriedade principal é a Text . Vejamos então algumas propriedades importantes:
Propriedade Text A prop proprried iedade ade Tex Text de um umaa caix caixaa de text textoo arm armazen azenaa o tex texto cont contid idoo na área área de ediç edição ão.. Ela Ela pod pode ser ser alte altera rada da pelo usuário em tempo de execução, o que permite então a digitação de dados no programa. Como a prop propri ried edad adee Text Text arma armaze zena na text textos os,, quan quando do houv houver er a nece necess ssid idad adee do dado dado a ser ser digi digita tado do ser ser numé numéri rico co tere teremo moss que converter seu conteúdo usando funções específicas para esse fim.
Propriedade MaxLength Essa Essa prop propri ried edad adee serv servee para para dete determ rmin inar ar o tama tamanh nhoo máxi máximo mo em cara caract cter eres es do dado dado digi digita tado do em um umaa caix caixaa de tex texto. to. Por exem exempplo: lo: saben abendo do que a digit igitaç ação ão em um umaa caix caixaa de tex texto cham chamad adaa txtN txtNoome não pod pode ter ter mais mais de 30 cara caract cter eres es,, dete determ rmin inam amoos para para a MaxLe axLeng ngth th de txtN txtNom omee o valo valorr 30. 30. Se Max MaxLeng Length th não não for for defi defini nidda, o valor padrão é zero, e não haverá limite para a digitação no campo.
Propriedade Multiline A função dessa propriedade é permitir ou não a digita itação de mais de uma lin linha em uma caix aixa de texto. Os valores possíveis são True (Multiline habilitada) ou False. Com MuliLine = True, quando Enter for pres pressi sion onad ada, a, a dig digitaç itação ão passa assa para ara a próx próxim imoo linh linha. a. Além Além diss disso, o, a prop ropried riedad adee Alig Alignm nmen entt de uma caix caixaa de texto só funciona de Multiline estiver habilitada.
Propriedade PasswordChar Eis uma propriedade muito interessante: você já digitou uma senha em um programa qualquer em que apar aparec ecee na caix caixaa um cara caract cter eree espe especi cial al (norm normal alm mente ente é um “*”) “*”) ao inv invés daqu daquel elee digi digita tado do?? Quem Quem faz faz isso isso é PasswordChar: basta informar em seu valor o caracter desejado, e o efeito será exatamente esse.
Propriedades ForeColor e BackColor A prop ropried riedad adee ForeC oreCol olor or defin efinee a cor cor da fonte onte usad usadaa no text textoo exib exibid idoo pelo elo cont contro role le,, e Back ackColo Colorr indi indica ca a cor cor do fun fundo de um objet bjeto. o. Essas ssas prop proprrieda iedade dess rece recebe bem m como como valo valorr um códi código go numé numéri rico co ou hexa hexade deci cima mall que que repre epressenta enta a cor cor desej esejad ada. a. Em temp tempoo de proj projet eto, o, para ara alte alterrá-la á-lass a manei aneirra mais mais simpl imples es é clic clicar ar sob sobre a pro proprie prieda dadde que deve deve ser ser modif odific icad adaa e depo depois is no botão otão com com as retic eticên ênci cias as que que apar aparec ecee ao lado lado do cód código igo da cor atual. Uma janela com as opções de cores disponíveis se abre e basta escolher a que mais lhe agrade. Par Para alte altera rarr seus eus valo alores res em temp tempoo de exec execuç ução ão,, são usad usadas as as funç funçõe õess RGB e QBCo QBColo lorr, que que estu estuda dare remo moss mais adiante. Para exemplificar o uso das TextBoxes, vamos elaborar o projeto de uma calculadora simples: 1. Inic Inicie ie um novo novo proj projet eto; o; 2. Dimensione o formulário e insira os controles nece ecessários de modo a ficar pare arecid cido com o modelo da próxima página;
19
Microsoft Visual Basic 6
3. Altere Altere as prop proprie riedad dades es dos objeto objetos: s: Objeto
Formulário
Nome
Outras Propriedades = Valor
frmCalculadora
Caption = Calculadora BorderStyle = 1 – Fixed Single StartUpPosition = 2 – Center Screen Caixa de Texto txtNum1 Text = “” (em branco) MaxLenght = 10 Caixa de Texto txtNum2 Text = “” MaxLenght = 10 Caixa de Texto txtResultado Text = “” Label lblMultiplicação Caption = X (maiúsculo) Font = Arial, Negrito, tamanho 16 Botão de Comando cmdIgual Style = 1 – Graphical Picture = Misc\MISC22.ICO Botão de Comando cmdLimpar Caption = &Limpar Ness Nessee proj projet eto, o, digi digita tare remo moss um núme número ro em txtN txtNum um11 e outr outroo em txtN txtNum um2. 2. Quan Quando do clic clicar armo moss em cmdI cmdIgu gual al,, o resu result ltad adoo da mu mult ltip ipli lica caçã çãoo apar aparec ecer eráá em txtR txtRes esul ulta tado do.. Para Para limp limpar ar as caix caixas as de text texto, o, clic clicar arem emos os em cmdcmdLimpar. O projeto irá trabalhar, portanto, basicamente com dois eventos: Click em cmdIgual (=) Click em cmdLimpar (Limpar) Não se preocup cupe com o cálculo agora, pois voltaremos a esse assunto na próxima lição. Vamo amos então escrever a codificação do nosso programa: 1. Dê um duplo duplo click click no botão cmdIgual cmdIgual e entre entre com o seguinte seguinte código: código: Private Sub cmdIgual_Click() cmdIgual_Click() vValor1 = Val(txtNum1.Text) vValor2 = Val(txtNum2.Text) txtResultado.Text = vValor1 * vValor2 End Sub
2. Alterne Alterne para a procedure procedure cmdLim cmdLimpar_C par_Click lick e digite digite os os comandos comandos a seguir: seguir: Private Sub cmdLimpar_Click() cmdLimpar_Click() txtResultado.Text = Empty txtNum1.Text txtNum1.Text = Empty txtNum2.Text txtNum2.Text = Empty End Sub
3. Execute o projeto. Para testar, ent entre com um número qualquer em txtNum1, outro em txtNum2, dê um click no botão “=”, e o resultado da multiplicação aparecerá em txtResultado; 4. Grav Gravee o form formul ulár ário io como como frmCalc e o projeto como Calc. Obs. Obs.:: você ocê deve deve ter ter perc perceb ebid idoo que que na cod codific ificaç ação ão for foram usad usados os algu algunns recu ecurso rsos novo ovos: por por enq enquant uanto, o, o que nos interessa é que “vValor1” e “vValor2” são variáveis, e “Val” é uma função de conversão.
Saída de Dados Voc Você já usou na lição anterior um dos principais meios de exibição de dado ados do VB: o controle Label. Ele tem, tem, ness nessee caso caso,, um umaa vant vantag agem em mu muit itoo gran grande de sobr sobree as caix caixas as de text texto, o, fáci fácill de perc perceb eber er:: exec execut utee nova novame ment ntee
20
Microsoft Visual Basic 6
o pro program gramaa Calc Calc,, faça faça um cálc cálcul uloo qual qualqu quer er e cliq clique ue com com o mo mouuse sob sobre a caix caixaa de text textoo txtR txtRes esul ulta tado do.. Agor Agoraa escreva alguma coisa: a digitação é aceita, o que, convenhamos, não é lá muito recomendável para a exibição de dados. Já um label não permite digitação, resolvendo esse problema. Vamos então alterar nosso programa: 1. Apague Apague do do formul formulári árioo a caixa caixa txtRe txtResul sultad tado; o; 2. Inclua Inclua um label em seu lugar, e altere altere suas suas propried propriedades ades para: Name = lblResultado Caption = “” (em branco) Alignment = 2 – Center BorderStyle = 0 – None BackStyle = 1 – Opaque BackColor = (clique nas reticências e escolha a cor branca)
3. Altere a última última linha linha da procedur proceduree cmdIgual cmdIgual_Click _Click para: lblResultado.Caption lblResultado.Caption = vValor1 * vValor2
4. Altere a primeira primeira linha da proced procedure ure cmdLim cmdLimpar_C par_Click lick para: lblResultado.Caption lblResultado.Caption = Empty
5. Execute o programa, faça um cálculo qualquer e tente alterar o resultado: como o label não permite digitação, isso não é mais possível.
Saída Formatada É mu muit itoo com comum a nece necess ssid idad adee de se apli aplica carr másc máscar aras as para para a exib exibiç ição ão dos dado dadoss. Isso sso fica ica clar claroo quan quando do,, em noss nossaa calc calcul ulad ador ora, a, um cálc cálcul uloo resu result ltaa em um valo valorr alto alto,, pois pois não não exis existe tem m sepa separa rado dore ress de milh milhar ar ou deci decima mal. l. O VB possui algumas funções específicas para a formatação de dados de saída:
Função Format A função Format é usada na aplicação de máscaras em dados numéricos ou datas. Sua sintaxe é a seguinte: Format(,)
Onde Expressão é o dado a ser formatado e Formato é a máscara que será aplicada a ele, e o resultado ado será uma string correspondente à expressão formatada com a máscara. Veja alguns exemplos:
Formato 5 positivo 5 negativo 5 decimal 0 5 -5 1 0,00 5,00 -5,00 0,50 #,##0 5 -5 1 #,##0.0 5,0 -5,0 0,5 $#,##0;($#,##0) $5 ($5) $1 $#,##0.00;($#,##0.00) $5,00 ($5,00) $0,50 0% 500% -500% 50% 0.00E+00 5,00E+00 -5,00E+00 5,00E-1 Em “formato” to” o número 0 será mostrado ou trocado pelo cara aracte ctere em sua posição, ão, já o susteni enido (#) não será mostrado. Podemos usar símbolos na máscara, como no exemplo: $ , % e E (que representa exponenciação). Note que a separação de milhares e decimais na máscara deve ser feita no padrão americano, ou seja, “,” para separação de milhares e “.” para decimais, mas o resultado vai seguir as conf config igur uraç açõe õess feit feitas as na opçã opçãoo Inte Interrnaci nacion onal al do Paine ainell de Contr ontrol olee do Wind Window ows. s. Format rmat tamb também ém pod pode ser ser usada para formatação de data e hora: Formato Exibição Formato Exibição d/m/yy 10/7/96 General Date 06/09/96 9:40:18 dd-mm-yyyy 01-Jun-1996 Long Date Sexta, 9 de setembro de 1996 dd-ddd 02-Dom Medium Date 09-set-96 hh:mm AM/PM 08:50 AM Short Date 09/09/96 h:mm:ss a/p 8:50:20 a Long Time 9:40:19 d/m/yy h:mm 03/12/95 9:30 Medium Time (12 horas) 09:40 AM Short Time (24 horas) 09:40
Microsoft Visual Basic 6
21
Funções UCase e LCase Essas funções são usadas na conversão de textos em letras maiúsculas (UCase) ou minúsculas (LCase).
Função StrConv A função StrConv também é usada na formatação de string ings, mas é mais ais flexíve ível que UCase e LCase, pois recebe um parâmetro que indica como deve ser feita a conversão de maiúsculas para minúsculas e viceversa. Esse parâmetro pode ser:
1 – vbUpperCase: converte a string em caracteres maiúsculos. O mesmo que UCase; 2 – vbLowerCase: converte a string em caracteres minúsculos. O mesmo que LCase; 3 – vbProperCase: converte em letra maiúscula a primeira letra de cada palavra na seqüência de caracteres, e as demais em minúsculas. Por exemplo: Função Exibição UCase(“MICROSOFT Visual basic”) ou MICROSOFT VISUAL BASIC StrConv(“MICROSOFT Visual basic”, vbUpperCase) LCase(“MICROSOFT Visual basic”) ou microsoft visual basic StrConv(“MICROSOFT Visual basic”, vbLowerCase) StrConv(“MICROSOFT Visual basic”, vbProperCase) Microsoft Visual Basic Vamos alterar a exibição do resultado na calculadora: 1. Abra a janela janela Código Código no evento evento Click do botão botão cmdIgual; cmdIgual; 2. Altere Altere a últi última ma linha linha da da proced procedure ure como como segu segue: e: lblResultado.Caption lblResultado.Caption = Format(vValor1 Format(vValor1 * vValor2, “###,##0.00”)
3. Execut Executee o prog program ramaa e test testee a alter alteração ação;; 4. Grave seu seu trabalho. trabalho. Guarde-o Guarde-o com cuidado, cuidado, pois pois esse projeto projeto será será usado novament novamentee na próxima próxima lição.
22
Microsoft Visual Basic 6
Lição 3: Fundamentos da Linguagem Como já foi dito ito anteriormente, a programação em VB é feita através de uma versão da linguage agem Basic estr estrut utur urad ada. a. É essa essa ling lingua uage gem m que que come começa çare remo moss a estu estuda darr a part partir ir de agor agora. a. Ness Nessaa liçã lição, o, vere veremo moss a cria criaçã çãoo e o uso uso de vari variáv ávei eiss e cons consta tant ntes es,, e a razão azão da exis existê tênc ncia ia dos comp comput utad ador ores es:: cálc cálcuulos. los. Estu Estuda dare remo moss tamb também ém um conceito muito importante em programação visual: o foco.
Variáveis Var Variáve ável é uma área da memória que identif tifica icamos com com um nome e onde podem ser guardados dados com poss possib ibil ilid idad adee de alte altera raçã çãoo em temp tempoo de exec execuç ução ão.. O nome nome de um umaa vari variáv ável el pode pode ter ter até até 255 255 cara caract cter eres es,, deve deve come começa çarr com com um umaa letr letraa e tem tem que que ser únic único. o. O nom nome pode pode cont conter er núme número ross e subli ublinh nhad ados os,, e não não pode ode ser ser uma pala palavr vraa rese reserv rvad ada. a. Ness Nessee text textoo adot adotar arem emos os como como padr padrão ão inic inicia iarr todo todoss os nome nomess de vari variáv ávei eiss com com a letr letraa “v”. “v”. Por exemplo: para uma variável que identifica uma quantidade poderemos adotar o nome vQuantidade. Existem vários tipos de variáveis, dependendo do dado que queremos que ela armazene: Tipo
Byte Boolean Date Integer Long Single
Tamanho (Bytes)
Double Currency String Variant
1 2 8 2 4 4 8
8 variável variável
Sufixo
nenhum nenhum nenhum % & !
Faixa de Dados
0 a 2 55 True (-1) ou False (0) 1/Jan/100 a 31/Dez/9999 -32.768 a 32.767 -2.147.483.647 a 2.147.483.647 -3,402823E38 a -1,401298E-45; 1,401298E-45 a 3,402823E38 # -1,79769313486232E308 a -4,94065645841247E-324; 4,94065645841247E-324 4,94065645841247E-324 a 1,79769313486232E308 @ -922.337.203.685.477,5808 a 922.337.203.685.477,5807 $ Qualquer dado alfanumérico nenhum Qualquer tipo de dado: será assumido o tipo e tamanho mais apropriado ao dado a ela atribuído
A colu coluna na Sufi Sufixo xo cont contém ém car caracte actere ress que que serv servem em para para indi indica carr o tipo tipo da variá ariáve vell desej esejad ada, a, quan quando do a usam usamoos pela pela prime rimeir iraa vez. ez. Por exem exempl plo: o: para para inic inicia iarr um umaa var variáv iável de nom nome vTro vTroco co e decla eclarrá-la á-la como como sendo endo do tipo tipo Currency, poderemos usar a linha de comando: vTroco@ = 0
Uma Uma obs observa ervaçã ção: o: inte intern rnam amen ente te,, o tipo tipo Date Date é um núme número ro do tipo tipo Long ong que que rep represe resent ntaa um umaa data data,, send sendoo que que a parte inteira desse número indica a data propriamente dita, e a parte decimal a hora.
Declaração de Variáveis Decl Declar arar ar um umaa vari variáv ável el é indi indica carr ao VB que que deve deve ser ser rese reserv rvad adaa um umaa área área na memó memórria para para o arma armaze zena name mennto de um dado, e de que tipo será esse dado. Existem três maneiras de declarar variáveis: 1. Inici nicial aliz izar ar a variá ariáve vell onde nde ela ela for for nece necesssári sária. a. Como Como o VB não obrig brigaa a decl declar araç ação ão de var variáv iáveis eis, pod podemos emos simplesmente atribuir um valor lor a ela e a variáv iável assumirá o tipo ipo mais ade adequado para ara o dado que est está sendo armazenado: é o que chamamos de declaração implícita; 2. Usar o mesmo método aci acima, porém indicand ando o tip tipo da variáv iável através dos sufixos, na primei imeirra vez em que a utilizarmos; 3. Usar os comandos Dim, Static, Private ou Public para alocar o espaço na memória para a variável e indicar seu tipo. A sintaxe é a mesma para todos os comandos: Variável1, Variável2, Variável3, ..., VariávelN As
Tamb Também ém pod podemos emos obri obriga garr a decl declar araç ação ão de tod todas as variá ariávveis eis de um umaa apli aplica caçã çãoo, o que que é mu muit itoo inte interressa essant nte, e, pois pois decl declar arar ar vari variáv ávei eiss é um umaa prát prátic icaa de prog progra rama maçã çãoo alta altame ment ntee reco recome mend ndáv ável el.. Para Para isso isso usam usamos os o coma comand ndoo Option Explicit na seção Declarations do formulário ou módulo de programação.
23
Microsoft Visual Basic 6
Escopo das Variáveis Escopo são os pontos da aplicação de onde podemos acessar a variável. O escopo de uma variável é determinado pelo comando usado em sua declaração (Dim, Static, Private ou Public):
Variáveis Variáveis Locais: são reconhecidas apenas pela procedure na qual foram declaradas. Diferentes procedures podem ter ter vari ariáveis locais com com o mesmo nome sem que isso cau cause con conflitos, pois quando uma pro proced cedure ure é ence encerr rrad adaa o cont conteú eúdo do de suas suas vari variáv ávei eiss loca locais is ser será perd perdid ido. o. A decl declar araç ação ão de variá ariáve veis is loca locais is é feit feitaa com com os coma comand ndoos Dim Dim ou Priv Privat ate. e. Imp mpoortan rtante te:: variá ariávveis eis com com decl declar araç ação ão imp implíci lícita ta serã serãoo sempre locais; são vari variáv ávei eiss loca locais is cujo cujo cont conteú eúdo do será será reti retido do ao térm términ inoo da proc proced edur ure. e. Ness Nessee caso caso,, Variáveis Estáticas: são quando a procedu edure que contém tém uma variáv iável est estátic tica for executada novamente, a variável não será rein reinic icia iali liza zada da e seu seu cont conteú eúdo do será será o mesm mesmoo que que ela ela cont contin inha ha quan quando do a proc proced edur uree foi foi ence encerr rrad adaa da últi última ma vez. Para declarar uma variável como estática usa-se o comando Static; Variáveis Variáveis Privadas Privadas: compartilham informações entre todas as procedures em um módulo de prog rograma ramaçã çãoo ou for formu mulá lári rio, o, mas mas não para para outr outroos mó móddulos ulos ou form ormulár ulário ioss. A decl declar araç ação ão de variá ariávveis eis priv privad adas as é feit feitaa com com os coma comand ndos os Dim Dim ou Priv Privat atee na seçã seçãoo Decl Declar arat atio ions ns de um form formul ulár ário io ou mó módu dulo lo de programação; Variáveis Variáveis Públicas Públicas: estão disponíveis para todos os módulos de programação e formulários do aplicativo. Para a declaração de variáveis públicas usamos o comando Public. Obs.: por uma questão de compatibilidade com versões anteriores do VB, também pode ser usado o comando Global para declaração de variáveis públicas.
Inicialização de Variáveis De mo moddo gera geral, l, para para inic inicia iali liza zarr um umaa vari variáv ável el basta asta atri atribbuir uir um cont conteú eúddo a ela. ela. Obv Obviam iamente ente,, ess esse con conteú teúdo deve ser compatível com o tipo usado na declaração da variável. Para dados numéricos basta indicar o valor desejado: vSalárioBase = 1200
Valores reais devem usar o ponto para separação da parte decimal, jamais a vírgula, mesmo que a configuração do Painel de Controle do Windows indique o contrário: vPi = 3.1416
Dados tipo String devem vir entre aspas: vNomeEscola = “CEMEP”
Dado Dadoss tipo tipo Date Date são são iden identi tifi fica cado doss pelo pelo cara caract cter er “#” “#” (sus susten tenido) ido) no seu seu iníc início io e fim. im. Por exem exempl plo: o: para para armazenar a data 15/07/1998 em uma variável, podemos usar o comando: vDataCurso = #15/07/1998#
Constantes Con Constan stante tess tamb também ém são são posiç osiçõe õess de memó memóri riaa que que têm têm as mesma esmass cara caract cter erís ísti tica cass das das vari variáv ávei eiss e pode podem m ser ser dos dos mesm mesmoos tipo tipos, s, mas, as, como como o própr róprio io nome nome indi indica ca,, não pod podem ter ter seu seu valo valorr alte altera rado do dur durante ante a exec execuç ução ão do prog progra rama ma.. São São útei úteiss para para guar guarda darr parâ parâme metr tros os e valo valore ress que que serã serãoo usad usados os em vári várias as proc proced edur ures es do sist sistem ema, a, pois pois com com elas elas pode podemo moss cent centra rali liza zarr a atri atribu buiç ição ão dess desses es valo valore ress em algu alguns ns pouc poucos os loca locais is,, o que que faci facili lita ta mu muit itoo a prog progra rama maçã ção. o. Por Por exem exempl plo: o: quan quando do um clie client ntee comp compra ra um sist sistem ema, a, obvi obviam amen ente te pret preten ende de que que o nome nome de sua sua empr empres esaa apar apareç eçaa nos nos rela relató tóri rios os emit emitid idos os por por ele. ele. Se você ocê incl inclui uirr o nom omee da empr empres esaa em cada cada pro program gramaa de relatório, e depois vender esse sistema para outro cliente, terá que rastreá-lo todo a procura dessas ocorrências e fazer as alterações necessárias. Mas, se você definir uma constante pública no início do sistema cont conten enddo o nome nome da empr empres esa, a, só ter terá que que faze fazerr um umaa alte altera raçã ção. o. Con Constan stante tess só pode podem m ser decla eclarradas adas com com os coma comand ndos os Publi ublicc (co (consta nstant ntes es públi ública cas) s) ou Priva rivate te (con (const stan ante tess priva rivada dass ou loca locais is)). A sinta intaxe xe usad usadaa na sua criação é: Const NomeDaConstante As =
Por exemplo: Public Const Pi As Single = 3.1415926535
24
Microsoft Visual Basic 6
Constantes de Sistema O VB poss possui ui dive divers rsas as cons consta tant ntes es prépré-de defi fini nida das, s, cham chamad adas as de Cons Consta tant ntes es de Sist Sistem ema, a, que que pode podem m ser ser usad usadas as a qualquer momento pelo programador. A principal vantagem de seu uso é a clareza da codificação e a conseqüente facilidade de manutenção. Um bom exemplo do uso desse tipo de constante é o de uma aplicaçã ação que trate ate com dias da semana ana. Se a compara aração ção do número ero do dia da semana de uma data com com 1 for for verda erdade deir ira, a, sab saberem eremos os que esse esse dia dia é um dom domingo ingo,, pois ois o VB iden identi tifi fica ca um dom omin inggo pelo pelo valo valorr 1. Exis Existe te uma constante de sistema, ema, de nome vbSunday, cujo valor é 1, que foi criada justamente para ser usada em caso asos como esse: ao invés do programador com comparar o dia da seman emanaa com 1 e ter que se lembrar a toda hora que 1 é domingo, pode comparar com vbSunday, e seu código ficará muito mais legível. A lista completa das constantes de dias da semana é a seguinte: Constante
Valor
Dia da semana
vbSunday 1 Domingo vbMonday 2 Segunda vbTuesday 3 Terça vbWednesday 4 Quarta vbThursday 5 Quinta vbFriday 6 Sexta vbSaturday 7 Sábado Um observação importante é que uma constante de sistema é facilmente identificável, pois seu nome gera geralm lmen ente te come começa ça com com “vb” “vb” – repar eparee na tabe tabela la acim acima. a. Você Você tamb também ém já viu viu algu algum mas dela delass na liçã liçãoo ante anteri rior or,, quan quando do estu estuda damo moss a funç função ão StrC StrCon onv: v: os valo valore ress vbUp vbUppe perC rCas ase, e, vbLo vbLowe werC rCas asee e vbPr vbProp oper erCa Case se são são cons consta tant ntes es de sistema cujos valores são, respectivamente, 1, 2 e 3. Estudaremos mais algumas delas durante o curso.
Funções de Conversão Como já vimos anteriormente, a entrada de dados é feita pelas caixas de texto, obrigando o uso de convers ersores quando houver necessidade do dado ser numérico ou data ata. Os conversores são funções que recebem dados de um tipo e os convertem em outro. Cada tipo de conversão tem uma função corr corres espo ponndent dente. e. Por exem exempplo: lo: não não pode podemo moss usar usar um con convers versoor de str string ing para ara Byte Byte se sabem abemos os que que o tex texto representa um valor maior que 255, pois esse é o valor limite do tipo Byte: o tamanho do dado não será suportado na conversão. A tabela a seguir mostra as funçõe ções para conversão de dado ados tipo String em numérico icos. Considere que a variá-vel vPi contém um texto correspondente ao valor de (“3.1415926535”): Função/Sintaxe
Exemplo
Tipo Resultante
Resultado da conversão
Val() Val(vPi) Long 3 CInt() Cint(vPi) Integer 3 CLng() CLng(vPi) Long 3 CSng() CSng(vPi) Single 3.14159 CDbl() CDbl(vPi) Double 3.1415926536 CCur() Ccur(vPi) Currency 3.1416 Observação: as funções Val e CLng diferem-se na conversão de um dado não numérico: Val é a única função que que con consegu seguee trat tratar ar um dado ado Strin tringg que que não rep represe resent ntee um valo valor. r. Nes Nesse caso caso,, ela ela retor etorna narrá zer zero. As outra utrass funções, inclusive CLng, geram um erro de execução se forem usadas para esse tipo de conversão. A conversão de um dado tipo String em uma data é feita pela função CDate. Essa função também gera um erro erro de exec execuç ução ão se o tex texto a ser ser conv conver erti tido do não não repre eprese senntar tar um umaa data data váli válida da.. Veja Veja sua sua sinta intaxe xe e um exem exempplo de utilização: CDate() ' Define a data: vDia = "12/02/1969" ' Converte vDia para vDataNasc, do tipo Date. vDataNasc = CDate(vDia)
Obs.: as linhas iniciadas com o apóstrofo (') são comentários.
25
Microsoft Visual Basic 6
O VB tamb também ém poss possuui uma funçã unçãoo para ara conv conver erssão de expr expres essõ sões es num umér éric icaa ou data data em dado dadoss tip tipo Str String: ing: é a função Str, cuja sintaxe é: Str()
Por exemplo: o resultado da linha de comando Str(3.1416) será o texto “3.1416”.
Operadores Depois que o programa recebe dados do usuário, o próximo passo é fazer algo com esses dados, nor normalm malmen ente te cálc cálcul uloos. Qual Qualqu quer er tip tipo de cálc cálcuulo envo envolv lvee uma oper operaç ação ão;; port portan anto to,, os coma comanndos dos espe especi ciai aiss para trabalhar com dados são chamados operadores. O VB fornece cinco tipos de operadores:
Operadores Aritméticos São São os oper operad ador ores es mate matemá máti tico coss clás clássi sico cos, s, que que perm permit item em soma somar, r, subt subtra rair ir,, mu mult ltip ipli lica carr e divi dividi dirr núme número ross ou variáveis que contenham números: Operador
= + – * / \
Mod ^
Função
Exemplo
Nesse caso, atribuição de valor Variável = 0 Soma de dois números vSoma = X + Y Subtração de dois números vSalLiq = vSalBruto – vImposto Inversão de positivo/negativo vNegativo = –vPositivo Multiplicação de dois números vTotal = vPreço * vQuantidade Divisão de dois números, sendo que o resultado será um vTeste = 1910 / 25 número com ponto flutuante (decimal), como 5.8547 (vTeste será igual a 76.4) Divisão de dois números, sendo que o resultado será um vTeste = 1910 \ 25 número inteiro (vTeste será igual a 76) Resto da divisão inteira de um número por outro vTeste = 1910 Mod 25 (vTeste será igual a 10) Exponenciação vQuadrado = vNúmero ^ 2
Operador de String O mais simples de todos. É o operador “&”, que realiza iza a concatenação (uni (união ão)) de dois ois ou mais ais dados ados tipo tipo String. Veja um exemplo: vLinguagem = “Visual ” & “Basic”
O comando acima resu esulta em “Vi “Visual Basic”, pois o dado ado após o operador é agrupado ado por este ao final do prim primei eiro ro,, resu result ltan ando do na uniã uniãoo de ambo ambos: s: fora foram m conc concat aten enad ados os.. Tamb Também ém pode pode ser ser usad usadoo para para isso isso o oper operad ador or “+”, “+”, mas mas reco recome mend ndaa-se se usar usar “&” “&” porq porque ue este este conv conver erte te dado dadoss de outr outros os tipo tiposs ante antess da conc concat aten enaç ação ão,, evit evitan ando do erros de execução.
Operadores de Datas São aqueles que permitem efetuar cálculos com dados tipo Date. Como as datas são representadas internamente pelo VB como números, podemos obter outras datas somando valores a elas, ou então determinar o número de dias entre uma data e outra através de subtração. Veja a tabela: Operador
+ –
Função
Exemplo
Obter a partir da soma de uma data inicial e um número vVencimento = Date + 30 uma outra data. O número será entendido como (Date retorna a data de hoje, à qual quantidade de dias. serão somados trinta dias) Obter a diferença em dias entre duas datas vAtraso = vPagto – vVenc (vAtraso receberá o número de dias entre o vencimento e o pagamento)
Um lemb lembrrete: ete: como como o tip tipo Date Date tamb também ém serve erve para para indi indica carr horas oras,, par para cálc cálcul ulos os de hor horas usamo samoss os mesm mesmos os operadores, mas trabalhamos com a parte decimal das variáveis ou expressões.
26
Microsoft Visual Basic 6
Operadores Lógicos São São aque aquele less que que mani manipu pula lam m os valo valore ress lógi lógico coss True (verda (verdadei deiro) ro) e False (fal (falso so). ). O VB tamb também ém repr repres esen enta ta esses valo alores como –1 e 0, respectiv tivamente. Não entraremos em muitos detalhes com esses operadores agora, pois eles serão mais bem estudados quando abordarmos as estruturas de controle. Operador
And Or Xor Not
Função
lógico: retorna verdadeiro se todos os valores da exp express ressão ão forem orem verd verdad adei eirros e fals falsoo em qual qualqu quer er outr outroo caso co: retorna falso lso somente se todos os valores da Ou lógico: exp express ressão ão fore forem m falso alsoss e ver verdade dadeir iroos em qual qualqu quer er outr outroo caso Ou lógico exclusivo: a diferença desse operador para Or é que, que, se todo todoss os valo valore ress da expr expres essã sãoo fore forem m verd verdad adei eiro ros, s, ele retorna falso (não há erro, é isso mesmo!) lógico co:: “neg “nega” a”,, ou melh melhor or,, inve invert rtee o valor alor lógi lógico co da Não lógi expressão E
Exemplo
Expressão1 And Expressão2 Expressão1 Or Expressão2 Expressão1 Xor Expressão2 Expressão1 = Not Expressão2
Operadores de Comparação Serv Servem em para para a comp compar araç ação ão de dado dados. s. Assi Assim m como como os oper operad ador ores es lógi lógico cos, s, estu estuda dare remo moss melh melhor or esse esse assu assunt ntoo juntamente com as estruturas de controle. Operador
< <= > >= = <>
Menor que Menor ou igual a Maior que Maior ou igual a Nesse caso, igual a Diferente de
Função
Exemplo
Expressão1 < Expressão2 Expressão1 <= Expressão2 Expressão1 > Expressão2 Expressão1 >= Expressão2 Expressão1 = Expressão2 Expressão1 <> Expressão2
Muit Muitoo cuid cuidad adoo ao comp compar arar ar strin trings gs com com os opera perado dore ress “=” “=” e “<>” “<>”,, pois ois duas strings são iguais apenas se Isso quer quer dize dizerr que, que, se você você fizer izer a comp compar araç ação ão “a” “a” = “A”, “A”, o res resulta ultaddo ser será forem absolutamente idênticas. Iss falso, pois “a” (minúsculo) possui um código ASCII diferente de “A” (maiúsculo), e portanto não são iguais.
O Foco No Wind Window ows, s, apen apenas as um umaa jane janela la (for (formu mulá lári rio) o) ou cont contro role le pode pode,, num num dado dado inst instan ante te,, rece recebe berr açõe açõess (cli (cliqu ques es)) do mouse ou entradas via teclado. Dizemos que esse objeto possui o foco ( focus focus, em inglês). O foco é geralmente indicado por uma leg legend enda ou moldura destacada, ou então pelo cursor estar posicion ionado no controle, e pode ser alterado pela açã ação do usuário ou através de código. Quando um objeto recebe ebe o foco, ocorre o evento Got-Focus, e quando ele o perde ocorre o evento LostFocus. Out Outra característic tica imp importan tante a ser observada é que, quando um programa VB é executado, o cursor se posicio ciona no primeiro controle que você inseri eriu no formulári ário. Por exemplo: lo: se o primeiro con controle a ser inse inserrido ido foi foi o txtN txtNuum1 m1,, quan quando do você você inic inicia iarr o apli aplica cati tivo vo é nele ele que que o curs cursor or esta estará rá pos posicio iciona nado do.. Usan Usanddo a tecl teclaa Tab, Tab, o curs cursor or vai vai se alte altern rnan ando do entr entree os camp campoos, semp sempre re segui eguind ndoo a orde ordem m em que os cont contrroles oles for foram colo coloca cado doss no form formul ulár ário io.. Isso Isso cham chamaa-se se ordem de tabulação e é dete determ rmin inad adaa pela pela prop propri ried edad adee TabI TabInd ndex ex dos controles.
Propriedade TabIndex Como já foi dito, conforme você insere controles em um formulário eles recebem uma ordem para recebimento do foco, que é o valor da proprieda edade TabIndex. O primeiro controle receberá o valo alor 0 para TabI TabInd ndex ex,, o segu segund ndoo 1, e assi assim m por por dian diante te.. Essa Essa orde ordem m pode pode ser ser mu muda dada da pelo pelo prog progra rama mado dor, r, bast bastan ando do alte altera rarr o valor de TabI abIndex de modo a ajustá-la. No caso de ser digitado para TabIndex um valor já pert ertencente a outro controle, o VB vai reorganizá-los automatica icamente. te. TabIndex não pode ser alte lterada em tempo de execução.
27
Microsoft Visual Basic 6
Propriedade TabStop Essa propriedade impede o acesso ao controle pela tec tecla Tab se estiver desliga igada. Isso acontece porque TabS TabSto topp dete determ rmin inaa se o cont contrrole ole deve eve ou não aten atendder à orde ordem m de tabu tabula laçã ção. o. Mas é imp importa ortant ntee ress ressal alta tarr que que TabS TabSto topp não não evit evitaa que que o usuá usuári rioo aces acesse se o con control trolee usand sandoo o mo mous use. e. Os valor alores es poss possív ívei eiss par para TabS TabSto topp são True (TabStop ligada) ou False (TabStop desligada).
Propriedade Default Existem tem, nas aplic licações para Windows, botões de comando que podem ser aci acionados pela tecl ecla Enter, er, independente da ordem de tabulação, como os botões Ok das caixas de diálogo do Windows. Quem dete determ rmin inaa o acio aciona name ment ntoo do botã botãoo por por Ente Enterr é a pro proprie prieda dade de Defa Defaul ult, t, que pode pode rece recebe berr os valo alores res True True ou Fals False. e. O obje objeto to cuja cuja prop propri ried edad adee Defa Defaul ultt for for igua iguall a True True apar aparec ecer eráá com com um cont contor orno no mais mais espe espess sso, o, dand dandoo a indicação que, se Enter for pressionada, ele será acionado.
Método SetFocus Para Para posi posici cion onar ar o foco foco em um dete determ rmin inad adoo obje objeto to em temp tempoo de exec execuç ução ão usam usamos os o méto método do SetF SetFoc ocus us,, send sendoo que somente formulários ou controles visíveis podem recebê-lo. A sintaxe é a seguinte: objeto.SetFocus
Modificando a Calculadora Vamos agora aplicar o que aprendemos: 1. Se ainda ainda não o fez, fez, abra a VB e o projeto projeto da calculado calculadora ra que iniciamo iniciamoss na lição anterior; anterior; 2. Execu xecute te o apli aplica cati tivo vo e verif erifiq iquue se a orde ordem m de tabu tabula laçã çãoo cor corresp respon onde de à seg seguint uinte: e: txtN txtNuum1 = 0, txtN txtNum um22 = 1, cmdI cmdIgu gual al = 2 e cmdL cmdLim impa parr = 3. Se nece necess ssár ário io,, alte alterre as prop ropried riedad ades es TabIn abInddex dos dos cont contro role less para para que fiquem de acordo com a ordem indicada; 3. No formulário da calculadora, seleci ecione o botão cmdIgual e pressione a tecla cla Del Delete. Lembra-se que havia programação associada a ele? E agora que esse objeto apagado, para onde ela foi? 4. Abra a jane anela Código e procure a seção Gene eneral do formulário. Note que a lista Proc agora contém, além da seção Declarations, a procedure cmdIgual_Click, que está lá como uma procedure geral. Uma procedure geral é aquela que pode ser chamada por qualquer outra procedu edure do formulári ário, ou seja, funci uncion onaa como como um umaa subr ubrotin otinaa ou fun função ção. Ela Ela não não é exec execut utad adaa por por esta estarr asso associ ciad adaa a um objet bjetoo e a part partir ir de um evento, e sim quando chamada. Estudaremos isso melhor na próxima lição; 5. Agora altere o formulá formulário rio da da calculado calculadora ra como como no no exemplo: exemplo:
6. Altere as proprie propriedades dades dos novos novos objetos objetos seguindo seguindo a tabela: tabela:
28
Microsoft Visual Basic 6
Objeto
Nome
Label Label1 Label Label2 Botão de de Co Comando cmdMultiplicar Botão de Comando cmdDividir Botão de Comando cmdSomar Botão de Comando cmdSubtrair
Outras Propriedades = Valor
Caption = Primeiro Número: Caption = Segundo Número: Style = 1 – Graphical cal Picture = Misc\MISC20.ICO Style = 1 – Graphical Picture = Misc\MISC21.ICO Style = 1 – Graphical Picture = Misc\MISC18.ICO Style = 1 – Graphical Picture = Misc\MISC19.ICO
7. Cham Chamee a jane janela la Códi Código go e proc procur uree a proc proced edur uree cmdI cmdIgu gual al_C _Cli lick ck (est (estáá na seçã seçãoo Decl Declar arat atio ions ns,, lemb lembra ra-s -se? e?)) e alte altere re seu seu nome nome para para cmdM cmdMul ulti tipl plic icar ar_C _Cli lick ck.. Ao térm términ inoo da alter alteraç ação ão,, o códi código go do anti antigo go botão botão cmdI cmdIgu gual al será associado ao botão cmdMultiplicar (veja nas caixas de combinação da janela Código); 8. Altere a proced cedure cmd cmdMultiplicar car para que fique de aco acordo com a codifi ificaçã ação a segu eguir. Note que foi incl incluí uída da na prog progra rama maçã çãoo a decl declar araç ação ão das das vari variáv ávei eiss como como do tipo tipo Sing Single le,, e a funç função ão de conv conver ersã sãoo usad usadaa foi substituída pela CSng, que é apropriada a esse tipo: Private Sub cmdMultiplicar_Click() cmdMultiplicar_Click() Dim vValor1 As Single Dim vValor2 As Single vValor1 = CSng(txtNum1.Text) vValor2 = CSng(txtNum2.Text) lblResultado.Caption lblResultado.Caption = Format(vValor1 Format(vValor1 * vValor2, "###,##0.00") End Sub
9. Selecion ione tod todo o texto da procedure, menos o cabeçalho e End Sub, e copie para ara a área de tra transferência usando a opção Copy do menu Edit ou teclando Ctrl+C; 10. Abra a janela código no evento Click de outro botão e cole o trecho de programação usando a opção Paste do menu Edit ou então Ctrl+V; 11. Faça as alterações necessárias para que o botão botão funcione corretamente; corretamente; 12. Repita Repita esse procedimento procedimento para os outros outros operadores; operadores; 13. Grave seu seu trabalho trabalho e teste o aplicativo. aplicativo.
29
Microsoft Visual Basic 6
Lição 4: Estruturas de Controle Assi Assim m como como em outr outras as ling lingua uage gens ns,, como como C ou Pasca ascal, l, o VB tamb também ém poss possuui estr estruutura turass de toma tomadda de deci decisã sãoo e para para con control trolee de repet epetiç ição ão (loop loops) s).. Nes Nessa liçã liçãoo apre aprenndere deremo moss a lida lidarr com com essa essass estr estrut utuuras ras e tamb também ém mais mais alguns recursos da linguagem.
Estruturas de Decisão Estruturas de decisão são aquelas que permitem o desvio do fluxo do programa de acordo com uma condição. As estruturas de decisão do VB são similares às encontradas em outras linguagens:
Estrutura If...Then Executa um comando ou uma série de comandos de acordo com uma condição. Se a condição não for verd verdad adei eirra, os coma comand ndoos serão erão igno ignora rado doss e a exec execuç ução ão do pro program gramaa pass passaa para para o pró próximo ximo coma comand ndoo após após a estrutura. Essa estrutura pode ser escrita de duas maneiras: If Then
ou: If Then ... End If
O que que difer iferen enci ciaa as duas duas estr estrut utur uras as é o núme número ro de coma comand ndos os exec execut utad adoos se > for ver verdade dadeir ira. a. Na prim primei eirra some soment ntee um coma comand ndoo é exec execut utad ado, o, por por isso isso ess esse coma comand ndoo pode ode vir vir logo logo após após a pala palavr vraa rese reserrvada vada Then, e o comando End If não é necessário. Exemplo: If txtNome.Text = Empty Then MsgBox “Um nome deve ser digitado!”
Na segunda vários comandos devem ser executados se a condição for verdadeira, ent então cada comando deverá ser escrito em uma linha e o comando End If deve ser usado para fechar a estrutura. Veja dois exemplo: If txtNome.Text = Empty Then MsgBox “Um nome deve ser digitado!” End If If vSaldoMédio > 1000 Then lblStatus.Caption = “Cliente Especial” vTaxaJuros = 0.015 End If
Estrutura If...Then...Else Sem Semelh elhante ante ao If.. If...T .Thhen, en, poré porém m con contém tém um ou mais mais com comando andoss para para serem erem exec execut utad adoos no caso caso da cond condiç ição ão ser falsa, indicados pelo Else da sintaxe: If Then Else End If
A con condiçã diçãoo é tes testad tada, e, se for for verda erdade deir ira, a, o prim primei eiro ro conj conjun unto to de coma comand ndoos ser será exec execut utad adoo. Se for fals falsa, a, o segundo conjunto será executado. Exemplo: If vSaldoMédio > 1000 Then lblStatus.Caption = “Cliente Especial” vTaxaJuros = 0.015 Else lblStatus.Caption = “Cliente Comum” vTaxaJuros = 0.018 End If
30
Microsoft Visual Basic 6
Estrutura Select Case Quan Quando do houv houver er a nece necess ssid idad adee de se test testar ar um núme número ro maio maiorr de situ situaç açõe õess o VB nos nos ofer oferec ecee a estr estrut utur uraa Sele Select ct Case Case,, que que poss ossibil ibilit itaa a cons constr truç ução ão de códi código go mais mais efic eficie ient ntee e legí legívvel do que um enca encade deam amen ento to de If’ If’s. Sua sintaxe é a seguinte: Select Case Case Case ... Case [Case Else] [] End Select
Val Valor1, valor2, valorN são os valores que a express essão pode assumir: se a exp expressão assumir o valo alor1 os coma comand ndos os para para o valo valor1 r1 serão erão exec execuutado tadoss, se ass assum umir ir valo valorr2 os coma comanndos dos par para valo valorr2 serã serãoo exec execut utad adoos, e assi assim m por dian diante te.. Se o valo valorr assu assumi mido do não não for for nenhu enhum m dos dos valor alores es indi indica caddos, os, os coma comanndos dos após após o Case ase Else Else serão executados. É interessante destacar que Case Else é opcional. Exemplo: Select Case vCodigoCliente Case 1 lblStatus.Caption = vTaxaJuros = 0.012 Case 2 lblStatus.Caption = vTaxaJuros = 0.015 Case 3 lblStatus.Caption = vTaxaJuros = 0.018 Case Else lblStatus.Caption lblStatus.Caption = End Select
“Cliente Preferencial” “Cliente Especial” “Cliente Comum” “Código Inválido”
Estrutura If...ElseIf Essa é uma variação do comando If que possui uma sintaxe muito parecida com o Select Case: If Then ElseIf Then ElseIf Then ... ElseIf Then [Else] [] End If
Por exemplo: o comando que codificamos com Select Case, se escrito com If...ElseIf, ficaria assim: If vCodigoCliente = 1 Then lblStatus.Caption = “Cliente Preferencial” vTaxaJuros = 0.012 ElseIf vCodigoCliente = 2 Then lblStatus.Caption = “Cliente Especial” vTaxaJuros = 0.015 ElseIf vCodigoCliente = 3 Then lblStatus.Caption = “Cliente Comum” vTaxaJuros = 0.018 Else lblStatus.Caption = “Código Inválido” End Select
31
Microsoft Visual Basic 6
Comando With Ess Esse é um coma comand ndoo mu muit itoo útil útil quan quanddo temo temoss vári várias as ins instruç truçõões que que serão erão apli aplica cada dass a um mesm mesmoo obje objeto to.. Ele Ele info inform rmaa ao VB qual qual obje objeto to deve deve ser ser cons consid ider erad adoo semp sempre re que que em um coma comand ndoo qual qualqu quer er não não houv houver er nenh nenhum umaa indicação da aplicação de uma propriedade, método ou campo. Sua sintaxe é: With End With
É mais fácil entender vendo um exemplo prático: suponhamos que você precisa aplicar uma série de comandos a uma caixa de texto: txtTeste.Visible txtTeste.Visible = True txtOutra.Visible txtOutra.Visible = False txtTeste.FontName = “Arial” txtTeste.FontSize = 20 txtTeste.FontBold = True txtTeste.Text = “Isso é um teste.”
Com o comando With, você poderia escrever o mesmo trecho de programação da seguinte maneira: With txtTeste .Visible = True txtOutra.Visible txtOutra.Visible = False .FontName = “Arial” .FontSize = 20 .FontBold = True .Text = “Isso é um teste.” End With
Tod Todas as prop ropried riedad ades es onde onde não foi foi indi indica cada da a caix caixaa de text textoo txtT txtTes este te estã estãoo send sendoo apli aplica caddas à ela ela da mes mesma maneira, devido ao comando With. Not Note que a instrução aplicada à txtOutra não mudou, mesmo estando dentro do conjunto de comandos contidos entre o With e o End With. É impo import rtan ante te dest destac acar ar que que pode podem m exis existi tirr um bloc blocoo With With dent dentro ro de outr outro, o, send sendoo que que o mais mais inte intern rnoo terá terá efei efeito to sob sobre todo todoss os objet bjetos os a ele ele subo ubordin rdinad ados os enq enquant uantoo não não for enco enconntrad tradoo um End End With With fech echando ando-o -o.. Ante Antess e depois do bloco mais interno, quem tem efeito é o With mais externo.
Evento Load Load Load é o even evento to que que ocor ocorre re quan quando do um form formul ulár ário io é lido lido.. Usam Usamos os Load Load norm normal alme ment ntee para para a inic inicia iali liza zaçã çãoo de variáveis privadas ou então para escrever comandos e rotinas que devem ser executadas logo que o form formul ulár ário io é aber aberto to.. Ou melh melhor or:: no even evento to Load Load de um form formul ulár ário io usam usamos os coma comand ndos os e roti rotina nass cuja cuja exec execuç ução ão é necessária ao seu funcionamento e de seus controles de uma maneira geral.
O Aplicativo TesteCor Vamo Vamoss test testar ar o que que apre aprend ndem emos os em um novo novo apli aplica cati tivo vo.. Ele Ele func funcio iona nará rá assi assim: m: quan quando do um botã botãoo de coma comand ndoo for for clic clicad ado, o, a cor cor do text textoo de um labe labell mu muddará ará para para a pró próxima xima cor cor numa numa esca escala la prépré-de defi fini nidda, e o rótu rótulo lo dess dessee label deverá informar qual é a cor atual. Por exemplo: se a cor atual for “2 – Verde”, passará a ser “3 – Ciano”. Um outro botão fará o processo inverso, ou melhor: a cor passará a ser a anterior na escala. Mas qual é a melhor maneira de codificar esse processo todo? Vejamos: Algu Alguma mass core coress serã serãoo mo modi difi fica cada dass a cada cada vez vez que que um dos dos botõ botões es for for clic clicad ado. o. Entã Então, o, prec precis isam amos os guar guarda darr o cód código igo da cor cor atua atuall em um umaa vari variáv ável el que que poss possaa ser ser aces acesssada ada por vár várias ias proc proced edur ures es,, já que que cada cada even evento to é ligado a uma procedure. Resumindo: precisamos de variáveis privadas. Exis Existe te tamb também ém um umaa seqü seqüên ênci ciaa de coma comand ndos os repe repeti tida da para para algu alguns ns botõ botões es:: a mu muda danç nçaa de um umaa das das core coress do exibiç ição ão do nome nome dess dessaa cor. cor. Entã Entãoo, pode podemo moss cria criarr um umaa subr ubrotin otinaa que que con conten tenha ess essa seqüê eqüênncia cia label e a exib de comandos e possa ser chamada pela procedure Click de um dos botões, de modo a não haver necessidade de repetição de código.
32
Microsoft Visual Basic 6
Funções QBColor e RGB Ess Essas fun funções ções gera geram m core coress de aco acordo rdo com com valo alores res que que repr repres esen enta tam m códi código goss asso associ ciad ados os a elas elas.. A difer iferen ença ça entre ambas é que QBColor só aceita os valores de 0 a 15, cada um representando uma cor diferente, enquant anto RGB permite a composição de uma cor pela mistura das cor cores básicas Ver Vermelho (Red), Verde (Green) e Azul (Blue), daí seu nome. A quantidade de vermelho, verde e azul que deve ser usada na composição da cor é representada por valores inteiros que variam de 0 a 255. Veja as sintaxes: QBColor() RGB(,,)
Os códigos aceitos por QBColor são os seguintes: Código
Cor
Código
0 Preto 4 1 Azul 5 2 Verde 6 3 Ciano 7 Na tabela abaixo estão tão os valores de com a função RGB: Cor Desejada
Cor
Vermelho Magenta Amarelo Branco vermelho, verd erde
Vermelho
Preto Azul Verde Azul Claro Vermelho Magenta Amarelo Branco
Código
0 0 0 0 255 255 255 255
Cor
Código
Cor
8 Cinza 12 Vermelho Claro 9 Azul Claro 13 Magenta Claro 10 Verde Claro 14 Amarelo Claro 11 Ciano Claro 15 Branco Brilhante e azul zul necess essários para se conseguir algumas cor cores Verde
0 0 255 255 0 0 255 255
Azul
0 255 0 255 0 255 0 255
Como você com certeza já percebeu, em nosso caso a função QBColor é a que melhor se encaixa. Mas vamos começar a trabalhar: crie o formulário de acordo com o exemplo:
Altere as propriedades dos objetos: Objeto
Nome
Formulário
FrmTeste
Label Label
Label1 Label2
Outras Propriedades = Valor
Caption = Teste das Cores StartUpPosition = 2 – Center Screen Caption = Cor do Texto: Caption = Cor do Fundo:
33
Microsoft Visual Basic 6
Label
Objeto
Label Label Botã Botãoo de Coma Comand ndoo Botã Botãoo de Coma Comand ndoo Botã Botãoo de de Co Comand mandoo Botã Botãoo de de Com Coman ando do
Nome
Outras Propriedades = Valor
LblTeste
Caption = Teste das Cores Alignment = 2 – Center BackColor = Branco BorderStyle = 1 – Fixed Single Font = Arial, Negrito, tamanho 20 LblTexto Caption = 0 – Preto BorderStyle = 1 – Fixed Single Font = Negrito LblFundo Caption = 15 – Branco Brilhante BorderStyle = 1 – Fixed Single Font = Negrito cmdT cmdTex exto toAn Antt Cap Captio tion = Ante Anteri rioor cmdT cmdTex exto toPr Prox ox Capt Captio ionn = Próx Próxim imaa cmdF cmdFun undo doAn Antt Cap Captio tion = Ante Anteri rioor cmdF cmdFun undo doPr Prox ox Capt Captio ionn = Próx Próxim imaa
Sendo assim, vamos criar nossa codificação: 1. Abra a janela janela Código Código na seção seção Declaration Declarations. s. Vamos declarar declarar as variáveis variáveis privadas: privadas: Dim vCorTexto As Integer Dim vCorFundo As Integer
2. Dê agora um duplo click sobre uma área do formulário que não contenha nenhum controle. A janela Códi Código go é aber aberta ta no even evento to Load Load do obje objeto to Form Form,, aond aondee vamo vamoss inic inicia iali liza zarr as vari variáv ávei eiss que que decl declar aram amos os no item anterior: Private Sub Form_Load() vCorTexto = 0 vCorFundo = 15 End Sub
3. Acesse Acesse a procedure procedure Click do botão botão cmdTextoA cmdTextoAnt nt e escreva escreva os os comandos comandos abaixo abaixo:: Private Sub cmdTextoAnt_Click() cmdTextoAnt_Click() vCorTexto = vCorTexto - 1 If vCorTexto < 0 Then vCorTexto = 15 MudaCorTexto End Sub
Note como o comando If...Then foi usado: já que só existe um comando após Then, End If não foi necessário. No entanto, poderíamos escrever essa estrutura da seguinte maneira, com o mesmo resultado: If vCorTexto < 0 Then vCorTexto = 15 End If
Voc Você deve ter percebido também que temos algo novo nessa procedure: o com comando MudaCo aCorTexto. Na verdade, isso é a chamada a uma subrotina, aquela que citamos quando estávamos planejando nosso apli aplica cati tivo vo.. Pode Podemo moss cria criarr um umaa subr subrot otin inaa atra atravé véss da opçã opçãoo Add Procedure do menu Tools: o VB abre uma caix aixa de diál iálogo onde devemos informar, entre outras coisas, as, o nome da subrotina que será erá criada ada (veja a figura na próxima página), mas existe uma maneira mais simples:
Criando uma Subrotina A cria criaçã çãoo de subr subrot otin inas as pode pode ser ser feit feitaa dire direta tame ment ntee na jane janela la Códi Código go,, bast bastan ando do para para isso isso faze fazerr a decl declar araç ação ão da proc proced edur uree (ou (ou func funcão ão – vere veremo moss mais mais adian adiante) te).. Subr Subrot otin inas as pode podem m ser ser decl declar arad adas as como como priv privad adas as ou públ pública icas. s. Usamos a palavra reservada Sub para inicar uma procedure, e o comando “End Sub” para fechá-la. 1. Com a janela Código aberta, escolha a opção General na caix caixaa de comb combin inaç ação ão Object . Proc deve deve esta estarr na seção Declarations; 2. Declare Declare a procedu procedure re MudaCor MudaCorTexto Texto escrevendo escrevendo o cabeçalho cabeçalho a seguir: seguir: Public Sub MudaCorTexto()
34
Microsoft Visual Basic 6
A janela Add Procedure
3. Note Note que, que, quan quando do term termin inar ar a decl declar araç ação ão,, o pró próprio prio VB inse insere re o coma comand ndoo End End Sub fech echando ando a proce rocedu dure re,, que deve estar parecida com a da figura abaixo:
4. Vamos Vamos então então escre escrever ver os os comand comandos os da subr subroti otina: na: Private Sub MudaCorTexto() MudaCorTexto() lblTeste.ForeColor lblTeste.ForeColor = QBColor(vCorTexto) QBColor(vCorTexto) With lblTexto Select Case vCorTexto Case 0 .Caption = "0 - Preto" Case 1 .Caption = "1 - Azul" Case 2 .Caption = "2 - Verde" Case 3 .Caption = "3 - Ciano" Case 4 .Caption = "4 - Vermelho" Case 5 .Caption = "5 - Magenta" Case 6 .Caption = "6 - Amarelo" Case 7 .Caption = "7 - Branco" Case 8 .Caption = "8 - Cinza" Case 9 .Caption = "9 - Azul Claro" Case 10 .Caption = "10 - Verde Claro" Case 11 .Caption = "11 - Ciano Claro" Case 12 .Caption = "12 - Vermelho Claro" Case 13 .Caption = "13 - Magenta Claro" Case 14 .Caption = "14 - Amarelo Claro" Case Else .Caption = "15 - Branco Brilhante"
35
Microsoft Visual Basic 6
End Select End With End Sub
5. Execute Execute o aplicativo, aplicativo, teste teste o funcionamen funcionamento to do botão e verifiqu verifiquee se está de acordo acordo com o planejado. planejado. 6. Escreva a procedure cmdTextoProx_Click: note que ela é quase igual à do botão tão cmdTextoAnt, só que muda para a próxima cor na escala: Private Sub cmdTextoProx_Click() cmdTextoProx_Click() vCorTexto = vCorTexto + 1 If vCorTexto > 15 Then vCorTexto = 0 'Chamada da subrotina: MudaCorTexto End Sub
7. Escreva agora as procedures para os eventos click dos botões cmdFundoAnt e cmdFundoProx, e a subr ubrotin otinaa a ser ser cham chamad adaa por por elas elas,, que que dev deve ter ter o nom nome de Muda MudaCo CorrFund Fundoo. A pro proprie prieda dade de a ser alte alterrada ada para exibir a nova cor é a BackColor; 8. Teste o funciona funcionamento mento de todos todos os botões botões e verifique verifique se está está de acordo com com nosso planeja planejamento. mento. 9. Salv Salvee o form formul ulár ário io com com o nom nomee de frmTeste e o projeto com o nome de TesteCor.
Estruturas de Repetição As Estr Estrut utur uras as de Repe Repeti tiçã çãoo permi ermite tem m que que um umaa ou mais mais linh linhas as de códi código go sejam ejam exec execuutad tadas um dete determ rmin inad adoo número de vezes ou até que uma condição seja verdadeira. Resumindo: criam loops.
Estruturas Do While A estru trutura Do While (faça enquanto) permite que um determ erminado bloco de comandos seja execu ecutad tado enquanto uma condição for verdadeira. Existem dois tipos de estruturas Do While: como você você sabe sabe,, ess esse tip tipo de loo loop test testaa sua sua cond condiç ição ão de tér término mino antes da execuç execução ão Loop com teste a priori: como dos comandos que estão nele contidos, o que implica na possibilidade desses comandos não serem exec execut utad ados os,, caso caso a con condiçã diçãoo de térm términ inoo seja seja satis atisfe feit itaa logo logo de iníc início io.. A sinta intaxe xe para ara a cria criaçã çãoo de loo loops com com teste a priori em VB usando Do While é a seguinte: Do While Loop
Loop com teste a posteriori: já esse tipo de loop testa sua condição de término após a execução dos coma comand ndos os nele ele con contid tidos, os, ou seja, eja, os coma comanndos dos serã serãoo exec execuutad tados ao menos enos um umaa vez, vez, mesm mesmoo que que a con condiçã diçãoo de término seja satisfeita logo de início. A sintaxe de Do While com teste a posteriori é a seguinte: Do Loop While
Veja exemplos da estrutura Do While usando os dois tipos de loop para a mesma operação: Do While vTotal < 500 vTotal = vTotal + Quantidade L oo p
Do v T o ta l = v T o ta l + Q u an ti d a de L o o p Wh i l e v To ta l < 50 0
Estruturas Do Until Do Until quer dizer “faça até que”. Essa estrutura difere da anterior por executar os comandos do loop enquanto a condição for falsa. Também existem duas sintaxes para Do Until:
Loop com teste a priori :
Do Until Loop
Loops com teste a posteriori :
Do Loop Until
36
Microsoft Visual Basic 6
Para que a difere erença entre as duas estrutur turas fique mais cla clara, vamos alterar os exemplos usados em Do Whil Whilee para para estr estrut utur uras as Do Unti Until. l. Note Note que que foi foi nece necess ssár ária ia um umaa mu muda danç nçaa na form formul ulaç ação ão da cond condiç ição ão de térm términ inoo do loop para obtermos o mesmo efeito: Do Until vTotal >= 500 vTotal = vTotal + Quantidade L oo p
Do v T o ta l = v T o ta l + Q u an ti d a de Loop Until vTotal >= 500
Estrutura For Next Ess Essa estr estruutura tura deve deve ser usad usadaa quand uandoo se conh conhec ecee de ante antemã mãoo o núm úmer eroo de veze vezess que que o loop loop será será exec execut utad ado. o. Sua sintaxe é a seguinte: For = To [Step ] Next
Onde:
Contador é uma variável que será usada para controlar o número de vezes que o loop será executado; Valor Inicial é o primeiro valor que a variável de controle assumirá; Valor Final é o último valor que o contador assumirá na execução do loop; valorr que que será será soma somado do ou subt subtra raíd ídoo (poi (poiss pode podemo moss usar usar valo valore ress nega negati tivo vos) s) do Valor do Incremento é o valo contador a cada vez que Next for executado. Ao entrar em um loop For Next o VB faz com que o contador seja igual ao valor de início. A cada vez que os comandos são executados e a estrutura atinge o Next, o contador é incrementado pelo valor indicado em Step (que é opcional – se não for declarado será assumido o valor 1) e comparado com o valor final indicado. Se o caso con contrár trário io a seqü seqüên ênci ciaa de coma comand ndos os ser será contador ultrapassar o valor final, o loop será terminado , caso executada novamente. Exemplo: a estrutura abaixo calcula a soma dos números de 1 a 100: vSoma = 0 For i = 1 To 100 vSoma = vSoma + i Next i
Com uma pequena mudança na estrutura, somaremos apenas os números ímpares entre 1 e 100: vSoma = 0 For i = 1 To 100 Step 2 vSoma = vSoma + i Next i
Comando Exit O coma comand ndoo Exit Exit perm permit itee que que um loop loop ou um umaa subr subrot otin inaa seja sejam m aban abando dona nado doss (ter (termi mine nem m ante antess do fina finall norm normal al de sua execuç cução) ão). A sintax taxe do comando Exit exi exige que indiquemos que est estrutura queremos aband andonar, assim:
Para abandonar um loop Do................................ Do ................................:: Exit Para abandonar um loop For............................... For ...............................:: Exit Para abandonar uma subrotina Sub................... Sub...................:: Exit Para abandonar uma subrotina Function.......... Function ..........:: Exit
Do For Sub Function
And, Or, Xor e Not Os operadores lógicos And, Or, Xor e Not (E, Ou, Ou exclusivo e Não) são normalmente usados em estr estrut utur uras as de cont contro role le para para esta estabe bele lece cerr um umaa rela relaçã çãoo entr entree duas duas ou mais mais cond condiç içõe õess em um umaa mesm mesmaa expr expres essã são. o. Como já vimos na lição 2, a função desses operadores é a seguinte: ando verdadeiro somente se todas as condiçõ ições da And faz uma combinação das condições, retornand expressão forem verdadeiras. Or funciona de maneira contrária: a expressão só será falsa se todas as condições forem falsas.
37
Microsoft Visual Basic 6
Xor é semelhante a Or, mas retorna falso se todas as condições forem verdadeiras. Not inverte a condição de verdadeiro para falso e vice-versa. Veja a tabela de resultados: Operador
Condição 1
Verdadeiro Verdadeiro Falso Falso Verdadeiro Verdadeiro Falso Falso Verdadeiro Verdadeiro Falso Falso
And
Or
Xor Not
Condição 2
Verdadeiro Falso
Verdadeiro Falso Verdadeiro Falso Verdadeiro Falso Verdadeiro Falso Verdadeiro Falso Verdadeiro Falso
Resultado
Verdadeiro Falso Falso Falso Verdadeiro Verdadeiro Verdadeiro Falso Falso Verdadeiro Verdadeiro Falso Falso Verdadeiro
O Aplicativo Fatorial Para Para test testar ar o uso uso das das estr estrut utur uras as de repe repeti tiçã ção, o, vamo vamoss escr escrev ever er um pequ pequen enoo apli aplica cati tivo vo para para calc calcul ular ar o fato fatori rial al de um número inteiro (n!), que é o resultado da multiplicação dos números inteiros de 1 até n. Exemplo: 5! = 1 2 3 4 5 = 120 Veja Veja o model odeloo e a tabe tabela la de pro proprie prieda daddes no iníc início io da pró próxima xima pági página na.. A cod codific ificaç ação ão do apli aplica cati tivo vo env envolve olve apen apenas as um even evento to:: quan quando do o usuá usuári rioo clic clicar ar em cmdC cmdCal alcu cula larr ou tecl teclar ar Ente Enterr o fato fatori rial al do núme número ro digi digita tado do em txtNúmero será calculado e exibido em lblFatorial. 1. Inicie um novo projeto; 2. Formate Formate o formulár formulário io e altere altere as propri propriedades edades dos objetos objetos como a seguir: seguir:
Objeto
Nome
Formulário
frmFatorial
Label Label Caixa de Texto Label
Label1 Label2 txtNúmero lblFatorial
Botão de Comando cmdCalcular
Outras Propriedades = Valor
Caption = Fatorial StartUpPosition = 2 – Center Screen Caption = Digite um número: Caption = O fatorial desse número é: Text = “” Caption = “” Alignment = 2 – Center BackColor = Branco BorderStyle = 1 – Fixed Single Caption = Calcular Default = True
Microsoft Visual Basic 6
38
3. Abra a janela janela Código Código no evento evento Click Click do botão botão Calcular Calcular e escreva escreva os os comandos comandos para para o cálculo: cálculo: Private Sub cmdCalcular_Click() cmdCalcular_Click() Dim vNúmero As Double, vFatorial As Double vNúmero = Val(txtNúmero.Text) Val(txtNúmero.Text) If vNúmero < 0 Then Beep lblFatorial.Caption = Empty Else If vNúmero = 0 Or vNúmero = 1 Then lblFatorial.Caption = 1 Else vFatorial = 1 Do vFatorial = vFatorial * vNúmero vNúmero = vNúmero - 1 Loop Until vNúmero <= 1 lblFatorial.Caption = Str(vFatorial) End If End If txtNúmero.SetFocus End Sub
Observações: Por definição, 0! = 1; O comando Beep faz com que o computador emita um sinal sonoro (um “apito”). Note o uso do operador Or no segundo If: poderíamos escrever a condição vNúmero <= 1 ao invés da expressão usada, já que nesse ponto temos a certeza que vNúmero não é nega egativ tivo (veja o If ant anteri erior), mas fizemos isso para exemplificar o uso de Or; Com omoo exer exercí cíci cioo de fixaç ixação ão,, rees reescr crev evaa o loop loop do cálc cálcuulo do fato fatorrial ial usand sandoo as estr estruutura turass Do Whil Whilee e For Next. Tente também modificar as estruturas de teste a posteriori para teste a priori. 4. Grav Gravee o form formul ulár ário io com com o nome nome de de frmFator e o projeto com o nome de Fatorial.
39
Microsoft Visual Basic 6
Lição 5: Tratamento de Erros de Execução Eis um assunto importantíssimo: tratamento de erros irrecuperáveis de execução. Quando um erro irre irrecu cupperáv erável el acon aconte tece ce,, o VB emit emitee um umaa mensa ensage gem m inf informa ormanndo o erro erro e ence encerrra a exec execuç ução ão do apli aplica cati tivvo. Esse Essess erro erross acon aconte tece cem m sob sob vári várias as cond condiç içõe ões: s: um arqu arquiv ivoo não não enco encont ntra rado do,, inco incomp mpat atib ibil ilid idad adee entr entree tipo tiposs de variáveis, uma chamada de função inválida, falta de memória, etc. É fácil conferirmos essa característica: execute a calculadora que fizemos na lição 2 e, ao invés de um número ero, digite uma letra qualquer nas caixa ixa de textos. Quando você executar um cálculo, uma caixa de mens mensag agem em com com os dize dizere ress “Run “Run-t -tim imee Erro Error” r” apar aparec ecer eráá info inform rman ando do o tipo tipo do erro erro que que ocor ocorre reu, u, e o apli aplica cati tivo vo será encerrado. Nessa lição aprenderemos a trabalhar com esses erros de modo que, mesmo que um deles aconteça, o apli aplica cati tivo vo não não seja seja ence encerr rrad ado. o. Adic Adicio iona nalm lmen ente te,, apre aprend nder erem emos os a usar usar as caix caixas as de mens mensag agem em e de entr entrad adaa da dados do VB.
Comando On Error Esse comand ando é a chave para o tratamento de erros no VB: sua função ção é a de desviar o fluxo da execução de uma procedure para um parágrafo em caso de erro irrecuperável. Sua sintaxe é a seguinte: On Error GoTo
O pará parágr graf afoo para para o qual qual o flux fluxoo será será desv desvia iado do deve deve obri obriga gato tori riam amen ente te faze fazerr part partee da mesm mesmaa proc proced edur ure, e, e deve deve estar posicionado no final da mesma, antes do comando End Sub. O nome do parágrafo é identificado por ser terminado com dois pontos – “:”.
Comando Resume O comando Resume indica ao VB que o aplic licativo deve continuar a ser exe executado mesmo em cas caso de erro irrecuperável. Veja a sintaxe: Resume
Sendo que o da execução não é obrigatório. Se não for informado, a execução passa para a próxima instrução na seqüência normal do programa. As opções para são:
Next: produz um desvio para a próxima instrução na seqüência normal da execução do aplicativo; 0: faz com que o execução retorne ao início da procedure atual (parâmetro recursivo); Nome_De_Parágrafo: desvia a execução para um parágrafo da procedure atual.
Objeto Err O obje objeto to Err Err indi indica ca o códi código go do erro erro irre irrecu cupe perá ráve vell ocor ocorri rido do,, atra atravé véss da prop propri ried edad adee Number , de tipo tipo Inte Intege ger. r. Pelo Pelo códi código go info inform rmad adoo por por Err. Err.Nu Numb mber er pode podemo moss iden identi tifi fica carr o erro erro e escr escrev ever er os coma comand ndos os nece necess ssár ário ioss para para que que o apli aplica cati tivvo cont contin inue ue func funcio iona nand ndo. o. Outr Outraa pro proprie prieda dadde inte intere resssant santee do obje objeto to Err Err é a Description, que contém a descrição do erro ocorrido. Para obter a lista completa com os códigos dos erros tratáveis do VB, acesse o menu Help e escolha a seqüência Contents – Trappable Errors – Miscellaneous Messages . Vejamos então um exemplo da utilização desses recursos: Public Sub Exemplo_Erro() Dim vQualquer As Integer On Error GoTo Erro_Na_Conversão vQualquer = CInt(txtNúmero.Text) Erro_Na_Conversão: If Err.Number = 13 Then '13 é o código de erro para Tipo Incompatível de Dados: vQualquer = 0 Resume Next End If End Sub
40
Microsoft Visual Basic 6
Com Como já cita citamo moss ante anteri rioormen rmente te,, a funçã unçãoo CInt Int gera era um erro erro irr irrecup ecuper eráv ável el em cas caso de tipo tipo inco incomp mpat atív ível el de dado dadoss (Type Mismatch) na ten tentati tativa va de conv conver erssão de um umaa strin tringg que que não não repre epressente ente um valo valorr. Na proce rocedu dure re Exemplo_Erro estamos dizendo para o VB que, se isso acontecer, a execução deve ser desviada para o pará parágr graf afoo Erro Erro_N _Na_ a_Co Conv nver ersã são, o, onde onde test testam amos os o valo valorr de Err. Err.Nu Numb mber er e escr escrev evem emos os a codi codifi fica caçã çãoo nece necess ssár ária ia para para que que o prog progrrama ama cont contin inuue nor normalm malmen ente te.. O coma comand ndoo Resu Resume me Nex Next indi indica ca entã entãoo ao VB que que a exec execuç ução ão deve ser desviada para a próxima instrução na seqüência normal da programação.
Caixas de Mensagem Até Até agor agoraa fala falamo moss sobr sobree o trat tratam amen ento to de erro erross mas mas não não info inform rmam amos os ao usuá usuári rioo o que que exat exatam amen ente te acon aconte tece ceu, u, o que é muito ito importante em qualquer apl aplicat cativo que se preze. ze. Uma Uma das formas que o VB nos ofere erece para fornecer mensagens ao usuário são as caixas de mensagens padronizadas. Por exe exemplo: supondo que o cam campo Nome Nome de um apli aplica cati tivo vo qualq ualque uerr não pos possa ser ser deix eixado ado em bran branco co pelo pelo oper operad ador or,, se isso isso aco acontec ntecer er,, poderíamos exibir na tela uma caixa de mensagem como a da figura:
Caixas de mensagem padronizadas como essa podem ser obtidas com o comando MsgBox e a função MsgBox. Veja a sintaxe de ambos: MsgBox ,, = MsgBox(,,)
Onde:
Mensagem: é uma string com a mensagem a ser exibida pela caixa. Esse é o único parâmetro obrigatório da sintaxe. No nosso exemplo: “O campo Nome deve ser preenchido!”; Tipo: é um valor obtido a partir da soma dos códigos que especificam o número e o tipo dos botões exibidos pela caixa, o ícone a ser utilizado, o botão default e a modalidade de exibição da caixa. No noss osso exem exempl ploo ess esse valo valorr é 4144 4144.. Esse Esse valo alor tam também bém pod pode ser ser obtid btidoo a parti artirr de algu alguma mass cons consta tanntes tes de sistema. Veja a seguir uma lista com os valores admitidos e seu significado; Título: é uma string a ser exibida como título da caixa. No nosso exemplo: “Aviso”; (soment mentee para para a funçã unção) o):: nom omee da variá ariáve vell que que receb eceber eráá o núm úmer eroo do botão otão selec elecio iona naddo pelo pelo Variável (so usuário. Veja a seguir as constantes de sistema usadas para se obter o tipo da caixa com seus respectivos valores: Constante
vbOKOnly vbOKCancel vbAbortRetryIgnore vbYesNoCancel vbYesNo vbRetryCancel vbCritical
Valor
Descrição
0 1 2 3 4 5 16
Exibe somente o botão OK. Exibe os botões OK e Cancelar. Exibe os botões Abortar, Repetir e Ignorar. Exibe os botões Sim, Não e Cancelar. Exibe os botões Sim e Não. Exibe os botões Repetir e Cancelar. Exibe o ícone Mensagem Crítica :
vbQuestion
32
Exibe o ícone Consulta de Aviso:
vbExclamation
48
Exibe o ícone Mensagem de Aviso:
vbInformation
64
Exibe o ícone Mensagem de Informação:
vbDefaultButton1 vbDefaultButton2 vbDefaultButton3
0 256 512
O primeiro botão é o default. O segundo botão é o default. O terceiro botão é o default.
41
Microsoft Visual Basic 6
Constante
vbDefaultButton4 vbApplicationModal
Valor
Descrição
768 0
O quarto botão é o default. Janela restrita do aplicativo: o usuário deve responder à caixa de mensagem antes de continuar o trabalho no aplicativo atual. vbSystemModal 4096 Janela restrita do sistema: todos os aplicativos são suspensos até que o usuário responda à caixa de mensagem. No noss osso exem exempl ploo, o valo alor é 4144 4144 pois pois usam usamoos apen apenas as o botã botãoo Ok (0), (0), o íco ícone Excla xclama maçã çãoo (48) 48), o botão otão Ok é o default por ser o único (0), e a modalidade é sistema (4096). Então, 0 + 48 + 0 + 4096 = 4144. O comando completo para se obter a caixa de mensagem do exemplo é a seguinte: MsgBox “O campo Nome deve ser preenchido!”, 4144, “Aviso”
Podemos também usar as constantes correspondentes à configuração c onfiguração desejada: MsgBox “O campo Nome deve ser preenchido!”, _ vbOk + vbExclamation + vbDefaultButton1 + vbSystemModal, “Aviso”
Ou então apenas aquelas que terão algum efeito na configuração (são diferentes de zero): MsgBox “O campo Nome deve ser preenchido!”, _ vbExclamation + vbSystemModal, “Aviso”
Ou ainda uma variável: vConf = vbExclamation + vbSystemModal MsgBox “Nome deve ser preenchido!”, vConf, “Aviso”
Obs.: o símbolo “_” (subscrito) indica continuação da codificação na próxima linha.
Identificando o botão selecionado A diferença entre o comando MsgBox e a função MsgBox é que a função retorna um número inteiro repr repres esen enta tand ndoo o botã botãoo selec elecio ionnado ado pelo pelo usuár suário io na caix caixaa de mensa ensage gem. m. Assi Assim, m, pode podemo moss iden identi tifi fica carr ess esse botão e executar a ação correspondente a ele. Veja os valores retornados por MsgBox: Constante
Valor
Descrição
vbOK 1 Selecionado o botão Ok. vbCancel 2 Selecionado o botão Cancelar. vbAbort 3 Selecionado o botão Abortar. vbRetry 4 Selecionado o botão Repetir. vbIgnore 5 Selecionado o botão Ignorar. vbYes 6 Selecionado o botão Sim. vbNo 7 Selecionado o botão Não. Por Por exem exempl plo: o: supo suponh nhaa um apli aplica cati tivo vo qual qualqu quer er que que poss possua ua um botã botãoo de coma comand ndoo para para ence encerr rrar ar sua sua exec execuç ução ão,, mas que antes disso solicite ao usuário uma confirmação. A programação para isso poderia ser a seguinte: Private Sub cmdFechar_Click() cmdFechar_Click() Dim vOk As Integer vOk = MsgBox("Tem certeza que deseja encerrar o programa?", 36, "Saída") If vOk = 6 Then End End If End Sub
Ou então, se usarmos as constantes de sistema: Private Sub cmdFechar_Click() cmdFechar_Click() Dim vOk As Integer vOk = MsgBox("Tem certeza que deseja encerrar o programa?", _ vbYesNo + vbQuestion, "Saída") If vOk = vbYes Then End End If End Sub
Em qualquer dos casos, a caixa de mensagem resultante da função MsgBox acima é a seguinte:
42
Microsoft Visual Basic 6
Mas qual é a vantagem de se usar constantes de sistema se a codificação fica maior? A resposta é: documentação! Leia novamente os dois trechos de programação e seja honesto: qual deles ficou mais fácil de entender?
Caixas de Entrada de Dados Além das caixas de mensagem o VB dispõe de outro tipo de caixa de diálogo padronizada: as caixas de entrada de dados, que são obtidas com a função InputBox. A sintaxe dessa função é a seguinte: = InputBox(,,)
Onde:
Mensagem: único parâmetro obrigatório, é um texto a ser exibida dentro da caixa como legenda; Título: é uma string a ser exibida como título da caixa; Valor padrão: é o valor que a variável deve receber de InputBox caso o usuário não digite nada. Impo Import rtan ante te:: a funç função ão Inpu InputB tBox ox semp sempre re reto retorn rnaa um dado dado tipo tipo stri string ng,, port portan anto to se você você prec precis isar ar de um dado dado de qualquer outro tipo deverá convertê-lo. Por Por exem exempplo: lo: sup suponh onha um botã botãoo de coma comanndo que que perm permit itaa a digi digita taçã çãoo de um desc descoonto nto par para a emis emissã sãoo de uma nota fiscal de compra. A programação desse botão poderia ser a seguinte: Private Sub cmdDesconto_Click() cmdDesconto_Click() Dim vDesconto As String vDesconto = InputBox("Digite o valor do desconto:", _ "Digitação de desconto") End Sub
A InputBox resultante dessa programação é a da figura abaixo:
O Aplicativo Carro Para Para usar usar os conc concei eito toss vist vistos os ness nessaa liçã lição, o, vamo vamoss cria criarr um apli aplica cati tivo vo que que calc calcul ulee o valo valorr da pres presta taçã çãoo mens mensal al para para fina financ ncia iame ment ntoo de auto automó móvvel. el. Ante Antess de com começar eçar,, vamo vamoss estu estuda darr um novo novo cont contro role le que que será será usad usadoo em nosso projeto:
Caixa de Imagem ( ImageBox) Esse controle é muito semelhante a uma PictureBox, pois também exibe figuras ou ícones nos for formu mulá lári rios os.. A prin princi cipa pall difer iferen ença ça é que respo espond ndee ao even evento to Clic Click, k, func funcio iona nand ndoo como como um botão otão de coma comand ndoo quan quando do clic clicad ado. o. Outr Outraa dife difere renç nçaa impo import rtan ante te é a prop propri ried edad adee Stretch, que pode aceitar os valores Tru True e False alse:: quand uandoo Stretch = True, o tamanho da image agem será ajustado ao tam tamanh anho da caixa de imagem, perm permit itin inddo a exib exibiç ição ão de figur iguras as que que dev devido ido ao seu tama tamanh nhoo não cabe caberriam iam em um form ormulár ulário io.. Se Stretch = False, então o tamanho da ImageBox é que será ajustado ao da figura. Bem, vamos começar: inicie um novo projeto e formate o formulário de acordo com o modelo:
43
Microsoft Visual Basic 6
As propriedades dos objetos são as seguintes: Objeto
Formulário
Nome
frmCarro
Outras Propriedades = Valor
Caption = Financiamento de Automóvel StartUpPosition = 2 – Center Screen Caixa de Imagem imgCarro Stretch = True BorderStyle = 1 – Fixed Single Picture = CARRO.WMF (Procure na pasta ClipArt\Popular do diretório do MS-Office) Label Label1 Caption = Valor do Financiamento (R$): Label Label2 Caption = Entrada (R$): Label Label3 Caption = Juros / mês (%): Label Label4 Caption = Nº de meses: Label Label5 Caption = Valor Financiado (R$): Label Label6 Caption = Prestação Mensal (R$): Label lblValFinanciado Caption = “” Alignment = 2 – Center BackColor = Branco BorderStyle = 1 – Fixed Single Label lblPrestMensal Caption = “” Alignment = 2 – Center BackColor = Branco BorderStyle = 1 – Fixed Single Caixa de Texto txtValor Text = “” Caixa de Texto txtEntrada Text = “” Caixa de Texto txtJuros Text = “” Caixa de Texto txtMeses Text = “” Botão de de Co Comando cmdCalcular Caption = &Calcular Enabled = False Botão de Comando cmdFechar Caption = &Fechar Enabled = False TabStop = False Inic Inicia ialm lmen ente te o botã botãoo Calcu alcula larr esta estarrá desab esabil ilit itad adoo pois pois só apó após a digi digita taçã çãoo de todo todoss os dad dados nece necess ssár ário ioss o cálculo da prestação mensal poderá ser feito. A fórmula para esse cálculo é a seguinte:
Prestação Mensal = Valor Financiado * Juros * (1 + Juros)Meses (1 + Juros)Meses - 1
Microsoft Visual Basic 6
44
Antes de começar a programar, vamos conhecer um evento que será necessário para nossa codificação:
Evento KeyPress Semp Sempre re que que é pres pressi sion onad adaa um umaa tecl tecla, a, esta estand ndoo o foco foco sobr sobree um cont contro role le,, ocor ocorre re o even evento to KeyP KeyPre ress ss.. Asso Associ ciad adaa a ele está a vari ariável Key KeyAsc Ascii, ii, que é carregada ada com com o código ASCII da tecla pressionada. Des Dessa maneira podemos identificar quando o usuário usa uma tecla qualquer, e, se for o caso, escrever um código a ser executado quando essa tec tecla for utiliz lizada. Por exemp emplo: podemos faze azer com que o foco passe para outro cont contro role le quan quanddo a tecl teclaa Ente Enterr for press ressio iona nada da num umaa caix caixaa de text textoo. Saben abendo do-s -see que o códi código go ASCI ASCIII da tecl teclaa Enter é 13, correspondente à constante vbKeyReturn, o código para isso poderia ser o seguinte: Private Sub Text1_KeyPress(KeyAscii As Integer) If KeyAscii = vbKeyReturn Then Text2.SetFocus End Sub
Propriedade KeyPreview Essa propried iedade dos formulários indica ica se, quando pression ionada uma tecla qualqu lquer, ela deve ser ou não iden identi tifi fica cada da pelo pelo form formul ulár ário io.. Os valo valore ress poss possív ívei eiss são são True True (hab (habil ilit itaa a veri verifi fica caçã çãoo das das tecl teclas as pelo pelo form formul ulár ário io)) e False (desabilita). Usando esse recurso e a função SendKeys, podemos fazer o Enter funcionar em qualquer campo, através do evento KeyPress do formulário (as linhas precedidas pelo apóstrofo – ‘ – são comentários): Private Sub Form_KeyPress(KeyAscii Form_KeyPress(KeyAscii As Integer) If KeyAscii = vbKeyReturn Then 'Identifica o Enter SendKeys "{Tab}" 'Grava no buffer do teclado um Tab KeyAscii = 0 'Zera KeyAscii para eliminar o Enter End If End Sub
Na proc proced edur uree acim acima, a, a cada cada vez vez que que o usuá usuári rioo tecl teclar ar Ente Enterr em um cont contro role le para para o qual qual não não surt surtaa efei efeito to,, ele ele será substituído por uma tabulação, e o foco passará para o próximo controle na seqüência de TabIndex. Mas vamos codificar o aplicativo: 1. Abr Abra a jan janela ela Códi Código go e aces acessse a seçã seçãoo Decl Declar arat atio ionns. Vam Vamos decl declar arar ar as vari variáv ávei eiss que que receb eceber erão ão os dado dadoss digitados como privadas, pois elas serão acessadas por várias procedures: Dim Dim Dim Dim
vValor As Currency vEntrada As Currency vJuros As Single vMeses As Integer
2. Vá agora agora ao evento Form_Load. Form_Load. Vamos inicializar inicializar as variávei variáveis: s: Private Sub Form_Load() vValor = 0 vEntrada = 0 vJuros = 0 vMeses = 0 End Sub
3. Em tempo de execução, faremos com que o foco passe de uma caixa de texto para outra quando tecl teclar armo moss Ente Enterr. Para ara isso isso vamo vamoss alte altera rarr o even evento to Key KeyPres Presss do for formu mulá lári rio. o. Dê um dup duplo cliq clique ue sobr obre uma parte vazia do formulário e procure o evento KeyPress na lista de procedures; 4. Escrev Escrevaa a proced procedure ure como como segue: segue: Private Sub Form_KeyPress(KeyAscii Form_KeyPress(KeyAscii As Integer) If KeyAscii = vbKeyReturn Then SendKeys "{Tab}" KeyAscii = 0 End If End Sub
5. Vamos testar o evento KeyPress: execute o aplicativo e dê um Enter na caixa de texto txtValor. Nada acon aconte tece ceu? u? É porq porquue a prop proprried iedade ade KeyP KeyPre revview iew do formu ormulá lárrio não não está está habi habili lita tada da.. Saia aia do apli aplica cati tivo vo para fazer a correção; 6. Altere o valor valor da propriedade propriedade KeyPreview KeyPreview do formulár formulário io para para True; True;
Microsoft Visual Basic 6
45
7. Test este o aplicativo ivo novame amente: se tudo correu bem, o foco passou para a caixa txtEntrada. Desta, o foco vai vai para para txtJ txtJur uros os,, e assi assim m por por dian diante te.. Após Após test testar ar em todo todoss os cont contro role les, s, saia saia do apli aplica cati tivo vo para para pode poderm rmos os continuar; 8. Ago Agora vamo vamoss faze fazerr a codi codifficaç icação ão neces ecessá sári riaa para para carr carreg egar ar a vari variáv ável el vVal vValor or.. Como Como você você pode pode obse observ rvar ar,, com como o tipo tipo de vValo Valorr é Curr urrency ency,, usare saremo moss a fun função ção CCur CCur para para conv conver erte terr o tex texto con contid tido em txtV txtVal aloor para ara a variá ariáve vel, l, o que pod pode gerar erar um erro erro irre irrecu cupe perrável ável de exec execuução ção se txtV txtVal alor or con contiv tiver qual qualqquer uer text textoo que não represente um valor. Devemos então usar uma rotina de tratamento de erro para evitar prob roblema lemass. Mas, as, onde nde escr escrev ever er ess essa roti rotinna? Podem odemos os faze fazerr isso isso no even evento to Lost LostF Focu ocus do cont contro role le,, pois ois assim uma mensagem de erro será erá exi exibida assim que txtValor perd erder o foco, se est esta con contiver um dado inválido. Abra a janela código no evento LostFocus do controle txtValor e escreva a codificação a seguir: Private Sub txtValor_LostFocus() txtValor_LostFocus() On Error GoTo Valor_Errado vValor = CCur(txtValor.Text) Valor_Errado: If Err = 13 Then MsgBox "Dado inválido na digitação do valor do financiamento", financiamento", _ vbExclamation vbExclamation + vbSystemModal, vbSystemModal, "Aviso" txtValor.Text txtValor.Text = InputBox("Informe InputBox("Informe o valor correto do financiamento:", _ "Valor do Financiamento") Financiamento") Resume 0 End If End Sub
Note Note que que usam usamos os a funç função ão Inpu InputB tBox ox() () para para soli solici cita tarr ao usuá usuári rioo que que digi digite te um dado dado váli válido do em caso caso de erro de execução; Note também que o comando Resume é seguido do valor lor 0, o que vai fazer zer com que o VB retorne ao iníc início io da proce rocedu dure re em caso caso de erro erro e refaç efaçaa a con convers versão ão do con conteúd teúdoo de txtV txtVal aloor. Iss Isso é impo import rtan ante te pois pois,, cas caso o usu usuário ário insi insissta em escr escrev ever er um dad dado invá inváli lido do na caix caixaa de entr entrad ada, a, o proc proces esso so tod todo será será repetido. 9. Vamos testar nossa procedure. Execute o aplicativo e escreva um texto qualquer na caixa txtValor. Digamos, “aaa”. O resultado deve ser o da figura a seguir:
10. Clicando Clicando no botão Ok, deverá deverá aparecer aparecer a caixa de entrada: entrada:
Microsoft Visual Basic 6
46
11. Agora digite um valor correto, como 12000. O texto apa aparecerá na cai caixa txtVal Valor e o foco passará para txtEntrada. Saia do aplicativo para continuarmos a programação; 12. Usando a procedure txtValor_LostFocus como base, esc escreva as rotinas para o evento LostFocus das outras caixas de texto. Lembre-se que a variável vJuros é do tipo Single, e portanto você deve usar a função CSng para a conversão. Além disso, o valor obtido deve ser dividido por 100, pois é um percentual. Já para a variável vMeses, que é Integer, você deverá usar a função CInt; 13. 13. Após Após isso isso,, aind aindaa falt faltaa escr escrev ever ermo moss a roti rotina na de cálc cálcul uloo que que será será cham chamad adaa pelo pelo botã botãoo cmdC cmdCal alcu cula lar. r. Vá até até a seção Declarations e adicione uma subrotina de nome Prestação; 14. Na subrotina Prestação escreva a seguinte codificação (note o uso do operador And): Public Sub Prestação() Dim vValFinanciado As Currency Dim vPrestMensal As Currency If vValor <> 0 And vJuros <> 0 And vMeses <> 0 Then If vEntrada >= vValor Then MsgBox "O valor da Entrada deve ser menor que o do Financiamento", Financiamento", _ vbExclamation vbExclamation + vbSystemModal, vbSystemModal, "Aviso" lblValFinanciado.Caption = Empty lblPrestMensal.Caption lblPrestMensal.Caption = Empty txtEntrada.SetFocus Exit Sub End If vValFinanciado = vValor - vEntrada vPrestMensal vPrestMensal = vValFinanciado * vJuros * (1 + vJuros) ^ vMeses / _ ((1 + vJuros) ^ vMeses - 1) lblValFinanciado.Captio lblValFinanciado.Caption n = Format(vValFinanciado, Format(vValFinanciado, "###,##0.00") lblPrestMensal.Caption lblPrestMensal.Caption = Format(vPrestMensal, Format(vPrestMensal, "###,##0.00") cmdCalcular.Enabled = True cmdFechar.Enabled = True Else lblValFinanciado.Captio lblValFinanciado.Caption n = Empty lblPrestMensal.Caption lblPrestMensal.Caption = Empty End If End Sub
Observações: O primeiro If verifica se todos os dados necessários para o cálculo estão disponíveis; O segundo If veri erifica se o valor lor da entrada não é maior ou igual ao do financiamento, pois senã enão o resultado do cálculo seria uma “prestação negativa” (se é que isso existe...);
Microsoft Visual Basic 6
47
A prop propri ried edad adee Enab Enable ledd dos dos botõ botões es de coma comand ndoo só foi foi habi habili lita tada da dent dentro ro dess dessaa roti rotina na pois pois assu assumi mimo moss que o usuário fará ao menos um cálculo quando acionar o programa. 15. Agora só falta fazer com que o botão cmdCalcular execute a subrotina: Private Sub cmdCalcular_Click() cmdCalcular_Click() Prestação End Sub
16. 16. Você Você tamb também ém pode pode fazer azer que, que, após após o prim primei eirro cálc cálcul ulo, o, toda toda vez que que um valo valorr for for alte alterrado ado os resu result ltad ados os sejam imediatamente atualizados. Para isso, altere a procedure txtValor_LostFocus como a seguir: Private Sub txtValor_LostFocus() txtValor_LostFocus() On Error GoTo Valor_Errado vValor = CCur(txtValor.Text) 'É só incluir a linha abaixo: Prestação Valor_Errado: If Err = vbKeyReturn Then MsgBox "Dado inválido na digitação do valor do financiamento", financiamento", _ vbExclamation + vbSystemModal, "Aviso" txtValor.Text txtValor.Text = InputBox("Informe InputBox("Informe o valor correto do financiamento:", _ "Valor do Financiamento") Financiamento") Resume 0 End If End Sub
17. Faça o mesmo mesmo para as outras outras caixas caixas de texto; texto; 18. 18. Noss Nossoo apli aplica cativ tivoo está está prat pratic icam amen ente te term termin inad ado. o. Só falt faltaa a prog progra rama maçã çãoo do botã botãoo cmdF cmdFech echar ar.. Nesse Nesse botã botão, o, vamo amos solicitar ao usuário uma con confirmação de que ele ele realmente deseja sair do programa, usando a função MsgBox: Private Sub cmdFechar_Click() cmdFechar_Click() Dim vOk As Integer vOk = MsgBox("Tem certeza que deseja encerrar o programa?", _ vbYesNo + vbQuestion, "Saída") If vOk = vbYes Then End End Sub
19. Grave o formul formulário ário com com o nome de de frmCarro e o projeto com o nome de Carro; 20. Por fim, execute o aplicativo e teste-o bem. Procure usar vários valores diferentes nas caixas de texto para para obse observ rvar ar os resu result ltad ados os.. Tent Tentee tamb também ém entr entrar ar com com dado dadoss invá inváli lido doss e veri verifi fiqu quee se o comp compor orta tame ment ntoo do proj projet etoo é o espe espera rado do.. Se nece necess ssár ário io,, faça faça os ajus ajuste tess na prog progra rama maçã çãoo para para que que seu seu func funcio iona name ment ntoo seja seja perfeito.
48
Microsoft Visual Basic 6
Lição 6: Iniciando a Construção de um Sistema Um proje rojeto to em VB é um conj conjun unto to de obje objeto toss. Até Até agor agoraa trab trabal alhhamos amos com com apen apenas as um obje objeto to em cada cada pro projeto jeto:: o form formul ulár ário io.. Sim, Sim, o form formul ulár ário io tamb também ém é um obje objeto to:: você você não não repa reparo rouu que que ele ele tamb também ém poss possui ui prop propri ried edad ades es e responde a métodos? Obviamente, em um aplicativo mais complexo, como será o caso do sistema de Cont Contro role le de Bibl Biblio iote teca cass que que come começa çare remo moss a dese desenv nvol olve verr ness nessaa liçã lição, o, além além do form formul ulár ário io prin princi cipa pall exis existe tem m outros destinados a entrada de dados, exibição de mensagens ou de resultados de consultas, etc. Existem tem outros tipos de objetos que podem ser adicionados ao projeto, como módulos de programação, relatórios, controles ActiveX e módulos de classe. O que os caracteriza é o fato de serem gravados em arqu arquiv ivos os separ eparad adoos. Assi Assim m, o pro projeto jeto pode ode ser ser cons consid ider erad adoo como como um conj conjun unto to de arqu arquiv ivos os,, cada cada um deles eles correspondente a um objeto.
Trabalhando com Vários Formulários Qua Quando estamos desenvolvendo um projeto do qual vários formulários farão parte, obviamente vamos prec precis isar ar adic adicio ionnar a ele ele for formu mulá lári rioos novo novoss e, mu muit itas as vezes ezes,, pron rontos. tos. Além Além dis disso, so, um umaa apli aplica caçã çãoo Win Windows dows freqüentemente trabalha com outros tipos de formulários, diferentes daquele que usamos até agora.
Adicionando formulários ao projeto Para incluir um novo formulário ou um formulário existente em um projeto, siga os seguintes passos: Abra o menu Project do VB; Escolha a opção Add Form : a janela Add Form será aberta, com várias opções de tipos de formulários:
Se desejar acrescentar um formulário já existente, clique na aba Existing e indique sua localização; Se o form formul ulár ário io ain ainda não não exis existe te (for (formu mulá lári rioo novo novo), ), você ocê deve deve esco escolh lher er um dos dos tipo tiposs da aba aba New. Para um formulário padrão, escolha a opção Form. Em ambo amboss os caso casos, s, o form formul ulár ário io será será incl incluí uído do na list listaa Forms da jane janela la Proj Projet eto. o. A part partir ir dess dessee mo mome ment nto, o, ele ele poderá ser manipulado como outro qualquer. Vejamos V ejamos alguns recursos necessários a esse trabalho: t rabalho:
Método Show Esse método é usado para carregar e exibir um formulário. Sua sintaxe é: .Show
49
Microsoft Visual Basic 6
Ond Onde é o nome do formulário, e indica ica se o formulário será exibido como moda mo dall ou não. não. Um form formul ulár ário io mo moda dall é aque aquele le que que deve deve ser ser obri obriga gato tori riam amen ente te ence encerr rrad adoo para para que que o apli aplica cati tivo vo cont contin inue ue:: enqu enquan anto to ele ele esti estive verr ativ ativo, o, nenh nenhum umaa outr outraa jane janela la ou apli aplica cati tivo vo pode pode ser ser aces acessa sado do.. Para Para indi indica carr se o formulário deve ser exibido como modal usamos a constante de sistema vbModal: frmMeuForm.Show vbModal
Se a modalidade for omitida, será assumida como não-modal.
Método Refresh Durante a execução do sistema, às vezes acontece uma situação que impede a exibição correta do formulário. Norm Normal alme ment nte, e, isso isso ocorr corree quand uandoo alte altera ram mos um obje objeto to de um form formul ulár ário io que que já está está send sendoo exib exibid idoo em um umaa proc proced edur uree exte extern rnaa a ele, ele, ou entã entãoo quan quando do esta estamo moss exec execut utan ando do açõe açõess que que dema demand ndam am um umaa cert certaa quan quanti tida dade de de recu recurs rsos os do sist sistem ema, a, como como na aber abertu tura ra de arqu arquiv ivos os.. O méto método do Refr Refres eshh corr corrig igee esse esse prob proble lema ma simp simple lesm smen ente te prov provoc ocan ando do a reco recons nstr truç ução ão imed imediat iataa do form formul ulár ário io.. Outr Outros os obje objeto tos, s, como como os cont contro role less Data, Data, tamb também ém acei aceita tam m o método Refresh.
Comando Unload O coma comand ndoo Unlo Unload ad fech fechaa um form formul ulár ário io e devo devolv lvee o cont contro role le do siste istema ma ao form formul ulár ário io que o cham chamou ou.. Sua sintaxe é muito simples: basta indicar o nome do formulário. Exemplo: Unload frmMeuForm
Eliminando formulários do projeto Para excluir um formulário do projeto, basta clicar com o botão direito do mouse sobre o nome do formulário na janela Projeto e escolher a opção Remove no menu de contexto.
Formulários MDI Um formulário MDI ( Multiple-Do Multiple-Document cument Interface Interface) funciona como uma janela que contém outros form formul ulár ário ioss a ela ela subo subord rdin inad adas as (cha (chama mado doss de MDIChild), atua atuand ndoo em background para para um umaa apli aplica cação ção.. Para Para criar um formulário MDI você deve eve escolher a opção Add MDI Form no menu Project do VB. Por suas características, o formulário principal de uma aplicação é freqüentemente criado como MDI. Veja as principais: Uma aplicação pode conter apenas um formulário MDI, mas pode conter vários MDI Child Forms; Se o formulário MDIChild contém uma estrutura de menus, a barra de menu do formulário MDI é auto automa mati tica came mennte atua atuali liza zadda e o menu enu exib exibid idoo pas passa a ser ser o do MDICh DIChil ildd ativ ativo. o. Falar alarem emos os mais mais sobr sobree menus logo adiante; Se o formulário MDI é minimizado, todos os formulários MDIChild abertos também são; Se um formulário MDIChild é minimizado, aparece como um ícone no rodapé do MDI; A maio maiori riaa das das prop ropried riedad ades es,, méto método doss e even evento toss dos dos form formuulár lários ios MDI são são os mesm mesmoos de um formu ormulá lári rioo comum, mas um MDI não pode ser aberto como modal; Um formulário MDI só pode conter menus e o controle PictureBox, ou entã entãoo cont contro role less cust custom omiz izad ados os preparados para isso. Você pode usar outros controles no formulário MDI apenas se criar uma PictureBox e então inserir esses controles dentro dela, como se fosse uma “moldura”; Um formulário MDIChild não aceita a propriedade StartUpPosition.
Propriedade MDIChild Essa Essa prop propri ried edad adee indi indica ca se um form formul ulár ário io será será exib exibid idoo como como MDIC MDIChi hild ld ou não. não. A prop propri ried edad adee MDIC MDIChi hild ld só tem tem efei efeito to quan quando do exis existe te no proj projet etoo um form ormulár ulário io MDI MDI. Ness Nessee caso caso,, qualq ualque uerr outr outroo for formu mulá lári rioo que que não não o MDI (obviamente) poderá ser configurado como MDIChild. Quan Quando do o valo valorr de MDIC MDIChi hild ld é True True,, o form formul ulár ário io pode poderá rá ser ser maxi maximi miza zado do,, mini minimi miza zado do ou mo movi vido do dent dentro ro do form formul ulár ário io prin princi cipa pall (MDI (MDI). ). Assi Assim m como como o MDI, MDI, um form formul ulár ário io MDIC MDIChi hild ld não não pode pode ser ser aber aberto to como como mo moda dal. l. MDIChild não pode ser alterada em modo de execução, e o valor padrão é False.
50
Microsoft Visual Basic 6
Startup Object O objeto de abertura (ou Startup Startup Object ) é o primeiro objeto a ser executado quando iniciamos um aplicativo. Quando criamos um novo projeto, o formulário Form1 é definido como objeto de abertura, por ser o primeir eiro objeto a fazer parte dele. Mas qualqu lquer formulár lário pode ser configurado como Startup. Para alterar o objeto de abertura, siga as instruções a seguir: Abra o menu Project ; Escolha a opção Project Properties: será exibida a janela Project Properties:
A caix caixaa de comb combin inaç ação ão Startup Object cont contém ém os objet bjetoos que podem odem ser ser conf config iguurado radoss com como Startup: note ote que só são são exib exibid idos os os for formu mulá lári rios os cont contid idos os no proj projet etoo (além além da sub Main ain, que que estu estuddarem aremos os mais mais adiante); Indique na combo qual será o objeto de abertura e clique em Ok.
Menus A barra arra de menus enus é um dos dos mais mais imp importa ortant ntes es comp compoonent nentes es de um apli aplica cati tivvo Wind Window ows. s. O VB dis dispõe põe de uma poderosa e prática ica ferramenta para o projeto de menus: o Editor de Menu ( Menu Menu Editor – veja a figura da pró próxima xima págin ágina) a).. Com Com ele, ele, em pouco oucoss pas passos sos você você pod pode cria criarr menus enus que que fun funcio cionam nam exat exatam amen ente te como como nos nos aplicativos mais conhecidos. Exis Existe tem m alg algum umas as regra egrass de padr padron oniz izaç ação ão que que devem evem ser ser segu seguid idas as na cria criaçã çãoo de menu menuss para para os apli aplica cati tivvos Windows: O usu usuário ário já sab sabe o que que esp esperar erar em deter etermi mina nado doss menus enus,, quand uandoo prese resent ntes es em um apli aplica cati tivvo. No menu enu Edita ditarr, por por exem exempl ploo, ele ele esp espera era enco encont ntrrar ao meno menoss as opçõ opções es Copi Copiar ar,, Reco ecortar rtar e Cola Colar. r. Outr Outros os menus enus tamb também ém poss possuuem opçõ opções es padr padrooniza nizada das: s: Abr Abrir, ir, Salv Salvar ar e Imp mpri rimi mirr são são freq freqüe üent ntem emen ente te enco encont ntra raddas no menu Arquivo; As opções da barra de menus devem permitir o acesso através da combinação Alt+Letra Sublinhada; Para Para as opçõ opções es mais mais comu comuns ns é inte intere ress ssan ante te que que exis exista tam m tecl teclas as de atal atalho ho.. Mas, Mas, cuid cuidad ado: o: algu alguma mass tecl teclas as de atal atalho ho tamb também ém são são pad padron ronizad izadas as no Win Windows dows.. Por Por exem exempl ploo: Ctrl+ trl+C C é o atal atalho ho para ara copi copiar ar algo algo para ara a área de transferência, não importa qual seja o aplicativo; Iten tens relac elacio ionnados ados dev devem ser ser agr agrupad upadoos e sepa separa raddos dos dos demai emaiss por por barra arrass sep separad arador oras as.. Exemp xemplo lo:: as opções Localizar, Localizar Próximo e Substituir do menu Editar do WordPad;
51
Microsoft Visual Basic 6
A janela Menu Editor
Quando o item leva o usuário a uma caixa de diálogo, seu rótulo deve ser seguido de reticências (...). Quando leva a um submenu, deve ser seguido de uma seta ; Iten Itenss sele seleci cion onáv ávei eis, s, como como a opçã opçãoo Régu Réguaa do menu menu Exib Exibir ir do Word WordPa Pad, d, deve devem m ser ser prec preced edid idos os pela pela marc marcaa de seleção quando estiverem ativos; Quan Quando do algu algum m prépré-re requ quis isit itoo para para o func funcio iona name ment ntoo de um umaa opçã opçãoo não não esti estive verr send sendoo cump cumpri rido do,, ela ela deve deve apar aparec ecer er desab esabil ilit itad ada. a. Por Por exem exempl ploo: se não hou houver ver text textoo sele seleci cion onad ado, o, as opçõ opções es Cop Copiar iar e Reco ecortar rtar não não devem estar disponíveis. Para acessar a janela Menu Editor , o formulár lário deve eve estar selecion ionado. Escolha então tão a opção no menu enu Tools do VB, acione a combinação Ctrl+E ou escolha o botão Menu Editor na barra de ferramentas. Vamos descrever alguns componentes da janela Menu Editor: eve ser digitado o rótulo que aparecerá na barra de menus ou dentro do menu: Caption: neste campo deve corresponde à propriedade Caption de um controle; Name: neste campo informamos o valor da propriedade Name do menu; ShortCut : permite a definição de uma tecla de atalho; Checked: permite a definição da propriedade Checked (marca de seleção); Enabled e Visible : o mesmo que as propriedades Enabled e Visible dos controles; Index: quando o menu fizer parte de uma matriz, permite indicar seu índice; permit item em a mo movi vime ment ntaç ação ão do menu menu sele seleci cion onad adoo para para cima cima ou para para baix baixo, o, mu muda dand ndoo Botões Up e Down : perm sua posição na barra; item a mudança de nível do menu, ou seja eja: se a opção aparecer cerá na barra de Botões Left e Right: permite menu ou se fará parte de um submenu. Podem ser criados até quatro níveis;
52
Microsoft Visual Basic 6
eção para a próxima linha, se houver. Se não houver, er, insere uma nova lin linha no Botão Next: move a seleçã final da lista; Botão Insert: insere uma nova linha acima da selecionada; Botão Delete: exclui da lista a linha selecionada.
O Aplicativo Bibliotecário Para Para exer exerci cita tarr os vári vários os assu assunt ntos os que que vere veremo moss ness nessaa liçã lição, o, vamo vamoss inic inicia iarr a cons constr truç ução ão no noss nossoo sist sistem ema, a, que que chamaremos de Bibliotecário: 1. Inic Inicie ie um novo novo proj projet eto; o; 2. Remova Remova a formu formulár lário io Form Form11 do projet projeto; o; 3. Adicione Adicione ao projeto projeto um formulário formulário MDI, MDI, e altere altere suas seguintes seguintes propried propriedades: ades: Name: frmBiblio Caption: Bibliotecário – Controle de Acervo de Bibliotecas Amarel eloo Clar Claroo (ou (ou outr outraa de sua sua pref prefer erên ênci ciaa – mas mas não não esco escolh lhaa um umaa cor cor mu muit itoo fort fortee para ara BackColor : Amar não ofuscar o coitado do usuário); Icon: Writing\Books01.ICO; WindowState: 2 - Maximized 4. Configu igure-o como Startup Object . Aproveite que já est está na janela Project Properties e altere ere também a propriedade Project Name para Bibliotecário. Essa proprieda edade equivale a um rótulo a ser exibido na janela Project para identificação do projeto, mas sua definição não é obrigatória; 5. Salv Salvee o form formul ulár ário io com com o nom nomee de FrmBiblio e o projeto como Bibliotecario; 6. Abra a jane anela Menu Editor ; 7. Defina os campos para a primeira opção do nosso menu: Caption = &Cadastros e Name = mnuCadastros; 8. Clique Clique no no botão botão Next Next para para passar passar para para a próxi próxima ma linha: linha:
9. O próxim próximoo item item é a opção opção Livro Livross do menu menu Cadas Cadastro tros: s: Caption: &Livros Name: mnuCadLivros
Microsoft Visual Basic 6
53
10. Clique no botão Ok e veja o resultado. Note que as opções estão no mesmo nível, pois a opção Livros está ao lado de Cadastros. O correto seria que Livros fosse um item do menu Cadastros; 11. Acione novamente o Menu Menu Editor e selecione a linha que contém o menu Livros; 12. Clique na seta para a direita. O nível do menu Novo foi alterado, e agora está abaixo abaixo do menu Cadastro: Cadastro:
13. Clique no botão Ok e observe se o resultado agora é o esperado; 14. Inclua Inclua mais dois três opções opções ao menu Cadastro Cadastros: s: Caption: &Usuários Name: mnuCadUsuarios Caption: &Categorias Name: mnuCadCategorias Caption: &Editoras Name: mnuCadEditoras
54
Microsoft Visual Basic 6
15. Vamos incluir agora uma uma barra separadora. Selecione a opção Editoras e clique no botão Next; 16. Indique para a proprieda edade Capt aption ion um hífen (-), e alt altere Nam Name para BS1 (de Barr arra Separadora nº 1). Clique em Next; 17. Para terminar o menu Cadastros, vamos incluir nele uma opção para sair do sistema: Caption: &Sair do Sistema Name: mnuSair 18. Clique no botão Ok e confira o menu. menu. Faça correções, correções, se necessário; necessário; 19. Adicione as demais opções do menu de acordo com a tabela abaixo: Caption: & O pe ra ç õ es .... ....&E &Emp mpré rést stim imo o de Liv Livro ros s ....& ...&De Devo volu luçã ção o de Livr ivros C & on su l t as . . .. &L i v ro s . . .. .. . . &T od os . . .. .. . . . . .. .. . . po r A& u t or . . .. .. . . po r &C a t eg or i a ........por E& E&ditora . . .. .. . . . . .. .. . . &E mp re s t ad os ........Em &Atraso . . .. &U s u ár io s . . .. &C a t eg or ia s . . .. &E d i to ra s & R el at ó r io s . . .. &L i v ro s . . .. &U s u ár io s . . .. &C a t eg or ia s . . .. &E d i to ra s &? .... ....&S &Sob obre re o Bib Bibli liot otec ecár ário io
Name: m nu Op e r aco es mnuE mnuEmp mpre rest stim imos os mnuD mnuDev evol olu ucoes coes m nu Co n s ult as m nu C o nL ivr os m nu Co nT odo s B S2 m nu Li vr osP or Au to r m nu Li vr osP or Ca te go ri a m n u Li vr o sP o r Ed it o r a B S3 m n u Co nE m pr e s ta do s m nu Co nA tra sa do s m nu Co nU sua ri os m nu Co n C at e go ri a s m nu Co nE dit or as m nu R e la tór io s m nu R e lL ivr os m nu Re lU sua ri os m nu Re l C at e go ri a s m nu Re lE dit or as m nu He lp mnuS mnuSob obre re
20. Verifique o funcionamento do menu. Note que na barra devem constar cinco opções: Cadastros, Oper Operaç açõe ões, s, Cons Consul ulta tas, s, Rela Relató tóri rios os e ?. Além Além diss disso, o, nos nos menu menuss Cons Consul ulta tass e Rela Relató tóri rios os,, o item item Livr Livros os leva leva a submenus. Seu formulário agora deve estar parecido com o do exemplo a seguir:
55
Microsoft Visual Basic 6
21. Faça ajustes ajustes,, se necessá necessário; rio; 22. Salve o formulá formulário rio como como frmBiblio e o projeto como Bibliotecario.
Associando Codificação a um Menu Um menu menu se comp compoorta rta com como outro utro obje objeto to qual qualqu quer er do VB, VB, quan quanto to à codi codifi fica caçã ção. o. Só um even evento to é ass associa ociado do a um menu: o Click. Para exemplificar, vamos fazer a codificação do menu mnuSair: 1. Em tempo tempo de de projeto, projeto, clique sobre sobre o menu menu Cadastr Cadastros os para para abri-lo; abri-lo; 2. Clique Clique sobre sobre a opção opção Sair Sair (não (não é necess necessário ário o duplo-click duplo-click); ); 3. A janela janela Código Código é aberta. aberta. Escreva Escreva a procedur proceduree correspon correspondente: dente: Private Sub mnuSair_Click() mnuSair_Click() Dim vOk as Integer vOk = MsgBox("Confirma o encerramento do sistema?", _ vbYesNo + vbQuestion + vbApplicationModal, "Saída") If vOk = vbYes Then End End Sub
4. Execute Execute o aplicat aplicativo ivo e verifique verifique o funcionam funcionamento ento da procedu procedure. re.
Formulários Splash A maioria dos aplicativos para Windows (como o Word e o próprio VB) exibe uma janela com diversas info inform rmaç açõe õess sobr sobree o prod produt utoo enqu enquan anto to ele ele é carr carreg egad ado. o. Essa Essa jane janela la é cham chamad adaa de Splash Window, ou tela de Spla Splash sh.. O VB 6 perm permit itee a cria criaçã çãoo dessa essass tela telass com com muita uita faci facili liddade. ade. Para ara ess esses caso casoss, o VB nos nos ofer oferec ecee um mode mo delo lo de form formul ulár ário io pron pronto to,, conf config igur urad adoo e com com a prog progra rama maçã çãoo nece necess ssár ária ia para para func funcio iona narr como como aque aqueles les dos dos aplicativos comerciais. Vamos então criar um formulário Splash em nosso aplicativo: 1. Abra a jane anela Add Form; 2. Lembra-se que na aba New há vár vários ios tipo tiposs disp dispon onív ívei eiss de form ormulár ulário ioss? Um dele deless é cham chamad adoo de Splash Screen. É essa opção que usaremos para criar nossa tela de Splash. Escolha Splash Splash Screen, e o formulário abaixo será adicionado ao projeto:
56
Microsoft Visual Basic 6
3. Você pode alterar o tamanho do formulário e seus objetos à vontade, incluir novos labels e figuras, apagar os que não forem necessários, enfim, deixar o formulário ao seu gosto. Veja como ficou o meu:
Obs.: os formulários padronizados, como os que estamos usando, quando inseridos no projeto normalmente já trazem algum tipo de programação pré-definida. Deve-se então verificar essa programação e alterá-la, ou apagá-la se não for necessária, para evitar erros da execução. 4. Grav Gravee o novo novo for formu mulá lári rioo como como frmSplash.
O Controle Timer Exis Existe te um pro problem blemaa em nos nosso proje rojeto to:: não não exis existe te em frm frmSpla Splassh nen nenhum hum objet bjetoo que que poss ossa ser ser usad usadoo para acionar o frmBiblio, como um botão de comando. Mas o VB oferece um controle cujo func funcio iona name ment ntoo se enca encaix ixaa perf perfei eita tame ment ntee em caso casoss como como esse esse:: o cont contro role le Time Timer, r, que que é usad usadoo em situ situaç açõe õess de execução de um ou mais comand andos a int intervalos de tempo regulare ares. Por exe exemplo: atua tualiza izar os regi egistros exibidos em uma tela de consulta de um sistema multiusuário a cada 10 segundos. O controle Timer só responde ao evento Timer.
Propriedade Interval A propriedade Interval do con controle Timer dete etermina o int intervalo de tempo, medi edido em milisegundos, da ocorrência do evento Time imer. É do tipo Intege eger, portanto o maior valor possível é 65.535, o que equivale a pouco mais de 1 minuto. O valor default é 1.000 milisegundos, ou 1 segundo. Esse controle pode ser posicionado em qualquer lugar do formulário, pois não é exibido durante a execução do aplicativo.
57
Microsoft Visual Basic 6
Em nos nosso siste istema ma,, usar usarem emos os um Timer imer para para pro provoca vocarr um umaa pausa ausa de 5 segu segund ndoos, dur durante ante a qual qual será erá exib exibid idaa nossa tela de Splash: 1. Adicio Adicione ne um Timer Timer ao frmSpl frmSplash ash;; 2. Altere o valor valor da propriedade propriedade Interval Interval do do Timer Timer para para 5000; 5000; 3. Dê um duplo duplo click sobre sobre o contro controle le Timer e faça faça a codificação codificação do evento evento Timer conforme conforme segue: segue: Private Sub Timer1_Timer() Timer1_Timer() Unload Me frmBiblio.Show End Sub
Obs.: “Me” é equivalent ente ao nome do formulár lário em uso. Ass Assim, ao invés de ficarmos esc escrevendo o nome nome do form formul ulár ário io para para aces acessa sarr suas suas prop propri ried edad ades es e méto método doss dura durant ntee a codi codifi fica caçã ção, o, pode podemo moss escr escrev ever er simplesmente “Me” em seu lugar que o resultado será o mesmo. 4. Execute Execute o projeto projeto e veja: seu seu aplicativo aplicativo agora tem uma uma tela de de Splash! Splash! 5. Grav Gravee seu seu trab trabal alho ho..
Formulários About Out Outro modelo de formulári ário pré-definido que o VB nos oferece ece é o About Form, usado para a confecçã cção daqu daquel elas as jane janela lass “Sob “Sobre re.....” .”.. Para Para adic adicio ioná ná-l -loo o proc proces esso so é o mesm mesmoo do Spla Splash sh.. Vamo Vamoss inse inseri rirr no proj projet etoo um formulário do tipo About: 1. Abra a jane anela Add Form e escolha na aba New a opção About Dialog; 2. O formu ormulá lári rioo a segui eguirr será será inse inseri rido do em seu proje rojeto to.. Note Note os botõ botões es de com comando ando:: Ok fech fechaa o form formul ulár ário io e System Info abre a janela de Informações do Sistema do Windows:
3. Modifique-o ao seu gosto, mas cuidado com o evento Load: ad: ele altera o rótulo de alguns labels. Se você mudar esses labels, apague as linhas correspondentes a eles em Form_Load. Veja como ficou o meu:
Microsoft Visual Basic 6
58
4. Grav Gravee o form formul ulár ário io como como frmAbout; 5. Abra o formulár formulário io frmBiblio frmBiblio e escreva escreva o comando comando para exibir exibir frmAbout frmAbout em mnuSobr mnuSobre_Clic e_Click: k: Private Sub mnuSobre_Click() mnuSobre_Click() frmAbout.Show vbModal End Sub
6. Execute o aplicativo. No formulário principal, escolha a opção Sobre no menu e veja se o formulário frm-About está funcionando corretamente; 7. Grave seu seu trabalho. trabalho. Continu Continuaremos aremos o desenvolvi desenvolvimento mento do do sistema sistema na próxima próxima lição. lição.
Microsoft Visual Basic 6
59
Lição 7: Controles Customizados Até agora só usamos em nosso projeto controles padronizados, aqueles que aparecem na caixa de ferr ferram amen enta tass quan quando do inic inicia iamo moss o VB. VB. Mas Mas não não são são apen apenas as esse essess os cont contro role less disp dispon onív ívei eiss para para uso uso em noss nossos os projetos. Muito pelo contrário, existe uma infinidade de outros controles no mercado, muitos deles come comerc rcia iais is e dese desenv nvol olvi vido doss por por empr empres esas as espe especi cial aliz izad adas as.. Algu Alguns ns dess desses es cont contro role less adic adicio iona nais is,, cham chamad ados os de , s ã o f o r n e c ido id o s j u n t o c o m o p a c o t e d o V B e p o d em s e r u s a d o s l ivr iv r e m e n t e n a c o n s t r u ção çã o de customizados aplicativos. Os controles customizados não aparecem na caixa de ferramentas: eles devem ser adicionados ao projeto para serem usados. Uma vez que isso é feito, porém, eles se comp compor orta tam m da mesm mesmaa mane maneir iraa que que qual qualqu quer er cont contro role le padr padron oniz izad ado. o. Mas Mas não não vá adic adicio iona nand ndoo con control troles es à vonta ontade de em seu pro projeto jeto,, pois pois,, como como são arq arquivo uivoss OCX OCX sepa separa rado dos, s, para ara cad cada um dele deless que que você você usar usar seu seu apli aplica cati tivo vo vai vai “eng “engor orda dar” r” algu alguns ns Kbyt Kbytes es.. Assi Assim m send sendo, o, só adic adicio ione ne aqueles controles que realmente irá usar.
Adicionando um Controle Customizado Vam Vamos entã entãoo adic adicio iona narr um con control trolee cus customi tomiza zaddo ao nos nosso apli aplica cati tivo vo.. Se ain ainda não não o fez, fez, inic inicie ie o VB e abra abra o projeto Bibliotecario: 1. No menu Project do VB, VB, esco escolh lhaa a opçã opçãoo Components, ou entã entãoo tecl teclee Ctrl+ trl+T: T: a jan janela ela Components será aberta: ela permite que controles customizados sejam adicionados ao projeto:
2. Proc Procur uree e marq marque ue a opç opção ão Microsoft Windows Commom Controls 6.0 ; 3. Cliq lique no botã botãoo Apli Aplica car: r: repar eparee que que alg alguns uns ícon ícones es nov novos, os, como como os da figur iguraa ao lado lado,, for foram inse inseri riddos na caixa de ferramentas; 4. Clique em Ok. A partir de agora, você poderá usar qualquer um dos Microsoft Windows Commom Controls em seu projeto como qualquer outro controle.
60
Microsoft Visual Basic 6
Criando Uma Barra de Ferramentas Sem dúvida um dos recursos mais comuns nos aplicativos para Windows é a barra de botões ou de ferr ferram amen enta tass - o próp róprio rio VB as tem tem em pro profus fusão. ão. A princ rincip ipal al final inalid idad adee des dessas sas barra arrass é a de faci facili lita tarr o aces acessso do usuário aos comandos mais comuns do aplicativo.
O Controle ToolBar Um dos con controles les customizados que acabamos de adi adicio cionar é o ToolBar, ar, que perm ermite a criação de barras de botões com muita facilidade. Ele responde ao evento Click, e a identificação do botão clicado é feita pelo seu número de índice. Para criar os botões, ToolBar trabalha em conjunto com outro controle:
O Controle ImageList O controle ImageList também faz parte dos Microsoft Windows Commom Controls e, como seu próprio nome indica, serve para criar uma list ista de imagens que será associad iada a um outro controle, como uma ToolBar. Esse controle não responde a nenhum evento e não aparece no formulár lário durante a execução do aplicativ tivo. Depo epois que a ImageList é associada ada a um controle, não pode mais ser alt alterada, a menos que a associação seja excluída. Vamos então criar uma barra de botões em nosso projeto: 1. Em tempo tempo de de projeto projeto,, abra abra o formulá formulário rio frmB frmBibl iblio; io; 2. Adicione ao formulário uma ImageList. Não se preocupe com a posição em que ela vai ficar, pois como já disse ela não aparecerá durante a execução do aplicativo; 3. Clique Clique com o botão botão direito direito do mouse mouse sobre sobre a ImageList; ImageList; 4. No menu de contexto que se abre, escolha a opção Properties. A jane janela la de prop proprrieda iedade dess da Imag ImageL eLis istt será exibida:
5. Na aba General definimos o tamanho em pixels das imagens da lista. Compare os tamanhos: 16 x 16: 32 x 32: 48 x 48:
Microsoft Visual Basic 6
61
6. Na aba Images inserimos as imagens que farão parte da lista:
7. Para ara adic adicio ionnar imag imagen ens, s, clic clicam amos os no botã botãoo Insert Picture e para exclu cluir uma ima imagem no botão tão Remove íc one Writing\Books02.ICO: Picture. Clique em Insert Picture e adicione o ícone
Obs.: note que, após adicio cionar o ícone, o campo Index passou a indicar o valor 1. Esse é o número de índice da imagem na lista, através do qual fazemos a associação da imagem com o botão da ToolBar. 8. Adicione as seguintes imagens na lista. Procure respeitar a ordem na inclusão, para que o índice corresponda corretamente à imagem desejada quando estivermos criando a barra de botões: Misc\Misc28.ICO (Index 2) Writing\Book04.ICO (Index 3) Writing\Books04.ICO (Index 4) Traffic\Trffc14.ICO (Index 5) 9. Se você você fez tudo corretamente corretamente,, sua ImageLis ImageListt deve estar estar parecida parecida com com o exemplo exemplo a seguir: seguir:
Microsoft Visual Basic 6
62
10. Clique Clique no botão Ok para retornar retornar ao formulário formulário;; 11. 11. Adic Adicio ione ne ao form formul ulár ário io um umaa Tool ToolBa Bar. r. Note Note que que esse esse cont contro role le é auto automa mati tica came ment ntee posi posici cion onad adoo no topo topo da área de trabalho do formulário, logo abaixo da barra de menus; 12. A configuração da ToolBar é feito como na ImageList: clique com o botão direito do mouse sobre o controle e escolha a opção Properties; 13. 13. Na aba aba General definimos as propriedades que determinam a aparência da Toolbar. As principais são:
ImageList: indica o nome da ImageList que será usada na criação da barra de botões. Escolha a opção “ImageList1”, que deve ser a única disponível; determ rmin inaa a apar aparên ênci ciaa da barr barra, a, que que pode pode ser ser em pers perspe pect ctiv ivaa 3D (opç (opção ão 1 - cc3D) ou Appearance: dete integrada à área de trabalho do formulário (opção 0 – ccFlat). Escolha 3D; erá borda (opção 1 – ccFixedSingle) ou não (opção 0 – ccNone). A BorderStyle: indica se a barra terá aparência final da borda depende da propriedade Appearance. Escolha None;
63
Microsoft Visual Basic 6
indica ca o esti estilo lo dos botõ botões es da barra arra:: pod pode ser ser 0 – tbrStandard, em que que eles eles serã serãoo apre aprese sent ntad ados os Style: indi como como pequ pequen enos os botõ botões es de coma comand ndo, o, ou 1 – tbsFlat, em que os botões terão a mesma aparênc ência das barras de ferramentas do VB. Escolha Flat. 14. Na aba Buttons con configu figurramos amos cada cada um dos dos botõ botões es da barr barra. a. Par Para inse inseri rirr um botã botãoo, clic clicam amoos em Insert Button, e para remover clicamos em Remove Button. Clique no botão Insert Button; 15. Vamos definir as propriedades propriedades do botão que inserimos. As principais propriedades dos botões são: Index: indica o índice do botão na barra, pelo qual ele será identificado quando for clicado. Normalmente não alteramos o valor essa propriedade; Caption: define um rótulo para o botão. Deixe em branco, assim só será exibido o ícone no botão; textoo a ser ser exib exibid idoo em um umaa pequ pequen enaa etiq etique ueta ta expl explic icat ativ ivaa quan quando do o pont pontei eiro ro do mo mous usee ToolTipText: text fica ficarr par parado ado por por algu algunns inst instan ante tess sob sobre o botã botãoo. Escr Escrev evaa “Cad “Cadas astr troo de Livro ivross” ness nessaa prop ropried riedad adee (obs.: quase todos os controles do VB possuem essa propriedade); indica ica o núme número ro da imag imagem em da Image mageLi List st a ser ser exib exibid idaa por por ess esse botã botão. o. Ind Indique ique o valo valorr 1, que que Image: ind corresponde ao primeiro ícone da ImageList; Visible e Enabled: o mesmo que as propriedades Visible e Enabled dos demais controles. 16. Sua configura configuração ção do botão 1 deve estar estar assim:
17. Insira mais quatro botões na barra, conforme a tabela tabela a seguir: Botão
2 3 4 5
Propriedades = Valor
ToolTipText = Cadastro de Usuários Image = 2 ToolTipText = Empréstimo de Livros Image = 3 ToolTipText = Devolução de Livros Image = 4 ToolTipText = Sai do Sistema Image = 5
18. Clique no botão Ok. Seu formulário deve estar parecido com o do exemplo a seguir:
Microsoft Visual Basic 6
64
19. Salve Salve seu trabal trabalho. ho.
Programando a Barra de Ferramentas A programação dos botões da barra de botões é muito simples les: como a barr arra só responde ao event ento Click, basta que identifi ifiquemos qual botão foi clicado ado e fazer a codificação correspondente. Como já vimos, a identificação do botão é feita pela propriedade Index. Vamos então programar o botão Sair: 1. Dê um duplo duplo click sobre sobre a barra barra de botões botões para para abrir abrir a janela janela Código Código no evento evento Click da da barra; 2. Note Note que que a pro proced cedure ure rece recebe be um par parâmet âmetrro, cham chamad adoo Butto utton, n, que indi indica ca em que botã botãoo acon aconte tece ceuu o clic click. k. Test Testar arem emos os entã entãoo o índi índice ce dess dessee parâ parâme metr troo (pro (propr prie ieda dade de Inde Index) x) para para sabe saberr qual qual foi foi o botã botãoo clic clicad adoo – em breve estudaremos a propriedade Index mais detalhadamente: detal hadamente: Private Sub Toolbar1_ButtonClick(ByVal Button As MSComctlLib.Button) If Button.Index = 5 'Foi clicado o botão Sair: mnuSair_Click End If End Sub
3. Repare que, se o botão for o número 5, chamaremos a subrotina mnuSair_Click, ou seja, estamos desviando a execução para o evento Click do menu Sair, pois a programação em ambos os casos é a mesma. Isso pode ser feito à vontade, pois os eventos dos controles também são subrotinas como quaisquer outras, e portanto podem ser executadas sempre que necessárias; 4. Teste o aplicativo aplicativo e verifique verifique se se o botão botão está funcionand funcionandoo como previsto; previsto; 5. Salve alve seu trab trabal alho ho.. Os dema demais is botõ botões es da barr barraa ser serão prog rograma ramado doss conf confor orme me os for formu mulá lári rios os a que que eles eles se referem forem sendo construídos nas próximas lições.
65
Microsoft Visual Basic 6
Lição 8: Bancos de Dados Semp Sempre re que que trab trabal alha hamo moss com com qual qualqu quer er ling lingua uage gem m temo temoss a inte intenç nção ão de guar guarda darr as info inform rmaç açõe õess gera gerada dass para para a obte obtenç nção ão de algu algum m resu result ltad ado, o, ou entã entãoo para para cons consul ultá tá-l -las as quan quando do fore forem m nece necess ssár ária ias. s. Assi Assim, m, elas elas deve devem m ser ser gravadas em arquivos criados para esse fim, chamados de Bancos de Dados, ou serão perdidas após o ence encerr rram amen ento to do prog progra rama ma que que as gero gerou. u. Exis Existe tem m vári vários os soft softwa ware ress espe especí cífi fico coss para para o gere gerenc ncia iame ment ntoo dess desses es arqu arquiv ivos os no merc mercad ado, o, e cada cada um dele deless poss ossui padr padrõões próp própri rioos de arma armaze zena name ment ntoo de dados ados.. Exem Exempl ploos de Sis Sistema temass Ger Gerenci enciad ador ores es de Banc Bancos os de Dado Dadoss (SGD (SGDB) B) são são o SQL SQL Serve erverr, o Data Datafl flex ex,, o FoxP FoxPro ro,, o Orac Oracle le,, o Access, etc. O VB pode pode aces acessa sarr arqu arquiv ivos os de dado dadoss de vári vários os form format atos os dife difere rent ntes es,, incl inclui uind ndoo os cita citado dos, s, mas mas vamo vamoss util utiliz izar ar o MDB do Acce Access ss.. Esse Esse é for formato mato nativ ativoo do VB, VB, tant tantoo que que o utili tilitá tári rioo para para a cria criaçã çãoo de banc bancos os de dado dadoss que o acom acompa panh nha, a, cham chamad adoo Visual Data Manager , é um umaa ver versão são reduz eduzid idaa do Acce Access ss.. Aliá Aliás, s, bast bastan ante te redu reduzi zidda: suas funções limitam-se à criação e manipulação de bancos de dados e de suas tabelas. Nes Nesse texto, assumimos que você já conhece ece o Access ess o suficiente para a criaçã ação do banco de dados, das tab tabelas elas e das das cons consuultas ltas que que vamo vamoss util utiliz izar ar.. Caso Caso não não o poss possuua inst instal alad adoo em sua sua máqui áquina na,, use entã entãoo o Visual Data Manager , acessando-o pelo menu Add-Ins do VB.
Métodos de Acesso Basi Basica came ment nte, e, um méto método do de aces acesso so é o meio meio pelo pelo qual qual asso associ ciam amoos um tip tipo espe especi cial al de vari variáv ável el cham chamad adoo de bancoo de dado dados. s. Elas Elas são são cham chamad adas as de obje objeto to porq porque ue poss possue uem m prop propri ried edad ades es e resp respon onde dem m variável objeto ao banc a méto método dos, s, perm permit itin indo do assi assim m a mani manipu pula laçã çãoo dos dos dado dados. s. O méto método do de aces acesso so usad usadoo trad tradic icio iona nalm lmen ente te pelo pelo VB é o DAO (ou Data Access Object ), ) , que que cons consis iste te na aber abertu tura ra de suas suas tabe tabela lass e exec execuç ução ão de coma comand ndos os atra atravé véss das das vari variáv ávei eiss obje objeto to.. Poré Porém, m, a part partir ir da vers versão ão 6 do VB a Micr Micros osof oftt intr introd oduz uziu iu um novo novo méto método do,, cham chamad adoo de ADO ADO (ou (ou ActiveX Data Objects), pelo qual o aplicativo se comunica com com o gerenciad iador de banco de dados através de um provedor em uma conexão de rede, mesmo que a aplicação e o SGBD estejam rodando localmente. As operaçõ ações de inclusão, exc exclusão, alteração e seleção de dados são execu ecutad tadas a partir de coma comand ndos os SQL SQL envi enviad ados os pelo pelo apli aplica cati tivo vo ao SGBD SGBD atra atravé véss do prov proved edor or (ver (verem emos os o que que é SQL SQL e como como usáusá-la la nas próximas lições). Em nosso projeto, usaremos o método ADO.
Objeto ADO Connection Conn Connec ecti tion on é a vari variáv ável el obje objeto to que que repr repres esen enta ta a cone conexã xãoo prop propri riam amen ente te dita dita.. Norm Normal alme ment ntee é decl declar arad adaa como como púb pública lica (po (portan rtanto to,, em um mó módu dulo lo de prog rograma ramaçã ção) o) com com o tipo tipo ADODB.Connection. Porém, antes de ver como criar uma conexão ADO, devemos estudar alguns conceitos básicos:
Propriedade ConnectionString Essa propriedade do objeto Connection é uma string formada pelo nome do provedor usado e pelos parâmetros necessários para estabelecer a conexão com o SGBD.
O Provedor A função do provedor é, como já disse, permitir a conexão do aplicativo com o banco de dados. Essa conexão é do tipo OLEDB, ou Object Linking and Enbedding Database. Portanto, na verdade o que acontece quando nos conectamos ao banco de dados via ADO é a vinculação de um objeto ao banco, que passa a resp respon onde derr às prop propri ried edad ades es e méto método doss do obje objeto to a ele ele vinc vincul ulad ado. o. Esse Esse vínc víncul uloo se asse asseme melh lhaa a um umaa cone conexã xãoo de rede, ou seja: ja: o banco de dados não é um arquivo que pode ser manipulado ado dire iretamen amentte, mas mantém um cana anal de comunicação ção com seu aplica icativo pela qual as operações serão executadas. É como uma ligação telefônica: você pode conversar com as outras pessoas, mas não pode abraçá-las. Existe um provedor específico para cada SGBD. No nosso caso, como usaremos uma base Access, o prov proved edor or será será o Microsoft Jet OLEDB Provider. São São nece necess ssár ário ioss algu alguns ns parâ parâme metr tros os para para se esta estabe bele lece cerr a conexão, que variam de acordo com o provedor, mas no caso do Jet os parâmetros necessários são três:
Data Source: nome e o caminho completo ( path path) do arquivo MDB a ser conectado; User ID: identificação do usuário;
66
Microsoft Visual Basic 6
Password: senha do usuário. Obviamente, os dois últimos podem ser omitidos se o banco não estiver protegido por senha.
Abrindo e fechando a conexão Apó Após definir a Connecti ctionStri tring, podemos estab tabele elecer a conexão aplicando o método Open ao objeto Connection. Veja um exemplo de conexão ADO usando o Jet: Dim cnnTeste As New ADODB.Connection cnnTeste.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" & _ "Data Source=C:\Sistema\Dados.mdb;" cnnTeste.Open
Obs.: 4.0 é a versão do Jet para o Access 2000. Par Para fech fechar ar a cone conexã xãoo exis existe te o méto método do Clos Close, e, mas mas ao invé invéss de usá-l sá-loo é aco aconsel nselhhável ável a remo remoçã çãoo da var variáv iável da memória usando a palavra-chave Nothing e o comando Set: Set cnnTeste = Nothing
Objeto ADO Command Um coma comand ndoo ADO ADO é um umaa vari variáv ável el obje objeto to que que cont contém ém a defi defini niçã çãoo do coma comand ndoo a ser ser exec execut utad adoo pelo pelo prov proved edor or no banco de dados. Ele é necessário para qualquer operação ou manipulação dos dados do banco (uma sele seleçã çãoo de regi regist stro ros, s, por por exem exempl plo) o),, pois pois é nele nele que que defi defini nimo moss as conf config igur uraç açõe õess exig exigid idas as pelo pelo prov proved edor or para para executar o comando SQL correspondente. Entre essas configurações, devemos destacar as seguintes:
Propriedade ActiveConnection Contém o nome da conexão ADO ativa a ser usada para execução do comando.
Propriedades CommandText e CommandType Comm Comman andT dTex extt é um umaa stri string ng que que cont contém ém o coma comand ndoo a ser ser exec execut utad adoo pelo pelo obje objeto to comm comman and, d, e Comm Comman andT dTyp ypee indi indica ca seu seu tipo tipo,, ou melh melhor or,, como como Comm Comman andT dTex extt será será aval avalia iado do em temp tempoo de exec execuç ução ão pelo pelo obje objeto to Comm Comman and. d. CommandType pode ser um dos seguintes:
adCmdUnknown: indefinido (default). adCmdText: string que representa um comando SQL válido; adCmdTableDirect: nome de uma tabela; nome de um umaa stor stored ed pro proced cedure ure (o equ equival ivalen ente te a uma cons consul ulta ta ação ação do Acce Access ss)) ou adCmdStoredProc: nome de uma view (que equivale a uma consulta seleção); indica ca que que Com Command mandT Text ext é um coma comand ndoo ou stor stored ed pro proced cedure ure que que não reto retorn rnaa adExecuteNoRecords: indi nenhum registro. Por exemplo, um comando de inserção de registros em uma tabela. Caso algum registro seja retornado, ele será desprezado. Sempre deve ser combinado com adCmdText or adCmdStoredProc.
Executando o comando A execução do comando ADO é feita pelo método Execute. Veja um exemplo: Dim cnnComando As New ADODB.Command With cnnComando .ActiveConnection = cnnTeste .CommandType .CommandType = adCmdStoredProc adCmdStoredProc .CommandText .CommandText = "spAtualizaSaldo" "spAtualizaSaldo" .Execute End With
Not Note o uso das propriedades: como o tipo informado ado em CommandType é adCmdStoredProc, o provedor interpreta o texto contido em CommandText (“spAtualizaSaldo”) como sendo o nome de uma stored procedure, que será executada.
67
Microsoft Visual Basic 6
Objetos Recordset Um Recordset é a repr epresentaç tação lógica de um conjunto de regist istros, daí seu nome. Pode receber todos os regi regisstros tros de um umaa tabe tabela la,, o res resulta ultado do de uma cons consul ulta ta,, ou aind aindaa uma sele seleçã çãoo de dado dadoss feit feitaa por por um coma comand ndoo SQL. SQL. O reco record rdse sett tamb também ém é um umaa vari variáv ável el obje objeto to,, assi assim, m, para para faze fazerr a asso associ ciaç ação ão com com o conj conjun unto to de regi regist stro ross desejado deve ser usado o comando Set e o método Execute em um comando ADO. Veja um exemplo: Dim cnnComando As New ADODB.Command Dim rsSelecao As New ADODB.Recordset With cnnComando .ActiveConnection = cnnTeste .CommandType .CommandType = adCmdTableDirect adCmdTableDirect .CommandText .CommandText = "Clientes" Set rsSelecao = .Execute End With
Em noss nossoo exem exempl ploo, o reco recorrdset dset rsS rsSelec elecao ao será erá asso associ ciad adoo à tab tabela ela Clien liente tess, e assi assim m todo todoss os seus eus regis egistr troos e cam campos pos pod poderão erão ser ser aces acesssados ados atra atravé véss de rsSel sSelec ecao ao.. Note Note que info inform rmam amoos que que “Cli “Clien ente tess” é o nom nome de um umaa tabela através do valor adCmdTableDirect em CommandType. Para se referir a um campo de um Recordset , devemos usar o caractere “!”. Por exemplo: para atribuir o valor do campo Preço de um Recordset cham chamad adoo rsPro sProdu duto toss a uma variá ariávvel, el, pode poderí ríam amos os usar sar o segui eguint ntee comando: vPreço = rsProdutos!Preço
Para Para fech fechar ar um Reco Record rdse set, t, nova novame ment ntee usam usamos os o coma comand ndoo Set Set e a pala palavr vraa chav chavee Noth Nothin ing, g, da mesm mesmaa mane maneir iraa que fizemos com o Command: Set rsSelecao = Nothing
Veja a seguir as principais propriedades e métodos do Recordset :
Propriedades BOF e EOF Essa Essass prop propri ried edad ades es indi indica cam m se o apon aponta tado dorr de regi regist stro ross está está posi posici cion onad adoo no iníc início io ou no fim fim da tabe tabela la.. BOF BOF reto retorn rnaa True rue se o apon aponta taddor esti estive verr no iníc início io da tab tabela, ela, e EOF EOF reto retorn rnaa Tru True se esti estivver no fina finall da tabe tabela la.. Em qualquer outro caso, ambas retornam False.
Propriedade AbsolutePosition Essa propriedade retorna o número do registro corrente na tabela.
Propriedade RecordCount Retorna o número de registros que contidos no Recordset .
Métodos Move (MoveFirst, MoveLast, MoveNext e MovePrevious) Esses métodos fazem a movimentação seqüencial do apontador de registros dentro do Recordset :
MoveFirst move o apontador para o primeiro registro do Recordset ; MoveLast move o apontador para o último registro do Recordset ; MoveNext move o apontador para o próximo registro; MovePrevious move o apontador para o registro anterior.
Módulos de Programação Como vimos na lição anterior, existem vários tipos de objetos que podem ser adicionados ao projeto. Um dos mais mais usad usados os é o mó módu dulo lo de prog rograma ramaçã ção, o, que que é um arqu arquiv ivoo tex texto com com exte extens nsão ão BAS con conten tendo proc proced edur ures es,, funç funçõe õess e decl declar araç açõe õess de uso uso gera gerall no sist sistem ema. a. Um uso uso mu muit itoo freq freqüe üent ntee é a decl declar araç ação ão de vari variáv ávei eiss públ públic icas as.. Vari Variáv ávei eiss Conn Connec ecti tion on são são freq freqüe üent ntem emen ente te decl declar arad adas as como como públ públic icas as,, para para que que não não seja seja nece necess ssár ária ia a cria criaçã çãoo de uma conexão com o banco a cada vez que precisarmos usar um command – se a conexão é pública, podemos usar sempre a mesma.
68
Microsoft Visual Basic 6
Para Para adic adicio iona narr um mó módu dulo lo de prog progra rama maçã çãoo ao proj projet eto, o, usam usamos os a opçã opçãoo Add Module do menu menu Project do VB. VB. A operação da janela Add Module é a mesma da Add Form:
Usando o Banco de Dados Para começar, criaremos um novo banco de dados no Access com o nome de Biblio. Ele conterá quatr atro tab tabelas elas,, que que deve devem m con conter ter as estr estrut utur uras as desc descrritas itas a seg seguir uir (sig (sigaa fielm ielmen ente te os nome nomess das tab tabelas elas e os nome nomess e propriedades dos campos, para que a codificação do projeto funcione corretamente): Tabela: Categorias Nome do Campo
CodCategoria (Chave primária) NomeCategoria
Número Texto
Tipo
Propriedades
Tamanho = Inteiro Longo Tamanho = 35
Tabela: Editoras Nome do Campo
CodEditora (Chave primária) NomeEditora
Número Texto
Tipo
Propriedades
Tamanho = Inteiro Longo Tamanho = 35
Tabela: Livros Nome do Campo
CodLivro (Chave primária) Titulo Autor CodEditora CodCategoria AcompCD AcompDisquete Idioma Observacoes Emprestado CodUsuario DataEmprestimo DataDevolucao
Tipo
Número Texto Texto Número Número Sim/Não Sim/Não Número Memorando Sim/Não Número Data/Hora Data/Hora
Propriedades
Tamanho = Inteiro Longo Tamanho = 50 Tamanho = 35 Tamanho = Inteiro Longo Tamanho = Inteiro Longo Tamanho = Byte Tamanho = Inteiro Longo Formato = Data Abreviada Formato = Data Abreviada
69
Microsoft Visual Basic 6
Tabela: Usuarios Nome do Campo
CodUsuario (Chave primária) NomeUsuario Endereco Cidade Estado CEP Telefone
Número Texto Texto Texto Texto Texto Texto
Tipo
Propriedades
Tamanho = Inteiro Longo Tamanho = 35 Tamanho = 60 Tamanho = 25 Tamanho = 2 Tamanho = 9 Tamanho = 15
Após a criação do banco de dados, vamos criar a conexão no sistema Bibliotecário: 1. Abra Abra o VB e o projeto projeto Bibli Bibliote otecar cario, io, se se ainda ainda não o fez; fez; 2. Preci recisa samo moss adic adicio iona narr às refer eferên ênci cias as do pro projeto jeto a bib biblio lioteca teca que que per permite mite a util utiliz izaç ação ão dos objet bjetoos ADO. ADO. Abra o menu Project do VB e escolha a opção References:
3. O VB abre uma janela chamada References. Note Note que que já exis existe tem m algu alguma mass refe referê rênncias cias marca arcada das. s. Para ara adic adicio iona narr um umaa nova nova,, bast bastaa clic clicar ar na checkbox ao lado lado de seu seu nome nome.. Para Para remo remove verr um umaa refe referê rênc ncia ia,, remo remova va a marca de seleção (obs.: o VB não permite a remoção de uma biblioteca que esteja em uso); 4. A biblioteca que usaremos é a Microsoft ActiveX Data Objects Library Exis Existe tem m vári várias as vers versõe õess dess dessaa bibli ibliot otec eca, a, depe depend nden endo do da ver versão são do Jet que que esti estivver ins instala talada da em sua sua máqu máquin ina. a. Se hou houver ver mais mais de uma, ma, procure sempre utilizar a mais recente (na figura está sendo usada a versão 2.5). Clique em Ok; 5. Vamos declarar a variável Connection como pública. Para isso, precisamos de um módulo de programação. Abra o menu Project e escolha a opção Add Module ; 6. Após adicion adicionar ar o módulo módulo abra-o abra-o na janela janela Código, Código, e na seção seção Declaration Declarationss escreva escreva o comando: comando: Public cnnBiblio As New ADODB.Connection
7. Grave Grave o módu módulo lo de de progra programaç mação ão com com o nome nome de de Biblio.BAS; 8. Vamos abrir a conexão com o banco de dados no evento Timer do formulário de Splash. Abra o formulário frmSplash na janela Código; 9. Altere a procedur proceduree Timer1_Ti Timer1_Timer mer para para que que fique fique como como a seguir: seguir: Private Sub Timer1_Timer() Timer1_Timer() On Error GoTo errConexao cnnBibli cnnBiblio.Co o.Connec nnection tionStri String ng = "Provide "Provider=Mi r=Micros crosoft. oft.Jet. Jet.OLED OLEDB.3. B.3.51;" 51;" & _ "Data Source=" & App.Path & "\Biblio.mdb;" cnnBiblio.Open
Microsoft Visual Basic 6
70
Unload Me frmBiblio.Show Exit Sub errConexao: With Err If .Number <> 0 Then MsgBox "Houve um erro na conexão com o banco de dados." & _ vbCrLf & "O sistema será encerrado.", _ vbCritical + vbOKOnly + vbApplicationModal, _ "Erro na conexão" .Number = 0 Set cnnBiblio = Nothing End End If End With End Sub
Obs.: note que no trecho aci acima usamos a versão 3.51 do Jet. Note também o uso de App App.Path em Data ata Source: App é o objeto Application, e Path uma pro proprie prieda dade de que que retor etorna na a past pastaa onde onde a apli aplica caçã çãoo está está inst instala alada da.. Port Portan anto to,, App. App.Pa Path th info inform rmaa ao prov proved edor or que que o arqu arquiv ivoo Bibl Biblio io.M .MDB DB está está loca locali lizad zadoo na mesm mesmaa pasta da aplicação. 10. É interess essante fechar a conexão quando encerramos o sistem tema. Abra então tão o formulário frmBiblio na janela Código e escreva o evento Unload, que ocorre quando o formulário é fechado: Private Sub MDIForm_Unload(Cancel MDIForm_Unload(Cancel As Integer) Set cnnBiblio = Nothing End Sub
11. Grave Grave seu traba trabalho lho.. Repa Repare re que que aind aindaa não não usam usamos os nenh nenhum um coma comand ndoo ADO, ADO, só nos nos cone conect ctam amos os ao banc bancoo de dado dados. s. Ante Antess de faze fazerr isso, vamos estudar um pouco de SQL, que é o assunto da próxima lição.
71
Microsoft Visual Basic 6
Lição 9: Manipulação de Registros Ness Nessaa liçã lição, o, vamo vamoss estu estuda darr a prog progra rama maçã çãoo nece necess ssár ária ia para para exec execut utar ar as oper operaç açõe õess bási básica cass de mani manipu pula laçã çãoo de registros, que são: seleção, inclusão, alteração e exclusão. Usaremos como base para nosso estudo a tabela de Usu Usuários, pois como ela ela possui apenas um camp ampo numérico, e todos os demais são do tip tipo texto, é a mais simples de trabalhar com os controles que conhecemos até aqui. É impo import rtan ante te ress ressal alta tarr que que não não cons consta tará rá ness nessaa apos aposti tila la os form formul ulár ário ioss e a prog progra rama maçã çãoo refe refere rent ntes es às tabe tabela lass Edit Editor oras as e Cate Catego gori rias as,, pois pois serã serãoo prat pratic icam amen ente te igua iguais is àque àquela lass que que vamo vamoss elab elabor orar ar para para a de Usuá Usuári rios os.. Fica Ficará rá para você, portanto, desenvolver essas rotinas como exercício de fixação.
Um Pouco de SQL Ant Antes de começar a traba abalha lhar no formulári ário, preci ecisamo amos conhecer um pouco da ling inguagem SQL. A SQL (Struct Structure ure Query Query Langua Language ge – Linguagem de Consulta Estruturada) é uma linguagem comum de gere gerenc ncia iame ment ntoo de banc bancos os de dado dadoss relac elacio ionnais ais cria criada da para para padr padrooniza nizarr o trat tratam amen ento to dos dos dados ados em todo todoss os sist sistem emas as que que obed obedeç eçam am ao padr padrão ão SQL SQL vige vigent nte. e. Isso Isso quer quer dize dizerr que que os mesm mesmos os coma comand ndos os SQL SQL que que você você usa usa no Acces Accesss pode podem m ser ser apli aplicad cados os na maio maiori riaa dos dos SGBD SGBDss de arqu arquit itet etur uraa clien cliente te-s -ser ervi vido dorr exis existe tent ntes es no merc mercad ado. o. É importante destacar, porém, que a SQL não é uma linguagem de programação comum, usada para a cria criaçã çãoo de sist sistem emas as e apli aplica cati tivo vos, s, e sim sim um umaa ling lingua uage gem m volt voltad adaa excl exclus usiv ivam amen ente te para para apli aplica caçõ ções es em banc bancos os de dados relacionais. Não vamos abordar SQL a fundo nesse texto, pois não é esse o objetivo do curso. Veremos apenas os coma comand ndos os prin princi cipa pais is,, que que perm permit itam am à apli aplica caçã çãoo que que esta estamo moss cons constr trui uind ndoo exec execut utar ar as oper operaç açõe õess bási básica cass de manutenção de bancos de dados.
Comando SELECT SELE SELECT CT é o coma comand ndoo para ara selec elecio ionnar dado dadoss no banc bancoo de dado dadoss e reto retorrnar nar as info inforrmaçõ mações es soli solici cita tada dass como como um conjunto de registros. Certamente é o comando SQL mais utilizado. Sua sintaxe básica é: SELECT * FROM [WHERE ] [ORDER BY ];
Ou então: SELECT campo1, campo2, campo3, ..., campoN FROM [WHERE ] [ORDER BY ];
Onde:
*: indica que todos os campos da tabela devem ser selecionados; Lista de campos: indica que somente os campos especificados devem ser selecionados; Tabela: nome da tabela que contém os dados a serem selecionados; (opcio iona nal) l):: expr expres essã sãoo lógi lógica ca que que indi indica ca que que some soment ntee os regi regist stro ross que que aten atenda dam m à ela ela deve devem m ser ser Condição (opc selecionados pelo comando SELECT; opcion onal al)): list listaa de camp campos os,, sep separad arados os por por vírg vírguulas, las, que que indi indica cam m a orde ordem m de clas classsific ificaç ação ão dos dos Ordem (opci registros selecionados. Ao exec execut utar ar esta esta opera peraçã ção, o, o prov rovedor edor proc procur uraa no banc bancoo de dados ados a tabe tabela la espe especi cifi fica cada da,, extr extrai ai as colu coluna nass esco escolh lhid idas as,, selec elecio iona na as linh linhas as que que satis atisfa faze zem m a cond condiç ição ão e fin finalm almente ente clas classi siffica ica as lin linhas has resu result ltan ante tess na ordem especificada. É importante destacar que, apesar de WHERE e ORDER BY serem opcionais e podermos usá-los em separado, no caso de ambos serem utilizados obrigatoriamente WHERE deverá vir antes de ORDER BY. Veja alguns exemplos: Para selecionar todos os campos da tabela de funcionários: SELECT * FROM Funcionarios;
Se quiser ordenar os regitros em ordem alfabética, poderia usar: SELECT * FROM Funcionarios ORDER BY Nome;
Microsoft Visual Basic 6
72
Para selecionar apenas os campos Nome e Departamento da mesma tabela: SELECT Nome, Departamento FROM Funcionarios;
Para filtrar apenas os funcionários do departamento RH: SELECT Codigo, Nome FROM Funcionarios WHERE Departamento = “RH”;
Usando WHERE e ORDER BY juntos: SELECT Codigo, Nome FROM Funcionarios WHERE Departamento = “RH” ORDER BY Nome;
Em um prim primei eiro ro mom omen ento to,, usar usarem emos os o com comando ando SELE SELECT CT para para selec elecio ionnar apen apenas as um regi regisstro tro por vez. vez. Nas Nas próx próxim imas as liçõ lições es,, prin princi cipa palm lmen ente te quan quando do fala falarm rmos os de cons consul ulta tas, s, esta estare remo moss estu estuda dand ndoo-oo com com um pouc poucoo mais mais de profundidade.
Comando INSERT INSERT é o comando SQL usado para adicionar registros a uma tabela. Sua sintaxe é a seguinte: INSERT INTO (campo1, campo2, campo3, ..., campoN) VALUES (valor1, valor2, valor3, ..., ValorN);
Onde:
Tabela: é o nome da tabela em que o novo registro deve ser inserido; Lista de campos: os nomes dos campos nos quais os dados devem ser gravados; Lista de valores: dados a serem gravados nos campos, sendo que cada valor é inserido no campo correspondente à posição do valor na lista: valor1 em campo1, valor2 em campo2, e assim por diante. Não Não é nece necess ssár ário io indi indica carr valo valore ress para para todo todoss os camp campos os da tabe tabela la.. Quan Quando do um dado dado não não fore forem m desi design gnad adoo para para um camp campoo qual qualqu quer er,, o valo valorr padr padrão ão defi defini nido do nas nas prop propri ried edad ades es dos dos camp campos os om omit itid idos os será será inse inseri rido do pelo pelo Jet. Jet. Se não não exis existi tirr um valo valorr padr padrão ão,, entã entãoo será será inse inseri rido do Null Null (nul (nulo) o) nas nas colu coluna nass om omit itid idas as.. Ness Nessee caso caso,, o camp campoo deve deve suportar o valor nulo. Os registros são sempre adicionados no final da tabela. O pont pontoo-ee-ví vírg rgul ulaa faz faz part partee da sint sintax axee de todo todo coma comand ndoo SQL. SQL. É cham chamad adoo de term termin inad ador or,, e serv servee para para indi indica carr o fim do comando. Para alguns provedores (como o Jet) ele é dispensável. Veja um exemplo que cria um novo registro numa tabela chamada Funcionários: INSERT INTO Funcionários (Codigo, Nome, Sobrenome, Titulo) VALUES (73, 'André', 'Pereira', 'Estagiário');
Comando UPDATE UPDA UPDATE TE faz faz a atua atuali liza zaçã çãoo de regi regist stro ross de um umaa tabe tabela la,, de acor acordo do com com um umaa cond condiç ição ão.. Deve Devemo moss indi indica carr quai quaiss campos serão atualizadados. Sua sintaxe é: UPDATE SET = [WHERE ];
Onde:
Tabela: nome da tabela cujos registros devem ser alterados: Campo: nome do campo onde deve ser gravado o novo valor. Podem ser alterados vários campos ao mesmo tempo; Valornovo: valor ou expressão cujo resultado será gravado no campo indicado; ica que indica quais registros deve evem ser afetad tados pelo comando Condição (opcional): expressão lógica Upda Update te.. Mas cuid cuidad ado! o! Se não não for for espe especi cifi fica cada da um umaa con condiçã dição, o, Upda Update te vai vai alte altera rarr TODO TODOS S os reg registr istros os da tabela. Veja alguns exemplos: Para alterar o campo nome do registro cujo campo código é igual a 15 na tabela Funcionários: UPDATE Funcionários Funcionários SET Nome = 'José Lima' WHERE Codigo = 15;
Para calcular o preço de venda de todos os registros de uma tabela chamada Produtos: UPDATE Produtos SET PrecoVenda = (PrecoCusto * 1.25);
73
Microsoft Visual Basic 6
Comando DELETE Realiza a exclusão de registros da tabela indicada. Veja a sintaxe: DELETE FROM [WHERE ];
Onde:
Tabela: nome da tabela da qual os registros são excluídos; opcion onal al)): expr expres essã sãoo lóg lógica ica que que indi indica ca quais uais reg registr istros os deve devem m ser ser excl excluuídos ídos.. Apes Apesar ar de ser Condição (opci opcional, é ext extremamente important ante especif cificar car uma condição, pois em caso contrário TODOS os registros da tabela serão excluídos. Veja um exemplo: DELETE FROM Funcionários WHERE Titulo = 'Estagiário'; 'Estagiário';
Esse exemplo exclui todos os registros da tabela Funcionários cujo título seja “Estagiário”. Bem, agora que já vimos os comandos SQL que vamo amos precisar, começemo emos a trabalh alhar. Inclua lua um novo formulário no projeto e formate-o como no exemplo a seguir:
Altere as propriedades dos objetos conforme a tabela: Objeto
Nome
Formulário
frmCadUsuarios
Caixa de texto
txtCodUsuario
Caixa de texto
txtNomeUsuario
Caixa de texto
txtEndereco
Caixa de texto
txtCidade
Caixa de texto
txtEstado
Caixa de texto
txtTelefone
Caixa de texto
txtCEP
Outras Propriedades = Valor
Caption = Cadastro de Usuários BorderStyle = 1 – Fixed Single Icon = Misc\Misc28.ICO KeyPreview = True MDIChild = True Text = “” MaxLength = 5 Text = “” MaxLength = 35 Text = “” MaxLength = 60 Text = “” MaxLength = 25 Text = “” MaxLength = 2 Text = “” MaxLength = 15 Text = “” MaxLength = 9
74
Microsoft Visual Basic 6
Objeto
ImageList
Nome
ImageList1
Outras Propriedades = Valor
Tamanho das imagens: 32 x 32 pixels Imagens: 1 = Computer\Disk04.ICO 2 = Writing\Erase02.ICO 3 = Computer\Trash01.ICO 4 = Traffic\Trffc14.ICO ToolBar ToolBar1 ImageList = ImageList1 Appearance = 1 – cc3D BorderStyle = 0 – ccNone Style = 1 – tbrFlat Botão 1: ToolTipText = Grava o registro atual Image = 1 Botão 2: ToolTipText = Limpa os dados digitados Image = 2 Botão 3: ToolTipText = Exclui o registro atual Image = 3 Enabled = False (desmarcar) Botão 4: ToolTipText = Retorna ao menu principal Image = 4 O funcionamento básico do formulário será o seguinte: Apó Após a dig digitaç itação ão do cód código igo do usuá usuári rio, o, será erá feita eita um umaa pesq pesquuisa isa para para verif erific icar ar se o códi código go exis existe te ou não não na tabela. Se exist istir, os dados do registro serão exi exibidos nos cam campos do form e poderão ser altera erados. Caso contrário, será considerado como um código novo, ou seja, uma operação de inclusão; O botão Excluir só deverá estar habilitado quando o registro estiver em modo de alteração; Quan Quando do o botão otão Grav Gravar ar for clic clicad ado, o, dever everáá ser feit feitaa um umaa crít crític icaa nos nos dad dados digi digita tado doss ante antess da grav gravaç ação ão,, para identificar possíveis erros de digitação e impedir a gravação nesse caso; Quando o botão Limpar for clicado, qualquer dado constante nos campos do formulário será apagado. Vamos agora escrever a codificação. Siga os passos: 1. Inici nicial alme mennte, te, escr escrev ever erem emoos as proce rocedu dure ress ref referen erente tess aos aos even evento toss do form formuulár lário. io. Abra Abra a jane janela la códi código go a partir do formulário frmCadUsuarios e programe os eventos Load e KeyPress conforme abaixo: Private Sub Form_Load() 'Centraliza o formulário na área de trabalho do MDI: Me.Left = (frmBiblio.ScaleWidth (frmBiblio.ScaleWidth - Me.Width) / 2 Me.Top = (frmBiblio.ScaleHeight - Me.Height) / 2 End Sub Private Sub Form_KeyPress(KeyAscii Form_KeyPress(KeyAscii As Integer) 'Se a tecla Enter foi pressionada, passa o foco para o próximo controle na 'seqüência de TabIndex: If KeyAscii = vbKeyReturn Then SendKeys "{Tab}" KeyAscii = 0 End If End Sub
Obs. Obs.:: como como um form formul ulár ário io MDIC MDIChi hild ld não não acei aceita ta a prop propri ried edad adee Star StartU tUpP pPos osit itio ion, n, escr escrev evem emos os no even evento to Load a codificação necessária para centralizar o form dentro da área de trabalho do MDI. As propriedade ades ScaleWidth e Scale aleHeight retornam, am, resp espectivamente, a largura e a altur tura da área de trabalho do formulário.
Microsoft Visual Basic 6
75
2. Vamo Vamoss inic inicia iarr a pro program gramaç ação ão das opera peraçõ ções es de man manuten utençã çãoo de regi regist strros. os. Noss Nossaa prim primei eirra preo preocu cupa paçã çãoo deve deve ser ser como como iden identi tifi fica carr se esta estamo moss faze fazend ndoo um umaa incl inclus usão ão ou um umaa alte altera raçã ção. o. A mane maneir iraa mais mais simp simple less é cria crianndo um umaa vari variáv ável el priva rivada da que que info inform rmee se o regi regisstro tro exis existe te ou não não na tabe tabela la.. Abra Abra a jan janela ela Cód Código igo na seção Declaration e declare a variável: Dim vInclusao As Boolean
3. Ago Agora vamos amos pesqu esquis isar ar na tabe tabela la o códi código go digit igitad adoo pelo pelo oper operad ador or.. Farem aremos os isso isso no even evento to LostF ostFoc ocuus do campo txtCodUsuario: Private Sub txtCodUsuario_LostFocus txtCodUsuario_LostFocus() () Dim cnnComando As New ADODB.Command Dim rsSelecao As New ADODB.Recordset On Error GoTo errSelecao 'Verifica se foi digitado um código válido: If Val(txtCodUsuario.Text) Val(txtCodUsuario.Text) = 0 Then MsgBox "Não foi digitado um código válido, verifique.", _ vbExclamation + vbOKOnly + vbApplicationModal, "Erro" Exit Sub End If Screen.MousePointer = vbHourglass With cnnComando .ActiveConnection = cnnBiblio .CommandType .CommandType = adCmdText 'Monta o comando SELECT para selecionar o registro na tabela: .CommandText = "SELECT * FROM Usuarios WHERE CodUsuario = " & _ txtCodUsuario.Text txtCodUsuario.Text & ";" Set rsSelecao = .Execute End With With rsSelecao If .EOF And .BOF Then 'Se o recordset está vazio, não retornou registro com esse código: LimparDados 'Identifica a operacao como Inclusão: vInclusao = True Else 'Senão, atribui aos campos os dados do registro: txtNomeUsuario.Text = !NomeUsuario txtEndereco.Text txtEndereco.Text = !Endereco txtCidade.Text txtCidade.Text = !Cidade txtEstado.Text txtEstado.Text = !Estado txtCEP.Text = !CEP txtTelefone.Text txtTelefone.Text = Empty & !Telefone 'Identifica a operacao como Alteração: vInclusao = False 'Habilita o botão Excluir: Toolbar1.Buttons(3).Ena Toolbar1.Buttons(3).Enabled bled = True End If End With 'Desabilita a digitação do campo código: txtCodUsuario.Enabled = False Saida: 'Elimina o command e o recordset da memória: Set rsSelecao = Nothing Set cnnComando = Nothing Screen.MousePointer = vbDefault Exit Sub errSelecao: With Err If .Number <> 0 Then MsgBox "Houve um erro na recuperação do registro solicitado.", solicitado.", _ vbExclamation + vbOKOnly + vbApplicationModal, "Aviso" .Number = 0 GoTo Saida End If End With End Sub
Microsoft Visual Basic 6
76
Repa Repare re como como foi foi monta ontado do o coma comanndo SELE ELECT: CT: inf informa ormanndo à cláu cláussula ula WHER WHERE E o códi código go a pesq pesqui uisa sarr por concatenação. Mas continuemos a programação do formulário: 4. “LimparDado “LimparDados” s” é uma subrot subrotina ina para apagar apagar os os campos campos do formulári formulárioo (menos (menos o código): código): Private Sub LimparDados() LimparDados() 'Apaga o conteúdo dos campos do formulário: txtNomeUsuario.Text = Empty txtEndereco.Text txtEndereco.Text = Empty txtCidade.Text txtCidade.Text = Empty txtEstado.Text txtEstado.Text = Empty txtCEP.Text = Empty txtTelefone.Text txtTelefone.Text = Empty End Sub
5. Já podemos podemos fazer fazer a codificaçã codificaçãoo da barra barra de botões. botões. Note as as chamadas chamadas a subrotina subrotinas: s: Private Sub Toolbar1_ButtonClick(ByVal Button As MSComctlLib.Button) 'Verifica qual foi o botão clicado: Select Case Button.Index Case 1 'Botão Gravar: GravarDados Case 2 'Botão Limpar: LimparTela Case 3 'Botão Excluir: ExcluirRegistro Case 4 'Botão Retornar: Unload Me End Select End Sub
6. “GravarDado “GravarDados”, s”, como o próprio próprio nome nome indica, indica, é a subrotina subrotina de gravação gravação dos dados dados digitados digitados.. Nela vamos iden identi tifficar icar o tipo tipo de opera peraçã çãoo que que devem evemos os exec execut utar ar (inc (inclu lussão ou alte altera raçã ção) o) e monta ontarr o coma comand ndoo SQL SQL correspondente: Private Sub GravarDados() GravarDados() Dim cnnComando As New ADODB.Command Dim vConfMsg As Integer Dim vErro As Boolean On Error GoTo errGravacao 'Inicializa as variáveis auxiliares: vConfMsg = vbExclamation + vbOKOnly + vbSystemModal vErro = False 'Verifica os dados digitados: If txtNomeUsuario.Text txtNomeUsuario.Text = Empty Then MsgBox "O campo Nome não foi preenchido.", vConfMsg, "Erro" vErro = True End If If txtEndereco.Text = Empty Then MsgBox "O campo Endereço não foi preenchido.", vConfMsg, "Erro" vErro = True End If If txtCidade.Text = Empty Then MsgBox "O campo Cidade não foi preenchido.", vConfMsg, "Erro" vErro = True End If If txtEstado.Text = Empty Then MsgBox "O campo Estado não foi preenchido.", vConfMsg, "Erro" vErro = True End If If txtCEP.Text = Empty Then MsgBox "O campo CEP não foi preenchido.", vConfMsg, "Erro" vErro = True End If 'Se aconteceu um erro de digitação, sai da sub sem gravar: If vErro Then Exit Sub
Microsoft Visual Basic 6
Screen.MousePointer = vbHourglass With cnnComando .ActiveConnection = cnnBiblio .CommandType .CommandType = adCmdText 'Verifica a operação e cria o comando SQL correspondente: If vInclusao Then 'Inclusão: .CommandText .CommandText = "INSERT INTO Usuarios " & _ "(CodUsuario, NomeUsuario, Endereco, Cidade, " & _ "Estado, CEP, Telefone) VALUES ('" & _ txtCodUsuario.Text txtCodUsuario.Text & ",'" & _ txtNomeUsuario.Text txtNomeUsuario.Text & "','" & _ txtEndereco.Text & "','" & _ txtCidade.Text & "','" & _ txtEstado.Text & "','" & _ txtCEP.Text & "','" & _ txtTelefone.Text txtTelefone.Text & "');" Else 'Alteração: .CommandText .CommandText = "UPDATE Usuarios SET " & _ "NomeUsuario "NomeUsuario = '" & txtNomeUsuario.Text txtNomeUsuario.Text & "'," & _ "Endereco = '," & txtEndereco.Text & "'," & _ "Cidade = '," & txtCidade.Text & "'," & _ "Estado = '," & txtEstado.Text & "'," & _ "CEP = '," & txtCEP.Text & "'," & _ "Telefone = '," & txtTelefone.Text & "' " & _ "WHERE CodUsuario = " & txtCodUsuario.Text & ";" End If .Execute End With MsgBox "Gravação concluída com sucesso.", _ vbApplicationModal + vbInformation + vbOKOnly, _ "Gravação OK" 'Chama a sub que limpa os dados do formulário: LimparTela Saida: Screen.MousePointer = vbDefault Set cnnComando = Nothing Exit Sub errGravacao: With Err If .Number <> 0 Then MsgBox "Houve um erro durante a gravação dos dados na tabela.", _ vbExclamation + vbOKOnly + vbApplicationModal, "Erro" .Number = 0 GoTo Saida End If End With End Sub
7. “LimparTela “LimparTela”” também é uma subroti subrotina, na, que limpa limpa totalmente totalmente o formulári formulárioo para uma nova nova digitação: digitação: Private Sub LimparTela() LimparTela() 'Chama a sub LimparDados para limpar os campos do formulário: LimparDados 'Desabilita o botão Excluir: Toolbar1.Buttons(3).Ena Toolbar1.Buttons(3).Enabled bled = False 'Apaga o conteúdo do campo CodUsuario e lhe passa o foco: txtCodUsuario.Text txtCodUsuario.Text = Empty txtCodUsuario.SetFocus End Sub
8. Falta ainda ainda a subroti subrotina na de exclusão exclusão de registr registros. os. Essa Essa é um pouco pouco mais simples: simples: Private Sub ExcluirRegistro() ExcluirRegistro() Dim cnnComando As New ADODB.Command Dim vOk As Integer On Error GoTo errExclusao
77
Microsoft Visual Basic 6
78
'Solicita confirmação da exclusão do registro: vOk = MsgBox("Confirma a exclusão desse registro?", _ vbApplicationModal vbApplicationModal + vbDefaultButton2 + vbQuestion + vbYesNo, _ "Exclusão") If vOk = vbYes Then Screen.MousePointer = vbHourglass With cnnComando .ActiveConnection = cnnBiblio .CommandType .CommandType = adCmdText 'Cria o comando SQL: .CommandText = "DELETE FROM Usuarios WHERE CodUsuario = " & _ txtCodUsuario.Text txtCodUsuario.Text & ";" .Execute End With MsgBox "Registro excluído com sucesso.", _ vbApplicationModal + vbInformation + vbOKOnly, _ "Exclusão OK" 'Chama a sub que apaga todos os campos do formulário: LimparTela End If Saida: Screen.MousePointer = vbDefault Set cnnComando = Nothing Exit Sub errExclusao: With Err If .Number <> 0 Then MsgBox "Houve um erro durante a exclusão do registro.", _ vbExclamation + vbOKOnly + vbApplicationModal, "Erro" .Number = 0 GoTo Saida End If End With End Sub
9. Para Para term termin inar ar a codi codifi fica caçã çãoo dess dessee form formul ulár ário io falt faltaa apen apenas as codi codifi fica carr o even evento to Lost LostFo Focu cuss dos dos camp campos os cujo cujo conteúdo queremos formatar antes de gravar: Private Sub txtNomeUsuario_LostFocu txtNomeUsuario_LostFocus() s() 'Converte a primeira letra de cada palavra digitada em maiúscula, 'e as demais em minúsculas: txtNomeUsuario.Text = StrConv(txtNomeUsuario.Text, vbProperCase) End Sub Private Sub txtCidade_LostFocus() txtCidade_LostFocus() txtCidade.Text = StrConv(txtCidade.Text, vbProperCase) End Sub Private Sub txtEndereco_LostFocus() txtEndereco_LostFocus() txtEndereco.Text = StrConv(txtEndereco.Text, vbProperCase) End Sub Private Sub txtEstado_LostFocus() txtEstado_LostFocus() 'Converte a sigla do Estado digitada em letras maiúsculas: txtEstado.Text txtEstado.Text = UCase(txtEstado.Text) UCase(txtEstado.Text) End Sub Private Sub txtCEP_LostFocus() txtCEP_LostFocus() 'Formata o CEP digitado: txtCEP.Text = Format(txtCEP.Text, "00000-000") End Sub
10. Finalmente, abra o formulário frmBiblio na janela Código e codifique o evento Click do menu mnuCadUsuarios: Private Sub mnuCadUsuarios_Click() mnuCadUsuarios_Click() frmNovoArtista.Show End Sub
Microsoft Visual Basic 6
79
11. Altere o evento Click da ToolBar para chamar esse mesmo formulário formulário quando for clicado o botão nº 1: Private Sub Toolbar1_ButtonClick(ByVal Button As MSComctlLib.Button) If Button.Index = 1 Then frmCadLivros.Show ElseIf Button.Index = 5 Then mnuSair_Click End If End Sub
12. 12. Teste este o apli aplica cati tivvo. No cas caso de algu algum m erro erro,, veri veriffique ique cuid cuidad ados osam amen ente te a cons constr truução ção dos dos coma comanndos dos SQL, SQL, pois ois um umaa simpl imples es vírgu írgula la fora ora do luga lugarr ou falt faltan ando do faz faz com com que que um coma comand ndoo não não funci uncion one. e. Apro Aprovveite eite para incluir alguns usuários em seu banco de dados; 13. Grave esse esse formulári formulárioo com o nome nome de frmCadUsuarios; 14. Baseado na programação vista nessa lição, crie os formulários para manutenção dos cadastros de Categorias e de Editoras.
80
Microsoft Visual Basic 6
Lição 10: Mais Controles Além de caixas de textos e labels, podemos usar para ara alimentar os campos das tabelas quaisquer outros controles que permitam a entrada de dados. Em nosso caso, vendo a estrutura da tabela de Livros, encontraremos alguns campos que se encaixam nessa situação. Vejamos: Os campos CodEditora e CodCatego egoria estão relacio cionados, respect ectivamente, te, às tabelas Editoras e Categorias, e portanto podemos montar caixas de combinação onde o operador possa fazer sua escolha; Os campos AcompCD e AcompDisquete são do tipo Sim/Não, e portanto podemos usar caixas de verificação para marcar e desmarcar essas opções; O campo Idioma, do tipo Byte, recebe eberá um valor entre 0 e 2 que indicará ará o idioma em que está escri crito o livro, sendo que 0 = Português, 1 = Inglês e 2 = Outro. Como não podem ser marcadas dois ou mais idiomas ao mesmo tempo, podemos montar para esse campo um grupo de botões de opção. Ness Nessaa liçã liçãoo estu estuda dare remo moss esse essess novo novoss cont contro role les, s, enqu enquan anto to elab elabor oram amos os mais mais algu alguns ns form formul ulár ário ioss do proj projet etoo Bibliotecário. Adicionalmente, veremos como abrir consultas criadas no Access em um projeto VB.
Caixas de Listagem Uma caixa de listagem oferece ao usuário uma lista de opções entre as quais ele deve obrigatoriamente efetuar sua escol colha. Se o número ero de itens não couber no esp espaço ocupado pela caixa no formulári ário, umaa barr um barraa de rola rolage gem m vert vertic ical al será será auto automa mati tica came ment ntee exib exibid ida. a. Um exem exempl ploo de caix caixaa de list listag agem em é enco encont ntra rado do num numa das das tela telass do assi assist sten ente te para para inst instal alaç ação ão de impr impres esso sorras do Wind Window ows: s: o usu usuário ário deve deve esco escolh lher er uma das impressoras apresentadas na lista:
Caixas de listagem para escolha de impressora do Windows
Caixas de Combinação As caix caixas as de comb combin inaç ação ão,, tamb também ém cham chamad adas as simp simple lesm smen ente te de combo, têm esse nome por serem uma mist mistur uraa de caix caixaa de tex texto com com caix caixaa de lis listag tagem. em. O usuá usuári rioo tan tanto pode ode esco escolh lher er um item item da lis lista como como digi digita tarr um valo valorr dire direta tame ment ntee na caix caixaa de text texto. o. As prin princi cipa pais is dife difere renç nças as entr entree um umaa ComboBox e uma ListBox são duas, dependendo do tipo de caixa de combinação usado: a combo pode permitir ao usuário escolher uma opção que não consta da caixa e ocupar menos espaço no formulário que uma caixa de listagem:
A propriedade que determina o tipo da caixa de combinação é a Style. Existem três tipos diferentes:
0 – DropDown Combo : é o tipo mais comum: permite tanto a escolha de um item da lista como a digit igitaç ação ão dir diretam etamen ente te na caix caixaa de text texto, o, incl inclus usiv ivee de um dado ado não não cons consta tannte da list lista. a. A list listaa fica fica ocult cultaa e é exibida quando se clica no botão ao lado da caixa de texto. É o estilo do nosso exemplo; nessee esti estilo lo a caix caixaa de list listag agem em é perm perman anen ente teme ment ntee exib exibid ida. a. O usuá usuári rioo pode pode digi digita tarr 1 – Simple Combo: ness diretamente na caixa de texto, mas a vantagem da economia de espaço é perdida.
Microsoft Visual Basic 6
81
bastan tante pare pareci cida da com com um umaa caix caixaa de list listag agem em comu comum. m. O usuá usuári rioo não não pode ode digi digita tarr 2 – DropDown List : é bas na caix caixaa de text texto, o, que serv servee apen apenas as para para exib exibir ir o item item selec elecio ionnado. ado. Com omoo não acei aceita ta digi digita taçã ção, o, não não pode ode ser escolhida uma opção que não conste da lista. As dema demais is prop propri ried edad ades es e méto método doss das das caix caixas as de list listag agem em e de comb combin inaç ação ão são são comu comuns ns entr entree elas elas.. Veja Vejamo moss as principais:
Propriedade List A prop proprrieda iedade de List List cont contém ém um array cujo cujoss elem elemen ento toss são são os iten itenss da caix caixaa de list listag agem em ou de comb combin inaç ação ão.. Ela pode fornecer um determinado item através de seu índice, que inicia-se em 0. Sua sintaxe é: NomeDaCaixa.List(<índice>)
Onde <índice> é o número do índice do item desejado.
Propriedade ListCount Ess Essa propr roprie ieda dade de,, que que tam também bém não não está está dispo isponí níve vell em temp tempoo de proj projet eto, o, é usad usadaa para ara se obter bter o núme númerro de itens da caixa de listagem ou de combinação.
Propriedade ListIndex A prop propri ried edad adee List ListIn Inde dexx reto retorn rnaa o núme número ro do índi índice ce do item item atua atualm lmen ente te sele seleci cion onad adoo da caix caixaa de list listag agem em ou de combinação. Se não foi selecionado nenhum item, ela retorna o valor –1.
Propriedade Text A prop propri ried edad adee Text Text tamb também ém pode pode ser ser usad usadaa para para se obte obterr o item item atua atualm lmen ente te sele seleci cion onad adoo da caix caixaa de list listag agem em ou de com combina binaçã ção, o, só que, que, com como o próp próprrio nome nome ind indica, ica, ela ela reto retorn rnaa o tex texto do item item sele seleci cion onad ado, o, ao inv invés do índice.
Propriedade ItemData Eis uma propriedade muito interessante: para entender sua utilidade, imagine a seguinte situação: no cadastro de Liv Livros ros temo temoss um camp campoo cham chamad adoo CodE CodEddito itora, ra, que, ue, como como já dis dissemo semoss, ser será obti obtido do a par partir tir de uma caix caixaa de comb combin inaç ação ão no formu ormulá lárrio que que vamos amos cons constr trui uir. r. Acon Aconte tece ce que que (como como você ocê deve deve ter ter rep reparad arado) o) o camp campoo é numérico e o item exibido pela combo é um texto, que portanto não poderá ser gravado nesse campo. Item ItemDa Data ta serv servee exat exatam amen ente te para para reso resolv lver er esse esse prob proble lema ma,, pois pois ela ela arma armaze zena na dado dadoss numé numéri rico coss asso associ ciad ados os aos aos iten tens da combo. Assim, quando adicionarmos uma edito itora à caixa, aproveitaremos para gravar o código dessa editora na propriedade ade ItemData, e quand ando uma editora for selecionada gravaremos no registro o conteúdo de ItemData. A sintaxe dessa propriedade é a seguinte: = NomeDaCaixa.Itemdata.<í NomeDaCaixa.Itemdata.<índice> ndice>
Onde é uma variável ou campo tipo Long, e <índice> é o número do índice do item desejado.
Propriedade Sorted Essa Essa prop propri ried edad adee dete determ rmin inaa se os iten itenss serã serãoo exib exibid idos os em orde ordem m alfa alfabé béti tica ca ou não. não. Os valo valore ress poss possív ívei eiss são são True (a lista será exibida em ordem alf alfabé abétic tica) ou False (os itens serão exibi ibidos na mesma ordem em que foram incluídos na lista).
Método AddItem Para adicionarmos itens a uma caixa de listagem ou combinação, usamos o método AddItem. Veja a sintaxe: NomeDaCaixa.AddItem - [,<índice>]
Onde:
Item é o nome do item a ser adicionado à lista. Se for um texto deve vir entre aspas; opcion onal al:: se for for espe especi cifi fica cado do,, o item item será será adic adicio iona nado do à list listaa com com o núme número ro de índi índice ce indi indica cado do.. O Índice é opci valor 0 indica a primeira posição, 1 o segundo, e assim por diante. Se não for informado, o item será adicionado ao final da lista. É muito útil quando trabalhamos com a propriedade ItemData. Veja alguns exemplos:
82
Microsoft Visual Basic 6
Para adicionar o item “Melancia” a uma caixa de listagem chamada lstFrutas: lstFrutas.AddItem “Melancia”
Para adicionar o mesmo item na primeira posição da caixa de listagem: lstFrutas.AddItem “Melancia”,0
Para adicionar o texto contido em uma caixa de texto à caixa de listagem: lstFrutas.AddItem txtFruta.Text
Método RemoveItem O método RemoveItem exclui um item de uma caixa de listagem ou combinação. Veja sua sintaxe: NomeDaCaixa.RemoveItem NomeDaCaixa.RemoveItem <índice>
Onde <índice> é o índice do item que deve ser excluído da lista. Por exemplo: para excluir o item com índice 4 da caixa de listagem lstFrutas, o comando seria o seguinte: lstFrutas.RemoveItem lstFrutas.RemoveItem 4
Caixas de Verificação Esse Esse tipo tipo de cont contro role le norm normal alme ment ntee é usad usadoo para para habi habili lita tarr e desa desabi bili lita tarr opçõ opções es não não excl exclus usiv ivas as.. Ou seja seja:: quan quando do você você incl inclui ui mais mais de um umaa caix caixaa de veri verifi fica caçã çãoo em um form formul ulár ário io,, você você pode pode marc marcar ar um uma, a, duas duas,, três três,, toda todas, s, ou nenh nenhum uma. a. Sua Sua prin princi cipa pall prop propri ried edad adee é a Value, que indica se a cai caixa está ou não habilitada ada, e pode pode assu assumi mirr três três valo valore res: s: 0 – Unchecked (desabilitado), 1 – Checked (habil (habilita itado) do),, e 2 – Grayed. Essa última ocorre quando a caixa está marcada apenas para uma parte de uma seleção de texto, por exemplo.
Botões de Opção Já usam usamos os esse esse cont contro role le no noss nossoo prim primei eiro ro apli aplica cati tivo vo,, lemb lembra ra-s -se? e? Era Era ele ele que que indi indica cava va noss nossoo “hum “humor or mati matina nal” l” no prog progra rama ma Hell Hello, o, que que elab elabor oram amos os na liçã liçãoo 1. Ele Ele tamb também ém serv servee para para indi indica carr opçõ opções es,, só que que dess dessaa vez vez excl excluusiva sivas, s, ou seja seja,, som omen ente te um botã botãoo de opçã opçãoo pode pode esta estarr habi habili lita tado do de cada cada vez. vez. A prop ropried riedad adee também ém é a mais mais imp importa ortant ntee para ara esse esse cont contro role le,, e pode pode assu assum mir os valo valore ress True True e Fals False. e. Os botõ botões es de Value tamb opçã opçãoo pod podem ser agru agrupa paddos de modo odo a cons conseg eguuirmo irmoss deter etermi mina narr vári várias as opçõ opções es com com eles eles ao mes mesmo tem tempo: po: some soment ntee um botã botãoo pode pode esta estarr habi habili lita tado do em um dete determ rmin inad adoo mo mome ment nto, o, mas mas se temo temoss em um form formul ulár ário io mais mais de um grup grupoo de botõ botões es,, em cad cada um dele deless pode pode exis existi tirr um botã botãoo liga ligado do.. Ess Esse efei efeito to é con consegu seguid idoo com com o uso de molduras.
Molduras Eis Eis um cont contrrole ole cur curioso ioso:: bas basicam icamen ente te,, um umaa mo mold ldur uraa (ou (ou Frame) não serve para nada além de criar “bor “borda das” s” nas nas quai quaiss outro utross cont contro role less são inse inseri riddos, os, agr agrupan upando do-o -os. s. Mas está está just justam amen ente te aí sua sua gran grande de util utilid idad ade: e: quan quando do os cont contro role less são são agru agrupa pado doss em frames eles eles pass passam am a func funcio iona narr de mane maneir iraa inte integr grad ada. a. Por Por exem exempl plo: o: se você você cria criarr um umaa mo mold lduura, ra, ins inserir erir nela ela algu alguns ns labels, e depois disso movê-la para outra área do formul formulári ário, o, os labels serã serãoo mo movi vido doss junt juntoo com com a mo mold ldur ura, a, pois pois estã estãoo subo subord rdin inad ados os a ela. ela. Mas, Mas, cuid cuidad ado! o! Para Para que que iss isso aco aconteç nteça, a, é impr impres esci cinndíve dívell que que os con control troles es seja sejam m dese desenh nhad ados os dentro da moldura. Nada de dar dupl duploo clic clickk em um cont contro role le e depo depois is mo movê vê-l -loo para para dent dentro ro da frame. Ele Ele não não será será inco incorp rpor orad adoo pela pela mo mold ldur ura, a, e cont contin inua uará rá send sendoo um cont contro role le inde indepe pend nden ente te.. A inco incorp rpor oraç ação ão tamb também ém não não func funcio iona nará rá se um umaa das das bord bordas as do controle for desenhada para fora da moldura, mesmo que a maior parte esteja dentro dela.
A Propriedade Index Como Como vimo vimoss no iníc início io do curs curso, o, cada cada obje objeto to em um form formul ulár ário io deve deve poss possui uirr um nome nome,, send sendoo que que não não pode podem m exis existi tirr dois dois objet bjetoos com com o mesmo esmo nom nome. Mas pod podemos emos cria criarr um control array (vet (vetoor de con control troles es)) que que é um conj conjun unto to de con control troles es do mesm mesmoo tipo tipo com com o mesm mesmoo nom ome, e, que que são são aces acessa sado doss atr através avés de um índ índice ice atri atribu buíd ídoo a cada cada um dele deles. s. Por exem exempl plo: o: quan quanddo usamo samoss botõe otõess de opção pção da mesm mesmaa mane maneir iraa que no apli aplica cati tivo vo Hell Hello, o, temo temoss que que escr escrev ever er um umaa proc proced edur uree Clic Clickk para para cada cada um dos dos botõ botões es,, pois pois eles eles são são obje objeto toss inde indepe pend nden ente tess entr entree si (lem (lembr braa-se se?) ?).. Se ao invé invéss diss dissoo criá criáss ssem emos os um veto vetorr com com esse esse grup grupoo de botõ botões es,, todo todoss poss possui uiri riam am o mesm mesmoo nome, e a procedure Click seria comum a todos eles. Bastaria então identificar em qual deles o usuário
83
Microsoft Visual Basic 6
clicou, através da propriedade Index. Foi o que fizemos com os botões da ToolBar nos formulários do projeto Bibliotecário. Para testar o uso do control array, inicie cie um novo projeto e insira no formulári ário um label com o nome de lblTeste. Logo em seguida, insira outro label e atribua a ele o mesmo nome, lblTeste. O VB exibirá a seguinte caixa de diálogo:
Traduzind indo: “Você já possui um con controle chamado ‘lblTeste’. Você quer criar um vetor de controles?”. Resp Respon ondda “Sim “Sim”, ”, e o VB renom enomea eará rá o prime rimeir iroo lab label para ara lblT lblTes este te(0 (0)) e o seg segund undo para para lblT lblTes este te((1). 1). O valo alor entr entree parên arênte tese sess é o da pro proprie prieda dadde Inde Indexx de cada cada um dos cont contrroles oles:: 0 e 1, resp respec ecti tiva vame ment nte. e. A par partir tir des desse mome mo ment nto, o, quan quando do o obje objeto to for for refe refere renc ncia iado do você você deve deverá rá indi indica carr o índi índice ce do labe labell que que está está quer queren endo do usar usar.. Por Por exemplo: para mudar a propriedade Caption do primeiro iro label, poderíamo amos escreve ever o comando com como a seguir: lblTeste(0).Caption = “Esse é o primeiro objeto do vetor”
Quan Quando do trab trabal alha hamo moss com com veto etores, res, os even evento toss do control array passa assam m a rece recebe berr um parâ parâme metr troo cham chamad adoo Index, do tipo Integer, que recebe o valor da propriedade Index do controle que gerou o evento. Por exemplo: abra a janela Código no evento Click de um dos labels. Vamos escrever um comando que mostre uma mensagem no label que foi clicado. Para isso, vamos identificá-lo através do parâmetro Index: Private Sub lblTeste_Click(Index lblTeste_Click(Index As Integer) If Index = 0 Then lblTeste(0).Caption = "Você clicou aqui" lblTeste(1).Caption = Empty Else lblTeste(0).Caption = Empty lblTeste(1).Caption = "Você clicou aqui" End If End Sub
Uma outra maneira de usar o parâmetro Index: Private Sub lblTeste_Click(Index lblTeste_Click(Index As Integer) lblTeste(Index).Caption = "Um texto qualquer" End Sub
Por Por fim, fim, não conf confun undda o parâm arâmet etro ro Index ndex,, que nada nada mais mais é que que uma vari variáv ável el rece recebi bida da pela pela pro proced cedure, ure, com com a propriedade Index, que contém o número do índice do controle no vetor. Obse Observ rvaç ação ão:: dep depois ois de cria criarr um veto vetor, r, para para faze fazerr com com que que um de seus seus com compon ponente entess volt voltee a ser ser um con control trolee independente, deve-se renomeá-lo e depois apagar o valor da propriedade Index. Depo Depois is da apre aprese sent ntaç ação ão dos dos cont contro role less que que serã serãoo usad usados os no form formul ulár ário io de cada cadast stra rame ment ntoo de Livr Livros os,, pode podemo moss começar a trabalhar. Adicione um novo formulário ao projeto, formate-o como no modelo da próxima página e altere as proprieda edades dos objetos conforme a tabela a seguir (note que existe um control array para o idioma): Objeto
Nome
Formulário
frmCadLivros
Caixa de texto
txtCodLivro
Caixa de texto
txtTitulo
Outras Propriedades = Valor
Caption = Cadastro de Livros BorderStyle = 1 – Fixed Single Icon = Misc\Books02.ICO KeyPreview = True MDIChild = True Text = “” MaxLength = 5 Text = “” MaxLength = 50
84
Microsoft Visual Basic 6
Modelo do formulário do Cadastro de Livros
Objeto
Caixa de texto
Caixa de Combinação Caixa de Combinação Caixa de texto Moldura Caixa de Verificação Caix Caixaa de de Ver Verif ific icaç ação ão Moldura Botão de Opção Botão de Opção Botão de Opção Image
ToolBar
Nome
txtAutor
Outras Propriedades = Valor
Text = “” MaxLength = 35 cboEditora Style = 2 – DropDown List cboCategoria Style = 2 – DropDown List txtObservacoes Text = “” MultiLine = True ScroolBars = 2 - Vertical Frame1 Caption = Acompanha: chkAcompCD Caption = CD chkA chkAco comp mpDi Dissquet quetee Capt Captio ionn = Dis Disquet quetee Frame2 Caption = Idioma: optIdioma Caption = Português Index = 0 Value = True optIdioma Caption = Inglês Index = 1 optIdioma Caption = Outro Index = 2 ImageList1 Tamanho das imagens: 32 x 32 pixels Imagens 1 = Computer\Disk04.ICO 2 = Writing\Erase02.ICO 3 = Computer\Trash01.ICO 4 = TRAFFIC\TRFFC14.ICO TRAFFIC\TRFFC14.ICO ToolBar1 ImageList = ImageList1 Appearance = 1 – cc3D BorderStyle = 0 – ccNone Style = 1 – tbrFlat Botão 1 ToolTipText = Grava o registro atual Image = 1 Botão 2 ToolTipText = Limpa os dados digitados Image = 2 Botão 3 ToolTipText = Exclui o registro atual Image = 3 Enabled = False (desmarcar) Botão 4 ToolTipText = Retorna ao menu principal Image = 4
Microsoft Visual Basic 6
85
Grav Gravee o for formu mulá lári rioo com com o nom omee de frmCadLivros, e vamo vamoss entã entãoo inic inicia iarr a prog rograma ramaçã ção. o. A maio aior part partee dela dela segu seguee a mesm mesmaa lógi lógica ca do cada cadast stro ro de usuá usuári rios os,, entã entãoo come começa çare remo moss pelo peloss cont contro role less que que esta estamo moss estu estuda dand ndoo agora: 1. Vamo Vamoss prec precis isar ar de alg algum umas as var variáv iáveis eis priv privad adas as para para arm armazen azenar ar os valo valorres das das caix caixas as de comb combin inaç ação ão e de verificação e dos botões de opção. Abra a janela Código na seção Declarations e escreva os comandos: Dim Dim Dim Dim
vInclusao As Boolean vCodEditora, vCodCategoria As Long vAcompCD, vAcompDisquete As Boolean vIdioma As Byte
2. Escreva Escreva a procedure procedure Form_K Form_KeyPre eyPress ss para permiti permitirr a mudança mudança dos campos campos pela pela tecla Enter; Enter; 3. No evento evento Form_L Form_Load oad vamos vamos inicializar inicializar as variáveis variáveis privadas: privadas: Private Sub Form_Load() Me.Left = (frmBiblio.ScaleWidth (frmBiblio.ScaleWidth - Me.Width) / 2 Me.Top = (frmBiblio.Height - Me.Height) / 2 'Inicializa as variáveis auxiliares: vCodEditora = 0 vCodCategoria = 0 vAcompCD = False vAcompDisquete vAcompDisquete = False vIdioma = 0 End Sub
4. A prog progrramaç amação ão das das caix caixas as de veri verifi fica caçã çãoo é mu muit itoo simpl imples es:: quand uandoo aco acontec ntecer er um clic click, k, verif erific icam amos os se foi foi marc marcad adaa ou desm desmar arca cada da,, e alte altera ramo moss o valo valorr da vari variáv ável el corr corres espo pond nden ente te para para True True ou Fals False, e, conf confor orme me o caso. Abra então a janela código dando um duplo-click sobre chkAcompCD: Private Sub chkAcompCD_Click() chkAcompCD_Click() 'Verifica se chkAcompCD está ou não marcada, e atribui a vAcompCD o valor 'correspondente: If chkAcompCD.Value = vbChecked Then vAcompCD = True Else vAcompCD = False End If End Sub
5. Programe Programe o evento evento Click da caixa caixa de verificaçã verificaçãoo chkAcompDisqu chkAcompDisquete ete conforme conforme a procedure procedure acima; acima; 6. A pro program gramaç ação ão para para os botõe otõess de opçã opçãoo é ain ainda mais ais fácil ácil:: bast bastaa atr atribui ibuirr à vari variáv ável el o valor alor do par parâmet âmetrro Index: Private Sub optIdioma_Click(Index optIdioma_Click(Index As Integer) 'Atribui à variável vIdioma o valor do parâmetro index, pois esse contém o 'índice do botão que foi clicado: 0 = Português, 1 = Inglês e 2 = Outros: vIdioma = Index End Sub
7. O próximo pass asso é fazer a programação das cai caixas de com combinação. Vamos apr aproveitá itá-lo para aprender como criar recordsets a partir de consultas do Access. Por enquanto, grave seu trabalho e saia do VB;
Acionando Consultas do Banco de Dados Muit Muitas as veze vezess util utiliz izam amos os dado dadoss obti obtido doss atra atravé véss de outr outros os obje objeto toss do banc bancoo de dado dadoss que que não não seja sejam m as tabe tabela las, s, norm normal alme ment ntee de cons consul ulta tas. s. No caso caso do Acce Access ss,, isso isso acon aconte tece ce mu muit itoo quan quando do prec precis isam amos os de dado dadoss de tabe tabela lass relacion ionadas, ou com muitos critéri érios de sele eleção, pois é mais simples criar uma consulta que elab laborar o comando SQL correspondente. A execução de uma consulta a partir da aplicação VB é muito simples: 1. Abra Abra o Acces Accesss e o banco banco de de dados dados Biblio Biblio;; 2. Crie uma nova nova consult consultaa conforme conforme o modelo modelo da da próxima próxima página página;; 3. Salv Salvee a con consu sult ltaa com com o nom nomee de EditorasEmOrdemAlfabetica; Aprove veit itee para para cria criarr també também m a cons consul ulta ta CategoriasEmOrdemAlfabetica, com com os camp campos os CodC CodCat ateg egor oria ia 4. Apro e NomeCategoria;
86
Microsoft Visual Basic 6
A consulta EditorasEmOrdemAlfabetica
5. Saia Saia do Access Access,, abra abra o VB e o projeto projeto Bibli Bibliote otecar cario; io; 6. Vamo Vamoss cria criarr as proce rocedu dure ress para para carr carreg egar ar as com combos bos no mó móddulo ulo de prog progrramaç amação ão como como públ públic icas as.. Mas, as, se elas elas não não serã serãoo cria criada dass no form formul ulár ário io,, com como farem aremos os par para que que reco reconh nheç eçam am as comb comboos, que que são são obje objeto toss loca locais is?? Simp Simple les: s: pass passar arem emos os o nome nome da comb comboo a ser ser carr carreg egad adaa como como parâ parâme metr troo para para a proc proced edur ure. e. Abra Abra a janela Código no módulo de programação Biblio; 7. Escreva Escreva a procedu procedure re ComboEdito ComboEditoras ras conforme conforme segue: segue: Public Sub ComboEditoras(NomeCombo As ComboBox) Dim cnnComando As New ADODB.Command Dim rsTemp As New ADODB.Recordset ADODB.Recordset Dim i As Integer On Error GoTo errComboEditoras 'Executa a consulta EditorasEmOrdemAlfabetica: With cnnComando .ActiveConnection = cnnBiblio .CommandType .CommandType = adCmdStoredProc adCmdStoredProc .CommandText .CommandText = "EditorasEmOrdemAlfabet "EditorasEmOrdemAlfabetica" ica" Set rsTemp = .Execute End With With rsTemp 'Verifica se existe alguma editora cadastrada: If Not (.EOF And .BOF) Then 'Se existe, então posiciona o apontador no primeiro registro do rs: .MoveFirst 'Inicializa a variável i que será usada como índice para a 'propriedade 'propriedade ItemData: i = 0 While Not .EOF 'Adiciona um item à combo com o nome da editora: NomeCombo.AddItem !Descrição, i 'Grava na propriedade ItemData desse o código da editora: NomeCombo.ItemData(i) NomeCombo.ItemData(i) = !Código 'Vai para o próximo registro do rs: .MoveNext 'Incrementa i: i = i + 1 Wend End If End With Saida: Set cnnComando = Nothing Set rsTemp = Nothing
Microsoft Visual Basic 6
87
Exit Sub errComboEditoras: With Err If .Number <> 0 Then MsgBox "Não foi possível a leitura da tabela de Editoras:", _ , vbInformation + vbOKOnly + vbApplicationModal, _ "Erro ao carregar ComboBox" .Number = 0 GoTo Saida End If End With End Sub
Obs.: NomeCombo é o parâmetro que vai receber a caixa de combinação a ser carregada. Assim, decl declar aram amos os seu seu tipo tipo como como Comb ComboB oBoox. É dess dessaa manei aneira ra que pass passam amos os objet bjetos os como como parâ parâme metr tros os para para subrotinas: indicando qual é o tipo desse objeto. Se você não souber o tipo do objeto, declare o parâmetro como Variant, dessa maneira o tipo será assumido dinamicamente na passagem do parâmetro. 8. Usan Usando do Carr Carreg egaE aEdi dito tora rass como como base base,, crie crie um outr outraa subr subrot otin inaa cham chamad adaa Carr Carreg egaC aCat ateg egor oria iass exec execut utan ando do a consulta CategoriasEmOrdemAlfabetica; 9. Abr Abra o form formul ulár ário io frm frmCadL CadLiv ivrros e acr acresce escent ntee a segu seguin inte te prog rograma ramaçã çãoo ao final inal do even evento to Form_ orm_Lo Load ad,, para fazer o carregamento das combos a partir das procedures que acabamos de criar: 'Chama a procedure ComboEditoras e passa a combo cboEditora como 'parâmetro: ComboEditoras cboEditora 'O mesmo para cboCategorias: cboCategorias: ComboCategorias cboCategoria 'Garante que nenhum item esteja selecionado nas combos: cboEditora.ListIndex cboEditora.ListIndex = -1 cboCategoria.ListIndex = -1
10. Devemos agora programar programar o evento Click das das combos para atribuir atribuir o código do item escolhido à variável corr corres espo pond nden ente te.. Come Comece cemo moss por por cboE cboEdi dito tora rass (ate (atenç nção ão:: o even evento to padr padrão ão de um umaa comb comboo é o Chan Change ge,, mas mas a programação abaixo deve ser feita no evento Click, então cuidado para fazê-la corretamente): Private Sub cboEditora_Click() cboEditora_Click() With cboEditora 'Verifica se foi selecionado um item da combo: If .ListIndex <> -1 Then 'Se foi, atribui à variável vCodEditora o conteúdo da 'propriedade ItemData: vCodEditora = .ItemData(.ListIndex) .ItemData(.ListIndex) Else 'Senão, zera a variável: vCodEditora = 0 End If End With End Sub
Obs.: como queremos armazenar na variável o código referente ao item selecionado, cujo índice é indicado por ListIndex, usamos essa propriedade como parâmetro para ItemData. 11. Baseado na procedure acima, escreva a programação programação para o evento Click Click da combo cboCategoria; 12. O próximo passo é apr apresentar tar os dados do registro seleci ecionado nos camp ampos do formulário em caso de alteração. Como no cadastro de usuários, isso será programado no evento LostFocus de txtCodLivro: Private Sub txtCodLivro_LostFocus() txtCodLivro_LostFocus() Dim cnnComando As New ADODB.Command Dim rsSelecao As New ADODB.Recordset Dim vCod As Long Dim i As Integer On Error GoTo errSelecao 'Converte o código digitado para pesquisa: vCod = Val(txtCodLivro.Text) 'Se não foi digitado um código válido, sai da sub: If vCod = 0 Then Exit Sub Screen.MousePointer = vbHourglass
Microsoft Visual Basic 6
88
'Tenta selecionar o registro na tabela de livros: With cnnComando .ActiveConnection = cnnBiblio .CommandType .CommandType = adCmdText .CommandText .CommandText = "SELECT * FROM Livros WHERE CodLivro = " & vCod & ";" Set rsSelecao = .Execute End With With rsSelecao If .EOF And .BOF Then 'Se o recordset está vazio, não encontrou registro com esse código: LimparDados 'Identifica a operacao como inclusão: vInclusao = True Else 'Senão, atribui aos campos e variáveis auxiliares os dados do 'registro: txtTitulo.Text txtTitulo.Text = !Titulo txtAutor.Text = !Autor vCodEditora = !CodEditora vCodCategoria = !CodCategoria vAcompCD = !AcompCD vAcompDisquete vAcompDisquete = !AcompDisquete !AcompDisquete vIdioma = !Idioma 'Como Observacoes não é um campo obrigatório, devemos impedir a 'atribuição do valor nulo (se houver) à caixa de texto: txtObservacoes txtObservacoes = Empty & !Observacoes !Observacoes 'Exibe os dados das variáveis nos controles correspondentes: With cboEditora 'Elimina a seleção atual: .ListIndex = -1 'Como ListCount retorna o número de itens da combo, 'ListCount - 1 é igual ao índice do último item. Portanto, o 'loop abaixo será executado para todos os itens da combo 'através de seu índice: For i = 0 To (.ListCount - 1) If vCodEditora = .ItemData(i) .ItemData(i) Then 'Se ItemData for igual ao código atual, 'seleciona o item e sai do loop: .ListIndex = i Exit For End If Next i End With With cboCategoria .ListIndex = -1 For i = 0 To (.ListCount - 1) If vCodCategoria = .ItemData(i) Then .ListIndex = i Exit For End If Next i End With 'Se vAcompCD = True, marca chkAcompCD, senão desmarca: chkAcompCD.Value = IIf(vAcompCD, vbChecked, vbUnchecked) chkAcompDisquete.Value = IIf(vAcompDisquete, vbChecked, vbUnchecked) 'Marca o botão de opção correspondente correspondente ao idioma atual: optIdioma(vIdioma).Value = True 'Habilita o botão Excluir: Toolbar1.Buttons(3).Ena Toolbar1.Buttons(3).Enabled bled = True 'Identifica a operação como Alteração: vInclusao = False End If End With 'Desabilita a digitação do código: txtCodLivro.Enabled = False Saida: 'Elimina o command e o recordset da memória: Set rsSelecao = Nothing
Microsoft Visual Basic 6
Set cnnComando = Nothing Screen.MousePointer = vbDefault Exit Sub errSelecao: With Err If .Number <> 0 Then MsgBox "Erro na recuperação do registro solicitado:", _ vbExclamation + vbOKOnly + vbApplicationModal, "Aviso" .Number = 0 GoTo Saida End If End With End Sub
13. Na sub LimparDados eliminamos as seleções e marcações dos controles que estamos estudando: Private Sub LimparDados() LimparDados() 'Apaga o conteúdo dos campos do formulário: txtTitulo.Text txtTitulo.Text = Empty txtAutor.Text = Empty txtObservacoes.Text = Empty 'Elimina a seleção das combos: cboEditora.ListIndex cboEditora.ListIndex = -1 cboCategoria.ListIndex cboCategoria.ListIndex = -1 'Desmarca as caixas de verificação: verificação: chkAcompCD.Value chkAcompCD.Value = vbUnchecked chkAcompDisquete.Value chkAcompDisquete.Value = vbUnchecked 'Marca a opção Português em optIdioma: optIdioma(0).Value optIdioma(0).Value = True 'Reinicializa 'Reinicializa as variáveis auxiliares: vCodEditora = 0 vCodCategoria = 0 vAcompCD = False vAcompDisquete vAcompDisquete = False vIdioma = 0 End Sub
14. Na sub GravarDados, passamos para os campos os dados das variáveis auxiliares: Private Sub GravarDados() GravarDados() Dim cnnComando As New ADODB.Command Dim vSQL As String Dim vCod As Long Dim vConfMsg As Integer Dim vErro As Boolean On Error GoTo errGravacao 'Converte o código digitado para gravação: vCod = Val(txtCodLivro.Text) 'Verifica os dados digitados: vConfMsg = vbExclamation + vbOKOnly + vbApplicationModal vErro = False If vCod = 0 Then MsgBox "O campo Código não foi preenchido.", vConfMsg, "Erro" vErro = True End If If txtTitulo.Text = Empty Then MsgBox "O campo Título não foi preenchido.", vConfMsg, "Erro" vErro = True End If If txtAutor.Text = Empty Then MsgBox "O campo Autor não foi preenchido.", vConfMsg, "Erro" vErro = True End If If vCodEditora = 0 Then MsgBox "Não foi selecionada uma Editora.", vConfMsg, "Erro" vErro = True End If If vCodCategoria = 0 Then MsgBox "Não foi selecionada uma Categoria.", vConfMsg, "Erro"
89
Microsoft Visual Basic 6
90
vErro = True End If 'Se aconteceu um erro de digitação, sai da sub sem gravar: If vErro Then Exit Sub Screen.MousePointer = vbHourglass 'Constrói o comando SQL para gravação: If vInclusao Then 'Se é uma inclusão: vSQL = "INSERT INTO Livros (CodLivro, Titulo, Autor, CodEditora, CodEditora, " & _ "CodCategoria, AcompCD, AcompDisquete, Idioma, Observacoes) " & _ "VALUES (" & vCod & ",'" & _ txtTitulo.Text txtTitulo.Text & "','" & _ txtAutor.Text & "'," & _ vCodEditora & "," & _ vCodCategoria & "," & _ vAcompCD & "," & _ vAcompDisquete vAcompDisquete & "," & _ vIdioma & ",'" & _ txtObservacoes.Text & "');" Else 'Senão, alteração: vSQL = "UPDATE Livros SET Titulo = '" & txtTitulo.Text & _ "', Autor = '" & txtAutor.Text & _ "', CodEditora = " & vCodEditora & _ ", CodCategoria = " & vCodCategoria & _ ", AcompCD = " & vAcompCD & _ ", AcompDisquete = " & vAcompDisquete & _ ", Idioma = " & vIdioma & _ ", Observacoes = '" & txtObservacoes.Text txtObservacoes.Text & _ "' WHERE CodLivro = " & vCod & ";" End If 'Executa o comando de gravação: With cnnComando .ActiveConnection = cnnBiblio .CommandType .CommandType = adCmdText .CommandText .CommandText = vSQL .Execute End With MsgBox "Gravação concluída com sucesso.", _ vbApplicationModal + vbInformation + vbOKOnly, _ "Gravação OK" 'Chama a sub que limpa os dados do formulário: LimparTela Saida: Screen.MousePointer = vbDefault Set cnnComando = Nothing Exit Sub errGravacao: With Err If .Number <> 0 Then MsgBox "Erro durante a gravação dos dados no registro." & vbCrLf & _ "A operação não foi completada." , _ vbExclamation + vbOKOnly + vbApplicationModal, _ "Operação cancelada" .Number = 0 GoTo Saida End If End With End Sub
15. O restante da programação programação para esse formulário formulário é semelhante àquela feita em frmCadUsuarios: Private Sub Toolbar1_ButtonClick(ByVal Button As MSComctlLib.Button) Select Case Button.Index Case 1 GravarDados Case 2 LimparTela
Microsoft Visual Basic 6
Case 3 ExcluirRegistro Case 4 Unload Me End Select End Sub
Private Sub txtAutor_LostFocus() txtAutor_LostFocus() 'Converte a primeira letra de cada palavra digitada em maiúscula, 'e as demais em minúsculas: txtAutor.Text = StrConv(txtAutor.Text, vbProperCase) End Sub
Private Sub txtTitulo_LostFocus() txtTitulo_LostFocus() txtTitulo.Text txtTitulo.Text = StrConv(txtTitulo.Text, StrConv(txtTitulo.Text, vbProperCase) End Sub
Private Sub ExcluirRegistro() ExcluirRegistro() Dim cnnComando As New ADODB.Command Dim vOk As Integer Dim vCod As Long On Error GoTo errExclusao 'Solicita confirmação da exclusão do registro: vOk = MsgBox("Confirma a exclusão desse registro?", _ vbApplicationModal vbApplicationModal + vbDefaultButton2 + vbQuestion + vbYesNo, _ "Exclusão") If vOk = vbYes Then Screen.MousePointer = vbHourglass 'Se confirmou, converte o código digitado: vCod = Val(txtCodLivro.Text) 'Executa a operação: With cnnComando .ActiveConnection = cnnBiblio .CommandType .CommandType = adCmdText .CommandText = "DELETE FROM Livros WHERE CodLivro = " & vCod & ";" .Execute End With MsgBox "Registro excluído com sucesso.", _ vbApplicationModal + vbInformation + vbOKOnly, _ "Exclusão OK" LimparTela End If Saida: Screen.MousePointer = vbDefault Set cnnComando = Nothing Exit Sub errExclusao: With Err If .Number <> 0 Then MsgBox "Erro durante a exclusão do registro." & vbCrLf & _ "A operação não foi completada.", _ vbExclamation + vbOKOnly + vbApplicationModal, _ "Operação cancelada" .Number = 0 GoTo Saida End If End With End Sub
91
Microsoft Visual Basic 6
92
Private Sub LimparTela() LimparTela() LimparDados Toolbar1.Buttons(3).Ena Toolbar1.Buttons(3).Enabled bled = False txtCodLivro.Text txtCodLivro.Text = Empty txtCodLivro.SetFocus End Sub
1. Faça aça no for formu mulá lári rioo princ rincip ipal al a prog rograma ramaçã çãoo nece necess ssár ária ia par para que o menu menu mn mnuC uCad adL Livro ivross e o botão otão nº 1 da ToolBar abram o formulário frmCadLivros; 16. Grave Grave seu traba trabalho lho;; 17. Teste o funcionamento do formulário. Aproveite Aproveite para adicionar alguns livros ao banco de de dados.
93
Microsoft Visual Basic 6
Lição 11 – Datas e Relacionamentos Uma Uma das das preo preocu cupa paçõ ções es que que todo todo prog progra rama mado dorr deve deve ter ter é: como como mant manter er a inte integr grid idad adee das das info inform rmaç açõe õess do meu meu banco de dados? Por isso é tão importante a verificação dos dados digitados antes da gravação de um regi regisstro. tro. Mas Mas exis existe tem m caso casoss que que ess essa ver verific ificaç ação ão deve deve ser ser mais mais cuid cuidad ados osa: a: na grava ravaçã çãoo de datas atas e quand uandoo exis existe te um relac relacio iona name ment ntoo entr entree as tabel tabelas as envo envolv lvid idas as.. Ness Nessaa lição lição apre aprend nder erem emos os como como trat tratar ar os dado dadoss ness nessas as situações.
Gravação de Datas Como já dissemos quando da apresentação dos tipos de dados admitidos pelo VB, para ara ele um dado tipo data nada mais é que um dado numérico ico com um formato especia cial que represe esenta uma data ata. Devido a essa part partic icul ular arid idad ade, e, para ara que pos possamo samoss mani manipu pula larr datas atas corr corret etam amen ente te no VB fora foram m cria criada dass algu alguma mass funç funçõões específicas. Vejamos as principais: nós já estu estuda damo moss essa essa funç função ão quan quando do fala falamo moss das das funç funçõe õess de conv conver ersã são. o. Ela Ela conv conver erte te um umaa stri string ng CDate : nós em uma data, se possível. essa fun função ção reto etorna rna a data ata cor corrent rentee do sis sistema tema,, no for formato mato espe especi cifi fica cado do no Paine ainell de Contr ontrol olee do Date: essa Windows. verific ificaa se um umaa expr expres essã sãoo pode pode ser conv conver erti tidda em um umaa data data,, e nes nesse cas caso retor etorna na Tru True, ou Fals Falsee IsDate : ver caso contrário. A expressão pode ser um dado string, numérico, data ou variant. Sua sintaxe é: IsDate()
Observação: também existem funções de verificação para outros tipos de dados. As principais são:
IsNumeric, para verificar se um dado é numérico, IsEmpty, para verificar se uma string está vazia, e IsNull, para verificar se uma expressão é nula.
Verificando os Relacionamentos Os SGBD's atuais são em sua grande maioria do tipo relacional, ou seja, baseados no conceito de rela relaci cion onam amen ento to entr entree tabe tabela lass para para perm permit itir ir a recu recupe pera raçã çãoo de info inform rmaç açõe õess impe impedi dind ndoo redu redund ndân ânci ciaa de dado dados. s. Um relacionamento é uma ligação entre a chave primária de uma tabela e uma chave estrangeira que contenha o mesmo dado em outra tabela. A tabela que contém a chave primária é chamada de origem do amada de destino do relacionamento. O problema é relacionamento, e a que contém a chave estrangeira é chama que, para que um relaciomento funcione corretamente é preciso no destino não existam dados sem correspondência na tabela de origem. Isso implica que: Na inclusão ou alteração de registros na origem, a chave primária não pode ser repetida; Na incl inclus usão ão ou alte altera raçã çãoo de regis egistr troos no dest destin inoo, deveeve-sse veri verifficar icar se exis existe te o regi regist strro corr corres espo ponndent dentee à chave estrangeira na origem; A alt alteração ou exclusão de registros na origem não deve ser permitida no caso de exi existirem registros relacionados no destino, a não ser que seja uma atualização em cascata (onde os registros correspondentes no destino também serão afetados pela operação executada na origem). A esse conjunto de regras damos o nome de Integridade Referencial. Os SGBD's mais modernos – incl inclui uind ndoo aí o Acces Accesss – fazem fazem a checa checage gem m de inte integr grid idad adee refe refere renc ncia iall auto automa mati tica came ment nte, e, impe impedi dind ndoo anom anomal alia iass nas informações do banco. Mas isso não elimina a necessidade de checarmos os dados digitados. Por exem exempl plo: o: em noss nossoo siste istema ma,, no emp emprést réstim imoo de um livr livro, o, o oper operad ador or inf informa orma o códi código go do usu usuário ário que que o está está retirando. Dev Devemos verificar se esse código exist iste na tabela de usuários, pois se enviarmos ao banc anco um código de usuário inválido, e os recursos de checagem de integridade referencial do banco estiverem ativados, a gravação não será realizada e o banco retornará um erro de execução. Par Para apli aplica carr esse essess con conceit ceitos os,, vamo vamoss cria criarr o form ormulár ulário ioss de empr emprés ésti timo mo de livr livroos do siste istema ma Bibl Biblio iote tecá cári rio. o. Not Note que nesse formulário será solicit citada a digitação dos cód códigos do livro e do usuário, e portanto vamos precisar verificá-los antes de gravar o registro:
94
Microsoft Visual Basic 6
1. Adicione Adicione um novo formulári formulárioo ao projeto e formate-o formate-o como como no modelo:
A tabela abaixo contém as propriedades dos objetos: Objeto
Formulário
Caixa de texto Label Caixa de texto Label Caixa de texto Caixa de texto Botão de Comando Botão de Comando Botão de Comando
Nome
frmEmprestimos
Outras Propriedades = Valor
Caption = Empréstimos de Livros BorderStyle = 1 – Fixed Single Icon = Misc\Book04.ICO KeyPreview = True MDIChild = True txtCodLivro Text = “” MaxLength = 5 lblTitulo Caption = “” txtCodUsuario Text = “” MaxLength = 5 lblNomeUsuario Caption = “” txtDataEmprestimo Text = “” MaxLength = 10 txtDataDevolucao Text = “” MaxLength = 10 cmdOk Caption = &Ok Style = 1 – Graphical Picture = Misc\Checkmrk.ICO cmdCancelar Caption = &Cancelar Style = 1 – Graphical Picture = Computer\W95mbx01.ICO cmdRetornar Caption = &Retornar Style = 1 – Graphical Picture = Traffic\Trffc14.ICO
2. Grave Grave o novo novo formu formulár lário io com com o nom nomee de frmEmprestimos; 3. Escreva Escreva as procedures procedures Form_Key Form_KeyPress Press e cmdRetorn cmdRetornar_Cl ar_Click ick como já estudamos estudamos anteriorm anteriormente; ente; 4. No eve evento Load, vamos inicializa izar os campos txtDataEm aEmprest estimo e txt txtDat DataDevolucao. Note o uso da função Format: Private Sub Form_Load() Me.Left = (frmBiblio.ScaleWidth (frmBiblio.ScaleWidth - Me.Width) / 2 Me.Top = (frmBiblio.Height - Me.Height) / 2 'Atribui à caixa txtDataEmprestimo a data atual do sistema: txtDataEmprestimo.Text txtDataEmprestimo.Text = Format(Date, Format(Date, "Short Date") 'Atribui à caixa txtDataDevolucao a data atual do sistema + 15 dias: txtDataDevolucao.Text = Format((Date + 15), "Short Date") End Sub
5. No even evento to Los LostFoc tFocuus da caix caixaa txtC txtCoodLiv dLivrro, veri verifi fica care remo moss se o códi código go dig digitad itadoo é válid álido, o, e exib exibir irem emoos o título do livro em lblTitulo: Private Sub txtCodLivro_LostFocus() txtCodLivro_LostFocus() Dim cnnComando As New ADODB.Command Dim rsSelecao As New ADODB.Recordset Dim vCod As Long On Error GoTo errSelecao
Microsoft Visual Basic 6
'Converte o código digitado: vCod = Val(txtCodLivro.Text) 'Se não foi digitado um código válido, sai da sub: If vCod = 0 Then Exit Sub Screen.MousePointer = vbHourglass 'Seleciona o livro solicitado: With cnnComando .ActiveConnection = cnnBiblio .CommandType .CommandType = adCmdText .CommandText .CommandText = "SELECT * FROM LIVROS WHERE CodLivro = " & vCod & ";" Set rsSelecao = .Execute End With With rsSelecao If .EOF And .BOF Then 'Se não encontrou o livro, deixa o título do livro em branco: lblTitulo.Caption = Empty Else 'Se encontrou, exibe o título do livro em lblTitulo: lblTitulo.Caption = !Titulo 'Verifica se o livro já está emprestado: If !Emprestado Then 'Se está, impede novo empréstimo: MsgBox "Esse livro já está emprestado, verifique.", _ vbExclamation + vbOKOnly + vbSystemModal, "Erro" 'Volta o foco ao código para redigitação: txtCodLivro.SetFocus End If End If End With Saida: Set rsSelecao = Nothing Set cnnComando = Nothing Screen.MousePointer = vbDefault Exit Sub errSelecao: With Err If .Number <> 0 Then MsgBox "Houve um erro na recuperação do registro solicitado.", solicitado.", _ vbExclamation + vbOKOnly + vbApplicationModal, "Aviso" .Number = 0 GoTo Saida End If End With End Sub
6. A codificaçã codificaçãoo para para o campo campo txtCod txtCodUsuar Usuario io é um um pouco pouco mais mais simples: simples: Private Sub txtCodUsuario_LostFocus txtCodUsuario_LostFocus() () Dim cnnComando As New ADODB.Command Dim rsSelecao As New ADODB.Recordset Dim vCod As Long On Error GoTo errUsuario vCod = Val(txtCodUsuario.Text) If vCod = 0 Then Exit Sub Screen.MousePointer = vbHourglass With cnnComando .ActiveConnection = cnnBiblio .CommandType .CommandType = adCmdText .CommandText = "SELECT NomeUsuario FROM Usuarios " & _ "WHERE CodUsuario CodUsuario = " & vCod & ";" Set rsSelecao = .Execute End With With rsSelecao If .EOF And .BOF Then MsgBox "Código do usuário inválido, verifique.", _ vbExclamation + vbOKOnly + vbSystemModal, "Erro" lblNomeUsuario.Caption lblNomeUsuario.Caption = Empty txtCodUsuario.SetFocus Else
95
Microsoft Visual Basic 6
96
'Se encontrou, exibe o nome do usuário em lblNomeUsuario: lblNomeUsuario.Caption lblNomeUsuario.Caption = !NomeUsuario !NomeUsuario End If End With Saida: Set rsSelecao = Nothing Set cnnComando = Nothing Screen.MousePointer = vbDefault Exit Sub errUsuario: With Err If .Number <> 0 Then MsgBox "Houve um erro na recuperação do usuário solicitado.", & _ vbExclamation vbExclamation + vbOKOnly + vbApplicationModal, vbApplicationModal, "Aviso" .Number = 0 GoTo Saida End If End With End Sub
7. No evento LostFocus de txtDat DataEmprestimo, ant antes de formatar a digitaç tação, precisamos verificar se o texto do campo é ou não um data válida. Para isso usaremos IsDate: Private Sub txtDataEmprestimo_LostF txtDataEmprestimo_LostFocus() ocus() Dim vDataDevolucao As Date With txtDataEmprestimo If .Text <> Empty Then 'Verifica se o dado digitado pode ser uma data: If Not IsDate(.Text) Then 'Se o dado digitado não pode ser uma data, assume a do sistema: .Text = Date Else 'Senão, formata a data digitada: .Text = Format(.Text, "Short Date") End If 'Atribui à caixa txtDataDevolucao a data digitada + 15 dias: vDataDevolucao vDataDevolucao = CDate(.Text) CDate(.Text) + 15 txtDataDevolucao.Text = Format(vDataDevolucao, "Short Date") End If End With End Sub
8. O mesm mesmoo vale vale para para txtD txtDataD ataDevo evoluc lucao: ao: Private Sub txtDataDevolucao_LostFo txtDataDevolucao_LostFocus() cus() 'Formata a data digitada: With txtDataDevolucao If .Text <> Empty Then If Not IsDate(.Text) Then 'Se o dado digitado não pode ser uma data, assume 'a data do sistema + 15 dias: .Text = Date + 15 Else 'Senão, formata a data digitada: .Text = Format(.Text, "Short Date") End If End If End With End Sub
9. O botão botão Ok grava os dados dados do do empréstimo empréstimo no cadastr cadastroo de livros: livros: Private Sub cmdOk_Click() cmdOk_Click() Dim cnnComando As New ADODB.Command Dim vCodLivro, vCodUsuario As Long Dim vDataEmprestimo, vDataDevolucao vDataDevolucao As Date Dim vConfMsg As Integer Dim vErro As Boolean On Error GoTo errGravacao
Microsoft Visual Basic 6
97
'Converte os dados digitados: vCodLivro = Val(txtCodLivro.Text) Val(txtCodLivro.Text) vCodUsuario = Val(txtCodUsuario.Text) vDataEmprestimo = CDate(txtDataEmprestimo.Text) vDataDevolucao vDataDevolucao = CDate(txtDataDevolucao. CDate(txtDataDevolucao.Text) Text) 'Verifica os dados digitados: vConfMsg = vbExclamation + vbOKOnly + vbSystemModal vErro = False If vCodLivro = 0 Then MsgBox "O campo Código do Livro não foi preenchido.", vConfMsg, "Erro" vErro = True End If If lblTitulo.Caption lblTitulo.Caption = Empty Then 'Se lblTitulo estiver em branco, o código do livro informado não foi 'encontrado na tabela: MsgBox "O campo Código do Livro não contém um dado válido.", _ vConfMsg, "Erro" vErro = True End If If vCodUsuario = 0 Then MsgBox "O campo Código do Usuário não foi preenchido.", vConfMsg, "Erro" vErro = True End If If vDataEmprestimo >= vDataDevolucao Then MsgBox "A Data de Devolucao informada é menor ou igual à Data de " & _ “Empréstimo, verifique.", vConfMsg, "Erro" vErro = True End If 'Se aconteceu um erro de digitação, sai da sub sem gravar: If vErro Then Exit Sub Screen.MousePointer = vbHourglass 'Executa a SP de devolução de livros: With cnnComando .ActiveConnection = cnnBiblio .CommandType .CommandType = adCmdText .CommandText .CommandText = "UPDATE Livros SET CodUsuario = " & vCodUsuario & _ ", Emprestado = True, DataEmprestimo = " & vDataEmprestimo & _ ", DataDevolucao = " & vDataDevolucao & " WHERE CodLivro = " & _ vCodLivro & ";" .Execute End With MsgBox "Esse livro foi emprestado a " & lblNomeUsuario & " com sucesso.", _ vbApplicationModal + vbInformation + vbOKOnly, "Empréstimo OK" 'Chama a subrotina cmdCancelar_Click para limpar os campos do formulário: cmdCancelar_Click Saida: Screen.MousePointer = vbDefault Set cnnComando = Nothing Exit Sub errGravacao: With Err If .Number <> 0 Then MsgBox "Erro durante a gravação dos dados no registro." & _ vbCrLf & "A devolução desse livro não foi completada.", _ vbExclamation vbExclamation + vbOKOnly + vbApplicationModal, _ "Empréstimo cancelado" .Number = 0 GoTo Saida End If End With End Sub
10. Finalmente, o botão Cancelar apaga os dados do formulário sem gravá-los: Private Sub cmdCancelar_Click() cmdCancelar_Click() 'Cancela a digitação atual e limpa todos os campos do formulário: txtCodLivro.Text txtCodLivro.Text = Empty lblTitulo.Caption = Empty
98
Microsoft Visual Basic 6
txtCodUsuario.Text txtCodUsuario.Text = Empty lblNomeUsuario.Caption lblNomeUsuario.Caption = Empty txtDataEmprestimo.Text txtDataEmprestimo.Text = Format(Date, Format(Date, "Short Date") txtDataDevolucao.Text = Format((Date + 15), "Short Date") txtCodLivro.SetFocus End Sub
11. Abra o formulário frmBiblio lio e faça a programação necess essária para que o menu mnuEmprest estimos e o botão nº 3 da ToolBar abram o formulário frmEmprestimos; 12. Grave Grave seu traba trabalho lho;; 13. Teste a programação programação “emprestan “emprestando” do” alguns alguns livros.
Joins Não Não have haveri riaa razã razãoo para para rela relaci cion onar ar tabe tabela lass se não não pudé pudéss ssem emos os recu recupe pera rarr as info inform rmaç açõe õess mais mais faci facilm lmen ente te.. Em SQL, SQL, usam usamos os o coma comand ndoo SELE SELECT CT e a cláu cláusu sula la JOIN JOIN para para exib exibir ir dado dadoss de tabe tabela lass rela relaci cion onad adas as.. A sint sintax axee de SELECT com JOIN é a seguinte: SELECT FROM JOIN ON = ;
A prime rimeir iraa linh linhaa cont contém ém um coma comand ndoo SELE SELECT CT comu comum. m. A segun egundda lin linha indi indica ca o tipo tipo de JOIN JOIN que deve deve ser ser usado:
INNER : serão selecionadas para exibição somente as linhas que contenham dados de ambas as tabelas; serão selec elecio ionnadas adas para para exib exibiç ição ão tod todas as lin linhas has da tabe tabela la que está está a dire direit itaa (rig (right ht)) do JOIN, OIN, ou RIGHT: ser seja, da origem do relacionamento, mesmo que não existam dados correspondentes no destino; serão selec elecio ionnadas adas para para exib exibiç ição ão tod todas as lin linhas has da tabe tabela la que está está a esqu esquer erda da (lef (left) t) do JOIN JOIN,, ou LEFT: ser seja, do destino do relacionamento, mesmo que não existam dados correspondentes na origem; Por Por exem exempl ploo: a tabe tabela la de livr livros os não não con contém tém o nom omee da edit editor ora. a. Mas pod podemos emos exib exibíí-lo lo junt juntam amen ente te aos aos dados ados do livro, com o seguinte comando: SELECT Livros.*, Editoras.NomeEditora FROM Livros INNER JOIN Editoras ON Livros.CodEditora = Editoras.CodEditora;
Note Note que, que, com como esta estamo moss trab trabal alha hanndo com com mais mais de uma tabe tabela la,, prec precis isam amoos iden identi tifi fica carr de que tab tabela ela vem vem o camp campoo dese deseja jado do,, atra atravé véss do pont pontoo “.”. “.”. Isso Isso fica fica bem bem evid eviden ente te no camp campoo CodE CodEdi dito tora ra,, que que exis existe te em amba ambass as tabe tabela las: s: para para indi indica carr o camp campoo da tabe tabela la de Livr Livros os,, usam usamos os Livros.CodEditora. A indi indica caçã çãoo Livros.* indica todos os campos da tabela Livros. Outr Outroo exem exempl plo: o: o com comando ando abai abaixxo exib exibee tod todos os usuá usuári rios os cad cadastr astrad adoos, e o títu título lo do livr livroo quan quando do o usu usuário ário estiver com algum emprestado: SELECT Usuarios.*, Livros.Titulo FROM Usuarios LEFT JOIN Livros ON Usuarios.CodLivro = Livros.CodLivros;
É inte intere resssant santee des destaca tacarr que que JOIN OIN pod pode ser ser comb combin inad adoo com com outra utrass cláu cláusu sula lass do coma comand ndoo SELEC ELECT T, como como WHERE e ORDER BY, sem nenhum problema. Como exemplo, vamos alterar o comando acima para ordenar o resultado pelo título do livro: SELECT Livros.*, Editoras.NomeEditora FROM Livros INNER JOIN Editoras ON Livros.CodEditora = Editoras.CodEditora ORDER BY Livros.Titulo;
Mas Mas vamos amos apli aplica carr o que que apr aprende endemo mos: s: o pró próximo ximo pas passo em noss nossoo siste istema ma é a devo devolu luçã çãoo de liv livros ros. Par Para iss isso vamos apagar as datas de devolução e empréstimo do registro correspondente ao livro que está sendo devolvido, e assim liberá-lo para outro empréstimo. Vejamos como fazer isso: 1. Adicione ao projeto um novo formulário, formate-o como o modelo da próxima página e defina as propriedades dos objetos conforme a tabela; 2. Grave Grave o novo novo formu formulár lário io com com o nom nomee de frmDevolucoes; 3. Escreva Escreva na procedure procedure Form_L Form_Load oad os comand comandos os para central centralizar izar o formulá formulário; rio; 4. Crie as procedure proceduress Form_KeyPre Form_KeyPress ss e cmdRetornar_ cmdRetornar_Click Click do novo novo formulário formulário como estudamo estudamoss nas lições anteriores;
99
Microsoft Visual Basic 6
Objeto
Nome
Formulário
frmDevolucoes
Caixa de texto
txtCodLivro
Label Label Label Botão de Comando
lblTitulo lblCodUsuario lblNomeUsuario cmdOk
Botão de Comando
cmdCancelar
Botão de Comando
cmdRetornar
Outras Propriedades = Valor
Caption = Devoluções de Livros BorderStyle = 1 – Fixed Single Icon = Misc\Books04.ICO KeyPreview = True MDIChild = True Text = “” MaxLength = 5 Caption = “” Caption = “” Caption = “” Caption = &Ok Style = 1 – Graphical Picture = Misc\Checkmrk.ICO Caption = &Cancelar Style = 1 – Graphical Picture = Computer\W95mbx01.ICO Caption = &Retornar Style = 1 – Graphical Picture = Traffic\Trffc14.ICO
5. A prog rograma ramaçã çãoo do camp campoo txtC txtCoodLiv dLivrro nesse esse for formu mulá lári rioo é um pou pouco mais mais comp compli lica cada da que no ante anteri rioor, pois ois aqui aqui devem evemos os exib exibir ir tamb também ém os dado dadoss do usuá usuári rioo, já que que obvi obviam amen ente te seu cód código igo não será erá dig digitad itado. o. Veja como ficou: Private Sub txtCodLivro_LostFocus() txtCodLivro_LostFocus() Dim cnnComando As New ADODB.Command Dim rsLivro As New ADODB.Recordset Dim vCod As Long On Error GoTo errSelecao vCod = Val(txtCodLivro.Text) If vCod = 0 Then Exit Sub Screen.MousePointer = vbHourglass 'Seleciona o livro solicitado: With cnnComando .ActiveConnection = cnnBiblio .CommandType .CommandType = adCmdText .CommandText = "SELECT Livros.*, Usuarios.NomeUsuario " & _ "FROM Livros LEFT JOIN Usuarios " & _ "ON Livros.CodUsuario = Usuarios.CodUsuario " & _ "WHERE Livros.CodLivro Livros.CodLivro = " & vCod & ";" Set rsLivro = .Execute End With With rsLivro If .EOF And .BOF Then 'Se não encontrou o livro, deixa os labels em branco: lblTitulo.Caption = Empty lblCodUsuario.Caption = Empty lblNomeUsuario.Caption lblNomeUsuario.Caption = Empty Else 'Se encontrou, exibe os dados do livro e do usuário: lblTitulo.Caption = !Titulo
Microsoft Visual Basic 6
100
lblCodUsuario.Caption = Empty & !CodUsuario lblNomeUsuario.Caption = Empty & !NomeUsuario 'Verifica se o livro está emprestado: If Not !Emprestado Then 'Se não está, impede a devolução: MsgBox "Esse livro não está emprestado, verifique.", _ vbExclamation + vbOKOnly + vbSystemModal, "Erro" 'Volta o foco ao código para redigitação: txtCodLivro.SetFocus End If End If End With Saida: Set rsLivro = Nothing Set cnnComando = Nothing Screen.MousePointer = vbDefault Exit Sub errSelecao: With Err If .Number <> 0 Then MsgBox "Erro na recuperação do registro solicitado." & vbCrLf & _ vbExclamation vbExclamation + vbOKOnly + vbApplicationModal, vbApplicationModal, "Aviso" .Number = 0 GoTo Saida End If End With End Sub
6. O botão Ok, nesse formulário, apaga os dados gravados nos campos de empréstimo do cadastro de livros: Private Sub cmdOk_Click() cmdOk_Click() Dim cnnComando As New ADODB.Command Dim vCod As Long On Error GoTo errGravacao vCod = Val(txtCodLivro.Text) 'Verifica o código digitado: If vCod = 0 Then MsgBox "O campo Código do Livro não foi preenchido.", _ vbExclamation + vbOKOnly + vbSystemModal, "Erro" Exit Sub End If If lblTitulo.Caption lblTitulo.Caption = Empty Then MsgBox "O campo Código do Livro não contém um dado válido.", _ vbExclamation + vbOKOnly + vbSystemModal, "Erro" Exit Sub End If Screen.MousePointer = vbHourglass With cnnComando .ActiveConnection = cnnBiblio .CommandType .CommandType = adCmdText .CommandText = "UPDATE Livros SET Emprestado = False, " & _ "CodUsuario = Null, " & _ "DataEmprestimo = Null, " & _ "DataDevolucao = Null " & _ "WHERE CodLivro = " & vCod & ";" .Execute End With MsgBox "A devolução do livro " & lblTitulo & " foi efetuada com sucesso.", _ vbApplicationModal + vbInformation + vbOKOnly, "Devolução OK" cmdCancelar_Click Saida: Screen.MousePointer = vbDefault Set cnnComando = Nothing Exit Sub
Microsoft Visual Basic 6
101
errGravacao: With Err If .Number <> 0 Then MsgBox "Erro durante a gravação dos dados no registro." & vbCrLf & _ "A devolução desse livro não foi completada.", _ vbExclamation + vbOKOnly + vbApplicationModal, _ "Devolução cancelada" .Number = 0 GoTo Saida End If End With End Sub
7. Só falto faltouu a proced procedure ure cmdC cmdCanc ancelar elar_Cl _Click ick:: Private Sub cmdCancelar_Click() cmdCancelar_Click() txtCodLivro.Text txtCodLivro.Text = Empty lblTitulo.Caption = Empty lblCodUsuario.Caption = Empty lblNomeUsuario.Caption lblNomeUsuario.Caption = Empty txtCodLivro.SetFocus End Sub
8. Grav Gravee o form formul ulár ário io;; 9. Abra o frmBiblio e esc escreva a programação necessária para o menu mnuDevolucoe coes e para o botão tão nº 4 da ToolBar. Ambos devem abrir o formulário formulário frmDevolucoes; 10. Teste o aplicativo e veja se está tudo funcionando funcionando como esperado.
102
Microsoft Visual Basic 6
Lição 12: Controles de Dados Ness Nessaa liçã liçãoo cons constr trui uire remo moss os form formul ulár ário ioss de cons consul ulta tass do sist sistem emaa Bibl Biblio iote tecá cári rio. o. Para Para isso isso,, apre aprend nder erem emos os a usar os controles de dados (ou ADO Data ADO Data Controls), o Microsoft DataGrid e os Microsoft DataList Controls . Eles facilitam muito nossa vida quando precisamos fazer consultas à base de dados do sistema.
O Controle ADODC O con control trolee ADOD ADODC C (ou ADO Data Control Control) permite a manipulação de bases de dados via ADO de maneira muito fácil e rápida, pois ele permite vincular controles como caixas de texto e labels diretamente aos campos do banco de dados. A grande vantagem de seu uso é a possibilidade de fazer a manutenção dos registros da base com bem pouca programação. A maior desvantagem é a pouca flex flexib ibil ilid idad adee que ofer oferec ecee para ara trat tratam amen ento to dos dos dad dados. os. ADOD ADODC C é um con control trolee cus customi tomiza zado do:: par para utili tilizá zá-l -loo adicione ao projeto o componente Microsoft ADO Data Control . A maneira mais simples de configurar o ADODC é pela janela de propriedades, acionada com o botão direito do mouse:
Um pequena descrição das abas: General e Authentication: contém parâmetros de configuração da conexão com o banco de dados; RecordSource: contém o tipo e a origem dos dados que serão vinculados ao ADODC; Color e Font : servem para customizar a aparência do controle.
As principais propriedades do ADODC são:
Propriedade ConnectionString (aba General) Nessa propriedade criamos a string de conexão do ADODC com o banco de dados. Normalmente, é a mesma string usada na conexão principal. O botão Build , visível na figura acima, aciona um assistente que constrói a string a partir de algumas indicações, como por exemplo o nome do arquivo MDB.
Propriedades UserName e Password (aba Authentication) Ess Essas pro proprie prieda dade dess, como como você você já dev deve ter ter perc perceb ebid idoo, cont contém ém respe espect ctiv ivam amen ente te o nom nome do usuár suário io e a senha enha para conexão ao banco de dados. Podem ser informadas também pelo assistente Build da aba General.
Propriedade CommandType (aba RecordSource) Informa o tipo do comando ADO que será criado pelo controle. Os tipos são os mesmos admitidos pelo objeto ADO Command.
103
Microsoft Visual Basic 6
Propriedade RecordSource (aba RecordSource) Informa o texto do comando a ser execu ecutad tado pelo controle ADODC ODC. Dep Dependendo do tipo informado em CommandType, pode ser o nome de uma tabela ou de uma consulta, ou então um comando SQL.
Propriedades DataSource e DataField Essas não são propriedades do controle ADODC, e sim dos controles que podem ser vinculados a ele. DataSource informa o nome do controle de dados ao qual será ligado, e DataField qual campo será acessado.
Método Refresh Exis Existe tem m cas casos em que que é neces ecessá sári rioo alte altera rarr o Reco RecorrdSou dSourrce do cont contro role le de dado dadoss em temp tempoo de exec execuç ução ão,, via prog progra rama maçã ção. o. Acon Aconte tece ce que que a atua atuali liza zaçã çãoo do reco record rdse sett do ADOD ADODC C não não é auto automá máti tica ca numa numa situ situaç ação ão dess dessas as.. Para que o recordset seja atualizado e os dados sejam exibidos corretamente de acordo com o novo RecordSource, aplicamos ao ADODC o método Refresh. Vamos criar um pequeno aplicativo para exemplificar o uso do controle ADODC: 1. Inic Inicie ie um novo novo proj projet eto; o; 2. Crie o formulár formulário io conforme conforme o modelo modelo e a tabela tabela de propriedad propriedades: es:
Objeto
Formulário
Nome
frmTesteData
Outras Propriedades = Valor
Caption = Tabela de Editoras BorderStyle = 1 – Fixed Single StartupPosition = 2 – Center Screen Botão de comando cmdFechar Caption = &Fechar A D O DC Adodc1 Caption = Editoras Label lblCodigo Caption = “” BorderStyle = 1 – Fixed Single BackColor = Windows BackGround Label lblNome Caption = “” BorderStyle = 1 – Fixed Single BackColor = Windows BackGround 3. Vamos usar a janela de propriedades para configurar a conexão do ADODC. Clique sobre ele com o botão direito do mouse e escolha a opção ADODC Properties; 4. Clique no botão Build (ao lado do campo Connection String). O VB abre a janela do assistente de conexão (veja a figura na próxima página); 5. Na aba Provedor, escolha a vers ersão mais rece ecente do Jet que estive iver disp isponível (na figura a versão é a 4.0) e clique no botão Avançar; 6. Na aba Conexão, informe no item 1 o nome do banco de dados – Biblio.MDB, no nosso caso. Não se esqueça de informar o caminho completo (use o botão com as reticências, é mais simples); 7. Ainda na aba Conexão, o item 2 pede o nome do usuário (o assistente sugere Admin) e a senha. Como nosso banco não tem senha, deixe como está;
Microsoft Visual Basic 6
104
8. Clique no botão “Testar Conexão”. Se você receber a mensagem “Teste de conexão concluído com êxito”, a conexão está pronta; 9. Cliq lique em Ok: o assistente informa a string de conexão para a propried iedade ade ConnectionString, já com todos os parâmetros necessários; 10. 10. Com omoo nosso osso banco anco de dados ados não não tem tem senha enha,, não prec precis isam amoos alte altera rarr nada ada em Auth Authen enti tica cati tion on.. Cliqu liquee na aba RecordSource; 11. 11. Em Comm Comman andT dTyp ype, e, sele seleci cion onee a opçã opçãoo 2 – adCmdTable: a linha “Table or Stored Procedure Nam Name” é habilitada; 12. Em “Table or Stored Stored Procedure Name”, selecione selecione a tabela de Editoras (veja o exemplo):
13. Clique Clique em OK – a configuração configuração do ADODC ADODC está pronta; pronta; 14. Selecione o label lblCodigo. Na janela de propriedades, escolha em DataSource o Adodc1 e em DataField o campo CodEditora; 15. Faça o mesmo mesmo para o label lblNome, obviamente obviamente selecionando o campo NomeEditora; 16. Grave o formul formulário ário com com o nome de de frmData e o projeto como TesteData.
105
Microsoft Visual Basic 6
Sabe qual a programação que precisaremos fazer para esse aplicativo? Nenhuma! A não ser a do botão Fech Fechar ar,, é obvi obvioo. Exec Execuute o apli aplica cati tivo vo e veja eja como como ele ele fun funcio ciona: na: bas basta clic clicar ar nos nos botõe otõess do cont contol olee de dados ados e os labels são atualizados de modo a exibir os campos do registro em que o apontador estiver posicionado:
Você Você deve deve esta estarr acha achand ndoo o ADO Data Control um umaa mara maravi vilh lha. a. Real Realme ment nte, e, ele ele faci facili lita ta mu muit itoo as cois coisas as,, mas mas não não se entu entusi sias asme me dema demais is:: com como já dis disse, se, ele ele não não é muito uito flex flexív ível el quan quanddo o assu assunt ntoo é a manu manute tenç nção ão de uma base de dados em um aplicativo realmente sério, razão pela qual não é utilizado pelos programadores profissionalmente. Pelo menos não para isso: logo veremos uma aplicação realmente prática.
O Controle DataGrid Esse controle ADO, que trabalha vinculado a um ADODC, lembra uma planilha em que linhas e colu coluna nass defi define nem m célu célula las. s. Cada Cada linh linhaa é vinc vincul ulad adaa a um regi regist stro ro e cada cada colu coluna na corr corres espo pond ndee a um camp campoo do reco record rdsset do ADOD ADODC. C. Tamb Também ém é um con control trolee cust custoomiza mizaddo, e por portan tanto para para pod poder util utiliz izáá-lo lo você você deve deve adicio adicionar nar o compon component entee Microsoft DataGrid Control. Assi Assim m com como o ADOD ADODC C, é mais mais fáci fácill conf config igur uráá-lo lo pela pela jan janel elaa de prop proprried iedades ades,, mas nes nesse caso caso as opçõe pçõess da jane janela la vari variam am de acor acorddo com com o conj conjun unto to de dad dados que que será apresentado. Um recurso muito interessante do DataGrid é a opção Retrieve Fields do menu de cont contex exto to (aqu (aquel elee menu menu acio aciona nado do pelo pelo botã botãoo dire direit itoo do mo mous use) e).. Após Após a vinc vincul ulaç ação ão do Data DataGr Grid id ao ADOD ADODC, C, Retrieve Fields configura automaticamente as colunas do grid de acordo com os campos do recordset. Vamo Vamoss entã entãoo elab elabor orar ar um umaa cons consul ulta ta com com o Data DataGr Grid id.. Ante Antes, s, poré porém, m, cria criare remo moss um umaa cons consul ulta ta no Acce Access ss,, que que será acessada pelo formulário de consulta ao cadastro de usuários: 1. Entre Entre no Acces Accesss e abra abra o banco banco de dado dadoss Biblio Biblio;; 2. Inicie Inicie a criação de uma uma nova nova consulta consulta em modo modo estrutura; estrutura; 3. Adic Adicio ione ne a tabe tabela la Usu Usuar ario ios; s; 4. Mova todos os campos campos da tabela tabela para o grid grid da consulta; consulta; 5. Altere Altere a class classifi ificaçã caçãoo do campo campo NomeU NomeUsua suario rio para para Crescente; 6. Mude os nomes nomes das colunas colunas indicadas indicadas (deixe (deixe as outras outras como como estão): estão): Código, para o campo CodUsuario; Nome, para o campo NomeUsuario; Endereço, para o campo Endereco; UF, para o campo Estado. 7. Compare Compare sua sua consult consultaa com o exemplo exemplo da próxim próximaa página; página; 8. 9. 10. 11.
Grav Gravee a con consu sult ltaa com com o nom nomee de de ConsultaUsuarios; Execute Execute a consulta consulta e verifiqu verifiquee se está funcio funcionando nando correta corretamente mente (veja (veja o exemplo) exemplo);; Aproveite para criar criar consultas semelhantes semelhantes para as tabelas Categorias e Editoras; Saia do Access, Access, abra novamente novamente o VB e o projeto Biblioteca Bibliotecario; rio;
106
Microsoft Visual Basic 6
ConsultaUsuarios em modo estrutura
ConsultaUsuarios sendo executada no Access
12. Adicione um novo novo formulário e formate-o conforme conforme o modelo: modelo:
107
Microsoft Visual Basic 6
13. Altere as propri propriedades edades dos dos objetos: objetos: Objeto
Nome
Formulário
frmConUsuarios
A D O DC
datUsuarios
DataGrid grdUsuarios Botão de comando cmdRetornar
Outras Propriedades = Valor
Caption = Consulta Cadastro de Usuários BorderStyle = 1 – Fixed Single Icon = Misc\Misc28.ICO MDIChild = True Caption = datUsuarios Visible = False ConnectionString = crie com o assistente CommandType = 2 – adCmdTable Table or Stored Procedure Name = ConsultaUsuarios DataSource = datUsuarios Caption = &Retornar Style = 1 – Graphical Picture = Traffic\Trffc14.ICO
14. 14. Cliq lique com com o botã botãoo dir direito eito do mo mouuse sob sobre o Data DataGr Grid id.. No menu menu de con contex texto, to, esco escolh lhaa Retrieve Fields. O VB pede uma confirmação antes de faze azer a configuração ção do grid: id: responda Ok, e seu DataGri Grid deve estar parecido com o da figura:
15. 15. Cliq Clique ue nova novame ment ntee com com o botã botãoo dire direit itoo sobr sobree grdU grdUsu suar ario ioss e esco escolh lhaa a opçã opçãoo Properties (vej (vejaa a figur iguraa na próxima página); 16. A aba General contém opções de funcionamento e aparência do DataGrid. Desmarque a opção que per permite mite a alte alterração ação de dado dadoss dire direta tame ment ntee no grid, rid, o que não não é reco recome menndáve dávell em um umaa AllowUpdate, que consulta. As opçõe ções AllowAddNew e AllowDelete também devem estar desmarcadas, e servem, respectivamente, para permitir a inclusão e a exclusão de registros; 17. A aba Keyboard contém opções de navegação pelo pelo teclado. Não será necessária necessária nenhuma alteração; 18. 18. A aba aba Colu Column mnss perm permit itee a def definiç inição ão dos dos títu título loss das colu colunnas do grid, rid, e a qual ual cam campo do conj conjun unto to de dad dados a colu coluna na deve eve ser vincu incula lada da.. Retr etriev ieve Field ieldss já faz faz a conf config iguuraçã raçãoo dessa essass opçõ opções es auto automa mati tica cam mente ente,, e portanto somente se quiser alterar o título de alguma coluna você precisará mudar algo;
19. A aba Layout permite configurar opções de exibição para cada coluna. Na combo Column, escolha a coluna 0 – Código;
Microsoft Visual Basic 6
108
20. 20. Uma Uma opçã opçãoo inte intere resssant santee é Alignment, que define o ali alinhamento do texto dentro tro da célu élula. la. As opçõe ções disponíveis são:
21. 22. 22.
23. 24. 24.
25.
26. 27.
0 – dbgLeft: texto alinhado à esquerda; 1 – dbgRight: texto alinhado à direita; 2 – dbgCenter : texto centralizado no espaço da célula; 3 – dbgGeneral: usa o alinhamento definido como padrão nas opções do VB; Por default, tod todas as colunas são ali alinhadas à esquerda. Alt Altere o alinhament ento dess essa coluna para 2 – dbgCenter; Faça o mesmo mesmo para as colunas colunas 4 – UF, 5 – CEP CEP e 6 – Telefone; Telefone; Outr Outraa opçã opçãoo muito uito usad usadaa é Width, que que dete determ rmin inaa a larg largur uraa da colu coluna na.. Retr Retrie ieve ve Fiel Fields ds alte altera ra a larg largur uraa de acordo com o valor retornado pela origem dos dados, mas com freqüência precisamos ajustá-la man manualm ualmen ente te.. Para ara isso isso,, bast bastaa digit igitar ar em Widt Widthh o novo novo valo valorr desej esejad adoo (em twip twipss). Defi Defina na a larg larguura das das colunas como indicado: 0 – Código: 600 1 – Nome: 3500 2 – Endereço: 6000 3 – Cidade: 2500 4 – UF: 350 5 – CEP: 900 6 – Telefone: 1500 Não vamos vamos alterar nada nada nas abas abas Color e Font; Font; A aba aba Split plit def define ine como como será será apr apresen esenta tado do o foco foco nas nas lin linhas has e colu coluna nass do grid. rid. Uma Uma opção pção inte intere resssant santee é ere para 4 – dbgHighlightRowRaiseCell, MarqueeStyle, que altera a exibição do foco nas linhas. Altere para que toda a linha seja destacada; Finalmente, a aba Format define ine a formatação ção dos dados das colunas. Retrieve Fields também altera essas definições conforme os dados de origem, mas é comum a nece ecessidade de ajustes. Para alterar a forma ormata taçã ção, o, deve devemo moss esco escolh lher er a colu colunna na comb comboo corr corres espo pond nden ente te e depo depois is indi indica carr o form format atoo dese deseja jado do para essa coluna. Em nosso caso não será necessário nenhuma alteração. Clique Clique em Ok – a configuraçã configuraçãoo do DataGrid está está pronta; Abra a janela Código no evento Form_Load. Além dos comandos de centralização do form, vamos alte altera rarr a prop proprried iedade ade Con Connect nectio ionS nStr trin ingg do ADOD ADODC C em temp tempoo de exec execuç ução ão.. Isso sso é neces ecessá sári rioo devid evidoo a umaa limi um limita taçã çãoo do cont contro role le de dado dados: s: quan quando do defi defini nimo moss a Conn Connec ecti tion onSt Stri ring ng pelo pelo assi assist sten ente te,, indi indica camo moss o caminho e o nome do banco de dados a ser conect ectado, e essa informação é gravada na con configuração do ADODC. DC. Se o nome do arquivo MDB for alte lterado ado, ou trocarmos a pasta onde está gravado, o controle não não será será capa capazz de enco encont ntrá rá-l -lo, o, e será será gera gerado do um erro erro de exec execuç ução ão.. Isso Isso é espe especi cial alme ment ntee preo preocu cupa pant ntee em um amb ambien iente de rede rede,, onde onde o cami caminnho de um arqu arquiv ivoo dep depende ende do mape mapeam amen ento to feit feitoo nas esta estaçõ ções es.. Para ara evitar esse problema, indicamos ao ADODC que use para conectar-se ao banco a mesma string da conexão pricipal:
Private Sub Form_Load() Me.Left = (frmBiblio.ScaleWidth (frmBiblio.ScaleWidth - Me.Width) / 2 Me.Top = (frmBiblio.ScaleHeight - Me.Height) / 2 datUsuarios.ConnectionS datUsuarios.ConnectionString tring = cnnBiblio.ConnectionStr cnnBiblio.ConnectionString ing End Sub
28. Escreva a codificação necessária necessária ao evento cmdRetornar_Click; cmdRetornar_Click; 29. Grave o novo novo formulá formulário rio com o nome nome frmConUsuarios; 30. Abra o formulário frmBiblio e programe a procedure de menu menu mnuConUsuarios_Click; 31. Teste a consulta. consulta. Você deve ter um resultado resultado parecido com esse:
Microsoft Visual Basic 6
109
Bem, Bem, com com o cada cadasstro tro de usuár suário ioss foi foi fáci fácil. l. E para para o cad cadastr astroo de liv livros ros, em que que exis existe tem m códi código goss rela relaci cioonado nadoss às outras tabelas do banco, qual o procedimento? Vejamos: 1. Entre novamente novamente no no Access Access e abra o banco de dados dados Biblio; Biblio; 2. Inicie a criação criação de de uma nova consulta consulta em modo estrutura; estrutura; 3. Adicio Adicione ne toda todass as tabelas tabelas do banc banco; o; 4. Rela Relacio cione ne as tabe tabela las: s: Categorias e Livros pelo campo CodCategoria; Editoras e Livros pelo campo CodEditora; Usuarios e Livros pelo campo CodUsuario; 5. Clique Clique com o botão direito direito do mouse mouse sobre sobre o relacionamen relacionamento to entre as tabelas tabelas Usuario Usuarioss e Livros; Livros; 6. No menu menu de de contex contexto, to, selec selecion ionee a opção opção Propriedades da Associação; 7. Esco Escolh lhaa a opçã opçãoo 2: 2:
Microsoft Visual Basic 6
110
8. Adicione os campos CodLivro, Titulo, Autor, NomeEditora, NomeCategoria, NomeUsuario, DataEmprestimo e DataDevolucao ao grid; 9. Altere a classifica classificação ção do do campo campo Título Título para Crescente; Crescente; 10. Altere os título título das colunas: colunas: Código, para o campo CodLivro; Título, para o campo Titulo; Editora, para o campo NomeEditora; Categoria, para o campo NomeCategoria; Usuário, para o campo NomeUsuario; Empréstimo, para o campo DataEmprestimo; Devolução, para o campo DataDevolucao. 11. Grave a consult consultaa com o nome nome de ConsultaTodosLivros; 12. Sua consulta deve ter ficado parecida com a da figura:
13. Execute a consulta consulta e verifique se está funcionando funcionando corretamente; 14. Saia do Access e abra abra novamente o VB e o projeto Bibliotecario; 15. Adicione Adicione um novo formulário formulário ao projeto; projeto; 16. Baseado na consulta lta de usuários, inclua os objeto etos no formulár lário e configure o ADODC e o DataGri Grid para executar a consulta ConsultaTodosLivros; 17. 17. Escr Escrev evaa a proc proced edur uree Form Form_L _Loa oadd conf confor orme me a do form formul ulár ário io frmC frmCon onUs Usua uari rios os.. Não Não se esqu esqueç eçaa do botã botãoo de saída do form; 18. Grave seu trabalho. Ao novo formulário dê dê o nome de frmConLivros; 19. No formulário principal programe a opção de de menu mnuConTodosLivros para para acionar o frmConLivros; 20. Execute o aplicativo e teste a consulta. Compare com o exemplo da próxima página. página. Em nosso projeto temos duas opções no menu Consultas para as quais podemos paorveitar ess esse mesmo form formul ulár ário io:: Livr Livros os Empr Empres esta tado doss e Livr Livros os em Atra Atraso so.. Para Para faze fazerr isso isso,, prim primei eira rame ment ntee vamo vamoss cria criarr mais mais duas duas consultas no Access: 1. Abra Abra o banc bancoo de de dad dados os Bibl Biblio io;; 2. Na aba Consultas, Consultas, clique clique com o botão botão direito direito do mouse mouse sobre a consulta consulta Consult ConsultaTodo aTodosLivr sLivros; os; 3. 4. 5. 6.
Cole ole com com o nom nomee de de ConsultaLivrosEmprestados; Abra a consulta consulta Consul ConsultaLivr taLivrosEmp osEmprestad restados os em modo estrutura; estrutura; Adicio Adicione ne o campo campo Empre Empresta stado do ao grid grid da consu consulta lta;; Desm Desmar arqu quee a opçã opçãoo “Mos “Mostr trar ar”; ”;
7. Na linh linhaa “Cr “Critér itério io”” do camp campoo Empr Empres esta taddo, escr escrev evaa Verdadeiro. Isso fará com que apen apenas as os livr livros os empr empres esta tado doss seja sejam m sele seleci cion onad ados os pela pela cons consul ulta ta.. Veja Veja na figu figura ra ao lado se fez tudo corretamente; 8. Grave Grave a cons consult ultaa e retor retorne ne à aba aba Cons Consult ultas; as;
111
Microsoft Visual Basic 6
A consulta de Livros Cadastrados sendo executada
9. Selecione Selecione a Consu ConsultaLiv ltaLivrosEm rosEmprest prestados, ados, copie e cole com com o nome nome de ConsultaLivrosEmAtraso; 10. 10. Na linh linhaa “Cri “Crité téri rio” o” do camp campoo Data DataDe Devo volu luca cao, o, escr escrev evaa <=Agora(), para para que que seja sejam m sele seleci cion onad ados os apen apenas as os registros com data de devolução até hoje:
11. Verifique Verifique na figura figura se está tudo certo e grave grave a consulta: 12. Feche o Access Access e retorne ao projeto projeto Biblioteari Biblioteario; o; 13. Para identifi ificar car qual consulta lta devemos abrir no formulário frmConLivros, criaremos uma variável públi ública ca no mó móddulo ulo de prog progrramaç amação ão Bibli iblio. o. Acr Acresce escent ntee o segu seguin inte te com comando ando na seção eção Decl Declar arat atio ions ns do módulo: Public vConLivros As String
14. Altere a procedure mnuConTodo mnuConTodosLivr sLivros_Cl os_Click: ick: Private Sub mnuConTodosLivros_Click mnuConTodosLivros_Click() () 'Atribui à variável vConLivros o nome da consulta correspondente à opção 'de menu escolhida: vConLivros = "ConsultaTodosLivros" frmConLivros.Show End Sub
15. Crie as procedures procedures mnuConLivrosEmprestados mnuConLivrosEmprestados e mnuConLivrosEmAtraso conforme segue: Private Sub mnuConLivrosEmAtraso_Cl mnuConLivrosEmAtraso_Click() ick() vConLivros = "ConsultaLivrosEmAtraso" 'Altera o título do formulário de consulta de livros: frmConLivros.Caption frmConLivros.Caption = "Consulta Livros Emprestados em Atraso" frmConLivros.Show End Sub
112
Microsoft Visual Basic 6
Private Sub mnuConLivrosEmprestados mnuConLivrosEmprestados_Click() _Click() vConLivros = "ConsultaLivrosEmprestados" frmConLivros.Caption frmConLivros.Caption = "Consulta Livros Emprestados" frmConLivros.Show End Sub
16. Altere as seguintes linhas do evento Form_Load Form_Load do formulário frmConLivros para que que fique assim: Private Sub Form_Load() Me.Left = (frmBiblio.ScaleWidth (frmBiblio.ScaleWidth - Me.Width) / 2 Me.Top = (frmBiblio.ScaleHeight - Me.Height) / 2 datLivros.ConnectionStr datLivros.ConnectionString ing = cnnBiblio.ConnectionStr cnnBiblio.ConnectionString ing 'Altera o RecordSource do ADODC para usar como origem o contéudo da 'variável vConLivros: datLivros.RecordSource datLivros.RecordSource = vConLivros 'Atualiza o recordset de datLivros de acordo com o novo RecordSource: datLivros.Refresh End Sub
17. Execute uma dessas consultas que acabamos de criar e veja se está funcionando corretamente. O exemplo a seguir é a consulta de livros em atraso:
18. Grave Grave seu traba trabalho lho..
Os Controles DataList e DataCombo Esse Essess con control troles es ADO ADO são são mu muit itoo inte intere resssant santes es:: Data DataLi List st é uma caix caixaa de list listag agem em vin vincula culada da a um cont contrrole ole de dado dados. s. Seu Seus iten itenss serão erão pree preenc nchhidos idos com com os dado dadoss de um dos camp campos os do recor ecords dset et do cont contro role le de dado dados. s. Data DataCo Comb mboo é um umaa caix caixaa de comb combin inaç ação ão que que usa usa o mesm mesmoo prin princí cípi pio. o. Ambo Amboss são são cont contro role less cust custom omiz izad ados os,, e para para adic adicio ioná ná-l -loos à caix caixaa de ferra errame menntas tas marqu arquee a opção pção Microsoft DataList Controls na janela Components. Data DataLi Lisst e Data DataCo Com mbo têm têm as mesm mesmas as prop propri ried edad ades es das das caix caixas as de list listag agem em e comb combin inaç ação ão comu comuns ns e mais mais algumas específicas para trabalhar com o controle de dados:
Propriedades RowSource e ListField Essas proprieda edades indicam cam, respect ectivamente, te, o nome do ADODC ODC que deve ser vinculado ado à DataL taList ou DataCombo e o nome do campo que será usado como origem para os itens da caixa.
113
Microsoft Visual Basic 6
Propriedades DataSource e DataField No caso específico de DataList e DataCombo, essas propriedades servem para atualizar o registro do recordset de um outro controle de dados, (que não é o mesmo vinculado às propriedades RowSource e List ListFi Fiel eld) d),, de mo modo do a sinc sincro roni niza zarr ambo amboss os cont contro role less Data Data:: assi assim, m, conf confor orme me um item item é sele seleci cion onad adoo na caix caixa, a, os dois controles Data estarão apontando para o registro correspondente em seus respectivos recordsets.
Propriedade BoundColumn Def Define ine qual ual camp campoo do reco recorrdset dset o cont contrrole ole reto etornar rnaráá quand uandoo um item item for for sele seleci cion onad adoo. Por exem exempl plo: o: se um reco record rdse sett tem tem dois dois camp campos os,, diga digamo moss Códi Código go e Nome Nome,, com com cert certez ezaa você você vai vai pref prefer erir ir que que seja seja exib exibid idoo na caix caixaa o campo Nome, mas pode ser que vá util tilizar nas operações de banco de dados o campo Código. Você pode então indicar para ara a propriedade ListField o campo Nom Nome, e para BoundColumn o campo Código. Dess essa maneira, quando o usuári ário escolher um item na caixa, o campo retor tornado por BoundColumn para ara aquele registro será Código, apesar do item estar exibindo o nome.
Propriedade BoundText Contém o texto do item que está selecionado na caixa. Mas vamos pôr esse conceito itos em prática ica, elaborando as últimas consultas tas ao cadastro de livros. Vamos começar pela consulta de Livros por Autor. Veja o modelo do novo formulário:
As propriedades dos objetos são as seguintes: Objeto
Nome
Formulário
frmConLivrosPorAutor
ADOD C
datLivros
Outras Propriedades = Valor
Caption = Consulta Livros por Autor BorderStyle = 1 – Fixed Single Icon = Writing\Books02.ICO MDIChild = True Caption = datLivros Visible = False ConnectionString = crie com o assistente CommandType = 1 – adCmdText CommandText = SELECT * FROM ConsultaTodosLivros;
114
Microsoft Visual Basic 6
Objeto
Nome
ADOD C
datAutores
DataCombo
cboAutores
DataGrid grdLivros Botão de comando cmdRetornar
Outras Propriedades = Valor
Caption = datAutores Visible = False ConnectionString = crie com o assistente CommandType = 1 – adCmdText CommandText = SELECT DISTINCT Autor FROM Livros ORDER BY Autor; RowSource = datAutores ListField = Autor BoundColumn = Autor Style = 2 – dbcDropdownList DataSource = datLivros Caption = &Retornar Style = 1 – Graphical Picture = Traffic\Trffc14.ICO
Duas observações importantes: Na prop propri ried edad adee Comm Comman andT dTyp ypee do datL datLiv ivro ross defi defini nimo moss 1 – adCmdText para poder usar um comando SQL que será criado em tempo de execução, de modo a selecionar apenas os livros do autor escolhido; Na prop propri ried edad adee Comm Comman andT dTex extt do datA datAut utor ores es usam usamos os a cláu cláusu sula la DIST DISTIN INCT CT no coma comand ndoo SELE SELECT CT,, para para eliminar linhas repetidas no resultado do comando SQL. DISTINCT faz com que, quando forem selecionados pelo comando SELECT dois ou mais registros exatamente iguais, apenas um será retornado, eliminando repetição. Fizemos isso para que não existam autores duplicados na combo. O func funcio iona name ment ntoo dess dessaa cons consul ulta ta será será assi assim: m: na Data DataCo Comb mboo serã serãoo exib exibid idas as os nome nomess dos dos auto autore res, s, e conf confor orme me o oper operad ador or for for alte altern rnan ando do entr entree eles eles,, os livr livros os do auto autorr sele seleci cion onad adoo serã serãoo exib exibid idos os no grid grid.. Será Será nece necess ssár ário io,, portanto, filtrar os registros da tabela de livros de acordo com o autor escolhido na combo. Vamos começar: 1. Use Retrieve Field elds para formatar o grid. Lemb embre-se de alterar o tamanho das colunas e o alinhamento dos campos da mesma maneira que fizemos nas consultas anteriores; 2. Escreva Escreva a procedu procedure re para para o evento evento Click do botão botão Retorn Retornar; ar; 3. No even evento to Load oad do form formuulár lário, io, escr escrev evaa os com comando andoss para para atr atribui ibuirr a Con Connect nectio ionS nStr trin ingg aos aos cont contro role less de dados: Private Sub Form_Load() Me.Left = (frmBiblio.ScaleWidth (frmBiblio.ScaleWidth - Me.Width) / 2 Me.Top = (frmBiblio.ScaleHeight - Me.Height) / 2 datAutores.ConnectionString = cnnBiblio.ConnectionString datLivros.ConnectionStr datLivros.ConnectionString ing = cnnBiblio.ConnectionStr cnnBiblio.ConnectionString ing End Sub
4. O próximo passo é fazer com que o grid seja atualizado com os livros do autor selecionado. Para isso usaremos o eventos Click da combo: Private Sub cboAutores_Click(Area cboAutores_Click(Area As Integer) datLivros.RecordSource = "SELECT * FROM ConsultaTodosLivros " & _ "WHERE Autor = '" & cboAutores.BoundText & "';" datLivros.Refresh End Sub
5. Grave Grave esse esse form formulá ulário rio com o nome nome de de frmConLivrosPorAutor; 6. Abra o formulár formulário io frmBiblio frmBiblio e escreva escreva a procedure procedure para para o evento Click Click do menu mnuLiv mnuLivrosP rosPorAuto orAutor; r; 7. Test este a con consulta. Vej Veja que, conforme você escolhe um autor, o grid é automatica icamente atualizado com seus eus respe espect ctiv ivos os liv livros ros. Caso Caso não não exis exista ta nen nenhum hum livr livroo cada cadast stra raddo para para o auto autor, r, o grid rid não não apre aprese sent ntar aráá nenhum registro. Compare com a figura a seguir:
Microsoft Visual Basic 6
115
8. Seguindo o mesmo procedimento, crie as consultas de livros por Editora e por Categoria. Grave-os respectivamente com os nomes de frmConLivrosPorEditora e frmConLivrosPorCategoria; 9. Teste as consultas consultas que você você criou criou e veja veja se estão estão funciona funcionando ndo corretam corretamente; ente; 10. Grave Grave seu traba trabalho lho..
116
Microsoft Visual Basic 6
Lição 13: Relatórios Quem Quem já crio criouu rela relató tórrios ios no Acce Access ss sabe sabe como como uma ferr ferram amen enta ta gráf gráfic icaa faci facili lita ta esse esse tipo tipo de trab trabal alhho. E vai vai se sentir em cas casa no VB: a partir da vers ersão 6 do Vis Visual Basic, a Microsoft intro troduziu duas novas ferramentas que que junt juntas as perm permit item em a cria criaçã çãoo de rela relató tóri rios os de mane maneir iraa visu visual al,, mu muit itoo seme semelh lhan ante te ao cons constr trut utor or de rela relató tóri rios os do Acce Access ss.. Ness Nessaa últi última ma liçã lição, o, apre aprend nder erem emos os como como usar usar essa essass ferr ferram amen enta tass cons constr trui uind ndoo um dos dos rela relató tóri rios os do nosso sistema de controle de bibliotecas.
Usando o Data Environment A primeira ferramenta que vamos estudar é o Data Environment Designer , cuja função é estabelecer conexões e comandos de acesso ADO a bancos de dados ( Data Data Environment Environment quer dizer “ambiente de dado dados” s”)) e que que podem odem ser usad usados os post poster erio iorrment mentee por por for formu mulá lári rios os e rela relató tóri rios os do proj projet eto. o. Veja Vejam mos passo asso a passo como criar e configurar o Data Environment: 1. Se ainda ainda não o fez, abra o VB e o projeto projeto Bibliotecário Bibliotecário;; 2. No menu Project , escolha a opção More ActiveX Designers; 3. Escolha agora a opção Data Environment. O VB adi adicio ciona um Data Environment ao projeto, de nome DataEnvironment1. Você pode criar quantos forem necessários, cada um ligado a uma fonte de dados:
4. Vam Vamos alte altera rarr o nome nome do Data Data Envi Enviro ronm nmen ent: t: na jane janela la de prop proprried iedades ades,, alte altere re a pro proprie prieda dadde Name Name par para DataBiblio; 5. Vinc inculado ao Data Environment exi existe sempre ao meno enos um objet jeto Connection – veja na figura: o que acab acabam amos os de adic adicio iona narr cham chamaa-se se Conn Connec ecti tion on1. 1. Vamo Vamoss reno renome meáá-lo lo:: cliq clique ue com com o botã botãoo dire direit itoo do mo mous usee sobre Connection1 e escolha a opção Rename; 6. Alte Altere re o nom nomee par paraa cnnLivrosCadastrados; 7. O próximo passo é criar a conexão com o banco de dados: clique novamente com o botão direito do mouse e escolha a opção Properties; 8. Crie a conexã conexãoo da mesma mesma forma forma que que fizemos fizemos nas lições anteriores; anteriores; 9. Clique mais uma vez com o botão direito do mouse e escolha a opção Refresh: se você fez tudo certo, a linha de status está indicando que o objeto Connection está conectado ao banco:
10. Devemos agora adicionar um objeto Command. Clique Clique com o botão direito e escolha Add Command;
Microsoft Visual Basic 6
117
11. Altere o nome do comando para cmdLivrosCadastrados: cmdLivrosCadastrados:
12. Clique com o botão direito sobre o comando e escolha a opção Properties:
13. Na aba General defi efinimos a origem dos dado ados: em Database Object info inform rmam amoos qual qual o tip tipo do objet bjetoo que que será será aces acessa sado do pelo elo com comando ando:: Table (tabela), View (con (consu sult lta) a) ou Stored Procedure, e também seu nome. A opção SQL Statement serve para usar um comando SQL; 14. 14. Esco Escolh lhaa Database Object, e o tipo View; 15. Em Object Name, escolha ConsultaTodosLivros; 16. Como não precisamos alterar nada nas outras outras abas, clique em Ok; 17. Clique no sinal “+” que aparece ao lado do nome do comando para visualizar as colunas da consulta:
118
Microsoft Visual Basic 6
18. Grave seu trabalho. Ao Data Environment dê o nome de DataBiblio. Note que a extensão do arquivo é DSR (de Designers). Bem, a primeira parte do serviço está pronta. Vejamos agora como criar o relatório propriamente dito:
Usando o Data Report A ferramenta para design de relató atórios do VB é o Data Report . Sua operação é muito simples, basead eada no recurso arrastar-e-soltar do Windows. Vejamos como usá-lo: 1. No menu Project escolha a opção Add Data Report ; 2. O objeto DataReport1 é adicionado ao projeto, e a caixa de ferramentas passa a exibir os controles suportados pelo relatório:
3. Note que que o formulá formulário rio está está dividido dividido em em 5 partes partes (ou (ou seções), seções), chamada chamadass de Report Sections: Report Header : cabeçalho a ser impresso no início do relatório; Page Header : cabeçalho a ser impresso no início de cada página; Detail : corpo do relatório, ou linha de detalhe: área onde serão inseridos os dados do relatório; Page Footer : rodapé a ser impresso no final de cada página; Report Footer : rodapé a ser impresso no final do relatório. 4. Cada Cada seçã seçãoo tem tem prop propri ried edad ades es e méto método doss que que perm permit item em form format atar ar o rela relató tóri rioo conf confor orme me nece necess ssár ário io,, além além do próp róprio rio obje objeto to Data DataRe Repo port rt – bas basta clic clicar ar na área área que que quere ueremo moss form format atar ar par para ver suas suas pro proprie prieda daddes na janela Properties. Clique no título da janela do DataReport para ver suas propriedades; 5. Alte Altere re a pro propr pried iedad adee Name Name para para rptLivrosCadastrados; 6. A propriedade DataSource indica o Data Environment que deve ser usado como origem dos dados. Escolha o DataBiblio (deve ser único disponível); 7. Em DataMember informamos o comando a ser executado pelo relatório: escolha o cmdLivrosCadastrados; 8. Agora clique com o botão direito do mouse sobre o DataReport e escolha a opção Retrieve Structure: note que o nome da seção Detail mudou para cmdLivrosCadastrados_Detail; 9. Feche as seçõ eções Repo eport Head eader e Report Footer, pois não vamos usá-las. Para fazer isso arrast aste a barra que contém o nome da seção para cima (diminuindo a régua) até fechá-la. 10. 10. Já pode podemo moss incl inclui uirr camp campoos em noss nossoo relat elatór ório io.. Abra Abra as jane janela lass do Data Data Envir nviroonm nmen entt e do Data Data Rep Report ort lado a lado, de forma a poder visualizar ambas ao mesmo tempo (mais ou menos como na figura a seguir):
Microsoft Visual Basic 6
119
11. 11. Arr Arraste aste o camp campoo Códi Códiggo da jane janela la do Data Data Envi Envirronme onmennt para para dent dentrro da seçã seçãoo Deta Detail il:: note ote que, que, além além do campo, o título da coluna também é adicionado ao relatório:
12. 13. 14. 15.
Aumente a altura da seção seção Page Header para uns uns 3 centrímetros (para (para isso arraste a barra para baixo); Arraste o label que contém o título do campo (na figura é o da esquerda) para a seção Page Header: Repita o processo processo para os os campos Título, Título, Autor, Editora Editora e Categoria; Acerte a largura dos campos. Para isso clique sobre o campo e altere a propriedade Width ou então arraste a borda do campo até a largura desejada; 16. Altere a largura do título de cada coluna para a mesma do campo correspondente; 17. Reposicione os campos e os títulos. Se necessário aumente a largura do rela relató tóri rio: o: para para isso isso arra arrast stee a bord bordaa dire direit itaa do rela relató tóri rioo até até a larg largur uraa dese deseja jada da,, mas mas aten atençã çãoo à rég régua para para não não ultr ultrap apas assa sarr as medi medida dass do pape papell (us (usarem aremos os o tamanho Carta em modo Paisagem): Tamanho Carta: 21,5 x 28 cm; Tamanho A4: 21 x 29,7 cm; Tamanho Ofício: 21,5 x 35,5 cm. Obs. Obs.:: você você pode pode melh melhor orar ar o posi posici cion onam amen ento to dos dos camp campos os clic clican ando do com com o botã botãoo dire direit itoo sobr sobree o rela relató tóri rioo e desmarcando a opção Snap to Grid;
18. Clique sobre o campo Codigo e altere a propriedade Aligment para 2 – rptJustifyCenter, para centralizar o dado no campo; 19. Centralize Centralize também também os títulos dos campos da mesma mesma maneira;
Microsoft Visual Basic 6
120
20. Altere a fonte (propriedade (propriedade Font) dos títulos das colunas para Arial, itálico, tamanho 10; 21. Altere a fonte fonte dos campos campos para para Arial tamanho tamanho 10; 22. Seu relatório relatório deve deve estar parecido parecido com o do exemplo: exemplo:
23. Procure na caixa de de ferramentas o ícone rptLabel e insira um na seção Page Header – ele vai conter o título do nosso relatório; 24. 25. 26. 27.
Altere a propried propriedade ade caption caption do label para para Relação de Livros Cadastrados; Faça-o Faça-o ocupar toda toda a largura largura do relatório; relatório; Altere a fonte fonte do label para Times New Roman, Roman, negrito, negrito, tamanho tamanho 16; Confira Confira seu relatório relatório com o exemplo exemplo abaixo:
28. Procure Procure agora agora o ícone do controle controle rptLine; rptLine; 29. Desenhe uma linha linha na seção Page Header, abaixo dos títulos das colunas; colunas; 30. 30. Dese Desenh nhee outr outraa lin linha, ha, de mes mesmo com comprim primen ento to,, na seção eção Pag Page Foot Footer er (au (aument mentee um pouco ouco essa essa seção eção,, se achar necessário); 31. Se desejar, você pode pode mudar o estilo da linha alterando a propriedade BorderStyle. Veja como ficou: 32. Existem alguns controles especiais, que são inseri eridos atr atravé avés do botão direito do mouse, como por exemplo a data do sistema. Vamos inserí-la: clique com o botão direito e escolha Insert Control;
Microsoft Visual Basic 6
121
33. Escolh Escolhaa agora agora a opção Current Date (Short Format), que insere a data no formato curto do Windows; 34. Posicione o campo da data à esquerda, acima do título do campo código e alinhada com ele; 35. 35. Outr Outroo con control trolee inte intere resssant santee é o núme númerro da págin ágina. a. Acio Acione ne nova novam mente ente o menu menu Inse Insert rt Contr ontrool e esco escolh lhaa agora a opção Current Page Number ; 36. Alinhe o número do do página à direita do relatório, na mesma altura da data; 37. Diminua seu tamanho tamanho para um espaço de aproximadamente aproximadamente 3 caracteres; caracteres; 38. Altere o alinhame alinhamento nto para centrali centralizado; zado; 39. Insira Insira mais um label do lado esquerdo esquerdo do número número da página; página; 40. Altere a propried propriedade ade caption caption desse label label para “Página:” (sem as aspas); 41. 42. 43. 44.
Altere o alinha alinhamento mento do do label para para 1 – rptJustifyRight; Diminua a altura da seção Detail para a mesma dos campos nela contidos; Se quiser incluir mais labels e formatações, esteja esteja a vontade... O layout do relatório relatório está está pronto. Veja Veja como ficou o meu:
45. Grave o relatório relatório com com o nome nome de rptLivrosCadastrados – note que a extensão do arquivo é a mesma do Data Environment, ou seja, DSR; 46. Precisamos agora fazer nosso relatório funcionar. Abra o formulário formulário frmBiblio; 47. Escreva a programação da opção de menu Rela elatórios – Livros para informar o orientação do papel e acionar o relatório: Private Sub mnuRelLivros_Click() mnuRelLivros_Click() With rptLivrosCadastrados 'A propriedade Orientation informa a orientação do papel para impressão 'do relatório, e o valor rptOrientLandscape rptOrientLandscape define modo Paisagem: .Orientation .Orientation = rptOrientLandscape rptOrientLandscape
122
Microsoft Visual Basic 6
'Para exibir o resultado do Data Report usamos o método Show: .Show End With End Sub
Obs. Obs.:: para para impr impres essã sãoo em mo modo do Retr Retrat atoo norm normal alme ment ntee não não é nece necess ssár ário io alte altera rarr a prop propri ried edad adee Orie Orient ntat atio ion, n, mas se precisar use a constante rptOrientPortrait. 48. 48. Para Para evit evitar ar prob proble lema mass de cone conexã xão, o, prec precis isam amos os alte altera rarr a Conn Connec ecti tion onSt Stri ring ng do Data DataEn Envi viro ronm nmen ent. t. Abra Abra o formulário frmSplash; 49. Na procedure procedure Timer1_Timer, Timer1_Timer, localize localize o comando: comando: cnnBiblio.Open
50. Escreva Escreva abaixo abaixo dela a linha linha a seguir: seguir: DataBiblio.cnnLivrosCadastrados.ConnectionString = cnnBiblio.ConnectionString
51. Grave Grave seu traba trabalho lho;; 52. Execute o programa e o relatório de Livros. Livros. Se estiver tudo Ok, o resultado será parecido com esse: esse:
Pronto! Agora só falta você criar os outros relatórios do sistema (Usuários, Categorias e Editoras) e ele estará terminado. Com isso chegamos ao final do nosso curso. Espero sinceramente que tenha gostado, e que aproveite bem tudo que aprendeu. Parabéns e boa sorte!!! Luís Carlos Ballaminut