Vous êtes sur la page 1sur 38
Ch CulKrsos Omilline ici alclaaas | | ARevista ClubeDelphi oferece para seus assinantes uma Giibevell pu série de Cursos Online de alto padrao de qualidade el Conhega abaixo os cursos jé disponiveis.. Aplicagoes Client/Server com dbExpress e Firebird ae = \ Confira o plano de aula completo: www.devmedia.com.br/clienteserver t+ Curso Online - Sistema Sy Peer ee Com See aa Pee Cer ML een eae ee eatin De ee cree Ee ere) Secao EASY DELPHI Nesta secao vocé encontra artigos para iniciantes na linguagem Delphi Ja CRMC tae Conhega algumas dicas para facilitar seus relatorios com QuickReport Mikel Marcela Scheid ftkokoem nmi cm fee a Ise ragged Seas, arate {ene de Soa e095 tar Wed? eT ome de bid e MSS Emer da pe rl ted 32 ClubeDelphi -Dicas de QuickReport s ferramentas de relatérios so uum meio do programador pro: porcionar aos usudrios formas mais amplas e praticas de visualizar informagbes armazenadasem uma base de dados. Informagées estas que podem ser oriundas de telas de cadastros ou de ages geradas pelo proprio sistema, como cadastros de cidades, clientes, produtos ou até mesmo o registro de lag criado por um usuario a0 executar (© QuickReport acompanha o Delphi desde sua primeira versio ¢ até a ver- $0 6 vinha incorporado a0 seu IDE. Na versio do Delph surgimento do Rave Reports, 0 Quick Report deixou de vir pré-instalado no posteriores, com 0 IDE, ou seja, & necessério fazer a insta- lagdo manisal do componente. ino BDS RAD Studio 200; fazer o download e instalagio a partir do site da Code! registrados) (somente ustsrios Neste artigo veremos a instalagfo dos ‘componentesdo QuickReportnoDelphi7 ecriaren indmicos através de formulérios e listagem de informa- 10 de dados. bbém uma forma pritica de customizar 6 layout dos relatsrios eriados com 0 QuickReport Aplicaremos regras de for fe também uma forma simples upar registro, Nota:Para consltar mais detalhes no vidades,informagBes técncas, down load e/ou suport téenico do pacote (QuickReport consulte 0 ste do fabr- Instalando o pacote de componentes Durante este artigo iemos utilizar © Delphi 7 para criagio da aplicagdo ¢ exemplos préticos para 0 uso de relatérios com 03 componentes do ‘QuickReport. Como abordado na intro- ‘dugio ao artigo, na versio do Delphi 7 € posteriores 0 QuickReport deixou de vir pré-instalado no IDE. Para té-1o instalado ser necessério adicionar sua BPL ao Delphi, Feche todos os formuldrios abertos 0 ‘menu FilelClose All e inicie 0 processo de instalagio no menu Component>Instll Paokages. Clique no botdo Add enavegue até a pasta de Bin do Delphi que por de- fault €C:\ Arquivos de Programas\Borland\ Delphi7\Bin\ Localize oarquivo delqrt70. bpl e selecione-o. Feito isso 0 pacote de componente é é mostrado na lista como (QuickReport Components conforme pode ‘mos ver na Figura 1 Griando a aplicagao Parademonstracio dos relatrioscria- remos uma apicago com acessoaoban- code dados Employesb que acompanha a instalagto do Firebird ea partir deste iremos configurar nossassituagoes de relatrio por meio de pesquisa filtros realizadas nos omponentes No menu FilelNew>Application cre ‘uma nova aplicagioe altere a proprie- dade Name do formulérioinicial para “frmPrincipal”e a propriedade Caption para “Dicas QuickReport. Salve a Unit Principal do projeto como “Principal pas" e 0 proto salve como “prjQuick Reportdpr’ Paracriaraconexdocombanco de dads e estruturaroscomponentes, vamos util zarum Dats Moduleque devers ser criado através do menu FileNew>Daia Modul. Altereseu nome para “DM” esalvea Unit como “uDM.pas’. Adicione um compo- nente SQLConnection(‘sqConexao") da paleta déEsprve © sgiConesao € 0 responsavel pela co- nexéo como arquivodo banco de dads, em nosso caso seréo arquivo Employee. fi ocmalmentesituado em C:\ Arp ‘de Programas\Firebird\Firebind(versdo)\ ‘examples Para contigurars parémetros de acesso a0 banco de dads, com um dduplo clique sobre 0 componente sq! Conesas, erie uma nova conexao util- zando icone Add Connection defina @ Driver Name para Inerbse e Connection Name para “Employee” (Figura Con Default Project Options Packeaes | Design peckages es © Internet Explorer Components 1% Inteaweb 5.0 Design Package for Delphi7 | Rave Repotts BE 5.0 Package (4 Shell Conttol Property and Component Editors unlime packeges > Bul vith runtime packages geet etoahpetepe firme e prossiga para aconfigurssio dos demais parametros, comecando pela propriedade Driahase onde deverd ser Jnformado 0 caminho da base de dados Employee Defina ousadrio do Firebird (SYSDBA) cea senha (masterke) para acess 20 BD. Napropriedade SererCharSetwilizare sos o padrso Wini252 e em SQLDinlec utilize 0 padrdo 3 para que possamos utilizar comandos de SO!-maiscomple- 108 Figura 3) ‘Aindano componente siConexmy defina sua propriedade Lopinrampt para False e altere a propridade Connetel para Tre testando assim o sucesso da conexéo. ‘Adicione também no Dats Modale um componente SQLDetsSet(5qlPesquis’) relacione a propriedade SQLCon nection 0 componente sqlConexao © digite a instrugdo SOL da Listagem 1 em sua propriedade CommanText. © comando de SOL que adicionamos ira trazer como resultado todos o= registros de empregados contidos na tabela EMPLOYEE e relacionando-oo a Yi Mictosot Dice XP Sample Automation Server Wtapper Components [Cérquivos de programes\Barandh\Debbhi\Bin\dclat7O bel Ae UL EET. ie Ac age ome pat same ase ee2 anu etna gens eno ite esr ers seo Edigdo 92 ‘ClubeDelphi 33 seus respectivos departamentos através de um inner Join com a tabela DEPAR- TAMENT. O objetivo de selecionar os empregados com seus respectivos departamentos ¢ criar logo mais um relatério onde serio criados grupos de tempregados de acordo com o departa- ‘mento onde cada um atua, ‘Adicioneaindaao Data Moduleum com= ponente DaiaSetProvider"dspPesquisa’) da paleta Data Access relacionando sua FLAME, NPLOVEE. OME ET, ELJbRoumthe, HPUITEE SALARY OEPARTEATOCPARTHENT ARCEELDYEEOEPT A ™ OCPARIGNT DEFT ND) igen byrne gua tleputtsTomaaiopcpa 34 ClubeDelphi - Dicas de QuickReport propriedade DataSet parasqlPesquisa. Adie cioneaindada paleta Date Access um com- ponente ClientDataSel("cdsPesquisa”) © configure a ligacio da propriedade ProviderName ao dspPesquisa. Com um. plo clique sobre o edsPesquisa abra 0 Fields Eaitor e adicione todos os campos da tabela através do clique de direita e Add all fields Retornando ao formulério principal, adicione tres componentes Button da lr engine 2 are ene paleta Standard alterando sua proprie- dade Caption para “Geral”, “Agrupado” ¢ “Filtrar", respectivamente. Adicione ainda um componente Edit("edtFiltro") eexcluao valorem sua propriedade Text. ‘Adicione também um Label ealtere seu Caption paca “Pesquisa”, ‘Adicione um componente DataSource (dsEmpregaclos”)relacionando sua pro- priedade DalaSet ao csPesquisa configu- rado no DM, Adicione um componente DBGrid(“gridEmpregados”) e ligue a proptiedade DataSource ao dsEmpregados. (Organizando os componentes no formu- lério de forma semelhante 3 Figura 4. Adicione ao evento OnShow do frm- Principal a seguinte linha de comando que fard a abertura do ClientDataSet de forma aexibir todos os registros cantidos na base de dados: Adicione também ao evento OnClose do frmPrincipal o seguinte cédigo que itd fechar a conexdo de pesquisa com a tabela da base de dados: Criando os relatérios A criagéo de relatérios através do QuickReport poders ser feita por meio de duas seqiiéncias dos processos, uma onde criamos o formulério ¢ adicio- ramos todas 0s componentes do QR manualmente ¢ outra onde criamos sum novo Report que traz uma estrutura de relatorio previamente configurada ‘Veremos as duas maneiras comecando pela criacdo de um relat6rio geral de amostragem dos registros. O desenvol- vimento seré totalmente manual. Cie, através do menu Filel New>Form, tum nove formulétio(‘frmReportGeral”) alteranclo o Caption para "Relatério Geral cde Empregacls” e sua propriedade Key- Preview para True salve sua Unit como “uReportGeralpas", Adicione ao evento (OnkeyDouwn do frmReportGera oseguinte c6aigo com a fungio de fechar a tela de cexbigio ao pressionarmos a tecla ESC, Insira um componente QuickRep (/QRelatorio) da paleta OReport. Note que na drea em branco do componente que acabamos de adicionar existe uma rargem em tomo de todo o documento, margem esta que delimitaoespaco til do relat6rio, ou seja, 6a drea de impressio que podemos utilizar. Por default 0 relat6rio ‘vem sem nenhuma banda, As bandas so ‘reas no relatério onde incluimos os com- ponentes de visualizacio dos dados. Para adicionar bandas no relatério seja, espacos divididos para a exibicso de cabecalho, descricdo, resultados, entre outros precisamos adicionar a0 ‘nosso formulério componentes QRBand ce configuré-los de acordo com a fungao {que os mesmos deverso assumi ‘Adicionando um componente QRBand (*bdCabecatho"), que por Default 6 adicio- nado como réTitle em BandType observe que 0 mesmo jd torou pasicio a0 topo do relatério, onde devera permanecer € sera configurado para que este seja 0 cabegalho do relatério, Altere o BendType para riPageHleader. Arraste para dentro do ‘edCabecalho um componente QRLabel al terando seu Caption para "Relatsrio Geral cle Emprogaclos" edefinindo um tamanho de fonte diferenciado para que assuma as, caracterfsticas de titulo do relatéro, Para configurar os itens de descriglo dos campos que serdo exibidos no rela- {6rio adicione novamente ao formulério ‘um componente QRBand("bdTitulos”) onde deverio ser adicionados quatro componentes ORLabel com as seguin- tes descrigGes na propriedacle Caption “Bmpregado”, “Telefone”, “Salario” e “Departamento”, Configure a altura da beiTitulos para que o tamanhe da linha fi- que ajustado de forma corretaem relagao ao tamanho dos ttulos de colunas ealtere sua propriedade Bend Type para rb Paradar mais destaque linhade descr fo de cada coluna, selecione a Titulos ‘ealteresua propriedade Color paracl Siler Da mesma forma altere também a cor de fundo dos componentes QRLabe! também para lSilver. O préximo passo na criagdo do relat6rio serd adicionar uma nova QRBand (“bdCampos”) onde deverioser exibidos os registros através do componente de texto ORDBText da paleta QReport Seguindo o mesmo esquema do cabe salho das colunas, adicione na biCampos, imediatamente abaixo os campos do ca- Degalho, quatro componentes QRDBText, observando uma configuragso indivi- dual para cada um deles que deveré ser de atribuir sua propriedade DataSet a0 csPesquisa configurado no Data Modulee também de configurar qual seré campo 0 qual 0 QRDBText iré se relacionar, alterando sua propriedade DataField a0 ‘campo respectivo com a descricao do texto no cabecalho. [Nota:Nao se esquega de arescentar@ Unit do Data Module a Uses do frm lao de elatio Use a opgo File>Use unitou aes Fr Ainda antes de executar seu relaté- ria, selecione o componente QuickRep (‘QRelatorio") e ligue a propriedade DataSet a0 componentes cdsPesquisa também configurado no Data Module da nossa aplicacso. Depois da organizacio dos com- ponentes, seu relatério deverd ficar semelhante ao relatério ilustrado na Figura 5, Para executar 0 rela6rio,cli- ‘que como botio direito do mouse sobre o relatrio eselecione a opcdo Preview, aque iré exibir as informagdes contidas no ClientDataSet configurado. Tome 0 ccuidado de ativaro cdsPesquisa antes da viswalizacdo dos registros. ara executar a tela do relatério em Runtime, retorne aofrmPrincipal onde de- verd atribuir a seguinte linha de eédigo a0 evento OnClick do botdo Gera OE DT Aguas lana toruonea) On Leer. 0 cédigo cria o formulétio, abre 0 ClientDataSet que contém os dados por fim exibe 0 relat6rio. Va também até © menu Projectl Options do Delphi eno configurador de opcodes que iré parecer localize a aba Forms. Veja que existem, relacionados na segao Auto- Create forms, o Data Module e também os dois formulérios que criamos. Arraste co frmReportGeral para a segio Available forms. também arraste 0 DM para que seja criado antes que o formulério prin- cipal do sistema (Figura 6). Aplicando filtros ao relatério geral de empregados ‘A opcio de aplica iltrs ao relatério nada mals do que uma simples contig rao que faremios da propriedade Filter do edsPsquiss, mas preferiabordar ete detathe aqui no artigo para demonstra diferentes stuagbes possveis de custo mizagio eexbigio do seu relatrio. Posiclonado no frmPrinia, adcione 420 evento OnClick do botdo Filtrar 0 ‘igo da Listagem 2 que ard uma var- redura em todos os registros do campo FULL._NAME procurando pelo valor Aigitede no espero da peequisn ‘Ao executar oun apicagio, digite um valor no campo de pesquisa e apique 0 botdo Fit para vsualizaros resultados Brstrons faa PeMIMEN Edigd0 92 -ClubeDelphi 35 seuccr Foam ‘Main fr Avlo-cteste forms: DM. fmPrinepal Figura econosepoee gen 2 plates msngeernbin ree ono pines dda segs Diectories/Condtionals | |) Apofeaion | Compier | Comeier Messacee | Linker imPincipa = 36 ClubeDelphi -Dicas de QuickReport Ve eae ua en etcon info | Packages Available foims: « > «“ » im Aopesquisar, prexemplo, pelo valor “be serdo listados somente alguns registros que contenham estassiglasno nome. Uma ‘opsa0 interessante que podemos usar na hora deexibiro relatéro, i queaestrutura decomponentes utitizados para ambos os exemplos anteriores éa mesma, seréutili- zar um componente RedioGroup e definir as opsdespara queoususrioescolhaentre um relatstio completo (‘sem filtros”) ou uum relat6rio customizado, onde poder antes filtrar pelos registros que realmente deseja que sejam impressos, Griando relatério com grupos de registros Nesta segio do artigo veremos uma psf interessante para criagdo de um relat6ro,utilizatemos basicamente as informagdes semelhantes 20 exemplo anterior na qual agora iremos organizar cos registro por grupos, ou sj iremos criaruma lisa de departamentoselogo abaivo de cada departamento uma lista gem de todos os empregados Selecione FleNeOther>New>Repor Esta € uma outra forma de ve crar re Intstos no Delphi tilizando © Quick Report Salve a Li do formlio como “sGroupReportpas”Adicion, da paeta Report, um componente QRGroup a0 relatéroe adiione também um compo- nente QRBand ealtere seu BanType para rbDeti, Para trabalhar com os resulta- dos no relatra, adicione ao frmulério cos seguintes components eaizando as devidasconfiguragies a seguir = SQLDataset(q/Group”) da. paleta dbExpress, lize a Unt do Data Module e igue sua propriedade SQLConnection aosgiCancia previamenteconfigurado. ‘Adicione em CommanText a instrugho de SQL da Listagem 3 = DataSesProvider (CAspGroup”) da paleta Data Accs €ligae-o através da Propriedade Dataset a0 y/Group, = Cen DataSet CedsGroup”) da paleta Data Access configurando seu Provider: Name para dspGroup. Com urn duplo clique sabre o componente abrao Fils Eiltoreadictone todos os campos resul- tants da pesquisa SQL. Amat agora para dentro do componente QRGroup um componente QRDETEnt e Hig ua propriedade Dat 20 csGrup «Deafeld para DEPARTMENT Selecione ‘componente asGroup para que possames fazer uma configuracio indispensavel an tesde continuar coma criagdo do relatrio agrupado. Precisamos definir © campo pelo qual iremos criar um indice para for- magio des grupos, onde na propriedade IneFikiNamas voce ever cigitaro valor DEPARTMENT, queserdocampo que ti _zaremos para. formagio dos grupes. Retornando ao formulirio de criagio 4o relatério,arraste agora para dentro do QRBand mais trés componentes QR- DBext,relacionando a propriedade Ds- {aSet de ambos a0 cdsGroup eo DataField respectivamente para FULL_NAME, PHONE _EXT e SALARY. Selecione novamente 0 QRGroup e em sua pro- priedade Expression digite 0 campo pelo qual nosso rlatério send agrupado, {nformando-lhe o seguinte valor: Antesdo Previewselecione aindao objeto (QuickReport! de modo que sua proprieda- de DataSet seja configurada ao cdsGroup. Realizadas todas as configuragées acima escrita, utilize 0 bot8o direito do mou se sobre o relatorioe selecione a opcio Preview que deverd originar um relatrio ssemelhante ao exibido na Figura 7. Retornando ao formulério principal para codificagio do Button “Agrupado”, adicione ao evento OnClick do mesmo 6 seguinte bloco de eédigos: Nota: Acesse o menu rojec|Optons & na gula Forms remova 0 objeto Qulck Report? da secio Auto Create Forms ‘enulando-o para Available Forms Conclusao Durante este artigo vimos algumas dicas interessantes de come criar rapi ddamente um relatéro utilizando compo- orprate Henduars Ue eer nentes de acesso a dados e QuickReport de forma simples e também com a apli- cago de filtros ao relat6rio. CCriamos também um relatério com a formasio de grupos de registros, que facilta muito na andlise das informagies de um relatério, Dentre estas opgdes, lescubra vérias outras funcionalidades do QuickReport, como personalizagao de campos em runtime ou até mesmo a criagdo de um relatério mastridetail Grande abrago e até a préxima. @ la Ediga0 92 -ClubeDelphi 37 Secdo EASY DELPHI Nesta secdo vocé encontra artigos para iniciantes na linguagem Delphi Mensagens e caixas de dialogo (CM ela Mcrae ‘dtiano Santos soereanareannete «senor De ede 8 Piso ‘progam MRBxrlen Coma Socal pel nese Cain eal SPE | frac Coie Mee oi sh al aCe Ma |b st beg nei Blgeuan) om das omagese ss ‘oe deena 38 ClubeDelphi- Mensagens e caixas de didlogo US Tee eR LeU LE) © longo dos meus quase 10 anos de experiéneia na érea de desenvolvimento, adguiri ‘muito conhecimento e tive a opertue nidade de tixar minhas préprias cor clusses a respeito da programagio de sistemas como um todo. Hoje, penso que um software bem desenvolvido precisa seguir alguns eri ponder a alguns requisitos bisicos pra se encaixar bem com as necessidades do cliente e, especialmente, de seus usudrios. Um programa ndo precisa ser complexo demais, nem fazer uso, obrigatoriamente, das dltimas tecno- logias e tendéncias de mercado. Na minha opinigo acredito que um bom software de + Serestruturalmente bem programado, ‘no que diz respeito a banco de dados; ‘Ter um bom e continuo planejamento para que as regras de negécios estejam sempre a contento do objetivo principal do sistema; + Ser informative, ou seja, deve prover ‘© maximo de informagdo posstvel para co usudrio final Esse dltimo requisito, a meu ver, é um dos mais importantes, pois torna 0 software atrativo, fécil de usar e inteligente. © que quero dizer 6 que as mensagens em um sistema sio importantissimas para o bom funcio- namento do mesmo. Mensagens de alerta, avisos, perguntas, erros, tudo fou quase tudo deve ser explanado para uusurio final. esse artigo veremos os prineipais ti- pos de mensagens, comoe onde usé-las, as diferengas entre cada uma, cabxas de didlogo e criago de excegdes em trata mento de err0s, Montaremos um super-exemplo para entenclermos na pratica o uso de Show- Message, MessageDig, MessageBox, Ope Dialog, SaveDialog ete. Veremos também, rapidamente, como tratar erros e criar excegbies. Entendendo e usando ShowMessage, MessageDlg e MessageBox Para comegar veamos primeiramente como funciona estas tes FuncBes usa- das para exibir mensagens a0 asiéio comegando por ShowoMessge ‘ShoweMessage & uma Fungo que exibe tuma mensagem em tela, normalmente utilizada apenas para exibir alguma mensagem simples que nfo exigefcone ou pergunta,Porisso seu dnico parame tro 60 texto que sera exibido 0 usuério final, A seguir podemos ver sua decla- ragio original prevista na Unit Dialogs do Delphi Seu uso também ¢ simplificado. Para testarmos a fungio, bem como as de- mais que veremos, entre no Delphi e ‘erie uma nova aplicagio usando o menu File|New>Application ow utilize o projeto ‘que 0 Delphi ria automaticamente pra 1n6s a0 abrir © IDE. Salve 0 formulétio como “Mensagens.pas” e a aplicacio ‘como “Msgs.dpr’ Insira um componente GroupBor da ppaleta Standard e aumente sua altura © Targura para que possamoscolocar botses grandes dentro dele, Apos isso insira ‘um Button("btnShhowMessage”) também da paleta Standard dentro do GroupBox e ‘modifique seu Caption para “ShowMossa ge”. Aproveite einsira outros dois buttons no GroupBiox mudando seus nomes para “binMessageDig” ¢ “btnMessageBox”. ‘Seus Captions deverio ficar como seus romes retirando apenas o prefixo bin do inicio do nome Se preferir vejaa sugestio de layout na Figura 1 Clique duas vezes no binShowMessage cedigite o c6digo a seguir em seu evento Oncick Note queo uso é bastante simplificado ‘como j§ mencionado, bastando apenas ‘pacar para A fungio qual o texto serd exibido, Nesse caso a frase “Exemplo simples de mensagem com “Show Message”. O resultado podemos ver nna Figura 2. ‘Como podemos notar, a fungd0 Show Message exibe um texto simples com Figura Sugestio de yout apenas o botdo Ok no centro da mensa- _gem, Uma coisainteressantea seobservar que o titulo da janela exibe a palavra _Mags, exatamenteo nome que colocamos ‘para o projeto, O ShiowMessage captura 0 nome da aplicacao eo colaca automatica- ‘mente no titulo da mensagem. Pois bem, pademos usar 6 ShowMessage fem qualquer ocasido, mas se precisarmos cexibirum fone deatengso ou alerta peck samos recorrer a algo mais sofisticado, ‘Vamos & fungi MessageDig que tam- bem € declarada na Unit Diatogs do Delphi. Sua assinatura padrao pode ser vista logo a seguir Nota: Assinatura ¢ a declaragao origi ‘nal de uma procedure ou function, ov ‘se, seu nome e pardmetios de entra Podemos perceber de inicio que jé ‘complicou um pouco mais. Porém nem tanto assim, vefamos 0 que cada pard- ‘metro significa, assim temos uma visio ‘macto sobre suas funcionalidades, Seus pparimetros sto: ++ Msg : Esse parimetro é do tipostring, ests degen cm Sense Figura Solesagecndo ears cu seja, texto. Contém a mensagem que sera exibida ao ususrio do sistema: + DigType: Tipo de mensagem, também especifica qual fcone apareceréina ela; A declaragio desse tipo diz que podemos declaras como: © miWarning: Aviso; © mtError: Erzo; © -mtinformation: Informagio © mtConfirmation: Confirmagao; © mtCustone: Personalizado; + Button: Bosses da mensagem. Poem ser mbes: Sim: © mbNo: Nao; © mbOK: Ok © mbCancel: Cancelat; imbAbort: Abortas; mbRetry: Repetic; © mblgnore: Ignorat; © mba mbNoToAllembYesTo Al: "Todos", “No para todos” e “Sim para todos’; © mbHelp: Ajuda; + HelpCtx: Contexto de Help, ou seja, 0 valor numérica de atalho para o help do sistema se existir um; Edigio 92 - ClubeDelphi 39 \Vejamos na pratica. Clique duas vezes no segundo botao e digite o cédigo a seguir: rad ene) Nesse caso estamos definindo que ‘uma mensagem com afrase "Mensagem simples usando "MessageDlg” sera exibida na tela, O icone usado é 0 de! formagao (‘mtInformation’) e 0 botao (© 0k (“mbOK"), Como ndo temos um help, ppassamos como 0 0 ultimo parametro, Antes de visualizarmos o resultado vamos a explicagao e uso da terceira fungdo, MessageBox, MessageBox, visu almente, tem a mesma aparéncia que a MessageDig, com uma leve diferenca que jd vamos notar de inicio, Inicial- mente, quais so e como usar seus parimetros? + hWnd: Parametro do tipo HWND. Esse parimetro éo Hanae da janela. Podemos passar de diversas formas, tais como: Handle, Application Handle ou 0 ("zero"); ‘Ipext: Do tipo PAnsiChar. E um string também, porém terminado com 0 carac- ter nulo (1) Quando precisamos passar ‘mais de uma frase para ele é necessario envolvermos as frases dentro de uma fungio de conversdo, PChar. Veremos mais a seguir; *IpCaption: # 0 titulo da mensagem, esse caso clevemos dizer fungao qual Information Db [Mensagem simples usando “Message60%" Figura esis ees we |CES] oe | mew | wou Agora heretic rerbote, sc palovinl Rie ceperhimc dn no ttl * ype: Cardinal £ aqui que escoltemos qual tipo de mensagem (cone), bottes eft Nota Toda jane e/ou objeto no Wine dows recebe um nimero de Hondle 20 er Instanclado (riado") basica- mente seu endereso de meméra para {que 0 Sisteme Operacional poss fazer tefertncaa ce Paraentendermos melhor digiteo céligo fem seguida no evento OnClick do terceito botdo. Logo apds execute a aplicagao e clique nos botdes MessageDIg e MessageBox Veja as cliferencas na Figura 3. A diferenga mais nftida que podemos ver est justamente nos botdes de ambas fas mensagens. A fungio MessageDig 6 nativa do Delphi e exibe sempre os boties em inglés ao contrério da fungio ‘MessageBor, declarada na Unit Windows, aque se adapta a linguagem do sistema operacional onde esté rodando, ou seja, como sistema operacional onde tirei as fotos para este artigo estava em portugués automaticamente os botdes so exibidos como “Sim” e “Nao”, Se testassemos em uma cépiaem inglés do Winciows, esses botdes estariam como no MessageDIy. A segunda diferengaé mais suti, mes mo assim podemos notar. © titulo de ambas é diferente, Como em MessageDIg ro definimos qual o titulo serd exibido, o sistema pega pelo tipo de mensagem, rnesse caso de informagio (Information). Mina MessageBox definimos no segundo pardmetro que o titulo deveria conter a mensagem “Texto do titulo” Em se tratando de codificasdo temos diferengas gritantes, pois os parametros sto bastante incomuns. Um exemplo disso sio os parimetros de tipo de men- me botdes escolhidos para exibicio. Em MessageDig definimes o tipo da men- sagem e 05 botdes separadamente, No segundo pardmetzo informamos © tipo de mensagem, mflnformation, @ no pardmetzo seguinte os botses que 40 ClubeDelphi - Mensagens e caixas de didlogo aparecerdo. Nesse caso passamos “Sim” “Nao” separados por virgula e envol- vidos em colchetes, ex: (mbes, mbNol. Se quiséssemos mais botGes, bastaria ineluir novos itens, como no caso a se- guir onde mostramos os botdes “Sim’, "Nao", "Nao para todos", “Sim para todos” e "Cancelar”, O resultado seria como na Figura 4 Em MessageBox ni ¢ possivel obter 0 mesmo resultado, Porém outras vanta- ‘gens sio obtidas a0 usar essa fungdo. Caso seja necessario definir um botio diferente como defuult (‘padrio")isso 66 serd possivel com MessageBox. Imagine ‘uma mensagem de confirmagio: “De- seja excluir o arquivo atual?”. E nessa mensagem voc’ queira definir que o segundo botdo seré 0 foco principal dda mensagem, evitando que 0 usuario cometa err0s, Como fariamos? ois bem, com MessageBor ¢ posstvel cescolhermos 0 botio deft, vel Observe que inclufmos uma nova cons- tante: MB_DEFBUTTON2. $0 quatro a0 todo. Nesse caso estamos dizendo que o bolo que apareceri em foco no ‘momento que a mensagem abrir serd 0 segundo botdo, o Nia. Se quisermos incluiz mais de uma lie nha em uma mensagem basta usarmos o caractere 13 que equivale ao Enter do teclado, Veja E j& que estamos falando de erros de usudrio, vejamos rapidamente como fazer uso das mensagens para desviar 0 fuxo do sistema e tratar alguns erros, Tratando ertos e desviando o fluxo CCertamente um sistema sem tratame: to de erros e/ou desvio de fluxo de tar fas se torna um tanto quanto perigosoe ‘do muito inteligente. O que veremos 2 seguir é como fazer uso das mensagens antes explicadas para prever as agbes do usustioe desvis-lo para outra tarefa, bbem como a criagio de excectes. Insira um novo GroupBax ao formula- lo e nele um novo Button("benMessage DlgComlé”) com o Caption igual a”Mes- sageDIg com IF” Logo abaixo coloqueum novo Button(“btnMessageBoxComls”) f troque seu Caption para “Messa- geBox com If". Por fim adicione um Label(‘TbIResultadoMsg”) abaixo deste ‘timo bots. A seguir veremos a assi- natura das tr@s fungoes que vimos na segdo anterior: Perceba que na verdade ShorMessage nfo é uma function (ungio") e sim uma procedure ("procedimento”) 0 que signifi que nio retora resultado, di ferentementedas demas ngoesquere- tomam um valor do tipo inieger os, intero.£ af que esta parte interessante de tuo. Com MessageDig ou MessageBox podemos “perguntar” a0 usuario o que ‘le desea fazer. Pegnmos a sua resposta f desviamos o fluxo do sistema para cutra pacte dele. Experiment digite 6 codigo adsixo no evento OnClck do binMessageDlgComif. Salve, execute a aplicagio e clique no oto “MessageDig com If” Fizemosuma ppequena verificagio. Se o usuario esco- Iher “Sim’,o resultado da funcio ¢ igual amps, ou soja 0 Label éatualizado com a mensagem “Sim, ousuario desejaexcluir arquivo", caso contrério a mensagem 6 “Nao, 0 usudrio desist.” A constante res estd declarada na Unit Contra! do Delphiecontém entre varios retornos, as, ‘opcties ro Nao") © mrOk (*OK") ‘Também é possfvel obtermos o mesmo resultado utilizando MessageBox, porémm ‘9s relornos sao diferentes, veja: Cesquema é 0 mesmo, verificamos se ‘usuario clicouem ID_YES equivalente a0 “Sim” e entdo atualizamos o Label conforme necessério, (Figura 5). Agora vamos ver como aplicar Gedo Seater tn (=== a eapecent el | eee Agra tents crore Sa) mensagens em tratamentos de erros Arraste para o formulario mais um GroupBax e dentro dele crie um layout ‘como mostrado na Figuta 6. Déonome de “benValida” a0 botdo e “TpIConversac” ao Label e “edt Numero” 20 Edit, o restante mantenha os nomes padrao. No evento OnClick do batao Aigite 0 cédigo da Listagem 1 Utilizamosnesse cédigo um bloco try. excep! para validar os dados, Estamos tentando fazer uma conversio de string (texto) para Integer (adimero) usando a fungao IntTastr, Caso a conversio seja ‘efetuada, o IbiConversao € atualizado & recebe o Caption igual a “Convertide com sucesso”. Caso contrério 0 MessageDig & executado e ima mensagem mostrada. Uma outra abordagem nesse mesmo ‘exemplo seria fazer com que o proprio sistema criasse a excecdo gerando a _mensagem automaticamente, Modifique 0 cécligo do evento de forma que fique como na Listagem 2, Percoba que trocamos a MessageDIg pela linha: Isso faré com que a aplicagio gere tuma excegfo e consegilentemente uma mensagem de erro 20 usuario final, Nor- ‘malmente utilizamosessaabordagemem sistemas orietadosaobjetos ja quedentro das classes nio podemos conversar dire tamente com a camada externa, Gaixas de didlogo ‘Nessa sltima parte do artigo veremos como funcionam os componentes da paleta Diags Essex componentes si0 tiados quando 6 necesséio abit e sak var anquivescopturerimagens do disco ‘gue Sec bj Edigao 92 ClubeDelphi 41 configurar a Impressora etc Para este exemplo criaremos um min editor de textos onde sera posstvel abrir, salvar, configurar a impressora, fonte € cor de fundo do texto, Ainda poderemos selecionar uma foto em formato JPEG para exibir direita da tela (Clique em FileiNew>Application e crie ‘uma nova aplicagiio no Delphi salvando- a como "Dialogos.dpr”. © formuldrio principal salve-o como “uPrincipal:pas” e troque seu Name para “érmPrincipal” De- senhe uma tela semelhante & Figura 7 [Na parte superior temas os botdes “bt nAbrir’, “btnSalvar’, “btnConfigurar’, “ptnFonte” e “benlmagem’, todos com seus respectivos Captions. ‘Na parte central do formuldsio insira um Memo(’memTexto”) da paleta Stan- dard eur Imaget“imgimagem”) da paleta Additional, Por fim adicione um novo componente Butfon(“btnCorFundo”) Togo abaixo do memTexto Perceba que inseri também seis com- ponentes da paleta Dialogs. Cada um deles teré uma fungao crucial em nosso cexemplo. Tive o cuidado de manter os nomes originais dos components, desta forma fica mais cl identificar qual tipo de componente devemos selecionar na paleta. A seguir veja uma breve expli- cago de cada um: *OpenDialogt: Este componente & responsavel por abrir arquivos. Sua propriedade Filter preve quais tipos de arquivos podem ser abertos; + SaveDizlogl: Ao contrério do Open- Dialog, 0 SaveDialog nos permite salvar arquivos no disco, Ele também possi a propriedade Filter para a mesma Uinagom2 enon econ ges oe tm | tae | rn | tome SB a eet = 3 Priest @ a rere etic dir te gue conposetnpmenn sae 42 ClubeDelphi- Mensagens e caixas de didlogo finalidade; + FontDialogl: Bsse componente, qua~ do executado, permite modifica 2 propriedade fonte de determinados componentes de acordo com a fonte selecionada em sua toa; + PrinerSetupDialogl: Como 0 proprio rome sugere, esse componente pode ser uusado para configurar a impressora; *ColorDialog: E posstvel modificer propriedade Color de objetos usando a propriedade de mesmo nome deste componente; + OpenPictureDialogl: Semelhante 20 pending, porémesse componente pes- ritevisualizarafotoantesdeseleciondla: ‘Vamos codificar o exemplo e enter der como funcionam esses compo- nentes comegando por OpenDialog! & SaveDialogl Ambos componentes possuem 25 propriedades: + DefuitExtsB a extensio defo ("pa- «ir80"), Pode ser sada em conjunto com a propriedade Filter para filtrar 0s tipos de arquivos que aparecersa na caixa de dislogo: + Filter: fo filero de arquivos que po- dom ser abertos no sistema, Podemos especificarquaisipos de arquivos sero compativeis com nosso sistema; + intiadDir:Diret6rioiicil dacaixa de dlidlogo. Especiicando esta propriedade com uma pasta vélid, o sistema faré 2 selogio desta pasta automaticamente Vamos entender melhor tudo isso. Vamos atribuir valores as proprieda~ des Filter e InitialDir do componente OpenDialog. Clique duas vezes na pro= priedade Filter enote que uma caixa de didlogo ¢ aberta (Figura 8). Observe que na Figura 8 jd existem pues tape cpopience er EASY DELPHI valores digitados, pois incluf alguns itens, porém o padedo desta caixa é vir sempre sem itens. A primeira vez que a propriedade ¢ aberta a grade est vazia Para que possamos configurar como de sejamos. Pois bem, acoluna da esquerda, Filler Name, 6 frase que apareceré para ousudrio final. Jéa coluna da direita 60 filtro propriamente dito. Portanto a sua esquerda digite “(*) Todos os tipos de Nas linhas posteriores insira novos va- Jor ce entio confirme. Para a propriedade InitielDir erie uma pasta no C:\ e atria seu nome a esta propriedade. No meu caso coloquei com C:\Temp. O importante 6 termos ‘essa pasta eriada no Windows para que ‘0 componente possa selecioné-la. Repita esses passos para o componente SaveDialog © vamos 2 codificagio. No evento do botio binAbrir digite © cédigo a seguir e veja como é simples abrir um arquivo via programagéo. 5" eaesquerda insira filtro’ conforme o que vimosna Figura 8 A explicasao ¢ simples. Todos estes ‘componentes possuem ométodo Execute que, evidentemente, executa a caixa de idlogo e mostra-a a0 usuario. Mas nao 6561880, na verdade quando chamamos este método, a caixa de dislogo 6 abertac aguarda aconfirmacio ou cancelamento do usuario, ou seja, 0 eddigo que vem Jogo apés0 There da nossa condicional sé serd executado se 0 usustio final clicar ro botio prineipal da caixa de dislogo. Nos casos do OpenDialog e SaveDialag 880 “Nbrir"e "Salvar”, rspectivamente. Clicandoem Abrir chamamosométodo LoadFromFile da propriedade Lines do componente memTexto, assim 0 texto & aberto no Memo. Océdligo do botio “Salvar” é bastante semelhante, veja: Invocamos novamente o método Exe- ccufe do componente de didlogo e caso seja confirmaco chamames © método SaveToFile, também da propriedade Lines de nosso Memo, Como podemos ver, no ha segredos na abertura e gravagio de arquivos, = Leckic [ES Toro Daiterarrooaasses Se Stee (BBeSto8 ms phepas s2_5 pa (Bs240 germs om re tue 20072 - nes. sed, procedures bggers.em deh. ZIP gas (Besser han olson gun b once ang p= Experimentecompilaroprojeoe execu t4lo,Cliquenos botdes que codifimos evejno resultado. Na Figura podemos ver 08 tips de arquivos que podemos brit ness exemple claro que a cana de dislogo no faz nada sozinha. A incicagdo no fileo“C DOC) Documentos” nio signitica su cesso na abertura deste arquivo. Nesse caso daca exo na chamada do métoco LoadFromFile ow SaveloFile,j4 que 0 componente Mero no 6 compativel com documentos do Word Por isso €necessrio que nossa aplica- fo sejadesenvolvida de maneiraquese compatilize com os tipos de arquivos ipa dh. sudo 20072 que desejamos abrir e/ou salvar. ‘oltando ao exemplo vamos cadificar obotdo Fonte("btnFonte"). Ao clicarmos esse botio poderemos configurar 0 formato de fonte do componente Menno. Na verdade atribuiremos os valores dda propriedade Font do componente & propriedade de mesmo nome do Memo. Clique duas veres no botdo mencionado edigite 0 cddigo da Listagem 3, igen. doe ie | se | some ee | Este é um texto de divulgacdo dos novos componentes no Delphi. jammer a Rowareaw Snennae Rrwcweainy Sincscason ire Sirwrsnine Sssesremcae Siena — Siorete igure Tsca dea Operon em (© que estamos fazendo no eédigo que acabamos de digitar foi atribuir (0s valores das sub-propriedades Name, Style, Color e Size da propriedade Font do componente FontDialog. Perceba que ‘o.componente também possi um méto- do Execute e que 0 mesmo se comporta exatamente como os componentes que jd vimos. Salve, compile e execute 0 programa. Clique no botio Fonte ¢ veja *Dam 44 ClubeDelphi - Mensagens e caixas de didlogo ‘que acontece (Figura 10). Experimente agora digitar 0 cédigo abaixo no evento OnClick do botio “Mo ificara car do fundo do texto”. Igualamos a propriedade Color do ‘Memo a propriedade de mesmo nome do ColorDialag1. © céigo para confign: ragio de impressoras consiste apenas em: chamarométodo Execute docomponen PrinterSetupDialogl, veja A diltima coisa que veremos agora € como carregar imagens em um com ponente Image da paleta Additional. No evento OnClick do botio “Mostrar Ima gem” digite o cédigo a serguir: ‘Veja que estamos novamente utilizan- do 0 método Execute juntamente com © LoadFromFile. Podertamos utiliza: tranguilamente um OpenDialog, porém principal diferenga entre o OpeDialog 0 OpenPictureDialo esté no fato de pode visualizara imagem antes de confiemar acaixa de didlogo, ‘A Ginica ressalva que faco & que pars utilizar-se de imagens no formato JPEG Enecessério declarar a Unit peg no Uses do formulério, do contrétio uma excecéo serd langada. Vejana Figura 11 a caixa de didlogo OpenPictureDialog em agéo. Condlusio Neste artigo vimos.as principais caixas de mensagens e de didlogos utilizadas nodia-a-dia. Seguindo essas orientacbes é perfeitamente viavel tornar o sistem= ‘mais comunicativo e informative. Existem dezenas de outras formas de se usufruir de todo poder da VCL do Delphi. Procure modificar e estudar coutras propriedades das caixas de diz- logo. Tente criar suas préprias caixas ¢: _mensagem personalizadas. Lembre-se que olimite a ciatividade Boa sortee atéa préxima. @ A EDICAO QUE VOCE PRECIGA EGTA ESGOTADA? Seja um assinante Gold! Com a assinatura Gold vocé ja pode consultar online todos os artigos publicados na sua revista desde a edic&o n° 1. ()DevMedig -Assinatura———_ Saiba M www.devmedia.com Secao EASY DELPHI Nesta secao vocé encontra artigos para iniciantes na linguagem Delphi ‘Moa Hos ae Prfesional W) ake don tesa minis Gers Pepa Sees pa Mews CUTS RCN A al eestor vis de sessio, enviar e-mails para um conjunto de clientes solecionadose criare leranquiivos XML a partir de um Dataset, ‘oct verd também como criar arquivos de cabecatho e rodapé que serdo usados em todas as paiginas de seu site "Neste artigo veremas téenicas de conexto ‘com o banco de dads para a montagem dearquivos XML bem coma listagem dos clientes para envio de e-mails, Griando o cabegatho e rodapé tinico 'Na pate I deste treinamento, fi eriada uma aplicaglo chamada Deipiag, que contém todos 08 arquivos desenvolvidos atéaquiPortantoabraestaeplicacioeadi- cone um novo User Control ti do ment Fill Nec Other>Delph fo New ASPNET FilesASP.NET nto Salve-o como “cabecalho 46 ClubeDelphi -Treinamento em ASPNET ~ Parte 3 NIUE uN SLA) eda ied scx” no diretério da aplicagao. Reparen cextensio desse arquivo; ele ser utilizad ‘como cabogatho em t site. No layout deste documento, a rnas(‘Columns") assim como fizemos nos demais artigos do treinamento, Na primeira célula e na dltima da pri- meica linha, arraste um componente do tipo Image da paleta Web Controls na To! Palete. Contigucea propriedade Image dtecada Image informando onemedaima- gem que sers utilizada nele. Se preferir clique no botao reticéncias da proprieds dee localize uma imagem no disco. "Nota As imagens em um ste deve ear ‘emumcaminhaconhecio das piginas ‘idea éclacssempre names pasta do website ou em um retro nat comarimagens Ness cso 0 camino da fotoimagem na propiedad agelH loo come imagensinageai Na célula do meio digite um texto de sua preferéncia, Nesse treinamento usei a frase “Treinamento em ASP.NET” Em seguida insira trés componentes do tipo Hypertink, também da paleta Web Controls, um em cada célula da segunda linha como podemos ver na Figura 1 Modifique @ propriedade ID de cada Hyperlink usando os nomes “hylSessa0, “pylGerenciaEmails” e “hyIXML", res. pect paraa direita modifique a propriedade wamente. Seguindo da esquerda NavigateUbl de cada Flypertink informan- do “Session.aspx”, “GerenciaEmails, Spx” e “ArquivasXML aspx” A propriedade NavigateUir éjustamen- feo arquivo (pagina) que seré chamado indo clicado, ou seja, 0 link em si Adici fizemos anteriormente, mas dessa vez faremos algo mais simples, pois este sera o redapé da pagina, Salve este User Controt como "sodape.asex”. Insiraumeomponentedotipo HTML Ho rizontal Ruleda paleta HMTL Elements, Ao final dele pressione Enter eentdo digiteo texto “Copyright 2007) by ClubeDelphi Todos os direitos reservados". Com isso, voo’ pode exiar apenas um arquivo pa- dro e usé-lo em qualquer péigina, elimi: nando anecessidade de sepetir o mesmo cédigo diversas vezes, Figura 2 UserContrals so formullérios Web en- capsuladosem um controle reutilizavel Eles sto usados para armazenar blocos ‘um novo User Control como decédigo repettivas que muitas paginas deumsite deter que copiarecolar blocos de eédigo repetitive para fornecer o cabesalho ein todas as paginas, podemos criar um nico controle que terd estes blocos de c6digo prontos para serem usados. Eles substituem 0 modo antigo do ASP de se acoplar fungdes em outros arquivos utibizando 0 método include files. Estes controles podem fazer muito mais do que simplesmente gerar ca begalhos, podem ser atsibufdes, por exemplo, a maneira como as paginas irdo se comportar diante do usuario. Podem também ser criados atributos ¢ métodos de modo que o controle possa se adaptar dependendo dos valores configurados ou fornecidos pelo usuario ou pelo proprio sistema. Todos os User poderso precisar. Em vez Controls que forem criados devem ter a ASPNET ¢ a internet proporclonam As aplicagies. Sempre que voce abre um ‘Ap6s criados, os User Controls ficam site, 6 criada uma sessdo no servidor disponiveis no Project Manager, bastan- para cada internauta. Isso significa que, do apenas arrasté-los para 6 local onde se dez mil usudrios acessarem o mesmo lextensio “ascx’ ficardo armazenados na pagina. Veja site ao mesmo tempo, sero eriadas dez lum exemplo na Figura 3 de como ficou mil sessfes, Portanto, nao hé nenhum problema em manter diversas Sessions, mesmo porque isso ja ¢ feito de forma Criandoeentendendo oconceito —_automatica no servidor de Session ‘A sessées em diversas linguagens de (© conceito de sesstes ¢ fundamental programagio, incluindo o ASP.NET, para que voce usufrua os recursos que so chamadas de Session. Como uma nossa tela Treinamento em ASP.NET ‘Sessio ‘Gerencia e-mails © peviviedig igual igesecahe Fura. gave cere Bre eoienatenainens Treinamento em ASP.NET ElubeDelphi sont eaves 0, eo) (Sees) Fico 92-ClubeDelphi 47 Session mio enxerga a outa, & possivel trabalhar com os dados de seus respec tivos internautas, Todas as varidveis de sesso criadas poderio ser enxergadas em qualquer pagina até queo internauta feche o site ou que a conexdo caia. Em resumo, uma Session € uma Srea restrita para cada usuario, Veja por exemplo Se: como adicionar uma Vamos criar uma nova pagina ¢ en- tender melhor, na prética, como é usar sessGes. Crie um nove formuliriousan- do a opsao Filel New| Other>Delph for NET Projects>New ASP.NET Files>ASP. NET Pages e chame-o de "Session aspx” salvando-o na pagina de nosso projeto Delphibtag, Para inserir 0 eabecalho que crlamos. anteriormente apenas arraste 0 User Control eabecalno.asce para pigina rocém. ‘rinda erepita esse procedimento para o arquivo “rodape.asex”, Desenhe uma tela semelhante a Figura 4. Foram inseridos {petsenac} Ganvnca Mas Fara felon ie dois componentes TextBox da paleta Web Controls com os 1D’s igual a “edtNome” “edtSenha, respectivamente. Para que ‘0 campo Senha fique com os caracteres ccultos ao digitar o texto modifique a ppropriedade TextMode para Passov Logoem seguida tres Buttons, também dda paleta Web Controls, foram adiciona- dos, Seus nomes (IDs) sao: “btnCriar’, “binLer” e "btnAbandona”, Inclus ‘mos ainda um Labei(‘IbiSessao”) e um Hyperlink(“hylGerenciaEmails’), Alem dda propriedade 1D, do iylGerenciaE mail, € necessério contigurar a propriedade NavigateUri (pagina para onde o link aponta) com 0 valor “GerenciaEmails” fe seu Tex! para “Gerencia E-mails”. Veja na Figura 4 0 layout do formulério em tempo de design. Nota: Insa 05 componentes entre 0 primeio eo segundo User Control,ou insraa’eabecalho: as componentese 48 ClubeDelphi- Treinamento em ASPNET ~ Parte 3 Deum duplo cliqueem binCriare digite 0 c6digo da Listagem 1.0 cddigoébem simples de entender; apenas fazemos uma checagem com IF ¢ verificamos se 0 campo Nome ou Senka possuem valor. Em caso negativo enviamos uma mensagem a0 ustisrio, caso contrério criamos duas variaveis de sessio usan- do o método Adil do objeto Session. No _método informamos 0 nome da sessi ro primeira parimetro e no segundo valordele, que nestecaso é0 name ou se- nha digitos nos seus respectivos campos. Por dltimo atualizamos lbiSessz0 com 2 frase "Variaveis crindas na Sessao”, Agora nos demais botdes a coisa fica ainda mais simples. Vejamos como resgatar os valores gravados na sessio como apagé-los. No binker digite 0 cédigo em seguida: 0 eddigo que vimos imprime o valor os campos Usudrio e Senka gravados anteriormente através do botso btnCria. Estamos usando também a propriedade SessionID do objeto Session para retornar 0 ID da sessto, Esse ID & vnico, ou soja, cada usudrio tem o seu, Para finalizar- ‘mosa sesso basta chamarmos ométodo Abandon, também do objeto Session, & limpar 0 Text do Label como podemos vera seguir Defina 0 formulatio Session aspx como default usando a opcao Set As Start Page 20 clicar com o botdo diseito da mouse no arquivo. Salveo projeto, compile-oc0 execute-o para vero resultado, A Figura exibe o formuléria no navegador com o cabesalho,o rodapé e todos os cantral do Session. asp. Digite o nome, a senha e clique nos boties correspondentes para testar, O objetivo de criarmos uma Session & que, nas préximas paginas a serem criadas (eja mais adiante), seja verificado se 6 S dar o internauta a navegar somente em paginas autorizadas. Vocé notard nesias ‘outras paginas carregadas que esse teste son existe, Essa sera a forma de vali- 17) el Ji foi executado no evento Page Load. Se nndo existir a varidvel criada para sesso Usuario, 0 intemnauta seréredirecionadoa gina Session aspx para efetuar 0 lg Criando 0 banco de dados ara entendermos melhor e testarmos a proxima parte, Envio de E-mails, desse artigo vamos criar um banco de dados e nele uma tabela contendo clientes e-mails. Neste artigo, criaremos © BD utilizande a ferramenta IBExpertem sua versio Standard. Por isso, acesse o link ‘em seguida entre no cnibespert com item IBEspert. -Aesquerda dositedofabricantectique em Dotnlont>fre,Preencha oformulé- tio de cadasto e aguarde o e-mail com as instrugDes de downlad da errant, ‘Apdinisso,abraoIBExpert vamos criar ‘obanco de dados usando aopcio Seip Executive presente no mena Tools (Com a tela de scripts aberta, digite 0 cssigoda Listagem?, Neleestfo condos os esquemas para a criago do banco de dlados assim como atabea Clients. Dig tnd 0 seript, basta executi-lo usando o bot Ru Sript ou pressione ateclaF8. Nota: Substiva \Mala Dietatsl pelo duetorio do banco de dados e seu nome, ex Cintpub\ vawroot\Delphiag MolaDireta eb Note que inseri no Scrip alguns clien- tes para que possamos lestat, porém os espectivos enderecos eletrOnicos s30 ficlicios, Se proferi altere os dados in- cluindo e-mails valides para o envio, Enviando e-mail ‘envio de e-mail é um recurso usado com freqiiéncia em aplicagbes de inter net O exemplo criado nesse artigo nao 6 envia um e-mail como permite a0 in- ternautaselecionar, em umalistade uma tabela do banco de dados, os clientes aos quais ele deseja enviar o e-mail. Com isso, ¢ possivel criar um mecanismo de envio direcionado de mensagens. Para que o exemplo funcione corze- tamente, serd necessério eriarmos um banco de dados ¢ nele uma tabela cha- ‘mada Clientes, na qual os campos Cliente ‘e Email contenham alguns dados vslidos para testes, ou seja, nomes e e-mails de cada uma para “edtAssunto” e “edt lidos assim como fizemos na sesso Mensagem’, respectivamente. anterior. Em seguida, adicione um novo No ediMensagem modifique sua pro- formulérioem FilelNewl Other>Delphifor priedade TextMode para Multlne, Essa NET Projects>New ASP.NET Files>ASP_propriedade garante que possamos NET Pages chamado-o de "Gerencia digitar mais de uma linha no TextBox, Emailaspe cabecal.asex rodape.ascx. cada TextBox digite os textos “Assunto” & que contenha osarquivos ou seja, nossa mensagem. Acima de Entre os controles User Control digite “Mensagem” para que funcionem como 0s textos "Gerenciador de envio de um Label (‘rétulo”) do campo. e-mails ~ ClubeDelphi ~ EasyDelphi Clientes". Inclua um componente CheckBoxList(*CkiClientes”) configu rando sua propriedade RepeatColunns com o valor 2, Em seguida arraste dois | umviteatsucimPinsa arcs mtr eres ea componentes TextBox da paleta Web Controls e modifique a propriedade ID Uap 2. a cs sear wo cLieytes (CLM, OWL YAMES (20s da Stra “Jost! atprovador. cot) “2D evmesig Treinamento em ASP.NET Clubeelphi sexsio Serencia emails Argutvoe x aa Cae Cases) 1D a Sesto: vpinSaSSIfjmkoSSLswpho55 Usui: Adriano « Senha: sijfajd SSerencia Eas ‘pyre (2007 by caso Ta se ere Aguas hearse psgmasenen te Edig0 92- ClubeDelphi 49 Por dltimo inclua um Bution(btn igual a “Enviar”. Esse | botdo faré o trabalho de selecionar os te | clientes ¢ enviar as mensagens. Veja na Figura 6 uma sugest2o de layout. Digite os oédigos conformea Listagem3 Enviaz") e no Page Load do formuldrio Gere px. O cédigo consiste em checar i Rea * cine sea sesso Usui etd preenchida. Caso at rene eLbER io esteja redirecionamos o usuério para ati eee Session.aspx usando 0 método sein - Reiirect do objeto Response, como pode | te. z Note que inclufmos a verificagio em } Beate 3 um bloco try..except, desta forma se Biesvauerieia = houver qualquer erro durante o carre gamento da pagina, automaticamente 0 nusudtio serd novamente para Session. aspx. Essas ag6es proporcio: nam segurancaaossite cevitam que ums pagina seja aberta dicetamentena URL ‘ou seja,digitandooenderego na barra de lenderecos do bor essa técnica a todos os formularios exis tentes que requeiram login A parte2denosso treinamento Vocé deve aplicar trou ‘oacesso a banca de dados, Usamosa mes ma técnica empregada no artigo anterior para listar os dados da preencher o componente CheckBoxList, ‘Como usaremos a mesma conex3o com ‘obanco de dados em mais de um lugar declarea constante Conexdo abaixo da pa lavea Implementation do formulario como fizemos noartigo anterior, Essa constant ng de conexao, Veja em coguida um exemple: dove recebera Nota: Nao exquega de dear os names aces Feb Data Feb Str Tex, Borandelsjs System Webi. Ses namespaces cotem a declaio das Figure twcranaapiadeemal Princpas funcdesiprocedimentos. que usamos nessa pigina tas com:conexdo com Fie eno de ema ‘Siatomaratmeidawig com bro Figured gee ML aber none ‘52 ClubeDelphi - Treinamento em ASPNET ~ Parte 3 queo arquivo deve ser salvo, nesse caso em C\.nelpub\wnwroot \DelphiMag\, 0% seja,odiret6rio denossa aplicacZo, como podemos ver em seguida, Aleituza do XML ¢ ainda mais simples Na Listagem 6 podemos ver que apenas criamos um DataSet e chamamos seu método ReudXmnindicando o.caminho do arquivo. Automaticamente o DataSet épre ‘echido, agora basta associarmos 0 dsX) ‘a propriedade DataSource do grXMI ‘chamarométodo DataBind Orestante sk atualizagbes de controes visuais, AAs ttimas pronvidéncias a se tomar sto: declarar o namespace Firebird! Data Firebird na sesso Uses do formu: lirioe incluir verificagio da Session no Page_Load como segue: A Figura 8 mostra 0 arquivo XML ge rado pelo cédigo criado no botdo Gravar da pagina XML.aspx. Concluso Neste artigofi em ASPNET vendo como fazer uso de Session em nossas aplicagdes. O uso de Session pode ser tl na programacio d formuldrios isolando os dados de det: :minadas situagGes de outras segbes. Um ‘exemplo pritico de uso s80 08 carvinho ‘de compras em lojas vietuais. (Oso de e-mails em aplicagbes de ma- keting, vondas, CRM ete, 6 fundamental ppara orelacionamento com os clientes. O 6digo apresentado neste artigo demons trou o uso real deste recurso, que pode se= implementado em qualquer aplicacao na ‘empresa. Por fim vimos também como fa: zer uso dos User Controls para padroniz: ‘abecalho e rodaps. Espero que, com esta série de artigos so reo ASPNET, voce consiga desenvolve: aplicagbes para WEB e colocar os dados de sua empresa ao alcance de todos os interessadas. “No stres, think NET” @ alizamoso teeinamento Um bom softwere tambem precisa de um bom Iayourf! = (Sal Raa Video-aulas especiclizodes em ee bea Veleale eter N eae MU Ce soe eae ROO gfe tudo que as ferramentas de design podem the oferecer. [erect Nome SCO MULE Inet crete a Assine agora mesmo e receba: + de 50 video-aulas de acesso imediato + de 10 videos inéditos por més. Por apenas 6x de ety 13,61 Reo aCe SE Ree Cee Rs PhotoShop Corel Draw ah After Effects Pig Tang eaten ar Icbee Pe Acesse © assine jd! SAA eR | Ce, Yee Segao PHP Nesta secao vocé encontra artigos sobre a linguagem PHP e a ferramenta Delphi for PHP neal Giese cler Me Melt Meet) rico Desbessel pose de Uawagen de Pagano fe aoe Tec em hema Ca Frege agen fe oS daa Hora. eine te cage ange digs pq ‘am Dh sees eos aa Sie ww abiapabe 54 ClubeDelphi-Delphi for PHP chegamos a0 final do nosso vamos fazer a pur plicagao da aplicagio, Para testar ‘aplicago conseguimos um provedor que nos cecleu o espace ¢ as tecnologias necessarias, ‘© procesco nio € dificil, mas um bom provedorfacilitarsbastante a publicagio fe o gerenciamento da mesma. Pense isso na hora de escolher o seu. Verificando as configuragées ‘Antes de publica a apt sitio saber os requisitos omen 6 1s © configuragses liza, Para verifi= car essas configuragéesna sua maquina czie uma nova aplicac3o no Delphi for PHB, adicione um componente Label 20 formularioe no evento OnBeforeSiow do formuldrio coloque o seguinte ebdigy Compile a aplicagio e veja uma pégi cam informagdes sobee 0 PHP que voce ulizando, Essa € a finalid png. Coma essa pina é possive! saber ‘verso correate da PHP, quais médulos carregados ¢ algunas varisveis importantes ‘como post_max_size que define 0 taman riximo de um post, com, por exemple envio de fotos em nosso eadastro (Figura 1 ‘Sabendo as configuragdes que te rosea maquina teremos que analis configuragbes do servidor no prov OProvedor ara exemplificar a publicagio de noss aplicagto a DevMedia escolheu ose dehospedagem da Hospedix, que po: bilita um plano experimental de 30d para assinantes da ChubeDelphi, Realizei contato com a equipe técnica que disponibilizou o enderego mina teomedia.com.by, ususrio © senha ‘acesso ao painel de controle e informos (08 passas restantes para configuracs PHP -MINI CURSO das linguagens utilizadas, FTP para envio dos arquivos ¢ criagdo da base de dadlos. De posse do ususrio e senha realizou-se o acesso a0 site a Hospedix «e logou-se no Painel de Controle, 0 qual rmostrou-se bem intuitivo e de boa usa~ bilidade. (Figura 2) Como 0 dominio jé estava criado, passou-se paraa instalagao da aplicacio, através do Tink Install « Site application. [Na primeira pagina escolhe-se qual dos omtnios sera configurado, Na préxima pagina define-se o login: e senha para FTP, bem como os servigos disponiveis Como servigo habilitou-se o PHP na ver- so 52.4, conforme mostra a Figura 3, Na pagina seguinte so oferecidas algumas aplicagSes padrio que poderdo ser utilizadas no site como gerenciado res de contetidos, chat, frum e servigo de webmail, Clicou-se em Cancelar, pois, io ¢ 0 objetivo do artigo stalar essas aplicagbes, seretnatas consis casi nansnon ba CaS poasneaa Hanae argos de raramas CoeaGeeaph fr PHT Dphaen) 25 lane [ramon | Reistred Sean rere [eometicine ng oa, ralaneersonaloower masro is cone cnsmed 5" [nie roar rave os ena Zand Sepang Language Ena |zedengine 219, copa (198-200 Zend Teceloges ‘winDec 2 13,6} 20002006 by Omi Bren ‘Com esas configuracoes pode-se acessar 0 FTP ¢ enviar um arquivo PHP para teste, Criowsse esse arquive com 0 seguinte cédige: arquivo foi salvo como nome “teste php” ¢ enviado para dentro da pasta etpdocs do FTP. Pelo ews foi possivel executar o teste eter as informagties do PHP do servidor, eonforme exibido na Figura 4 ComoresultadoapresentadonaFigurad, tem-se a certeza que a aplicagio criada 1no Delphi for PHP ird funcionar, pois servidor utiliza uma versio superior minima exigida. Mesmo assim, ainda pode-se ter alguns problemas referentes a algumas bibliotecas, que no PHP sao carregadas através de médulos, como é caso do mbstring Criando o Banco de Dados Para criar obanco de dados novamente acossou-se 0 painel de controle da Hos- pedi, clicando no link Creat a database Eseolheu-se o dominio passou-se para 1 proxima pagina. Na pagina seguinte definiu-se 0 nome da base de dados servidor que sexé utiizado, conforme mostra a Figura 5 Finalizando, criou-se um banco de Fgura fest voc ing pgm) DREN TP Create a domain Create and configure a new domain. Suspend or uns Oo mi af FP sccount ; foe eee pen GQ creste subdomate Create new subdomain, Remove (> Manage files on domain Work with fles and rectors through fle Rywal felon eomaeashaae Create maiiname reate new mall account for domain, Remo Create a database Create a new database. > Remove Installa site application Instal a site eppication ona domain. preferences Edit session and Interface preferences for a clent, ce it to cients control pane! Ediga0 92 - ClubeDelphi 55 Psathetin setup page fr dome see mee ep gua. Cece steno Patel de Cre dados chamado delphipiy_jornal, san 0 servidor MySQL. Para criar 0 usude do banco e também executar o scrip criacio das tabelas, necessitou-se exit todas as opgoes do painel de contro! ppara o site. Para fazer isso, clicou-se m Tink Home @ esquerda, no topo) e depo selecionou-se osite, Com isso é apresem tado © painel completo, com todas = ‘opcbes, conforme mostra a Figura 6. Continuando na configuracio dobanc de dados, licou-se no link Bases de D: dos, onde selecionou-se a base de dade= delphiphp_jornal, etiada anteriorme: Ne senha para acesso ao banco. Depois ‘riar 0 usuirio foi disponibilizado fcone com o nome WebAdiin, que ab rface do phpMyAdmin, um geren iador muito conhecido no mundo PHE + MySQL. [No phpMyAdmin selecionou-se o banc delphiptp_jornat e na pagina seguir: clicou-se no link Importar. Procurous= (0 arquivo do seript do banco, eriac: do mini momento, ciou-se um ustsrio na primeira part executouse. Com isso as tabelas foram criadas e possiblitou-se a insercio & dados na tabela de usuarios para pode fazer 0 primeira login na aplicagéo. phpMyAdinin 6 bem explicativo, esta e= portugues e 6 muito facil de utili Assim finalizamos a criagao do ba de dados e podemos agora publica aplicagio e fazer os primeiros testes Antes do Deploy {Abra o projeto no Delphi for PHP primeinamente acerte as proprieda DatabaseName, UserNiome UserPass ddo componente Database, existente = 2Module, de acordo com o banc f - Delphi for PHP rusudrioe senha criadosnoservidor onde serd publicada a aplicacso. ‘Também renomeieo arquivo do tompla- te que criamos na parte anteriar do cur- 0, modificando seuunome para “modelo, html”. Com isso sera necessério abrir a Pagina index phpe slterara propriedade TemplateFilename informando modelo, html. Essa alteracao 6 necesséria para que essa pagina de modelo nao sejaacxibida quando alguem acessar oenderego mini- cursodeomedia.con.br Nas paginas queexibem fotas, deve-se alteraros eventos OnBefareShow cos com- pponentes Image's, maisespecificamente a Tinha que definea vasiavel diet6rio (Sai- retorio), para que soja possivel detectar 0 diretsrio do servidor, através da varidvel deambionte$_ SERVER("DOCUMENT. ROOT"I, que possui essa fungio. Eniio verifique esses eventos em todasas pigi- nase troqueo texto "C:/CD/Jornal/" por $_SERVERIDOCUMENT_ROOT”1 ‘Na pégina login php énecessirioimpar ‘oscampos de ususrioe senha a cada ver que a pégina € chamada. Para isso no evento OnBeforeShow desse formulario acrescente mais essas duas linhas: Fazendo o Deploy ‘No mens Tels acese a opto Deploy- sment Wizard. Com esse assistente fica fell separar os arquivos que deverio ser enviados ao servidor. Na primeira tela simplesmente clique em Next ¢ na segunda tela defina o gar (rerio) onde serto colocados 08 arquivos. © process de delpoy é bem simples ec sega com a verifcagio das arquivos do projeto php) oscomponeniesexistntes PHP -MINI CURSO Ser [asians Ni HSPN BORED WS 2 Dado l ‘Bad0ae [aun 2007 ors cectnciogo canigurejs"enabie anapsnotang “wih pI=tare couranico rabies cotorstcn eros) (own COE Loaded Coniouraton Fle [Ceram FiesGwactieanAGanonaTPieneiPSphn Pa APA faoasa2s PaP xenon Fanon “end Extension fzonansse Debug Bald ne [heeadsatety erates [end Memory Monoger [arabes v6 Suport erabies Resisteed PHP Seams — [poe dsl Nip, fp compressa [eisiered Steam Socket ey, ranspons [Regstered sueam Fates | conaticon/~singvota. cuingloupper swoaloiower sina ce laos [emer consumed, b [This program makes use ofthe Zend Scipting Langvage Enon: eae Zend enine 220, Covmart(c) 198-2007 Zend Teamo.oges {gw Resins ecrio cn pO] va pa rat z i nesses arquivos ¢ as classes necesssirias para cada componente, Para ter um Getalhamento dese processo pode-se areata opie Detsiled process. No final, clique no botao Fins Porém, infelizmente 0 Deploy no se preocupa com outros arquivos que adi= ionamos a0 projeto, como as imagens a pagina mpdelo.hitml, wtilizada no template. Portanto é necessério copis-los para mesmo diret6rio de Deploy. Como ‘oprojeto prevéum diretério para arma- zenaras folos também é necessério criar 2.9 Dominio minicurso devmedta com.br Tn wonercrconiguniopne ero Su oh es Pinan 59 fener i Figura Seto pas oe aapbraepa 58 ClubeDelphi - Delphi for PHP 2 @ a @ 3 e ri Ei & & @ 4% e " @ te eo 2 6 coo sa 0 ae Xua|2ha xaG o|¢4 Blo Pe Terie esse diretsrio dentro do Deploy. Comissofinalizamos o Deploy eestamnos prontos para publicar a apliagio, Basta conectar no FTP ecopiartoxdos os arquives cediretorio para a pasta itpdos, Fica muito difill fazer © upload dos ar- ‘quivos conectando ao FTP pelo browser Aconselho a utilizagso de um software specifica para envio de arquivos via FTP quetenhacomo caracteristica,acapacidade de reconectar ao servidor se a conexdo for finalizada. Nomeu caso utlizeiosoftware Core PIP LE, exibido na Figura. Testando a aplicacao ‘Ao tentar executar a aplicagio chs mando a pagina index obtive oer da falta da clase Smarty, que 6 la responsivel pela uilizagio de empl Realmente o Deploy esqueceu dessa ca se. Ent manualmente copie odie ot da instalagiod Delphi for PHP pa a pasta Deploy aga novamente op por FTP. Também obtive a seguin Poderia ser realizada a atualizacio ¢ toda a VCL através da site: warn. comfoelEpp. Mas nao recomendo, po 0s eddigos poderto precisar de alter 6, om Se, teria que ser revisada tod a aplicagao, Procurando na internet o contrei uma solugio em um forum qu solicita que se altere a fungao WriteSC no arquivo dbtables nc pp. Entio subs titua a funedo pela seguinte: (© médulo mbstring na maioria de provedores nao esta carregado. = interessante solicitar ao provedar carregamento desse médulo que def ne padri sa(da hts, resolvendo muito problems de acentuacio. Também aconteceu o erro “The In Filter PHP extension is not setup or PHP installation”, comentado pe CodeGear no artigo support.codege comarticle/36378, Para resolver iss tem-se duas opgées, A zer a alteragao do arquivo system. php, desabilitando a excegao de ex ‘conlozme comenta oartigoe ase ‘opcio é utilizar 0 arquivo system. in phy mais recente, baixando a alualiz= ‘gio da VCL. ‘Outra mensagem de erro encontea que dizia: Exror in my_thread_ (blend): 1 threads did't exit, mexeces uma atenglo maior. Esse er10 n20 s referia a nossa aplicagdo, pois apacec também executando a pégina Procurandona internet descobri que 1s de caracteres de entrada alee eo ee) trata cle um bug de uma biblioteca do MySQLe que ainda ndo foi solucionado. Mesmo assim, na Hospedix ¢ possivel contornara situacdo passandoa utilizar © PHP via ISAPI. Para isso, no painel de controle acesse as contig dominio e marquea opeio runt as ISAP] extension, contorme éexibido no circulo da Figura 3, Claro que utilizar PHP via ISAPI nao ¢ a melhor alternativa, mas tenguanto 0 bug nao ¢ corrigido essa & wages do. a Unica solugdo. Com isso a aplicacao doverd rodar perfeitamente, Correcées align polsa mesma nap apres vamensagem de erode usuioe senha incortete Portato abr esa pigina no Delphi for PHP esubstituao ebdigo do botdo Lagar pelo cbdigo da Listagem 1 Param methorentendimento todas as listagens foram comentadas Também fol necesséro adapta 0 for- ee once A clase ofereida pola Hoopedix que 6a PHPMaier. Entaosubsttuao codigo do boo Enviar pel cig da Listagem 2 Conclusao ‘Comisso finalizamos nossomini-curso de Delphi For PHP com banco de dados MySQL. Espero que voces tenham gos tado de utilizar 0 Delphi for PHP assim como eu, Acredito que ssa ferramenta_ | vai crescer e se tornar uma das mais | utilizadas para trabalhareom PHP, | lipatal®a, | Paraquemquiseracessarositee verna | mise | pritica seu funcionamento, a Hospedix B vai manté-lo por alguns meses. Pa ; a ‘ | acessar ulilizeo link minicurso.devmedia aa Rehacineiiae con.breparaentrarna parte administra ‘ : Wages ae tiva utilize o usuério assinamledclubede i at s . h.nete senha devmedio, a Senstaramdividascuprcblemasquenso | 9 foram tratadosmesartigos enviem para ment fae re nte mise are, ‘email quopoderei responder nassestesde | y= »olherea no eiican: perguntase respostas da revista, @ ‘alle Discos Ieiser Wor Edicdo 92 -ClubeDelphi 59 Secao PHP Nesta secao vocé encontra artigos sobre a linguagem PHP ea ferramenta Delphi for PHP Introducao ao PHP — Parte 4 (GINGA UCN eee OCS TC een CMa etait lire Ewald Geschwinde e Hans-Juergen Schoenig ssa € a siltima parte de nosso Liters tian hr jonde estamos vendo 0s princi- pais detathes da linguagem. Neste ar- tigo aprenderemos como trabalhar com mais de uma pagina PHP transferindo informagées de uma pégina para outra através de varveis globais cesttica, além de formulérios Veremos também como cri packages (pacotes”), que na verdade 80 péginas PHP contendo varisveisefungSes a seem, utlizadas.Entenderemos como o PHP se comportaa efetuar“includes” dearquivos contend eéligo de fungies evariveis. Entendendo as variaveis As varliveis no so “visfveis” na apli- caso inteira. Este 6 um aspecto muito importante, pois, caso contririo, 05 pro- ses. Ao construir aplicagées grandes importante saber onde e quais varidveis podem ser vistase uilizadas. Comecemos 60 ClubeDelphi - introducao ao PHP Parte 4 com um exemplo simples na Listagem I Em primeiro lugar, $2 6 inicializada sxibida na tela. Entdo a fungao dis data é chamada, ¢ tenta exibir $2 ente co que temoséo resultamos a seguir: Como podemos observar display data rio consegue exibir nade, pois S¢ no esta visivel paraela. A varidvel $a foi ini ializada no script principale, portanto, do 6 visivel para fungées chamadas ele. Poreste motivo, se desejarmos acessar St em display_data, devemos nto, declaré- como global assim como podemos ver nna Listagem 2, ‘Com a ajuda da palavra-chave globel, 6 possivel ler e modificar qualquer va- ridvel global: Como podemos ver 6 conteido de $a pode ser modificado por display_data, ‘Outro modo de acessar a varidvel seria utilizar um array chamado $CLOBALS ‘como pocemos ver na Listagem 3 Com a ajuda de SGLOBALS, é possivel acessar qualquer variével que foi defi- rida globalmente. Executando o scrigt, a safda serd exibida na tela: ‘Outro aspecta importante a ser consi- derado, especialmente quando lidamos ‘com projetos muito grandes, 6 que po- demos incluir outros arquivos no script usando 0 comando include, desta forma variaveis hospedas em outros arquivos podem ser visualizadas Com a ajuda do comando include, os arquivos que contém fungées e varié- veis so acrescentados a um script PHP e serio visiveis pelo interpretador. Na segunda linha da Listagem 3 ineluindo o arquivo vars:pkp presente nna mesma pasta onde o script atual est sendo executado, Experimente eriar um arquivo .php © digitar nele o cédigo a seguir. Note que definimos uma variavel chama $2 cujo ‘o contedido 6 “Olé Mundo! tamos rie um nove arquivo einsira 0 e6digo dda Listagem 3 antes mencionada Salve-o eexecute-ono browser. E recomendavel colocar arquivos que contém somente efinigbes de varidveisem um diret6rio separado, para que 0 mesmo nao seja misturado com arquivos que contém outros e6digos-fonte. Além do mais au- wenta a seguranca do site. Executando © script, veremos que o resultado seré 0 mesmo do exemplo anterior: Incluir um arquivo € simples, mas 0 que acontece quando 0 arquivo incl 0 em script.php contém, por sua ver, arquivos outros arquivos inclusos? Vejamos no codigo a seguir uma nova abordagem. Para entendermos como (eager ie lage Usage 2 eager Laapen somos © PHP se comporta nesses casos, crie dois novos arquivos PHP com os no- mes “base_aphp” e “base_bphp", No primeiro arquivo, base_apip, digite 0 cédigo a seguic Jano arquivo base_bphp digite Basicamente estamos definindo, sepa~ radamente,o valor de duas varidveis Sa fe $b. Em seguida modifique o script do arquivo vars pp conforme segue: esta vez o vars.php no contém a de- finigao das variaveis, mas inclui dois ar- guivos que contém esta definicao de $2 $b Por fim erie um nove arquivo PHP que implementa o c6digo a seguir: esse caso estamos incluindo o arqui- vo vars.phy que contém inclui os dois arquivos criados anteriormente que por sua vez contém 0s valores das varidvies Sae $b, Oqueaconteceem seguidaé que ‘ambas varidveis sao exibidasno browser, Isso acontece porque as variaveis in clusas no arquivo tars,ply também sto adicionadas nesse script. Veja a seguir: Entendendo e usando varidveis estaticas muitos outros componentes de PHP, foram emprestadas do C/C++, Essas Edigso 92 - ClubeDelp| varidveis aio utilizadas para construir fungBes que sero capazes de lembrar- se de valores. Especialmente para as recorréncias, caracteristica essa muito importante em qualquer sistema, Para demonstra 6 que podemos fazer com -varidveis estaticas, inclusmos um breve cexemplo na Listagem 4 ‘Umarepeticio garante que display_data sera chamacla seis vezes. A variavel Sour foidefinida como uma varidvel estatica, ‘oque significa que lembraré do valor que teve da tiltima vez em que display_data foi chamado. Sempre que a funcio for chamada,o valor atual de $6 acrescen- tado a Sour. Se executarmos a pagina, vveremos que o tamanho de Scar cresce sempre que display data € processado conforme podemos vera seguit As varkdveis estiticas tém tanto des- vantagens quanto vantagens, Erros de ‘execusgdo provocados por variaveisesté- linge agro eens 0, As ve7es, dificeis de encontrar, fe pode ser muito trabalhoso procurart ‘eros que 36 sho encontrados por depu- ragio extensiva, Criagao de Packages (Pacotes) Mesmo escrevendo aplicacoes bem ppequenas, 6 recomendado empacotar em arquivos separados as fungoes utili zadas para certas partes das aplicagBes. Avescrevermos ma aplicagiouilizada para exibir diagramas de estoque, pot exemplo, pode ser ati ter bibliotecas separadas de fungBes relacionadas &re- cuperacio de dados e outras para exibit 0s dados. Isto nos ajudaré a retilizar © digo para outas apicagbes. Além do mais, as noseas fungBes serdo mais con- sistentes, pois nem toda aplicaggo tema sua prépria implementago. Bscrever digo reutilizavel 60 primei- +o passo para obtermos cédigo confidvel Quanto mais freqdientemente um trecho de cédigo ¢ utilizado, mais maduro es tar6, pois ters sido mais testado, Outro aspecto importante & que 08 pacotes devem ser indepencentes dos progra- ag idan 62 ClubeDelphi -Introcucao ao PHP - Parte 4 mas que 08 usam, Em outras palavras nndo devemos acessar variaveis globais do programa principal a partir de uma biblioteca, pois 0 cdigo poderé ndomat ser reutilizavel e © programador que utiliza uma biblioteca deve saber o que etd acontecendo dentro da mesma Devemos tentar construir médulos Pequenos, compreensiveis ¢ indepen fixa e gacan tirque o usuario de uma biblioteca nao ind saber o que estd acontecendo dentro da mesma, ( fragmento de cédigo da Listagem 5 ‘mostra um pequeno exemplo. O objetivo Gescrever um médulo que troca 0 con tetido de duas varidveis. Vejamos antes grama principal: cio do script, uma biblioteca ests sendo inclusa e nela duas variéveis sia definidas, Estas sdo as varidveis que de sejamos trocar. EntRoa func swpiata_ ref é chamada e os valores so passado: para a fungSo, Depois disto, as varidvels s8o exibidas para que possamos verificar que foram realmente trocadas. AUG agora, o swapdata_ref é uma caixz preta, e no seré necessario saber com as varidveis sio trocadas, porque aintes- face da funcdo foi claramente definia: Contudo, daremos uma espiada no que 1 fungfo faz internamente observandc a Listagem 6 ‘Uma referencia ¢ passadia paraa funca: © 08 valores serio trocados utilizanda ‘uma variavel temporaria chamada Como podemos notar a funcio nao tem nenhum retorno. Passada a stoapdata_ref tuma referéncia ela é capaz de acessa as variaveis diretamente (utilizando os enderegos internos dos valores), sem necessidade de acessé-las utilizandc varidveis globais Este modo de resolver 0 problema € muito edmodo, porque swapdata_refnto precisa saber como é que so chamadas as variaveis na fungo chamadora. Os cenderegos dos valores que tém de ser processados serdo destinados aos nossos novos nomes quando a fungi for che ‘mada. Executando o arquivo, podemos vver que as varidveis foram trocadas: dentes, com wma interfa Como em outras funcionalidades,asre- feréncias foramherdadasdo Cesao uma caracteristica poderosa, pois seria pouco confortavel trabalhar com variaveis globais ou passagem de enormes quan tidades de dados para uma funcio. Trabalhando com formularios Até agora, vimos como escrever apli- cacées PHP simples. Contudo, para construir mwebsites interativos, € neces: Sério permitir que o usuario digite in- formagbes através dos, assim chamads, formulsrios. O conteddo de tais formu latios pode ser transmitido ao servidor ‘eumscript PHP pode reagir baseado nos dados enviados a ele. A interacio com um servidor Web pode ser feita via dois métodos chamados GET e POST. (Os métoclos GET e POST sio descritos no documento RFC2068 que descreve «como devem se comportar: Isso faz parte da regulamentagSo do protocolo HTTP ce pode ser lido no link wow fags orgies 1f-2068. html que contém mais de 160 ps- ginas. Nesta segao aprenderemos sobre Gurses Cia ltinye (suman as idéias principais por trés do GET POST ¢ aprenderemos também a util zar esses dois métocdlos eficientemente ‘Vejamos 0 que cada um significa: *Get: O método GET ¢ 0 método de solictagZo padrdo para recuperardados deum servidor Wee. Quando chamamos um uetsite,o GETS utilizado para obtero documento selecionado. Normalmente, as chamadas deste tipo nao tém efeitos colaterais e é por este motivo que GET dove ser utilizado; Os navegadores SET nao tem nenhuum efvito colateral e se a pagina nao mais donavegador,serd entio recuperada novamente, Contudo, se a solictagdo original fosse via o POST, 0 jo receberia uma mensagem aler- tando que © documento néo esté mais, no cache, Mais adiante veremos como trabalhar com ambos métodos; *Post: © POST 6 © método padrio para submeter dados a0 servidor Web ecidod via formulirio. No caso do ‘a solicitagdo sempre contém uma secao body("corpo”) onde a informacao estiver no at Conhega abaixo os cursos ja disponiveis: www.devmedia.com.br/curso/cdplus relacionada a mesma é fornecida, Esta informacio ¢codificada como uma query string (‘string de consulta’). Normalmente, os desenvolvedores Web usam 0 POST mesmo quando nenhum dado no servidor tiver sido modificado; Criando formulatios Depois que vimos quais métodos sio utilizados para recuperar dados de um serviclor Wed, daremos uma olhada fem um formuldrio simples, que pode ser utilizado para enviar 0 texto a um arquivo PHP. A Listagem 7 mostea um TML. Salve 0 arquivo como “formulario.htm’, Podemos ver que um formulirio foi definido na quina linha através da Tag
do HTML, Quando 0 usudrio clicar ne botdo Submit, os dados serdo enviados para o seript reaction.php. O rmulério contém lois eomponentes. 0 primeico componente é campo de texto chamado nome, O segundo componente 6obotio para submetero formulirio. O formuilsrio simples em ‘A Revista Clubedelphi oferece para seus assinantes uma série de Cursos Online de alto padrao de qualidade + Aplicacdes Client/Server com dbExpress e Firebird + Sictema SysCash + Criando uma aplicacio multi-camadas completa com Delphi * Aplicacdes client/server com Windows Forms no Delphi 2006 + Aplicagbes WEB com IntraWeb e Delphi 7 (Delphi Win32) | 2.sua menor opgio de aprendizager! ‘Comece seu treinamentot ‘ora deemed cm bassin Edig0 92 -ClubeDelphi 63

Vous aimerez peut-être aussi