Apostila Curso ADVPL OOP

Embed Size (px)

Citation preview

  • 7/24/2019 Apostila Curso ADVPL OOP

    1/48

    ________________________________________________

    PROGRAMAO ADVPL OOP

    1

  • 7/24/2019 Apostila Curso ADVPL OOP

    2/48

    ndice______________________________________________________________________________________________________________

    Introduo Linguagem Orientada a Objetos..............4Conceitos Bsicos da OOP..........................................4

    Classe..................................................................................................................................4

    Objeto..................................................................................................................................4Mensagem...........................................................................................................................5Mtodo................................................................................................................................5

    Mtodo CONSTRUCTOR..............................................................................................5

    Mtodo DESTRUCTOR.................................................................................................5Eventos................................................................................................................................5

    Hean!a..............................................................................................................................."

    En#a$s%lamento.................................................................................................................."

    Criao de Janelas adro OOP...................................!S&nta'e do mtodo Const%#to da #lasse T(&ndo)*..........................................................+,o$&edades dos objetos da #lasse T(&ndo).....................................................................+

    ,&n#&$a&s $o$&edades de est&lo de janela.....................................................................-Tabela de #oes $ado..................................................................................................1/

    Mtodos da #lasse T(&ndo).............................................................................................11

    S&nta'e do mtodo 0#t&vate...........................................................................................11

    E'em$lo de Cd&go 2onte $aa C&a!o de %m Objeto de 3anela.....................................1

    Cai"as de #ilogo no adro OOP.............................$%S&nta'e do mtodo Const%#to da #lasse TD&alog*..........................................................1,o$&edades dos objetos da #lasse T(&ndo)...................................................................1

    ,&n#&$a&s $o$&edades de est&lo de #a&'as de d&6logo.................................................14

    Tabela de #oes $ado..................................................................................................14Mtodos da #lasse TD&alog...............................................................................................15

    S&nta'e do mtodo 0#t&vate..........................................................................................15E'em$lo de Cd&go 2onte $aa C&a!o de Objeto de 3anela...........................................1"

    Objetos de Controle.................................................$!7ot8es................................................................................................................................19

    S&nta'e da Classe T7UTTON.......................................................................................19

    S&nta'e da Classe S7UTTON.......................................................................................1+

    E'em$los de Cd&go 2onte $aa C&a!o de %m Objetos de bot8es.................................1-Cd&go 2onte e'em$lo $aa #&a!o de bot8es s&m$les................................................1-

    Cd&go :onte e'em$lo $aa #&a!o de bot8es #om b&tma$........................................../

    Rt%los de Te'to................................................................................................................S&nta'e da Classe TS0;................................................................................................

    Sele!o de :ontes $aa o objeto de t%lo de te'to........................................................S&nta'e da #lasse T2ont.............................................................................................

    E'em$lo de #&a!o de %m objeto de :onte...............................................................Cd&go :onte e'em$lo $aa #&a!o de t%los..............................................................4

    Ca&'as de Te'to.................................................................................................................5

    S&nta'e da Classe T

  • 7/24/2019 Apostila Curso ADVPL OOP

    3/48

    Cd&go :onte e'em$lo $aa #&a!o de C=e#>7o'es.....................................................+

    Combo7o'........................................................................................................................-S&nta'e da Classe TCombo7o'.....................................................................................-

    Cd&go :onte e'em$lo $aa #&a!o de Combo7o'es.................................................../

    ?&st7o'..............................................................................................................................1

    S&nta'e da Classe T?&st7o'..........................................................................................Cd&go :onte e'em$lo $aa #&a!o de ?&st7o'es.........................................................

    Rad&o 7%tton.....................................................................................................................

    S&nta'e da Classe TRadMen%.......................................................................................4Cd&go :onte e'em$lo $aa #&a!o de Rad&o 7%tton...................................................5

    2oldes..............................................................................................................................."

    S&nta'e da Classe T2olde............................................................................................."Mtodos &m$otantes da #lasse T2olde........................................................................"

    Cd&go :onte e'em$lo $aa #&a!o de m@lt&$los 2oldes #om v6&os objetos dento. .9

    7o)se...............................................................................................................................+

    S&nta'e da Classe T(7o)se.......................................................................................+Cd&go :onte e'em$lo $aa #&a!o de bo)se #om$leto.............................................-

    Criao de janelas mestre&detal'e OOP.....................4$Modelo ...........................................................................................................................41

    S&nta'e da #lasse MSM:lo)................................................................5-

    ,onto de entada #=amado na #on:&ma!o do #adasto de $od%tos............................5-

    Rot&na de tatamento do etono do )o>:lo).............................................................."/Rot&na de tatamento do T&meo%t do )o>:lo)............................................................"1

    Cd&go :onte HTM? %t&l&ado no e'em$lo de at%al&a!o de $e!os $elo )o>:lo). ."1

  • 7/24/2019 Apostila Curso ADVPL OOP

    4/48

    Introduo Linguagem Orientada a Objetos

    A programao orientada objetos uma modalidade dedesenvolvimento de software que difere muito da conhecida linguagemprocedural que usamos no dia-a-dia.

    Ela apresenta uma estratgia diferenciada de organiar! planejar!escrever! atualiar e faer manuteno do software.As linguagens de alto n"vel representam uma cone#o inteligente entreo programador e o computador. $ua evoluo paralela s tcnicas emtodos do desenvolvimento do software! sendo inspirada pelo anseiode criar componentes de softwares robustos e reutili%veis que reduemos ciclos e o tempo da produo do software. Esta diminuio no tempode produo ainda mais relevante quando uma equipe deprogramadores est% trabalhando em um projeto de software.A hist&ria das linguagens de programao re'ete a evoluo delinguagens estruturadas e destas para as orientadas ao objeto. Aslinguagens estruturadas so linguagens procedurais! onde um programa particionado em um conjunto de procedimentos e fun(es. Aseq)*ncia de rotinas descreve como os dados so manipulados.Especi+camente! o programador controla a interao entre o c&digo e osdados. , foco principal das linguagens procedurais a rotina! enquantofoco secund%rio so os dados que esto sendo manipulados.

    Conceitos Bsicos da OOP

    Classema classe detalha os campos de dados de um objeto e os mtodosque atuam sobre os dados.A classe o n"vel macro do objeto! de onde so herdados suascaracter"sticas e mtodos. odemos dier que todo objeto descende deuma classe.

    Objetom objeto um membro de uma classe! tendo em si todas ascaracter"sticas da classe na qual foi herdado. $uas propriedades soprotegidas por conceitos de encapsulamento.

    ensagemma mensagem uma solicitao enviada a um objeto para chamarum de seus mtodos. /ambm podem ser acionadas por algum evento.

    4

  • 7/24/2019 Apostila Curso ADVPL OOP

    5/48

    /todom mtodo o procedimento ou funo chamado para atuar numobjeto. m mtodo de+ne como uma mensagem deve ser e#ecutada.A ,, 0rogramao ,rientada a ,bjetos1 permite uma abordagem maissimples para a utiliao de dados usando objetos que respondem a

    mensagens. Esta abordagem demonstra uma noo de que objetos emum programa so similares a alunos em uma sala de aula 2 voc* passaum e#erc"cio ou um trabalho para um aluno ou um grupo de alunos 0oobjeto! neste caso1 solicitando que lhe seja apresentado uma soluopara um determinado problema. $upondo-se que o trabalho sejapassado ao aluno ou grupo certo! ele responder% usando sua e#peri*nciae recursos. , mtodo pelo qual o trabalho e#ecutado depende doobjeto receptor 0aluno1. ,s detalhes da resposta so transparentes aoprofessor 0emissor da mensagem1. /odo objeto por regra possui ummtodo 3,4$/53/,5 e um mtodo 6E$/53/,5.

    /todo CO012,3C2O,7 o respons%vel por ativar o objeto durante a e#ecuo de uma rotina. Essemtodo aloca o objeto na mem&ria e o torna dispon"vel para uso. , objeto ser%carregado com todas suas propriedades e particularidades. $omente ap&s omtodo 3,4$/53/,5 ser disparado que poderemos em seguida acertarsuas propriedades e eventos. 4o A689! o mtodo 3,4$/53/,5 chamadopela cl%usula 4ew01! como veremos nos e#erc"cios a seguir.

    /todo #12,3C2O,Ap&s a sua utiliao! cada objeto deve ser removido da mem&ria! para que nodecorrer da aplicao a performance no seja degradada. ara isso! utiliaremoso mtodo 6E$/53/,5. 4o A689! os mtodos a serem utiliados so End01 ou6estro:01.

    5entosEvento nada mais do que uma ao acontecendo em um determinadomomento no objeto. 4a programao ,,! um evento pode dispararoutras rotinas e modi+car o processamento. ;oi criado para interagircom as a(es do usu%rio determinando o processamento de formainteligente. 8amos imaginar uma tela de entrada de dados. odemos terv%rios eventos relacionados ao usu%rio que a estiver operando! comopor e#emplo! o clique de um mouse! o movimento do cursor do mousesobre algum campo! a seleo de uma determinada tecla! entre outros.

    6ependendo da ao! determinamos o que ser% e#ecutado e haver%interao com o usu%rio.

    6eranama outra caracter"stica da ,, a herana! um recurso que produum grande efeito! que lhe permite criar subclasses. 3ada subclasserecebe as caracter"sticas de sua classe-me 0da mesma forma que umacriana tra consigo caracter"sticas peculiares de seus pais1. ma

    5

  • 7/24/2019 Apostila Curso ADVPL OOP

    6/48

    subclasse acrescenta novos atributos s classes herdadas e podetambm substituir qualquer atributo herdado.

    ncasulamentoma das principais caracter"sticas da ,, o encapsulamento! pois

    evita que o programador no precise acessar diretamente os campos dedados de um objeto. ara isto necess%rio criar mtodos que sero osrespons%veis pelo tratamento de dados.Encapsulamento na verdade unir numa os objetos possuem umapropriedade que identi+ca quem o objeto pai. Ao de+nir essapropriedade! o objeto +lho ser% sempre criado dentro do objeto pai naqual ter% relao direta! tornando-o independente dos demais objetosque comp(em o projeto.Essa capacidade de agrupar objetos dentro de outros objetos chamadode parent. 4o A689! a propriedade que de+ne o parentdo objeto ooParent.

    "

  • 7/24/2019 Apostila Curso ADVPL OOP

    7/48

    A classe que utiliaremos para criao de janelas no A689 aTWINDOW. Essa classe ser% respons%vel pela gerao da cai#aretangular com todas as caracter"sticas de uma tela padro! onde dentrodela devero ser inseridos novos objetos de acordo com a necessidade.A classe TWINDOW possui grande 'e#ibilidade em seu

    desenvolvimento! permitindo a criao de janelas em tamanhosde+nidos! t"tulo! bot(es de ma#imiar e minimiar! cores de fundo! almde uma grande funcionalidade para desenvolvedores que utiliam aprogramao estruturada! a possibilidade de criar janelas baseadas empi#el na mesma mtrica das janelas em modo te#to.

    ?mportante> ara utiliar essa classe! necess%ria a utiliao de umainclude especial chamada fwmsgs.h! que no est% inclusa no pacoteoriginal do A689! mas facilmente encontrada na internet em sitesrelacionados ao 3lipper.

    1inta"e do m/todo Constructor da classe 2-indo78

    := TWindow():New(,,,,,,,,&-ppe!(), /,/,/,/,)

    Proriedades dos objetos da classe 2-indo7

    nTop 9inha inicial.nLeft 3oluna inicial.nBottom 9inha +nal.nRght 3oluna +nal.cTtle /"tulo da janela.nst!le Estilo da janela. Atravs dessa propriedade podemos

    personaliar suas funcionalidades de acordo com anecessidade.

    9

  • 7/24/2019 Apostila Curso ADVPL OOP

    8/48

    @$B,56E5@$3A/?,4@$3C?96@$39?3C?965E4@$39?$?B9?4D$@$6?$AB9E6

    @$69D;5AE@$EFA33E/;?9E$@$EF39?E4/E6DE@$EF3,4/EF/CE9@$EF69D,6A9;5AE@$EF9E;/$35,99BA5@$EF6?3C?96@$EF4,A5E4/4,/?;G@$EF5?DC/@$EF5/95EA6?4D

    @$EF/5A4$A5E4/@$EF/,,9@?46,@@$EF/,,$/@$EF@?46,@E6DE@$C$35,99@$AF??HE

    @$AF??HEB,F@$?4??HE@$?4??HEB,F@$,8E59AE6@$,@$$G$E4@$/C?3I;5AE@$8?$?B9E@$8$35,99

    o"en# 4o utiliado.oBr#sh 4o utiliado.oIcon 4o utiliado.oParent ?denti+ca qual o objeto pai. $e no declarado!

    assume a janela principal do sistema.$%croll 4o utiliado.h%croll 4o utiliado.n&lr'ore 4o utiliado.

    n&lrBac($eleciona a cor de fundo da janela. 6efault>branca.

    ?o) Antens&tB #olos

    395B9A3I395B9E395D5EE43953GA43955E6395ADE4/A395B5,@4395CD5AG

    3959?DC/D5AG395CD5AG

    H&g= Antens&tB Colos

    395D5AG395CB9E395CD5EE4395C3GA4395C5E6395CADE4/A395GE99,@395@C?/E

    orsor 4o utiliado.Border 4o utiliado.%!s"en#).T.*.'.+

    ./. e#ibe boto s:smenu! .;. inibe.

    &apton ).T.*.'.+ ./. e#ibe titulo da janela! .;. inibe.Icon,e 4o utiliado."a-m,e ./. e#ibe boto ma#imie! .;. inibe.

    +

  • 7/24/2019 Apostila Curso ADVPL OOP

    9/48

    ).T.*.'.+P-el ).T.*.'.+ 6e+ne tipo de posicionamento e mtrica da janela!

    ./. em pi#els! .;.! modo te#to 0JKLMN1.

    /todos da classe 2-indo7

    ct$ate rincipal mtodo da classe /@indow! pois! essemtodo que vai ativar a janela na tela. 6eveobrigatoriamente ser chamado sempre que omtodo construtor de uma janela for acionado.Este mtodo tambm possui recursos demonitoramento de eventos. Ouando os eventosforem declarados dentro deste mtodo! no ser%mais necess%rio declara-los de forma estrutural.

    1inta"e do m/todo 9cti5ate

    :Activate( [ Upper() ],:bLClicked [ : !" #n$ow,nCol,n%e&'las# !* ],:b$Clicked [ : !" #n$ow,nCol,n%e&'las# !* ],:b+oved [ : ],:b-ainted [ : !" # h.C, c-/ # !* ],

    :b%e&.own [ : !" # n%e& # !* ],:b0nit [ : !" # /el1 # !* ],[], [],[], [],[!*],:bL3ttonUp [ :

  • 7/24/2019 Apostila Curso ADVPL OOP

    10/48

    b0e!Do1n Bloco de c&digo disparado quando pressionadauma tecla. Equivale cl%usula inPe:0K1.21': oWnd:.3ey4own := 5 6 n3ey,n+l%g" 6 Mi+ncion (n3ey) 7

    l'oc#sed ./. est% com o foco! .;. no est% com foco.2nd todo de +naliao do objeto.Destro! todo destructor do objeto.%et'oc#s ;ora a obteno do foco.Refresh E#ecuta a atualiao dos controles da tela.

    "emlo de C(digo :onte ara Criao de um Objeto de Janela

    8inclde 9p!othe"'ch9;??????????@??????????A???????@????????????????????A??????@?????????????C$!og!%m% D EBFGFHN CHto! D E!g%non T# *on"lto!i% C 4%t% D IJKK C??????????O??????????P???????Q????????????????????P??????Q?????????????C4e"c' D 21emplo de c!i%o de m o.Ueto de U%nel% "imple"' CC D C??????????O????????????????????????????????????????????????????????????C-"o D H$1 CV??????????Q????????????????????????????????????????????????????????????XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX;-"e! +nction EBFGFHN()

    Loc%l oWnd E.Ueto de U%nel%Loc%l GnStyle := WSG*H$T#EN Y WSGSZSM2N- Y WSGM#N#M#[2BE\ 2"tilo d% U%nel%

    oWnd := TWindow():New(IK,IK,]K,K,921emplo de U%nel%9,GnStyle,,,,,'T','T',,,,,^'T','T','T','T','+')

    oWnd:Hcti%te() Hti% % U%nel%oWnd:4e"t!oy()

    Ret!n

    Cai"as de #ilogo no adro OOPAs cai#as de di%logo so um tipo peculiar de janela que no possuembot(es de ma#imiar e minimiar. $o criadas apenas para estabelecerdi%logo entre o programa e o usu%rio! oferecendo uma gama decontroles 0objetos1 que tornam a cai#a de di%logo um recurso poderosopara entrada e sa"da de dados.3ai#as de di%logo podem trabalhar em dois modos! modale no-modal.As janelas modais tem objetivo no permitir que o usu%rio mude paraoutra janela enquanto no encerrar a rotina atual. Esse recurso muitointeressante quando se trata de uma aplicao com diversas cai#as de

    1/

  • 7/24/2019 Apostila Curso ADVPL OOP

    11/48

    di%logo! pois! podemos faer com que o usu%rio as utiliem na seq)*nciacerta do processamento. ara isso! usamos a propriedade oParent!faendo com que dessa forma as cai#as de di%logo +quem dependentessempre da anterior! criando um conceito de cascata. A classe utiliadapara a criao da cai#a de di%logo a TDILO/! derivada da classe

    TWINDOW! sendo assim! as propriedades e mtodos so bem similares.1inta"e do m/todo Constructor da classe 2#ialog8

    = T4i%log():New( , , , ,,, , ,, , , ,)

    Proriedades dos objetos da classe 2-indo7

    nTop 9inha inicial.nLeft 3oluna inicial.nBottom 9inha +nal.nRght 3oluna +nal.cTtle /"tulo da cai#a de di%logo.cResName 4o utiliado.hReso#rces 4o utiliado.3b- 4o utiliado.N%t!le Estilo da janela. Atravs dessa propriedade podemos

    personaliar suas funcionalidades de acordo com a

    necessidade.

    Princiais roriedades de estilo de cai"as de dilogo@$B,56E5@$3A/?,4@$3C?96@$39?3C?965E4@$39?$?B9?4D$@$6?$AB9E6@$69D;5AE@$EFA33E/;?9E$@$EF39?E4/E6DE

    @$EF/5A4$A5E4/@$EF/,,9@?46,@@$EF/,,$/@$EF@?46,@E6DE@$C$35,99@$AF??HE@$AF??HEB,F@$?4??HE@$?4??HEB,F

    @$EF3,4/EF/CE9@$EF69D,6A9;5AE@$EF9E;/$35,99BA5@$EF6?3C?96@$EF4,A5E4/4,/?;G@$EF5?DC/@$EF5/95EA6?4D

    @$,8E59AE6@$,@$$G$E4@$/C?3I;5AE@$8?$?B9E@$8$35,99

    n&lrTe-t 4o utiliado.

    11

  • 7/24/2019 Apostila Curso ADVPL OOP

    12/48

    n&lrBac( $eleciona a cor de fundo da janela. 6efault>branca.

    ?o) Antens&tB #olos

    395B9A3I395B9E395D5EE43953GA43955E6395ADE4/A395B5,@4395CD5AG3959?DC/D5AG395CD5AG

    H&g= Antens&tB Colos

    395D5AG395CB9E395CD5EE4395C3GA4395C5E6395CADE4/A395GE99,@395@C?/E

    oBr#sh 4o utiliado.oWnd arent da cai#a de di%logo.P-el ).T.*.'.+ 6e+ne tipo de posicionamento e mtrica da janela!

    ./. em pi#els! .;.! modo te#to 0JKLMN1.oIco 4o utiliado.o'ont 4o utiliado.n4elpID 4o utiliado.nWdth 4o utiliado.n4eght 4o utiliado.

    /todos da classe 2#ialog

    ct$ate rincipal mtodo da classe /6ialog! pois! essemtodo que vai ativar a cai#a na tela. 6eveobrigatoriamente ser chamado sempre que omtodo construtor de uma janela for acionado.Este mtodo tambm possui recursos demonitoramento de eventos. Ouando os eventosforem declarados dentro deste mtodo! no ser%mais necess%rio declara-los de forma estrutural.

    1inta"e do m/todo 9cti5ate

    :Activate(:bLClicked[:"#n$ow,nCol,n'las#*],

    :b+oved [ :

  • 7/24/2019 Apostila Curso ADVPL OOP

    13/48

    b3ald Bloco de c&digo para validar a sa"da da janela.bInt Bloco de c&digo para validar a inicialiao da

    janela.bWhen Bloco de c&digo para validar a inicialiao da

    janela antes de ser desenhada na tela.

    b/ot'oc#s Bloco de c&digo disparado quando a janela pega ofoco para si. Equivale cl%usula when.bLost'oc#s Bloco de c&digo disparado quando a janela perde o

    foco. Equivale cl%usula valid.b0e!Do1n Bloco de c&digo disparado quando pressionada

    uma tecla. Equivale cl%usula inPe:0K1.21': oWnd:.3ey4own := 5 6 n3ey,n+l%g" 6 Mi+ncion (n3ey) 7

    l'oc#sed ./. est% com o foco! .;. no est% com foco.2nd todo de +naliao do objeto.Destro! todo destructor do objeto.%et'oc#s ;ora a obteno do foco.

    Refresh E#ecuta a atualiao dos controles da tela.

    "emlo de C(digo :onte ara Criao de Objeto de Janela

    8inclde 9p!othe"'ch9;??????????@??????????A???????@????????????????????????A??????@?????????????

    C$!og!%m% D EBFG4L` CHto! D E!g%non T# *on"lto!i% C 4%t% D IJKK C??????????O??????????P???????Q????????????????????????P??????Q?????????????C4e"c' D 21emplo de c!i%o de m o.Ueto de dialogo "imple"' CC D C??????????O????????????????????????????????????????????????????????????????C-"o D H$1 CV??????????Q????????????????????????????????????????????????????????????????XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX;-"e! +nction EBFG4L`()

    Loc%l o4lg E.Ueto de 4ialogo

    o4lg := T4i%log():New(IK,IK,JKK,KK,9Te"te de 4ialogo9,,,,,,,,,'T',,,,,)o4lg:l*ente!ed := 'T'

    o4lg:Hcti%te(,,,,,'+')

    Ret!n

    Objetos de Controle

    A grande +nalidade da criao das janelas e cai#as de di%logo ainterao com os usu%rios durante o processamento de suas rotinas.ara isso devem ser utiliados objetos de controle como bot(es! cai#as

    1

  • 7/24/2019 Apostila Curso ADVPL OOP

    14/48

    de te#to! radio button! chePbo# entre outros. Abai#o esto descritos osobjetos necess%rios para criao de janelas personaliadas para diversas+nalidades. $empre que utiliarmos os objetos de controle! no podemosesquecer de informar a propriedade oParent de cada um! apontandopara a janela na qual o objeto ir% pertencer.

    Bot;esBot(es so utiliados para dispararem eventos e rotinas dentro de umajanela. ,A689 possui dois tipos de bot(es! derivados da classeTB5TTON0Boto simples1 e %B5TTON0boto estilo speed button! combitmap1.

    1inta"e da Classe 2B322O0

    & := TBtton():New( , , , ,^, , , , , ,^

    , , ,)

    nTop 9inha inicial.nLeft 3oluna inicial.

    14

  • 7/24/2019 Apostila Curso ADVPL OOP

    15/48

    nT!pe /e#to do boto.cton Bloco de c&digo com a rotina a ser disparada.oWnd Qanela parent."ode 4o utiliado.c"sg ensagem estilo Cint com a descrio do boto.

    5pdate 4o utiliado.When Bloco de c&digo que valida a e#ecuo da ao doboto! antes de e#ecutar.

    "emlos de C(digo :onte ara Criao de um Objetos debot;es

    C(digo :onte e"emlo ara criao de bot;es simles.

    8inclde 9p!othe"'ch9;??????????@??????????A???????@????????????????????????A??????@?????????????C$!og!%m% D EBFGBTN CHto! D E!g%non T# *on"lto!i% C 4%t% D IJKK C??????????O??????????P???????Q????????????????????????P??????Q?????????????C4e"c' D 21emplo de c!i%o de m o.Ueto de dialogo "imple", com .ote"'CC D C??????????O????????????????????????????????????????????????????????????????C-"o D H$1 CV??????????Q????????????????????????????????????????????????????????????????XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX;-"e! +nction EBFGBTN()

    Loc%l Go4lg E.Ueto de 4ialogoLoc%l GoBtnI E.Ueto de BotoLoc%l GoBtn] E.Ueto de Boto

    Go4lg := T4i%log():New(IK,IK,JKK,KK,9Te"te de 4ialogo9,,,,,,,,,'T',,,,,)Go4lg:l*ente!ed := 'T'

    21i.e .ote"GoBtnI := TBtton():New(IJK,IK,9Boto I9,Go4lg,566 MS`#nfo(9Te"te de.oto9,9Te"te9)7,JK,I],,,'T','T',,9Te"te9,,,,)GoBtn] := TBtton():New(IJK,]IK,9+ech%!9,Go4lg,566 Go4lg:2nd()7,JK,I],,,'T','T',,9+ech%!9,,,,)

    Go4lg:Hcti%te()

    Ret!n

    E#emplo de criao de bot(es simples.

    15

  • 7/24/2019 Apostila Curso ADVPL OOP

    16/48

    C(digo

  • 7/24/2019 Apostila Curso ADVPL OOP

    17/48

    GoBtnI := SBtton():New(KK,KK,I,566 MS`#nfo(9Tipo I9,9#nfo!m%o9)7,Go4lg,,9Tipo I9)GoBtnI := SBtton():New(KK,KK,I,566 MS`#nfo(9Tipo I9,9#nfo!m%o9)7,Go4lg,,9Tipo I9)GoBtnI := SBtton():New(IKK,KK,I,566 MS`#nfo(9Tipo I9,9#nfo!m%o9)7,Go4lg,,9Tipo I9)GoBtnI := SBtton():New(I]K,KK,I,566 MS`#nfo(9Tipo I9,9#nfo!m%o9)7,Go4lg,,9Tipo I9)GoBtnI := SBtton():New(K]K,IKK,]K,566 MS`#nfo(9Tipo I9,9#nfo!m%o9)7,Go4lg,,9Tipo I9)GoBtn]K := SBtton():New(KK,IKK,]I,566 MS`#nfo(9Tipo ]K9,9#nfo!m%o9)7,Go4lg,,9Tipo ]K9)GoBtn]I := SBtton():New(KK,IKK,]],566 MS`#nfo(9Tipo ]I9,9#nfo!m%o9)7,Go4lg,,9Tipo ]I9)GoBtn]] := SBtton():New(KK,IKK,]J,566 MS`#nfo(9Tipo ]]9,9#nfo!m%o9)7,Go4lg,,9Tipo ]]9)

    Go4lg:Hcti%te()

    Ret!n

    /ipos v%lidos de bot(es com bitmap

    ,(tulos de 2e"to5&tulos so muito importantes para a de+nio de campos na tela! bemcomo e#ibio de te#to livre. A 3lasse respons%vel pela criao der&tulos a T%6.

    1inta"e da Classe 219=

    19

  • 7/24/2019 Apostila Curso ADVPL OOP

    18/48

    & := TS%y():New( , , ,&, &,^, , , , , ,, , )

    nRo1 9inha inicial.n&ol 9inha ;inal.

    cTe-t /e#to a ser e#ibido.oWnd Qanela parent.cPct icture do te#to.o'ont ,bjeto para selecionar a fonte da janela.l&enter 3entralia o te#to no espao do objeto.lRght Alinha direita 0usado para n

  • 7/24/2019 Apostila Curso ADVPL OOP

    19/48

    ??????????@??????????A???????@????????????????????????A??????@?????????????C$!og!%m% D EBFGSHZ CHto! D E!g%non T# *on"lto!i% C 4%t% D IJKK C??????????O??????????P???????Q????????????????????????P??????Q?????????????C4e"c' D 21emplo de c!i%o de te1to li!e n% U%nel%' CC D C??????????O????????????????????????????????????????????????????????????????C-"o D H$1 CV??????????Q????????????????????????????????????????????????????????????????XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX;-"e! +nction EBFGSHZ()

    Loc%l Go4lg E.Ueto de 4ialogoLoc%l GoBtnI, GoBtn] E.Ueto" de Bote"Loc%l GoS%y E.Ueto de !tlo

    Go4lg := T4i%log():New(IK,IK,JKK,KK,9Te"te de 4ialogo9,,,,,,,,,'T',,,,,)Go4lg:l*ente!ed := 'T'

    21i.e todo" tipo" alido" de .ote"GoBtnI := SBtton():New(IJK,IK,KI,566 Go4lg:2nd()7,Go4lg,,9Tipo I9)GoBtn] := SBtton():New(IJK,]IK,K],566 Go4lg:2nd()7,Go4lg,,9Tipo ]9)

    *!i% o.Ueto de fonteGo+ont := T+ont():New(9H!i%l9,K,I],,'T',,,,'T')

    21i.e o o.Ueto de !tloGoS%y := TS%y():New(K]K,KIK,566921emplo de te1to li!e'''97,Go4lg,9/9,Go+ont,'T',,,'T',,,]KK,]K)

    Go4lg:Hcti%te()

    Ret!n

    E#emplo de apresentao de mensagem de te#to em cai#as de di%logo

    1-

  • 7/24/2019 Apostila Curso ADVPL OOP

    20/48

    Cai"as de 2e"to3ai#as de te#to so objetos importantes para entrada de dados. Atravsdesse objeto pode-se editar valores de campos para serem processados.

    1inta"e da Classe 2>2

    & := T`et():New( , , .S2T`2T(),&,^, , , ,, ,^, ,, , ,^, ,&j56n3ey, n+l%g", Self6 j7,^,)

    nRo1 9inha inicial.n&ol 3oluna inicial.b%et/et 8ari%vel de mem&ria do campo.oWnd Qanela parent.

    nWdth /amanho do campo.n4eght Altura do campo.cPct icture do campo.3ald Bloco de c&digo com funo de validao do

    campo.n&lr'ore 4o utiliado.n&lrBac( 6e+ne a cor de fundo do objeto.o'ont ,bjeto que de+ne a fonte utiliada no campo.Desgn 4o utiliado.orsor 4o utiliado.P-el ).T.*.'.+ 6e+ne tipo de posicionamento e mtrica da

    janela! ./. em pi#els! .;.! modo te#to 0JKLMN1.c"sg ensagem tipo Cint do campo.5pdate 4o utiliado.When Bloco de c&digo para validao na entrada do

    campo.l&enter).T.*.'.+

    3entralia o te#to na cai#a de te#to.

    lRght ).T.*.'.+ Alinha dados direita.n0e! 4o utiliado.n'lags 4o utiliado.

    &hange Bloco de c&digo para validar quando alterado ocampo.lReadOnl! 6ei#a o campo somente para leitura.Pass ).T.*.'.+ 3onverte o te#to para o formato password 0SSS1.

    C(digo

  • 7/24/2019 Apostila Curso ADVPL OOP

    21/48

    ??????????@??????????A???????@????????????????????????A??????@?????????????C$!og!%m% D EBFG`2T CHto! D E!g%non T# *on"lto!i% C 4%t% D IJKK C??????????O??????????P???????Q????????????????????????P??????Q?????????????C4e"c' D 21emplo de c!i%o de c%i1%" de te1to e !tlo"' CC D C??????????O????????????????????????????????????????????????????????????????C-"o D H$1 CV??????????Q????????????????????????????????????????????????????????????????XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX;-"e! +nction EBFG`2T()

    Loc%l Go4lg E.Ueto de 4ialogoLoc%l GoBtnI, GoBtn] E.Ueto" de Bote"Loc%l GoS%yI, GoS%y], GoS%yJ E.Ueto de !tloLoc%l Go`etI, Go`et], Go`etJ E.Ueto de c%i1% de te1toLoc%l Gcb%!I := Sp%ce(K) b%!iael tili0%d% no `etLoc%l Gcb%!] := 4%te() b%!iael tili0%d% no `etLoc%l Gcb%!J := K b%!iael tili0%d% no et

    Go4lg := T4i%log():New(IK,IK,JKK,KK,9Te"te de 4ialogo9,,,,,,,,,'T',,,,,)Go4lg:l*ente!ed := 'T'21i.e todo" tipo" alido" de .ote"GoBtnI := SBtton():New(IJK,IK,KI,566 Go4lg:2nd()7,Go4lg,,9Tipo I9)

    GoBtn] := SBtton():New(IJK,]IK,K],566 Go4lg:2nd()7,Go4lg,,9Tipo ]9)21i.e o o.Ueto de !tloGoS%yI := TS%y():New(KIK,KIK,5669*%i1% de Te1to97,Go4lg,,,,,,'T',,,K,]K)GoS%y] := TS%y():New(KK,KIK,5669*%i1% de 4%t%97,Go4lg,,,,,,'T',,,K,]K)GoS%yJ := TS%y():New(KK,KIK,5669*%i1% de Nkme!o97,Go4lg,,,,,,'T',,,K,]K)21i.e %" c%i1%" de te1toGo`etI := T`et():New(K]K,KIK,.Set`et(Gcb%!I),Go4lg,K,I],9/9,,,,,,,'T')Go`et] := T`et():New(KK,KIK,.Set`et(Gcb%!]),Go4lg,K,I],,,,,,,,'T')Go`etJ := T`et():New(KK,KIK,.Set`et(Gcb%!J),Go4lg,K,I],92 ,'9,,,,,,,'T')

    Go4lg:Hcti%te()

    Ret!n

    E#emplo de variao de cai#as de te#to com formatos de dadosdiferentes

    C'ec?Bo"

    1

  • 7/24/2019 Apostila Curso ADVPL OOP

    22/48

    A classe T&42&0BO7criar% uma cai#a de TmarcaLdesmarcaU na janela.$eu funcionamento consiste em armaenar em uma vari%vel l&gica aseleo do usu%rio! sendo ./. para marcado e .;. para desmarcado.

    1inta"e da Classe 2C'ec?Bo"

    & := T*hecBo1():New( , , ,^&.S2T`2T(), , , , ,^&, , , , ,^, ,

  • 7/24/2019 Apostila Curso ADVPL OOP

    23/48

    Loc%l GoBtnI, GoBtn] E.Ueto" de Bote"Loc%l Go*.1 E.Ueto *hecBo1Loc%l Glb%! b%!iael p%!% %!m%0en%! "eleo do "a!io

    Go4lg := T4i%log():New(IK,IK,JKK,KK,9Te"te de 4ialogo9,,,,,,,,,'T',,,,,)Go4lg:l*ente!ed := 'T'

    21i.e todo" tipo" alido" de .ote"GoBtnI := SBtton():New(IJK,IK,KI,566 Go4lg:2nd()7,Go4lg,,9Tipo I9)GoBtn] := SBtton():New(IJK,]IK,K],566 Go4lg:2nd()7,Go4lg,,9Tipo ]9)21i.e o o.Ueto chec.o1o*.1 := T*hecBo1():New(IK,IK,921emplo de *hec.o19, .Set`et(Glb%!),Go4lg,K,I])

    Go4lg:Hcti%te()

    Ret!n

    E#emplo de criao de di%logo com checPbo#.

    ComboBo"

    A classe T&O"BOBO7criar% uma cai#a de seleo estilo drop-down najanela. $eu funcionamento consiste em armaenar em uma vari%vel

    caracter a seleo do usu%rio. ,s itens so armaenados em um arra:!que depois passado como propriedade do objeto.

    1inta"e da Classe 2ComboBo"

    & := T*om.oBo1():New( , , .S2T`2T(),^, , )

  • 7/24/2019 Apostila Curso ADVPL OOP

    24/48

    nRo1 9inha inicial.n&ol 3oluna inicial.b%et/et 8ari%vel que conter% o valor selecionado do objeto.aItens Arra: contendo a lista de itens do objeto.nWdth /amanho do objeto.

    n4eght Alturado objeto.oWnd Qanela parent.n4elpID 4o utiliado.&hange Bloco de c&digo disparado com o evento alterao

    no objeto.3ald Bloco de c&digo disparado para validar o objeto.n&lrTe-t 6e+ne a cor do te#to do objeto.n&lrBac( 6e+ne a cor de fundo do objeto.P-el ).T.*.'.+ 6e+ne tipo de posicionamento e mtrica da

    janela! ./. em pi#els! .;.! modo te#to 0JKLMN1.o'ont ,bjeto de seleo de fonte para o te#to do objeto.c"sg ensagem estilo hint do objeto.5pdate 4o utiliado.When Bloco de c&digo para validar a entrada no objeto.

    C(digo

  • 7/24/2019 Apostila Curso ADVPL OOP

    25/48

    Go4lg:Hcti%te()

    Ret!n

    E#emplo de criao de di%logo com 3omboBo#.

    ListBo"

    A classe TLI%TBO7criar% uma cai#a de seleo estilo lista na janela.$eu funcionamento consiste em armaenar em uma vari%vel numricaou caracter a seleo do usu%rio. ,s itens so armaenados em umarra:! que depois passado como propriedade do objeto.

    1inta"e da Classe 2ListBo"

    & := TLi"tBo1():New( , , .S2T`2T(),^

  • 7/24/2019 Apostila Curso ADVPL OOP

    26/48

    n&ol 3oluna inicial.b%et/et 8ari%vel que conter% o valor selecionado do objeto.aLst Arra: contendo a lista de itens do objeto.nWdth /amanho do objeto.n4eght Alturado objeto.

    &hange Bloco de c&digo disparado com o evento alteraono objeto.oWnd Qanela parent.3ald Bloco de c&digo disparado para validar o objeto.n&lr'ore 4o utiliado.n&lrBac( 6e+ne a cor de fundo do objeto.P-el ).T.*.'.+ 6e+ne tipo de posicionamento e mtrica da

    janela! ./. em pi#els! .;.! modo te#to 0JKLMN1.Desgn 4o utiliado.Dbl&lc( Bloco de c&digo disparado no evento de duplo

    clique.o'ont ,bjeto de seleo de fonte para o te#to do objeto.c"sg ensagem estilo hint do objeto.5pdate 4o utiliado.When Bloco de c&digo para validar a entrada no objeto.

    C(digo

  • 7/24/2019 Apostila Curso ADVPL OOP

    27/48

    21i.e o o.Ueto Li"tBo1oL.1 := TLi"tBo1():New(IK,IK,.Set`et(Gcb%!),G%b%!,IKK,K,,Go4lg,,,,'T')

    Go4lg:Hcti%te()

    Ret!n

    E#emplo de criao de di%logo com 9istBo#

    ,adio Button

    A classe TRD"2N5criar% um campo de seleo de op(es na janelaestilo 5adio Button. $eu funcionamento consiste em armaenar em umavari%vel numrica a seleo do usu%rio. ,s itens so armaenados emum arra:! que depois passado como propriedade do objeto.

    1inta"e da Classe 2,adenu

    & := TR%dMen():New( , , 5, , ,, ,^, , ,)

    nRo1 9inha inicial.n&ol 3oluna inicial.aItens Arra: contendo a lista de itens do objeto.b%et/et 8ari%vel que conter% o valor selecionado do objeto.oWnd Qanela parent.4elpId 4o utiliado.&hange Bloco de c&digo disparado com o evento alterao

    no objeto.n&lr'ore 4o utiliado.n&lrBac( 6e+ne a cor de fundo do objeto.c"sg ensagem estilo hint do objeto.

    9

  • 7/24/2019 Apostila Curso ADVPL OOP

    28/48

    5pdate 4o utiliado.When Bloco de c&digo para validar a entrada no objeto.nWdth /amanho do objeto.n4eght Alturado objeto.3ald Bloco de c&digo disparado para validar o objeto.

    Desgn 4o utiliado.Loo(8D 4o utiliado.P-el ).T.*.'.+ 6e+ne tipo de posicionamento e mtrica da

    janela! ./. em pi#els! .;.! modo te#to 0JKLMN1.

    C(digo

  • 7/24/2019 Apostila Curso ADVPL OOP

    29/48

    :olders

    ma importante classe a ser utiliada nas aplica(es a classe /folder.Essa classe nos permite criar v%rias instVncias de uma aplicaodividindo-as em v%rias pastas diferentes. 7 muito

  • 7/24/2019 Apostila Curso ADVPL OOP

    30/48

    /todos imortantes da classe 2:older

    o'older:%etOpton)n+

    ;ora a seleo da pasta representada por n!onde n a sequencia n

  • 7/24/2019 Apostila Curso ADVPL OOP

    31/48

    Bro7se

    Browses so ferramentas importantes para a apresentao de dados. ,A689 disponibilia uma classe poderosa para criao de ferramentas debrowse! a classe TWBROW%2. Essa ferramenta ser% constantementeusada no dia-a-dia do desenvolvedor A689! devido a sua gama derecursos. Alm de apresentar informa(es de campos no formatotradicional! essa classe possui recursos de apresentao de bitmaps em

    suas colunas. 3om isso podemos desenvolver colunas com marcadorescoloridos e marcadores tipo checPbo#! comumente conhecidos comomarPbrowse.

    1inta"e da Classe 2-Bro7se

    & := TWB!ow"e():New( , , , ,^&j566 j5j7, &j5, , , ,^, ,, )

    nRo1 9inha inicial.n&ol 3oluna inicial.nWdth /amanho do objeto.n4eght Altura do objeto.'lds 5egistros do browse.a4eaders Arra: contendo o nome dos campos para e#ibio.a&ol%,es Arra: contendo o tamanho de cada campo.oDlg Qanela parent.

    1

  • 7/24/2019 Apostila Curso ADVPL OOP

    32/48

    c'eld 4o utiliado.3al#e9 4o utiliado.3al#e= 4o utiliado.&hange Bloco de c&digo disparado na alterao do objeto.bLDbl&lc( Bloco de c&digo disparado no duplo clique do

    mouse.bR&lc( Bloco de c&digo disparado no clique do botodireito.

    o'ont 6e+ne a fonte padro do objeto.orsor 4o utiliado.n&lr'ore 4o utiliado.n&lrBac( 6e+ne a cor de fundo do objeto.c"sg E#ibe mensagem estilo hint no objeto.5pdate 4o utiliado.clas 4o utiliado.P-el ).T.*.'.+ 6e+ne tipo de posicionamento e mtrica da

    janela! ./. em pi#els! .;.! modo te#to 0JKLMN1.When Bloco de c&digo disparado na entrada do objeto.Desgn 4o utiliado.3ald Bloco de c&digo disparado na validao do objeto.

    C(digo

  • 7/24/2019 Apostila Curso ADVPL OOP

    33/48

    GoB!w:SetH!!%y(G%+ield")GoB!w:.L4.l*lic := 566 G%+ield"&GoB!w:nHT,I := /G%+ield"&GoB!w:nHT,I7GoB!w:.Line := 566 5#f(G%+ield"&GoB!w:nHT,I,GoE,GoNo),G%+ield"&GoB!w:nHT,],^

    G%+ield"&GoB!w:nHT,J77

    Go4lg:Hcti%te()

    Ret!n

    E#emplo de criao de Browse com recursos de marca e legenda

  • 7/24/2019 Apostila Curso ADVPL OOP

    34/48

    Criao de janelas mestre&detal'e OOP

    odelo %

    Qanelas mestre-detalhe so muito importantes para cadastrosenvolvendo duas tabelas relacionadas! normalmente cabealhos e itens., A689 nos proporciona algumas classes de objetos para elaboraode telas comple#as envolvendo tabelas relacionadas. , tutorial a seguirnos mostra como montar uma tela mestre-detalhes passo-a-passo. Asclasses envolvidas so "%"/2T e "%/2TDDO%. A tela constru"da noA689 possui algumas caracter"sticas peculiares. A tela normalmenteapresentar% tr*s se(es b%sicas! a Enchoice! a Det6ados e o rodappara apresentao de resultados. A imagem abai#o demonstrae#atamente o funcionamento dessa tela.

    A janela que tra os itens do cabealho criada pela classe $DE/ e

    os detalhes so montados pela classe $DE/6A6,$. As informa(es daDet6ados so provenientes de dois arra:s! aCeader e a3ols. , aCeadercontm informa(es sobre os campos! como nome para e#ibio!tamanho do campo etc. , a3ols possui os dados a serem e#ibidos. Antesde montar a tela! deve-se criar o a3ols e carrega-lo com as informa(esda tabela. m detalhe a ser considerado que deveremos criar o a3olscom um campo e#tra no +nal! pois! ele armaenar% um valor l&gicoinformando se o registro foi deletado ou no. Essa informao ser% muito

  • 7/24/2019 Apostila Curso ADVPL OOP

    35/48

    1inta"e da classe 1>2

    MSM`2T():N2W( cHli%", nReg, nEpc, & $%!I , & $%!] , & $%!J ,

    & %H*ho , & %$o" , & %*po" , & $%! , & $%! , & $%! ,& $%! , & oWnd , & $%! , & lMemo!i% , & l*oln% , & $%! ,& lSem$%"t%" )

    &las Alias dos dados a serem cadastrados.nReg 4 arVmetro reservado. 4ome dos campos do tipo

    caracter que utiliaro incremento autom%tico. EsteparVmetro deve ser no formato TYZnome doprimeiro campo[YZnome do segundocampo[Y...U.

    #Par? arVmetro reservado.

    #Par@ arVmetro reservado.#ParA arVmetro reservado.oWnd Qanela parent.#Par arVmetro reservado.l"emora ?ndica se ser% usado vari%veis de mem&ria ou os

    campos da tabela para cadastramento dos dados.8alor padro falso.

    l&ol#na ?ndica se a sDet sera apresentada com umobjeto por linha 0uma coluna1. 8alor padro falso.arVmetro reservado.

    #ParC arVmetro reservado.l%emPastas ?ndica se no ser% usado as astas de 3adastro na

    sDet. ;uno e#ecutada para validar a e#clusode uma linha do a3ols.

    5

  • 7/24/2019 Apostila Curso ADVPL OOP

    36/48

    Construindo um c(digo

  • 7/24/2019 Apostila Curso ADVPL OOP

    37/48

    1inta"e da classe 1>2

    MSM`2T():N2W( cHli%", nReg, nEpc, & $%!I , & $%!] , & $%!J ,& %H*ho , & %$o" , & %*po" , & $%! , & $%! , & $%! ,& $%! , & oWnd , & $%! , & lMemo!i% , & l*oln% , & $%! ,& lSem$%"t%" )

    n%#peror 6istancia entre a sDet6ados e o e#tremidadesuperior do objeto que a contm..

    n2s#erda 6istancia entre a sDet6ados e o e#tremidadeesquerda do objeto que a contm.

    nInferor 6istancia entre a sDet6ados e o e#tremidadeesquerda do objeto que a contm.

    nDreta 6istancia entre a sDet6ados e o e#tremidade

    inferior do objeto que a contm.nOpc osio do elemento do vetor a5otina que a

    sDet6ados usar% como referencia.cLnhaO0 ;uno e#ecutada para validar o conte#to da linha

    atual do a3ols.cT#doO( ;uno e#ecutada para validar o conte#to geral da

    sDet6ados 0todo a3ols1.cInPos 4ome dos campos do tipo caracter que utiliaro

    incremento autom%tico. Este parVmetro deve serno formato TYZnome do primeiro campo[YZnomedo segundo campo[Y...U.

    lpagar Cabilita deletar linhas do a3ols. 8alor padro falso.alter 8etor com os campos que podero ser alterados.#Par9 arVmetro reservado.l3a,o Cabilita validao da primeira coluna do a3ols para

    esta no poder estar vaia. 8alor padro falso.n"a- 4

  • 7/24/2019 Apostila Curso ADVPL OOP

    38/48

    ;??????????@??????????A???????@????????????????????????A??????@?????????????C$!og!%m% D EBFGME4J CHto! D E!g%non T# *on"lto!i% C 4%t% D IJKK C??????????O??????????P???????Q????????????????????????P??????Q?????????????C4e"c' D Modelo J EE$' CC D C??????????O????????????????????????????????????????????????????????????????C-"o D H$1 CV??????????Q????????????????????????????????????????????????????????????????XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX;-"e! +nction ME4J2\2*(GcHli%", GnRecNo, GnEpc)

    Loc%l Go4lg E.Ueto de 4ialogoLoc%l GoBtnI, GoBtn] E.Ueto" de Bote"$!i%te nEpcH Reto!no d% 2nchoice B%!'

    Selecion% %!e%d.SelectH!e%(9S[I9) *%.e%lho

    d.SetE!de!(I) +ili%l Y *odigo

    *!i% %" %!i%ei" de memo!i% d% enchoiceRegToMemo!y(GcHli%", #f(GnEpc==J, 'T', '+'))

    *!i% %" c%i1% de dialogo p!incip%lGo4lg := T4i%log():New(IK,IK,KK,KK,9Te"te de 4ialogo9,,,,,,,,,'T',,,,,)Go4lg:l*ente!ed := 'T'Go4lg:.#nit := 2nchoiceB%!(Go4lg, 566 nEpcH:=I, #f(-GME4JT-4E3(), Go4lg:2nd(),^

    nEpcH := K)7, 566 Go4lg:2nd()7)

    *!i% o" c%mpo" d% enchoice'[e!o()Go2nc := M"M`et():New(GcHli%", GnRecno, GnEpc,,,,,5KI],KKK,KK,J7,,],,,, Go4lg)

    *%!!eg% %" m%t!i0e" %_e%de! e %*ol"'MENTH_2H42R(GnEpc)

    Mont% % e"t!t!% d% getd%do"'Go`etI := M"`et4%do"():New(K, KKI, ]IK, J, GnEpc,,,,'T',,,,,,,,,Go4lg)

    Go4lg:Hcti%te()

    Se incli o %lte!o %lgm !egi"t!o, f%0 % g!%%o'#f nEpcH == I '%nd' (GnEpc == J 'o!' GnEpc == 'o!' GnEpc == )

    BeginT!%n()

    HT-HME4J(GnEpc)

    2ndT!%n()

    2l"e

    RollB%cS\()

    2nd#f

    Ret!n

    +

  • 7/24/2019 Apostila Curso ADVPL OOP

    39/48

    A funo ,6\EFE301 cria uma cai#a de di%logo e dentro dela monta omodelo\. 4a inicialiao da janela! chamada no mtodo o6lg>b?nit afuno EnchoiceBar! que ser% respons%vel pela criao dos bot(es de

    con+rmao e cancelamento! alm de realiar a validao do modelo\geral. , segundo parVmetro identi+ca se foi con+rmada a operao dousu%rio e dispara a rotina ,6\/6,I01! cujo retorno dever ser ./.ou .;. dependendo da validao. 3aso .;.! no dei#a encerrar a tela atque o usu%rio corrija os campos errados ou em branco.$ubseq)entemente chamada a classe $DE/! que ir% traer osdados do arquivo de cabealho na tela. Antes de chamar a classe$DE/6A6,$! a rotina ,4/ACEA6E5 e#ecutada para carregar osdados dos vetores aCeader e a3ols.

    ;

    ??????????@???????????A???????@?????????????????????A??????@????????????C$!og!%m% DMENTH_2H42RC Hto! D E!g%non T# C 4%t% D ]K]KKJ C??????????O???????????P???????Q?????????????????????P??????Q????????????C4e"c' D Rotin% p%!% c!i%! %" m%t!i0e" %_e%de! e %*ol" d% `et4%do"' C??????????O?????????????????????????????????????????????????????????????C-"o D H$ CV??????????Q?????????????????????????????????????????????????????????????XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX;St%tic +nction MENTH_2H42R(GnEpc)

    Loc%l Gn-"%do := KLoc%l GcNm := 99

    %_e%de! := 57%*ol" := 57

    Mont% o %_e%de!'

    Gn-"%do := K

    d.SelectH!e%(9S\J9)d.SetE!de!(I)d.See(9S[]9)While /2E+() '%nd' S\J>\JGHR-#bE == 9S[]9

    #f \J-SE(S\J>\JG-SH4E) '%nd'^cNiel >= S\J>\JGN#b2L '%nd'^HllT!im(\JG*HM$E) (9[]G*E4#`E9)

    HH44(%_e%de!, 5T!im(\JT#T-LE()),^

    S\J>\JG*HM$E ,^S\J>\JG$#*T-R2 ,^S\J>\JGTHMHN_E ,^S\J>\JG42*#MHL ,^S\J>\JGbHL#4 ,^S\J>\JG-SH4E ,^S\J>\JGT#$E ,^S\J>\JGHR-#bE ,^S\J>\JG*ENT2\T 7)

    Gn-"%doYY

    2ndif

    d.Sip()

    -

  • 7/24/2019 Apostila Curso ADVPL OOP

    40/48

    2nd4o

    Mont% o %*ol"'

    Epc%o #ncli'

    #f GnEpc == J

    +o! 1 := I to Len(9S[]9)

    Gn-"%do := Len(%_e%de!)

    %*ol" := 5H!!%y(Gn-"%do Y I)7

    %*ol"&I, Gn-"%do Y I := '+'

    +o! y := I to Gn-"%do%*ol"&I, y := *!i%b%!(%_e%de!&y, ], '+')

    Ne1t y

    Ne1t 1

    Mont% o %*ol"'

    bi"%li0%, Hlte!% e 21cli'

    2l"e

    Gn-"%do := Len(%_e%de!)

    d.SelectH!e%(9S[]9)d.See(1+ili%l(9S[]9) Y M>[IG*E4#`E)#f +ond()

    While S[]>[]G*E4#`E == M>[IG*E4#`E '%nd' /2E+()

    HH44(%*ol", H!!%y(Gn-"%do Y I))

    +o! y := I to Gn-"%do

    %*ol"&Len(%*ol"), y := +ield`et(+ield$o"(%_e%de!&y, ]))

    Ne1t

    %*ol"&Len(%*ol"), Gn-"%do Y I := '+'

    d.Sip()

    2nd4o

    Se n%o encont!%! nenhm !eg', %.!e m %*ol" em %0io %pen%" p%!% e1i.i!'2l"e

    n-"%do := Len(%_e%de!)

    %*ol" := 5H!!%y(Gn-"%do Y I)7

    %*ol"&I, Gn-"%do Y I := '+'

    +o! y := I to Gn-"%do

    %*ol"&I, y := *!i%b%!(%_e%de!&y, ], '+')

    Ne1t y

    2nd#f

    2nd#f

    Ret!n

    4/

  • 7/24/2019 Apostila Curso ADVPL OOP

    41/48

    A funo ,4/ACEA6E5 ir% veri+car qual foi a opo selecionada pelousu%rio. 3aso tenha escolhido incluso! abre um a3ols com um registroem branco. 4os demais casos ir% varrer a tabela de itens e ir%

    armaenar em sua matri como se fosse um +ltro. ,s dados podero seralterados dependendo da operao e conseq)entemente o processoinverso dever% ser feito para atualiar a tabela. A rotina respons%vel poressa ao a A/A,6\.

    ;??????????@??????????A???????@????????????????????A??????@?????????????C$!og!%m% D HT-HME4J C Hto! D E!g%non T# C 4%t% D ]K]KKJ C??????????O??????????P???????Q????????????????????P??????Q?????????????C4e"c' D Rotin% p%!% g!%%! o" d%do" d% enchoice e d%" getd%do" do CC D modeloJ' C??????????O????????????????????????????????????????????????????????????C-"o D H$ CV??????????Q????????????????????????????????????????????????????????????XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX;St%tic +nction HT-HME4J(GnEpc)

    Loc%l Gcb%!Loc%l .*%mpo := 56n*$E6 +ield(n*$E)7

    #nici% %lte!%e" no c%.ec%lho'D

    d.SelectH!e%(9S[I9)#f GnEpc == J

    RecLoc(9S[I9, 'T')

    2l"e

    RecLoc(9S[I9, '+')

    2nd#fSe e"tie! inclindo o %lte!%ndo g!%% o c%.ec%lho (S[I)'#f GnEpc == J 'o!' GnEpc ==

    +o! 1 := I to +*ont()

    #f 9+#L#HL9 +ield(1)

    +ield$t(1, 1+ili%l(9S[I9))

    2l"e

    +ield$t(1, M>q(2bHL(.*%mpo, 1)))

    2nd#f

    Ne1t 1

    Se n%o e"tie! inclindo o %lte!%ndo e1cli o c%.ec%lho (S[I)'2l"e

    d.4elete()

    2nd#f

    M"-nloc()

    Se e"tie! %lte!%ndo, %p%g% o" det%lhe" e c!i% no%mente confo!me %*ol"'

    41

  • 7/24/2019 Apostila Curso ADVPL OOP

    42/48

    Se fo! e1l"%o, %pen%" %p%g%'

    #f GnEpc == 'o!' GnEpc ==

    d.SelectH!e%(9S[]9)d.See(1+ili%l(9S[]9) Y S[I>[IG*E4#`E)While S[]>[]G*E4#`E == S[I>[IG*E4#`E

    RecLoc(9S[]9, '+')

    d.4elete()

    M"-nloc()

    d.Sip()

    2nd4o2nd#f

    Se e"tie! inclindo o %lte!%ndo, g!%% o" #ten" d%" `et4%do"'#f GnEpc == J 'o!' GnEpc ==

    +o! y := I to Len(%*ol")

    #f %*ol"&y&Len(%*ol"&y) == '+'

    RecLoc(9S[]9, 'T')

    +ield$t(+ield$o"(9[]G+#L#HL9), 1+ili%l(9S[]9))+ield$t(+ield$o"(9[]G*E4#`E9), M>[IG*E4#`E)

    +o! 0 := I to Len(%_e%de!)

    +ield$t(+ield$o"(%_e%de!&0, ]), %*ol"&y, 0)

    Ne1t 0

    M"-nloc()

    2nd#f

    Ne1t y

    2nd#f

    Ret!n

    or

  • 7/24/2019 Apostila Curso ADVPL OOP

    43/48

    #ncl% %i %" %lid%e" d% tel% modelo J'

    Ret!n('T')

    Criao de relat(rios com )ualidade gr*caClasse 21P,I02,

    A 3lasse /$5?4/E5 inovou a maneira de produir relat&rios com oA689. 4a programao estruturada os relat&rios so impressos emformato te#to! com la:out simples. ?sso pode ser um problema uma veque podem surgir necessidades de implementa(es com qualidadegr%+ca superior! formul%rios com la:out avanado! incluso de imagensetc. ara resolver essa questo! utiliaremos a classe /$5?4/E5.

    1inta"e da Classe 21P,I02,

    & := TMS$!inte!():New()

    Princiais m/todos da classe 21P,I02,

    %tartPage ?nicia uma nova p%gina.%etPortrat Ajusta relat&rio no padro retrato.%etLandscape Ajusta relat&rio no padro paisagem.IsPrnterct$e

    8eri+ca se a impressora est% ativa.

    Pre$e1 E#ibe o gerenciador de impresso e o relat&rio em

    v"deo.Prnt 6ireciona a impresso direto para a impressora.%et#p Abre a cai#a de setup de impressoras.2ndPage Encerra a p%gina.

    Princiais m/todos ara imresso de dados

    1aAE#ibe um te#to no relat&rio.

    & := TMS$!inte!():S%y(nLin, n*ol, cTe1to, o+ont, nT%m)

    nLn 9inha inicial.n&ol 3oluna inicial.cTe-to /e#to a ser impresso.o'ont 6e+ne a fonte do te#to impresso.nTam /amanho do te#to.

    4

  • 7/24/2019 Apostila Curso ADVPL OOP

    44/48

    1aABitmaE#ibe um bitmap no relat&rio.

    & := TMS$!inte!():S%yBitm%p(nLin, n*ol, cBitm%p, nWidth, n_eight)

    nLn 9inha inicial.n&ol 3oluna inicial.cTe-to 4ome do bitmap a ser impresso.nWdth 9argura do bitmap.nlat#ra Altura do Bitmap.

    Bo"

    ?mprime uma cai#a no relat&rio.

    & := TMS$!inte!():Bo1(nLin, n*ol, nWidth, n_eight)

    nLn 9inha inicial.n&ol 3oluna inicial.nWdth 9argura da cai#a.nlat#ra Altura da cai#a.

    Line

    ?mprime uma linha no relat&rio.

    & := TMS$!inte!():Line(nLin, n*ol, nWidth, n_eight)

    nLn 9inha inicial.n&ol 3oluna inicial.nWdth 9argura da cai#a.nlat#ra Altura da cai#a.

    44

  • 7/24/2019 Apostila Curso ADVPL OOP

    45/48

    C(digo

  • 7/24/2019 Apostila Curso ADVPL OOP

    46/48

    ,otinas de -eb

    n5io de e&mail elo sistema 1end ail atra5/s de 12P

    , A689 possui rotinas de envio de e-mail atravs de $/. Esserecurso pode ser muito , , )

    c%er$er Endereo ? do servidor.c5ser su%rio para autenticao.cPass $enha de autenticao.nTmeO#t /ime out.

    :uno ara en5io da mensagem

    & j7, ) ^ ^

    c'rom E-mail do remetente.aTo Arra: contendo todos os destinat%rios.a&c Arra: contendo destinat%rios a copiar.aBcc Arra: contendo destinat%rios a copiar modo oculto.c%#bject Assunto da mensagem.cBod! 3orpo da mensagem.

    4"

  • 7/24/2019 Apostila Curso ADVPL OOP

    47/48

    a'les Arra: contendo nome dos arquivos ane#os.lTe-t ).T.*.'.+ odo do corpo da mensagem! ./. - te#to! .;. 2

    C/9.

    :uno ara desconectar&se do ser5idor

    &

  • 7/24/2019 Apostila Curso ADVPL OOP

    48/48