Beruflich Dokumente
Kultur Dokumente
Vejanesseartigoosdetalhesiniciaisqueenvolvema
construodeaplicaesAndroid,atravsdousodoIDEdo
DelphiXE5.
Fiquepordentro
AmaisnovaversodoDelphi,aXE5,apresentoucomograndeatrativoosuportenativoao
desenvolvimentomvelparaAndroid.Estanovidadeveioaatenderumdesejoantigoda
comunidade,queenxergaareferidaplataformacomosendoumatimaopocomercial.Isso
podeserjustificadopelofatodoAndroidseratualmenteoSOmaisdifundidoeutilizadoem
meioaocontextodosdispositivosmveis(tabletsesmartphones).Emvistadisso,opresente
artigoirmostrarosdetalhesiniciaisqueenvolvemaconstruodeaplicaesdestetipo,
atravsdousodoIDEdoDelphiXE5.
OsuporteaodesenvolvimentomvelnoDelphisurgiuaindaemsuaversoXE2,atento
direcionadoexclusivamenteconstruodeaplicativosparaaplataformaiOS,contemplando
dispositivosApple,taiscomoiPhone,iPadeiPodTouch.Adicionalmente,aindanestapocajse
ventilavaosprimeirosrumoressobreoeventualsuportenativodaferramentaao
desenvolvimentomvelparaAndroid,numfuturoprximo.Istoporque,apesardaclarae
reconhecidaevoluoparaapoca,osuporteaiOSatendiaapenasparcialmenteonichode
mercadoaoqualagrandemaioriadosdesenvolvedoresDelphiestavaminseridos.
SuarealidadeMobileenvolvia,almdosdispositivosiOS,umgrandemercadoemexpansoe
abrangentededispositivosAndroid,videsmartphonesetabletsdosmaisvariadostipose
marcas.Logo,surgiramosprimeirospedidossobreomencionadosuportee,passadasalgumas
versesdaferramenta,talpromessaveioaserfinalmenteatendidacomorecmlanadoDelphi
XE5.Sendoassim,estaversodaferramentacontacomonovosuportenativoao
desenvolvimentodeaplicaesparaaplataformaAndroid.
Almdisso,ograndediferencialnestepontoficaporcontadaformadedesenvolvimentoaplicada
construodestenovotipodeaplicao,quesemostraessencialmenteamesmadaj
utilizadaparaodesenvolvimentoclssicoparaWin32.Emoutraspalavras,issorefleteo
envolvimentodeumamesmalinguagem,umamesmasintaxeeosmesmoscomponentesj
conhecidos.
Aofinaldascontas,todoestecenriovemilustrarapretensomaiordaEmbarcadero,queade
proveraconstruodeaplicaesparamltiplasplataformas(Windows,MacOSX,iOSe
Android),atendendomltiplosdispositivos(PCs,SmartphoneseTablets)apartirdeumamesma
basedecdigoedeconhecimento.
Deformanatural,odesenvolvimentodeaplicaesmveisporsisenvolveumasriedefatores
extrasqueextrapolamosrecursosprovidosinternamentepelaferramentadedesenvolvimento.
ComoDelphinodiferentee,sendoassim,apretensodesteartigoadejustamenteprover
omaiornmerodeinformaesedetalhesquenorteiamoinciododesenvolvimentopara
AndroidnoDelphi,servindoassimcomopontodepartidaparaaconstruodasprimeiras
aplicaesdestetipo.
Preparaodoambiente
LogodeinciopossvelestabelecerqueodesenvolvimentoparaAndroidnoXE5requeruma
preparaopontualdoambientedetrabalho.Diferentedoqueaconteciaemsuaabordagemmais
tradicional,dedesenvolvimentodeaplicaesparaWindows,estenovoprocessoconstrutivono
Delphiexigeumasriedefatoresextras,quevoalmdosrecursosprovidosinternamente
peloIDE.Emvistadessediferencial,aseguirsodiscorridoscadaumdositensnecessriosao
desenvolvimentoparaAndroidnestanovaversodoDelphi.
AndroidTools
DentreosrecursosexternosaoIDEdoDelphi,necessriosaodesenvolvimentodeaplicaes
paraaAndroid,trssotidoscomofundamentais:JDK,NDKeSDK.Taissiglasrepresentam
elementososquaispodemsertraduzidoscomosendoferramentasdedesenvolvimentoparaa
referidaplataforma,essenciaisaqualquerambientevoltadocriaodeaplicaesmveisdeste
segmento.
Osdoisprimeirospodemserconsideradosrecursosestticos,umavezquea
instalao/atualizaodeambossedcompoucafrequncianoambientededesenvolvimento.
Numprocessooposto,oSDKpodeserconsideradovarivelacadaversodaplataforma.
Deincio,apresenadoJDK(JavaDevelopmentKit)justificadapelofatodoAndroidestar
diretamenteatreladoplataformaJava,tornandosenecessriaapresenadeseukitde
desenvolvimentooficial,quehabilitaacriaodesoftwaresparaestatecnologia.Nocontextodo
DelphiXE5,aversorequeridaerecomendadadoJDKa1.6ou1.7
.Emvistadisso,afimdeprevenireventuaistranstornos,casooambientenocontemple
nenhumadessasverses,aprpriainstalaodoXE5seencarregadeinstalaroJDKadequado.
JNDK(AndroidNDK)oacrnimoparaNativeDevelopmentKitepodeserbrevementedefinido
comosendoumconjuntoderecursosquepermiteaimplementaodepartesdaaplicao
usandolinguagensdecdigonativo,taiscomoCeC++.Suafinalidadedeusodestinase
essencialmentegeraodeaplicaesautossuficientesequefaamusodiretoeintensivodo
processadordodispositivo(CPU),sendoentomuitotilmecnicainternautilizadanos
bastidoresdoDelphi.
Emoutraspalavras,atravsdousodoNDKqueoDelphigeraocdigonativonecessrioparaa
elaboraodesuasaplicaesmveisparaaplataformaAndroid.Logo,aprpriainstalaoda
ferramentacontemplaoinstaladordaversoadequada(erecomendada)doNDK.Porfim,SDK
(AndroidSDK)remeteaotermoeminglsSoftwareDevelopmentKitque,nestecenrio,
caracterizaokitdedesenvolvimentoparaaplataforma.
Emsuma,estepacoteforneceasbibliotecaseferramentasnecessriasatodoocontextoque
envolveaconstruodeaplicativosparaAndroid.Apenascomoinformativo,aseguirexpostoo
caminhopadrodecadaumadasferramentas,tendocomobaseumainstalaopadrodo
releasedelanamentodoDelphiXE5:
JDKC:\ProgramFiles\Java\jdk1.7.0_25
NDKC:\Users\Public\Documents\RADStudio\12.0\PlatformSDKs\androidndkr8e
SDKC:\Users\Public\Documents\RADStudio\12.0\PlatformSDKs\adtbundlewindowsx86
20130522\sdk
Emcomplementoaestecenrio,oDelphiXE5contacomumelementoexternodenominado
AndroidTools,queficadisponvelatravsdomenudeinstalaodaferramenta,apartirdaguia
IniciardoWindows,conformemostraaFigura1.Umavezacionadatalopo,imediatamente
abertaajanelaAndroidSDKManager(Figura2),queapresentaumprognsticogeraldos
recursosdisponveisacadaversodaplataforma,mostrandoostatusdecadaitem(seinstalado
ouno)epossibilitandoinclusiveaeventualinstalaoouatualizaodecadaum.
Assimcomoacontececomositensanteriores(JDKeNDK),oprprioinstaladordoDelphiXE5j
prov,deformaopcional,ainstalaodeumaversoadequadadoSDK(BOX1).Talfacilidade
oferecidalogonoinciodoprocesso,talqualmostradonaFigura3.
Figura1.AndroidTools
Figura2.AndroidSDKManager
Figura3.InstalaodoDelphiXE5AndroidSDKeAndroidNDK
BOX1AndroidSDKeAndroidNDKVersesrecomendadas
AinstalaodoDelphiXE5contempla,deformanativaeopcional,umaversorecomendada
doAndroidSDK(4.2.2)edoAndroidNDK(androidndkr8e).Aqui,sedizrecomendada(ou
adequada)pelofatodestasversesseremaquelasutilizadaspelaequipede
desenvolvimentodaEmbarcaderoduranteaelaboraodoproduto,tendoassimagarantia
deseremplenamentesuportadaspeloIDE.Porconseguinte,autilizaodeverses
diferentesdestaspodeimplicarnaexistnciadenuancesnoplenamentesuportadaspela
versocorrentedoIDE,ocasionandocomportamentosindesejados.
Emcomplemento,paraqueodesenvolvimentoAndroidsejaefetivamentehabilitadonoIDE,
necessrioquetantoNDKquantoSDKsejamidentificadosinternamente.Paratal,agoraoprprio
menudeopesdaferramenta(menuTools|Options)contacomumnovoelementotambm
denominadoSDKManager,quetrazumalistadoscaminhoscondizentesacadapropriedade
relacionadaversodoSDKutilizado,incluindooNDK.
DepossedestasinformaesqueoDelphiconseguedetectaralocalizaodasbibliotecasa
seremutilizadasduranteoprocessodedesenvolvimento.ConformepodeservistonaFigura4,
umavezquefeitaaopopelainstalaodaversodoNDKedoSDKprovidosnativamente,
aspropriedadesdeambosjsoautomaticamentedetectadaspeloIDE.
PelofatodequecadaversodaplataformaestatreladaaumSDKespecfico,naturalqueo
desenvolvedorvenhaafazerusodeumSDKdiferentedoprovidonativamente.Emsituaes
maistradicionais,comumqueoambientejcontecomumainstalaoexistentedeSDK.Para
estescasos,tornasenecessriaaadiomanualdoAndroidSDKemquesto,aoSDKManager
doIDE.
abririmagememnovajanela
Figura4.OpesIDESDKManager
USBDriver
NoIDEdoDelphi,aexecuodeumaaplicaoAndroidsedbasicamentededuasformas,
sendoatravsdoenvolvimentodeumsoftwareemuladoroudeumdispositivofsicoreal.Para
esteltimo,oprocessoenvolveasimplesconexodoaparelhoaohardwarededesenvolvimento,
queocorreviaportaUSB.
Diantedisso,possveldeterminarqueoutrorequisitofundamentalparaodesenvolvimento
AndroidnoXE5estrelacionadoaousododriverUSBapropriadoaodispositivoenvolvido.Como
exemplo,paraumaparelhoNexus7,setornanecessrioousodoGoogleUSBDriver,damesma
formaqueumaparelhoMotorolaexigeodriverUSBespecfico,providopelaprpriafabricante.
Porpadro,dentrodocontextodoDelphiXE5,grandepartedasnecessidadesrelacionadas
drivers,taiscomoinstalaoeatualizao,podemsersanadasatravsdousodeseuAndroid
SDKManager.
Emulador
Semsombradedvidas,aformamaisnaturaldeseexecutarumaaplicaoAndroidnoDelphi
atravsdousodeumemulador.Porestarazo,oprprioinstaladordoDelphi,pormeioda
instalaonativadoSDKeNDKdoAndroid,jprovacriaodeumemuladorpadroj
configuradoparaodevidousonoIDE,emmeioaoprocessodedesenvolvimentodeaplicaes
mveisparaaplataforma.
Esteemuladorpadroapresentadosobonomedersxe5_androidesuadefiniocompleta,
incluindosuasconfiguraes,podemservistasatravsdogerenciadordedispositivosvirtuaisdo
Android,denominadoAndroidVirtualDevices(Figura5),providopeloAndroidSDKManager,e
disponibilizadoatravsdeseumenuTools|ManageAVDs.
Figura5.AndroidVirtualDeviceManager
FireMonkeyMobileApplication
Emsuaversoanterior,aXE4,oDelphitrouxecomoumadesuasgrandesnovidadesumnovo
tipodeprojeto,denominadoFireMonkeyMobileApplicationque,conformeseunomesugere,est
direcionadoconstruodeaplicaesmveiscomaferramenta.Nestapoca,conformejdito,
osuportedoIDEaocontextoMobileserestringiaplataformaiOS,resultandonaproduode
aplicativosparadispositivoscomoiPhone,iPadeiPodTouch.
Deformanatural,nestasuanovaverso(XE5),aferramentateveseusuporteaumentadocoma
inserodaplataformaAndroidaseucontexto.Comoreflexodisso,agoraapartirdeumtipode
projetonico(FireMonkeyMobileApplication),possvelseconstruiraplicativosparaambasas
plataformasmveissuportadas.Odirecionamentoespecficoacadaplataformased
simplesmentepeladevidaindicaonaopoTargetPlatformsdoProjectManagerdoIDE.
AFigura6mostraasopeshabilitadasdeformanativaemprojetosdestetiponoXE5.Ainda
combasenaimagem,umdetalheasermencionadonestemomentosedpelaindicaodo
Android,comosendoaplataformadedestinopadroparaotipodeprojetoFireMonkeyMobile
Application.IssosedevemuitoaofatodosuporteaAndroidserumadasgrandesapostasda
Embarcadero,nestanovafasedoDelphi.
Figura6.ProjectManagerTargetPlatforms
TemplatesparaprojetosFireMonkeyMobile
AoseiniciarumnovoprojetoFireMonkeyMobileApplicationnoDelphiXE5,umagamade
modelosprdefinidos(templates)deaplicaessodisponibilizadosaodesenvolvedor,servindo
comopontodepartidaparaoefetivodesenvolvimento.Afunoprincipaldestesmodelos
previamenteelaboradosfacilitaroinciodoprocessoconstrutivodoaplicativo,evitandoquese
comecetotalmentedozero.Emsuma,cadamodelocontaessencialmentecomformulriose
componentesprconfigurados,deacordocomsuacaractersticarelacionada.
Porestarazo,cadatemplatedisponibilizadoautodocumentado,osuficienteparaqueo
desenvolvedortenhaaclaranoodesuaintenoecaracterstica.Taisinformaesso
mostradaspelosimplesrepousardoponteirodomousesobrecadamodelo.AFigura7mostra
algunsdostemplatesMobiledisponveisnoXE5.
Figura7.FireMonkeyMobileApplicationTemplates
ComexceodomodeloBlankApplication,cadatemplatedeste,quandoutilizado,exigea
indicaoimediatadeumlocalasersalvoemdisco,umavezquenosogeradosemmemria,
massimcopiadosfisicamenteapartirdorepositriodoDelphi.
Umexemploprtico:primeiraaplicaoAndroidnoDelphi
XE5
Mantendoatradionoquedizrespeitoapresentaoprticadeumanovaabordagem
relacionadaadesenvolvimentodesoftware,deincioserconstrudoumtradicionalprojeto
HelloWorld!,deformaaintroduziraconstruodeaplicaesAndroidnoDelphi.
Sendoassim,utilizandocomobaseomodelodeaplicaomaisbsico(BlankApplication)deum
projetoFireMonkeyMobileApplication,aconstruodolayoutaserutilizadoseddemaneira
similaraojrealizadoaolongodosanoscomprojetosVCLFormsApplication.
Istoposto,pelosimplesarrastardeumboto(TButton)paraoformulriodoprojeto,fica
definidoolayoutdaaplicao(Figura8).Aindaemtermosvisuais,outraalteraonecessriase
dpeladevidadefiniodosdizeresaseremmostradosnocontroleque,nestecaso,seriaalgo
comoDizerOl!.
NumaabordagemtradicionalutilizandoaVCL,talmudanaimplicarianaconfiguraoda
propriedadeCaptiondoelementoTButton.Todavia,apesardassemelhanasnotadas,talcomoo
nomedaclassedocontroleutilizado(TButton),importantelembrarqueodesenvolvimento
MobilenoDelphiestrelacionadoaoframeworkFireMonkey(FMX).
Emfunodisso,oselementosutilizadostendematersuasprpriasnuances.Especificamente
paraestecaso,odetalheficaporcontadapropriedadedocontroleTButtonquerepresentao
textoasermostradoemseuvisual.EnquantoquenaVCLutilizadaapropriedadeCaption,aqui
seutilizaapropriedadeText.Apesardesutil,especificaescomoestapodemgerarconfuses
numdesenvolvimentoinicial.
Jemtermosdecodificao,aListagem1mostraocdigodomtodomanipuladordoevento
OnClickdoboto.Damesmaformaqueohabitual,apenasumachamadaaomtodo
ShowMessageosuficienteparasemostrarumamensageminformativaaousurio.Odetalhe
aquificanosbastidores,umavezqueoShowMessageutilizadofazrefernciaaomtodo
declaradonaunitFMX.Dialogs,emsubstituioaVCL.Dialogs.
Listagem1.CdigoparaoeventoOnClickdoboto
procedureTForm1.Button1Click(Sender:TObject);
begin
ShowMessage('OlMundo!');
end;
Figura8.Layoutdaprimeiraaplicaodeexemplo
Porconseguinte,jcomaaplicaoemexecuo,oresultadodaaodocliquenoboto
ilustradonaFigura9.
Figura9.AplicaoHelloWorld!emexecuo
AplicaoAndroidcombancodedados
Desdeseuincio,oDelphitevesuaexcelnciarefletidanaconstruodesoluesparaa
plataformaWindowse,fundamentalmente,noprovimentodeaplicaesenvolvendobancode
dados,conhecidasemmeiocomunidadecomoaplicaesdebancodedados.Ditoisto,
medianteestasuanovafaseevolutiva,queabrangeaconstruodeaplicaesparaplataformas
mveis(iOSeAndroid),tornaseinteressanteousodeumaabordagemjfamiliarparaa
demonstraodosnovosconceitosenvolvidos,traandoumparaleloentreelassempreque
possvel.
OdesenvolvimentodeaplicaescombancodedadosnoDelphiXE5paraplataformasMobile,
sobopontodevistanativo,estestritamenterelacionadoaousodosbancosdedadosInterbase
ToGoeIBLite(BOX2).Contudo,jdeinciovaleressaltarqueambososprodutosso
comerciais(pagos),logo,suautilizaorequerapossedeumalicenavlida.Combaseno
contextodoartigo,queestrelacionadoaousodaversoexperimental(Trial)daferramenta,o
desenvolvimentosedpelautilizaodaversoToGo,umavezqueumalicenadoproduto
(tambmTrial)providajuntodainstalaodoIDE.
Depossedatecnologiadebancodedados,sefaznecessriadefiniodabibliotecade
componentesdeacessoadadosaserutilizada.ParaaplicaesAndroid,trssoasopes
nativas:dbExpress(BOX3),InterBaseExpress(IBX)eFireDAC.Levandoemcontaonvelde
popularidade,nummomentoinicial,odbExpresssemostraumaopoagradvel.Emsetratando
deplataformasmveis(iOSeAndroid),odbExpresstemseusuportediretolimitadoadoistipos
debancodedados:ojcitadoInterBaseToGoeoSQLite.
ParaaplenautilizaodosdemaisSGBDssuportadospeloframework,umcenrioidealsedaria
peloenvolvimentodeumservidordeaplicaoDataSnap,caracterizandoassimumcontexto
multicamadas,oquefogedoescopodesteartigo.
BOX2InterBaseToGoeIBLite
Deformasucinta,oInterBasepodeserdefinidocomosendoumpoderosobancodedados
relacional,dealtodesempenhoesegurana,pertencentemesmaempresamantenedorado
Delphi,aEmbarcadero.Arobustezdeseusrecursosocredenciamaestarnomesmo
patamardeoutrassoluesjtambmconsolidadasnomercado,taiscomoOracle,MySQL,
MSSQLServer,entreoutros.Assimcomoseusconcorrentes,oInterBase,comoproduto,
contemplaumasriedeversesdistintas,cadaqualcomsuasespecificidades.Dentreestas,
asversodenominadasInterBaseToGoaquelaplenamentesuportadapelaplataforma
Android.Istoporque,estaversorefleteumaenginedebancodedadosquepodeser
embutidadiretamentenaaplicao,semanecessidadedequalquertipodeinstalao.Para
oseufuncionamento,nenhumprocessoadicionalalocadonamemria,seresumindo
apenasaousodaprpriabibliotecadobancodedados.
BOX3dbExpress
Deformaconceitual,odbExpresspodesersimplesmentedefinidocomosendoumframework
deacessobancodedadospresentenoDelphi,cujainfraestruturatotalmenteescritana
prprialinguagemutilizadanaferramenta.Atravsdautilizaodedriversespecficos,o
dbExpresssetornaaptoatrabalharcomosprincipaisSGBDsdisponveisnomercado,tais
comoOracle,DB2,MSSQLServer,MySQL,InterBase,FirebirdeSQLite.Historicamente,at
aversoXE2daferramenta,possvelafirmardeformaunnimequeodbExpressocupava
opostodeprincipaloponativa,emtermosdeacessoadadosnoIDE.Comachegadado
XE3eaposteriorapresentaodabibliotecaFireDAC,oframeworkganhouentoum
concorrentealtura,sendoqueatualmenteambos(dbExpresseFireDAC)dividemoposto
deprincipaisopesnativasparaapartedeacessoadadosnodesenvolvimentodeuma
aplicaoDelphi.
Bancodedados
AindacomrelaoaoInterBaseToGo,aprpriainstalaodoXE5trazconsigoumabasede
dadosdeexemplodestaversodoSGBD,cujoarquivoapresentasesobonomede
DBDEMOS.GDB,equeficalocalizadonapastaData,dentrododiretriodeexemplos(Samples)
daferramenta(C:\Users\Public\Documents\RADStudio\12.0\Samples\Data,tomandocomobase
umainstalaopadro).Todavia,valeressaltaraindaquemesmoquetalarquivoapresenteuma
extenso(.gdb)queremetasversesServerouDesktopdoInterBase,suautilizao,em
termosprticos,circunstancialmentediferente.
Deincio,oprimeiropontoaserlevantadocomrelaoaogerenciamentodeumbancodeste
tipo.Tradicionalmente,umabaseInterBasepodeserplenamentegeridaporferramentascomo
IBConsoleeIBExpert,queinternamenteseutilizamdabibliotecacliente(clientlibrary)padrodo
SGBD,denominadagds32.dll,paraaefetivaodoprocesso.
Ouso,porpadro,destabibliotecapodeserjustificadopelofatodelaestarrelacionadas
versesmaisclssicasdoInterBase(Ex:DesktopeServer)eatentotidascomoasmais
usuais.Todavia,tecnicamente,autilizaodeumabasededadosInterBaseToGoexigeousode
umabibliotecaclienteespecfica,denominadaibtogo.dll,emsubstituiogds32.dll.
Sendoassim,umajusteessencialaserfeitosedpelosimplesredirecionamentodaclientlibrary
aserutilizadapelaconexo.Parafinsdeconhecimento,oarquivoibtogo.dlldistribudojunto
dainstalaodoXE5,ficandolocalizadodentrododiretrioWin32_to,disponibilizadopor
padroem:
C:\Users\Public\Documents\InterBase\redist\InterBaseXE3
Aindanestemomentoimportanteressaltarqueambasasbibliotecasclientecitadas(gds32.dll
eibtogo.dll)dispemdeumamesmainterfaceinterna,possibilitandoentoqueummesmo
arquivodebancodedados(.gdb)setorneaptoaatuarnasdistintasversesdoSGBD.Ciente
disso,possvelentoseconstruirumabasededadosparaaversoToGodamesmaforma
habitualrealizadacomaversoServer.
Sendoassim,aListagem2mostraoscriptparaacriaodeumbancodedadossimples,paraa
utilizaocomaversoToGodoInterBase.
Listagem2.Scriptdobancodedadosdeexemplo
/*****CRIAOBANCODEDADOS*****/
SETCLIENTLIB'C:\Users\Public\Documents\InterBaseredist\InterBaseXE3\Win32_togo\ibtogo.dll';
CREATEDATABASE'[SeuCaminho]\DB_CLUBEDELPHI.gdb'
USER'SYSDBA'PASSWORD'masterkey'
PAGE_SIZE4096
DEFAULTCHARACTERSETWIN1252;
/*****CRIAATABELA*****/
CREATETABLEREVISTAS(
ID_REVISTAINTEGERNOTNULL,
ARTIGOVARCHAR(50),
AUTORVARCHAR(50)
);
/*****DEFINEACHAVEPRIMRIA*****/
ALTERTABLEREVISTASADDCONSTRAINTPK_REVISTASPRIMARYKEY(ID_REVISTA);
Conformepodeservisto,alistagemapresentadasimpleseautoexplicativaosuficienteaponto
denoexigirnenhumcomentrioadicional.
Layout
Comojdeconhecimento,FireMonkeyMobileApplicationotipodeprojetoaserutilizadopara
aconstruodeumaaplicaoAndroidnoDelphiXE5.Almdisso,medianteaessnciada
elaboraodeumaaplicaosimples,quesomentelistaumconjuntodeinformaesde
determinadatabeladobancodedados,otemplateHeader/Footertornaseumbompontode
partida.
Estemodelodeaplicaotrazcomocaractersticadelayout,umformulriocontendobarrasde
cabealhoerodap,talcomomostraaFigura10.Porconseguinte,valesalientarqueessas
barrasnosetratamdenovoscomponentesFireMonkey,massimdecontrolesjhabituaisda
VCL.Comoexemplo,abarrasuperior,definidaporumsimplesTLabel,jtodoestilizadoparao
contexto,comodevidoalinhamento,cor,efonte.AssimcomoocorrecomocontroleTButton,a
tradicionalpropriedadeCaptionnoestdisponvelaoTLabeldaFMX,sendonovamente
substitudapelapropriedadeText.
EmaplicaesVCL,emcenriosondesedesejamanipularousimplesmenteexibirdados
provindosdeumbancodedados,naturalautilizaodecontrolesDataAware,
tradicionalmentetratadoscomocontrolesDB,taiscomoDBEdit,DBComboBox,DBGrid,entre
outros.Diferentedisso,importantelembrarqueoFireMonkeynocontemplacontrolesDB,
utilizandoseentodeumaabordagemeumamecnicadiferentedaVCL,noquedizrespeitoao
seutrabalhocomdados.
Sendoassim,tomandocomobaseasituaodoexemplocitado,queexigealistagemdedadosa
partirdeumatabeladobanco,emprojetosVCLFormsumcontroledotipoTDBGridpoderiaser
plenamenteutilizadoparaaexibiodessasinformaes.JemprojetosFireMonkeyMobile,este
controlepoderiasersubstitudoporumsimplesTListBox,quetemcomofinalidadeexibirum
conjuntodeitensemumalistaderolagem.
Emtermosfuncionais,estecontroleaindaexigeaconfiguraodetodasuapartevisual.Logo,
umaprimeiraatitudeasertomadadizrespeitoestilizaodesuacaixadelistagem.Issosed
atravsdasubpropriedadeItemStyle,localizadaemsuapropriedadedenomeDefaultItemStyles
doprpriocontrole.Paraumexemplocomoocitado,umasugestopelaescolhadaopo
ListBoxItemBottomDetail,quedeterminaquelogoabaixodecadaitemlistado,sejamostrada
umapequenareaparaaexibiodeseusdetalhes.
Oprpriocontroleprovaindaapossibilidadedeoutrosajustesadicionais,talcomoainclusode
umacaixadepesquisadeitens,aotopodalistagem.Istoconseguidopormeiodainclusode
novoscomponentesrelacionados,aoseudesign,atravsdeseumenudecontextoAddItem,
conformemostraaFigura11.Pelaimagem,possvelverentoainclusodeumnovo
componente,dotipoTSearchBox.
Figura10.Header/FooterTemplateFormulrio
Figura11.TListBoxTSearchBox
Acessoadados
possvelestabelecerqueaessnciadoexemplocitadoestejarelacionadasuapartede
acessoaosdadosdatabeladobancodedados.UmavezqueodbExpressfoidefinidocomo
sendoatecnologiaaserutilizadaparaestefim,todaasequenteabordagemseddeuma
maneiramuitoprximaaoquefeitoemprojetosVCL.Comoexemplo,TSQLConnectiono
elementocentraldeconexo,contendoessencialmenteasdefiniesdedriver(DBX)ede
parmetrosdamesma.
Paraoprimeiro,emrazodoSGBD(InterBaseToGo)envolvido,IBLite/ToGoonomedodriver
aserescolhidonapropriedadehomnimadocomponente.Adicionalmente,osparmetrosda
conexoficamdefinidosnapropriedadeParams,talcomomostradonaListagem3.
Listagem3.CdigoDFMdeumcomponenteTSQLConnectionpropriedadeParams
objectSQLConnection1:TSQLConnection
...
Params.Strings=(
'DriverUnit=Data.DBXInterBase'
'VendorLib=ibtogo.dll'
'VendorLibWin64=ibtogo64.dll'
'VendorLibOsx=libibtogo.dylib'
'Database=[CaminhoDoBanco]\DB_CLUBEDELPHI.GDB'
'User_Name=sysdba'
'Password=masterkey'
'DisplayDriverName=IBLite/ToGo'
...
)
end
OdetalheaquificaporcontadaexposiodousodabibliotecaclientedoInterBaseToGo
(ibtogo.dlleibtogo64.dll),bemcomoocaminhodobanco,quedeveseradequadoaumcaminho
localvlido.Umavezdepossedaconexo,oelementoqueficarresponsvelporfazertoda
interaocomatabeladesejadanocontextododbExpressoTSQLDataSet.
Logo,suaconfiguraoparaesteexemplomostradanaListagem4,ondeficaclaraadefinio
deumasimplesinstruoSQLemsuapropriedadeCommandText,queirretornarosdados
pertinentesaoscamposdatabelaREVISTAS.
Listagem4.ConsultaSQL
objectSQLDataSet1:TSQLDataSet
Active=True
CommandText='selectID_REVISTA,ARTIGO,
AUTORfromREVISTASorderbyARTIGO'
SQLConnection=SQLConnection1
...
end
Porconseguinte,afinalizaodasconfiguraesdetempodedesigndaaplicaoenvolvea
ligaoentreapartededados(TSQLDataSet)eseuvisual,queaquirepresentadopelocontrole
TListBox.NumaabordagemVCL,comautilizaodecontrolesDB,estaligaosedariade
formanaturalatravsdousodeumsimplesTDataSource.
Todavia,otrabalhocomFireMonkeyessencialmentesediferenesteaspecto,umavezque,
conformejcitado,oframeworknoprovelementosDB.Aligaoaquificaporcontadouso
datecnologiaLiveBindings.Sendoassim,deformaprtica,suautilizao,nestecaso,sedpelo
usodoLiveBindinsDesigner,queumaferramentavisualdisponibilizadaatravsdomenuView
>LiveBindingsDesignerdoIDE.
Comsuaestruturaaberta,estedesignerpermiteentoquesejamdefinidasasligaesentreos
elementosdoformulriodeumamaneiratodagrfica,talcomomostradonaFigura12.
Figura12.LiveBindingsDesigner
Fazendoodeploydaaplicao
Emsituaesreais,opassoseguinteaodesenvolvimentodeumaaplicaoestrelacionadoao
seuefetivodeployparaoambienterealdeproduo.Talprocessopodeserbrevementedefinido
comosendoumacoletaeposteriorcpiaparaoambientedeproduo,detodososarquivos
necessriosparaaplenaexecuodaaplicao.NocasodeaplicaesMobile,oambientede
produoentooprpriodispositivonoqualaaplicaodeverrodar.
Indoalm,tecnicamentefalando,ousodeumemuladoremsubstituioaumdispositivofsico
tambmexigeomesmoprocessodedeploy.NoDelphiXE5,aoseexecutarumaaplicaoem
seuIDE,todooprocessodedeployrealizadodeformaautomticaemseusbastidores.
Afimdeproverumpanoramavisualdosarquivosenvolvidosnoprocesso,oprprioIDEdoDelphi
jprovumasoluorpidaegil,disponibilizadaemseumenudeprojetosProject>
Deployment.Umavezacionada,estaopotraztonaumanovajanelaondeficamlistadosos
arquivosqueirofazerpartedodeploydaaplicao.Porpadro,grandepartedosarquivos
essenciaisparaqueoaplicativosejaexecutadonodispositivojsoautomaticamenteinclusos
nestalistagem.
Emrazodoprojetodeexemplocitadoutilizarumrecursoextra,quedizrespeitoaobancode
dados,sefaznecessriaainclusodestesfatoresnajaneladeDeployment.Emvistadisso,uma
primeiraatitudeentoincluirnalistadearquivosdedeployoarquivodoprpriobancode
dadosutilizado,pormeiodobotodeaoAddFiles.Comoajuste,necessrioqueseucaminho
nodispositivosejaadequado,atravsdacolunaRemotePathdagradededeployment.
Emconsequnciadestamudana,sefaznecessriatambmaadequaodocaminhodobanco,
emruntime,doparmetrodaconexorelacionado(Database)noTSQLConnection.Issopodeser
feitodevriasmaneiras,deacordocomoRemotePathescolhido.Aseguir,naListagem5so
entomostradasduasalternativastradicionaisdeusonaperspectivaMobile,pormeiodomtodo
manipuladordoeventoOnBeforeConnectdocomponentecitado.
Listagem5.Configurandoocaminhodobancodedados
SQLConnection1.Params.Values['Database']:=
TPath.GetHomePath+PathDelim+
NomeDoArquivoDeBancoDeDados;
SQLConnection1.Params.Values['Database']:=
TPath.Combine(TPath.GetDocumentsPath,
NomeDoArquivoDeBancoDeDados);
Almdisso,pelofatodoSGBDutilizadoserumaopocomercial(paga),elenecessitadeuma
licenavlidaparaoperarnodispositivo.Conformejcitado,aprpriainstalaodaversotrial
doDelphiXE5jtrazconsigoumalicenahabilitadadoInterBaseToGoparaestesfins.
Demodogeral,paraseadicionarlistadedeploytodososelementosrelativosaoSGBDem
questo,bastaqueseacioneobotodeaoAddFeaturedFiles.Umavezfeitoisso,umanova
janelaaberta(Figura13),jdisponibilizandoumaopodevidamenterelacionada.
Figura13.DeploymentFeaturedFiles
Concluso
Apartirdoplenoentendimentodocenrioqueenvolveaconstruodeaplicaesmveispara
AndroidnonovoDelphiXE5,odesenvolvedorpodetirarproveitodetodasasvertentesqueesta
abordagemtemaoferecer.Vislumbrandosituaeshipotticas,podemoscitardesdeacriaode
umasimplesaplicaomvelindependente,quepoderserdistribudadeformacomercialem
lojadeaplicativos,passandoporaplicaesqueenvolvamdadosarmazenadosnoprprio
aparelhoemumabaselocale,enfim,casoscorporativos,ondeaaplicaoAndroidconstruda
atuacomoumclientedeumServidordeAplicaoDataSnap.
Porconseguinte,sonotriasagamaopesquesoacrescidasaocontextodoDelphi,
medianteseunovosuporteaodesenvolvimentoAndroid.
Conformejdepraxenolanamentodecadanovaverso,oDelphiXE5acabaporproporcionar
novosdesafiosaosmembrosdesuaextensacomunidade.Portanto,novamentecabeao
desenvolvedortirarproveitodoquehdemaisnovonaferramenta,ampliandoaindamaisseu
lequeprofissional.