Anda di halaman 1dari 48

________________________________________________

PROGRAMAO ADVPL OOP

ndice
______________________________________________________________________________________________________________

Introduo Linguagem Orientada a Objetos..............4


Conceitos Bsicos da OOP..........................................4
Classe..................................................................................................................................4
Objeto..................................................................................................................................4
Mensagem...........................................................................................................................5
Mtodo................................................................................................................................5
Mtodo CONSTRUCTOR..............................................................................................5
Mtodo DESTRUCTOR.................................................................................................5
Eventos................................................................................................................................5
Herana...............................................................................................................................6
Encapsulamento..................................................................................................................6

Criao de Janelas padro OOP...................................7


Sintaxe do mtodo Constructor da classe TWindow:..........................................................8
Propriedades dos objetos da classe TWindow.....................................................................8
Principais propriedades de estilo de janela.....................................................................9
Tabela de cores padro..................................................................................................10
Mtodos da classe TWindow.............................................................................................11
Sintaxe do mtodo Activate...........................................................................................11
Exemplo de Cdigo Fonte para Criao de um Objeto de Janela.....................................12

Caixas de Dilogo no padro OOP.............................13


Sintaxe do mtodo Constructor da classe TDialog:..........................................................13
Propriedades dos objetos da classe TWindow...................................................................13
Principais propriedades de estilo de caixas de dilogo.................................................14
Tabela de cores padro..................................................................................................14
Mtodos da classe TDialog...............................................................................................15
Sintaxe do mtodo Activate..........................................................................................15
Exemplo de Cdigo Fonte para Criao de Objeto de Janela...........................................16

Objetos de Controle.................................................17
Botes................................................................................................................................17
Sintaxe da Classe TBUTTON.......................................................................................17
Sintaxe da Classe SBUTTON.......................................................................................18
Exemplos de Cdigo Fonte para Criao de um Objetos de botes.................................19
Cdigo Fonte exemplo para criao de botes simples................................................19
Cdigo fonte exemplo para criao de botes com bitmap..........................................20
Rtulos de Texto................................................................................................................22
Sintaxe da Classe TSAY................................................................................................22
Seleo de fontes para o objeto de rtulo de texto........................................................23
Sintaxe da classe TFont.............................................................................................23
Exemplo de criao de um objeto de fonte...............................................................23
Cdigo fonte exemplo para criao de rtulos..............................................................24
Caixas de Texto.................................................................................................................25
Sintaxe da Classe TGET...............................................................................................25
Cdigo fonte exemplo para criao de caixas de texto.................................................26
CheckBox..........................................................................................................................27
Sintaxe da Classe TCheckBox......................................................................................27
2

Cdigo fonte exemplo para criao de CheckBoxes.....................................................28


ComboBox........................................................................................................................29
Sintaxe da Classe TComboBox.....................................................................................29
Cdigo fonte exemplo para criao de ComboBoxes...................................................30
ListBox..............................................................................................................................31
Sintaxe da Classe TListBox..........................................................................................32
Cdigo fonte exemplo para criao de ListBoxes.........................................................32
Radio Button.....................................................................................................................33
Sintaxe da Classe TRadMenu.......................................................................................34
Cdigo fonte exemplo para criao de Radio Button...................................................35
Folders...............................................................................................................................36
Sintaxe da Classe TFolder.............................................................................................36
Mtodos importantes da classe TFolder........................................................................36
Cdigo fonte exemplo para criao de mltiplos Folders com vrios objetos dentro. .37
Browse...............................................................................................................................38
Sintaxe da Classe TWBrowse.......................................................................................38
Cdigo fonte exemplo para criao de browse completo.............................................39

Criao de janelas mestre-detalhe OOP.....................41


Modelo 3...........................................................................................................................41
Sintaxe da classe MSMGET.........................................................................................42
Construindo um cdigo fonte para criao de um modelo 3.........................................43
Sintaxe da classe MSMGET.........................................................................................44

Criao de relatrios com qualidade grfica..............51


Classe TMSPRINTER.......................................................................................................51
Sintaxe da Classe TMSPRINTER.................................................................................51
Principais mtodos da classe TMSPRINTER...............................................................51
Principais mtodos para impresso de dados................................................................51
Say.............................................................................................................................51
SayBitmap.................................................................................................................52
Box............................................................................................................................52
Line...........................................................................................................................52
Cdigo fonte exemplo para impresso de relatrios com qualidade grfica.................53

Rotinas de Web........................................................54
Envio de e-mail pelo sistema (Send Mail) atravs de SMTP............................................54
Funo para conectar-se ao servidor.............................................................................54
Funo para envio da mensagem..................................................................................54
Funo para desconectar-se do servidor........................................................................55
Cdigo fonte exemplo para envio de e-mails pelo sistema...........................................55
Workflow...........................................................................................................................56
Configurao dos parmetros do workflow..................................................................56
Configurao doAgendamento do envio do workflow.................................................58
Configurao doAgendamento do envio do workflow.................................................58
Configurao do JOB no APxsrv.ini.............................................................................58
Cdigo fonte para iniciar o job do workflow................................................................59
Ponto de entrada chamado na confirmao do cadastro de produtos............................59
Rotina de tratamento do retorno do workflow..............................................................60
Rotina de tratamento do Timeout do workflow............................................................61
Cdigo fonte HTML utilizado no exemplo de atualizao de preos pelo workflow. .61
3

Introduo Linguagem Orientada a Objetos


A programao orientada objetos uma modalidade de
desenvolvimento de software que difere muito da conhecida linguagem
procedural que usamos no dia-a-dia.
Ela apresenta uma estratgia diferenciada de organizar, planejar,
escrever, atualizar e fazer manuteno do software.
As linguagens de alto nvel representam uma conexo inteligente entre
o programador e o computador. Sua evoluo paralela s tcnicas e
mtodos do desenvolvimento do software, sendo inspirada pelo anseio
de criar componentes de softwares robustos e reutilizveis que reduzem
os ciclos e o tempo da produo do software. Esta diminuio no tempo
de produo ainda mais relevante quando uma equipe de
programadores est trabalhando em um projeto de software.
A histria das linguagens de programao reflete a evoluo de
linguagens estruturadas e destas para as orientadas ao objeto. As
linguagens estruturadas so linguagens procedurais, onde um programa
particionado em um conjunto de procedimentos e funes. A
seqncia de rotinas descreve como os dados so manipulados.
Especificamente, o programador controla a interao entre o cdigo e os
dados. O foco principal das linguagens procedurais a rotina, enquanto
foco secundrio so os dados que esto sendo manipulados.

Conceitos Bsicos da OOP


Classe
Uma classe detalha os campos de dados de um objeto e os mtodos
que atuam sobre os dados.
A classe o nvel macro do objeto, de onde so herdados suas
caractersticas e mtodos. Podemos dizer que todo objeto descende de
uma classe.
Objeto
Um objeto um membro de uma classe, tendo em si todas as
caractersticas da classe na qual foi herdado. Suas propriedades so
protegidas por conceitos de encapsulamento.
Mensagem
Uma mensagem uma solicitao enviada a um objeto para chamar
um de seus mtodos. Tambm podem ser acionadas por algum evento.

Mtodo
Um mtodo o procedimento ou funo chamado para atuar num
objeto. Um mtodo define como uma mensagem deve ser executada.
A OOP (Programao Orientada a Objetos) permite uma abordagem mais
simples para a utilizao de dados usando objetos que respondem a
mensagens. Esta abordagem demonstra uma noo de que objetos em
um programa so similares a alunos em uma sala de aula voc passa
um exerccio ou um trabalho para um aluno ou um grupo de alunos (o
objeto, neste caso) solicitando que lhe seja apresentado uma soluo
para um determinado problema. Supondo-se que o trabalho seja
passado ao aluno ou grupo certo, ele responder usando sua experincia
e recursos. O mtodo pelo qual o trabalho executado depende do
objeto receptor (aluno). Os detalhes da resposta so transparentes ao
professor (emissor da mensagem). Todo objeto por regra possui um
mtodo CONSTRUCTOR e um mtodo DESTRUCTOR.
Mtodo CONSTRUCTOR
o responsvel por ativar o objeto durante a execuo de uma rotina. Esse
mtodo aloca o objeto na memria e o torna disponvel para uso. O objeto ser
carregado com todas suas propriedades e particularidades. Somente aps o
mtodo CONSTRUCTOR ser disparado que poderemos em seguida acertar
suas propriedades e eventos. No ADVPL, o mtodo CONSTRUCTOR chamado
pela clusula New(), como veremos nos exerccios a seguir.
Mtodo DESTRUCTOR
Aps a sua utilizao, cada objeto deve ser removido da memria, para que no
decorrer da aplicao a performance no seja degradada. Para isso, utilizaremos
o mtodo DESTRUCTOR. No ADVPL, os mtodos a serem utilizados so End() ou
Destroy().

Eventos
Evento nada mais do que uma ao acontecendo em um determinado
momento no objeto. Na programao OOP, um evento pode disparar
outras rotinas e modificar o processamento. Foi criado para interagir
com as aes do usurio determinando o processamento de forma
inteligente. Vamos imaginar uma tela de entrada de dados. Podemos ter
vrios eventos relacionados ao usurio que a estiver operando, como
por exemplo, o clique de um mouse, o movimento do cursor do mouse
sobre algum campo, a seleo de uma determinada tecla, entre outros.
Dependendo da ao, determinamos o que ser executado e haver
interao com o usurio.
Herana
Uma outra caracterstica da OOP a herana, um recurso que produz
um grande efeito, que lhe permite criar subclasses. Cada subclasse
recebe as caractersticas de sua classe-me (da mesma forma que uma
criana traz consigo caractersticas peculiares de seus pais). Uma
5

subclasse acrescenta novos atributos s classes herdadas e pode


tambm substituir qualquer atributo herdado.
Encapsulamento
Uma das principais caractersticas da OOP o encapsulamento, pois
evita que o programador no precise acessar diretamente os campos de
dados de um objeto. Para isto necessrio criar mtodos que sero os
responsveis pelo tratamento de dados.
Encapsulamento na verdade unir numa nica estrutura, campos de
dados e cdigos que agiro sobre eles (mtodos). O grande benefcio do
encapsulamento que o programador trabalha voltado nica e
exclusivamente ao campo de dados que deseja atingir com seu cdigo.
Outra grande vantagem a ser considerada a proteo do cdigo
interno, fazendo com que rotinas externas no interfiram diretamente
em seu cdigo.

Criao de Janelas padro OOP


Na programao ADVPL OOP, temos alguns objetos poderosos utilizados
na criao de janelas. Porm antes de nos aprofundarmos nesses
objetos, vamos aprimorar nosso conhecimento no funcionamento das
janelas e caixas de dilogo.
Uma janela nada mais do que um objeto. As caractersticas de um
objeto de janela ou caixa de dilogo correspondem numa rea
retangular na tela, que recebe e processa mensagens, sempre uma de
cada vez, alm de interagir com o usurio atravs de eventos.
Com o objeto de janelas, temos a liberdade de cria-las visando qualquer
finalidade, onde o limite a criatividade de cada desenvolvedor.
Durante a criao das janelas, teremos a necessidade de ajustar outros
objetos dentro dela. Dependendo de cada necessidade, poderemos
inserir botes, bitmaps, caixas de texto, rtulos entre outros mais.
Se adicionarmos objetos em nossa rea de desenvolvimento, por padro
cada objeto ser independente e ficar separado uns dos outros. Dessa
forma, ao criar um boto aps criar a janela, ambos apareceriam
separados na tela e no teriam relao alguma. Ento, ao adicionarmos
mais objetos em nossos projetos, como fazer com que eles se tornem
integrantes de outro objeto? Simples: os objetos possuem uma
propriedade que identifica quem o objeto pai. Ao definir essa
propriedade, o objeto filho ser sempre criado dentro do objeto pai na
qual ter relao direta, tornando-o independente dos demais objetos
que compem o projeto.
Essa capacidade de agrupar objetos dentro de outros objetos chamado
de parent. No ADVPL, a propriedade que define o parent do objeto o
oParent.
6

A classe que utilizaremos para criao de janelas no ADVPL a


TWINDOW. Essa classe ser responsvel pela gerao da caixa
retangular com todas as caractersticas de uma tela padro, onde dentro
dela devero ser inseridos novos objetos de acordo com a necessidade.
A
classe
TWINDOW
possui
grande
flexibilidade
em
seu
desenvolvimento, permitindo a criao de janelas em tamanhos
definidos, ttulo, botes de maximizar e minimizar, cores de fundo, alm
de uma grande funcionalidade para desenvolvedores que utilizam a
programao estruturada, a possibilidade de criar janelas baseadas em
pixel na mesma mtrica das janelas em modo texto.
Importante: Para utilizar essa classe, necessria a utilizao de uma
include especial chamada fwmsgs.h, que no est inclusa no pacote
original do ADVPL, mas facilmente encontrada na internet em sites
relacionados ao Clipper.

Sintaxe do mtodo Constructor da classe TWindow:


<oWnd> := TWindow():New(<nTop>,<nLeft>,<nBottom>,<nRight>,<cTitle>,
<nStyle>,<oMenu>,<oBrush>,<oIcon>,<oParent>,[<.vScroll.>],
[<.hScroll.>],<nClrFore>, <nClrBack>, <oCursor>,[Upper(<(border)>)], !
<.NoSysMenu.>,!<.NoCaption.>,!<.NoIconize.>,!<.NoMaximize.>,<.pixel.>)

Propriedades dos objetos da classe TWindow


nTop
nLeft
nBottom
nRight
cTitle
nstyle

Linha inicial.
Coluna inicial.
Linha final.
Coluna final.
Ttulo da janela.
Estilo da janela. Atravs dessa propriedade podemos
personalizar suas funcionalidades de acordo com a
necessidade.
Principais propriedades de estilo de janela

WS_BORDER
WS_CAPTION
WS_CHILD
WS_CLIPCHILDREN
WS_CLIPSIBLINGS
WS_DISABLED
WS_DLGFRAME
WS_EX_ACCEPTFILES
WS_EX_CLIENTEDGE
WS_EX_CONTEXTHELP
WS_EX_DLGMODALFRAME
WS_EX_LEFTSCROLLBAR
WS_EX_MDICHILD
WS_EX_NOPARENTNOTIFY
WS_EX_RIGHT
WS_EX_RTLREADING

oMenu
oBrush
oIcon
oParent
vScroll
hScroll
nClrFore

nClrBack

oCursor
Border
SysMenu
(.T./.F.)
Caption (.T./.F.)
Iconize
Maximize

WS_EX_TRANSPARENT
WS_EX_TOOLWINDOW
WS_EX_TOPMOST
WS_EX_WINDOWEDGE
WS_HSCROLL
WS_MAXIMIZE
WS_MAXIMIZEBOX
WS_MINIMIZE
WS_MINIMIZEBOX
WS_OVERLAPPED
WS_POPUP
WS_SYSMENU
WS_THICKFRAME
WS_VISIBLE
WS_VSCROLL

No utilizado.
No utilizado.
No utilizado.
Identifica qual o objeto pai. Se no declarado,
assume a janela principal do sistema.
No utilizado.
No utilizado.
No utilizado.

Seleciona a cor de fundo da janela. Default:


branca.
Tabela
de cores
Low Intensity
colors padro

High Intensity Colors

CLR_BLACK
CLR_BLUE
CLR_GREEN
CLR_CYAN
CLR_RED
CLR_MAGENTA
CLR_BROWN
CLR_HGRAY
CLR_LIGHTGRAY
CLR_HGRAY

CLR_GRAY
CLR_HBLUE
CLR_HGREEN
CLR_HCYAN
CLR_HRED
CLR_HMAGENTA
CLR_YELLOW
CLR_WHITE

No utilizado.
No utilizado.
.T. exibe boto sysmenu, .F. inibe.
.T. exibe titulo da janela, .F. inibe.
No utilizado.
.T. exibe boto maximize, .F. inibe.
8

(.T./.F.)
Pixel (.T./.F.)

Define tipo de posicionamento e mtrica da janela,


.T. em pixels, .F., modo texto (80/24).

Mtodos da classe TWindow


Activate

Principal mtodo da classe TWindow, pois, esse


mtodo que vai ativar a janela na tela. Deve
obrigatoriamente ser chamado sempre que o
mtodo construtor de uma janela for acionado.
Este mtodo tambm possui recursos de
monitoramento de eventos. Quando os eventos
forem declarados dentro deste mtodo, no ser
mais necessrio declara-los de forma estrutural.
Sintaxe do mtodo Activate
<oWnd>:Activate( [ Upper(<(show)>) ],
<oWnd>:bLClicked [ := \{ |nRow,nCol,nKeyFlags| <uLClick> \} ],
<oWnd>:bRClicked [ := \{ |nRow,nCol,nKeyFlags| <uRClick> \} ],
<oWnd>:bMoved
[ := <{uMove}> ],
<oWnd>:bResized [ := <{uResize}> ],
<oWnd>:bPainted [ := \{ | hDC, cPS | <uPaint> \} ],
<oWnd>:bKeyDown [ := \{ | nKey | <uKeyDown> \} ],
<oWnd>:bInit
[ := \{ | Self | <uInit> \} ],
[<{uUp}>], [<{uDown}>], [<{uPgUp}>], [<{uPgDn}>],
[<{uLeft}>], [<{uRight}>], [<{uPgLeft}>], [<{uPgRight}>],
[<{uValid}>], [\{|nRow,nCol,aFiles|<uDropFiles>\}],
<oWnd>:bLButtonUp [ := <{uLButtonUp}>

bLClicked
bRClicked
bLDblClick
bGotFocus
bLostFocus

Bloco de cdigo disparado quando acionado boto


esquerdo do mouse.
Bloco de cdigo disparado quando acionado boto
direito do mouse.
Bloco de cdigo disparado quando acionado duplo
clique do mouse.
Bloco de cdigo disparado quando a janela pega o
foco para si. Equivale clusula when.
Bloco de cdigo disparado quando a janela perde o
foco. Equivale clusula valid.
9

bKeyDown

Bloco de cdigo disparado quando pressionada


uma tecla. Equivale clusula inkey(0).
Ex.: oWnd:bKeyDown := { | nKey,nFlags | MiFuncion (nKey) }

lFocused
End
Destroy
SetFocus
Refresh

.T. est com o foco, .F. no est com foco.


Mtodo de finalizao do objeto.
Mtodo destructor do objeto.
Fora a obteno do foco.
Executa a atualizao dos controles da tela.

Exemplo de Cdigo Fonte para Criao de um Objeto de Janela


#include "protheus.ch"
/*

Programa OBJ_JAN Autor Organon TI Consultoria Data 13/05/04

Desc.
Exemplo de criao de um objeto de janela simples.

Uso
APx

*/
User Function OBJ_JAN()
Local oWnd
Local _nStyle := WS_CAPTION + WS_SYSMENU + WS_MINIMIZEBOX

//Objeto de janela
//Estilo da janela

oWnd := TWindow():New(10,10,20,40,"Exemplo de janela",_nStyle,,,,,.T.,.T.,,,,,;


.T.,.T.,.T.,.T.,.F.)
oWnd:Activate() //Ativa a janela
oWnd:Destroy()
Return

Caixas de Dilogo no padro OOP


As caixas de dilogo so um tipo peculiar de janela que no possuem
botes de maximizar e minimizar. So criadas apenas para estabelecer
dilogo entre o programa e o usurio, oferecendo uma gama de
controles (objetos) que tornam a caixa de dilogo um recurso poderoso
para entrada e sada de dados.
Caixas de dilogo podem trabalhar em dois modos, modal e no-modal.
As janelas modais tem objetivo no permitir que o usurio mude para
outra janela enquanto no encerrar a rotina atual. Esse recurso muito
interessante quando se trata de uma aplicao com diversas caixas de
10

dilogo, pois, podemos fazer com que o usurio as utilizem na seqncia


certa do processamento. Para isso, usamos a propriedade oParent,
fazendo com que dessa forma as caixas de dilogo fiquem dependentes
sempre da anterior, criando um conceito de cascata. A classe utilizada
para a criao da caixa de dilogo a TDIALOG, derivada da classe
TWINDOW, sendo assim, as propriedades e mtodos so bem similares.
Sintaxe do mtodo Constructor da classe TDialog:
<oDlg> = TDialog():New( <nTop>, <nLeft>, <nBottom>, <nRight>,<cTitle>,
<cResName>, <hResources>, <.vbx.>, <nStyle>,<nClrText>, <nClrBack>,
<oBrush>, <oWnd>, <.pixel.>,<oIco>, <oFont>, <nHelpId>, <nWidth>,
<nHeight>)

Propriedades dos objetos da classe TWindow


nTop
nLeft
nBottom
nRight
cTitle
cResName
hResources
Vbx
NStyle

Linha inicial.
Coluna inicial.
Linha final.
Coluna final.
Ttulo da caixa de dilogo.
No utilizado.
No utilizado.
No utilizado.
Estilo da janela. Atravs dessa propriedade podemos
personalizar suas funcionalidades de acordo com a
necessidade.
Principais propriedades de estilo de caixas de dilogo
WS_BORDER
WS_EX_TRANSPARENT
WS_CAPTION
WS_EX_TOOLWINDOW
WS_CHILD
WS_EX_TOPMOST
WS_CLIPCHILDREN
WS_EX_WINDOWEDGE
WS_CLIPSIBLINGS
WS_HSCROLL
WS_DISABLED
WS_MAXIMIZE
WS_DLGFRAME
WS_MAXIMIZEBOX
WS_EX_ACCEPTFILES
WS_MINIMIZE
WS_EX_CLIENTEDGE
WS_MINIMIZEBOX
WS_EX_CONTEXTHELP
WS_EX_DLGMODALFRAME
WS_EX_LEFTSCROLLBAR
WS_EX_MDICHILD
WS_EX_NOPARENTNOTIFY
WS_EX_RIGHT
WS_EX_RTLREADING

nClrText

WS_OVERLAPPED
WS_POPUP
WS_SYSMENU
WS_THICKFRAME
WS_VISIBLE
WS_VSCROLL

No utilizado.

11

nClrBack

oBrush
oWnd
Pixel (.T./.F.)
oIco
oFont
nHelpID
nWidth
nHeight

Seleciona a cor de fundo da janela. Default:


branca.
Tabela
de cores
Low Intensity
colors padro

High Intensity Colors

CLR_BLACK
CLR_BLUE
CLR_GREEN
CLR_CYAN
CLR_RED
CLR_MAGENTA
CLR_BROWN
CLR_HGRAY
CLR_LIGHTGRAY
CLR_HGRAY

CLR_GRAY
CLR_HBLUE
CLR_HGREEN
CLR_HCYAN
CLR_HRED
CLR_HMAGENTA
CLR_YELLOW
CLR_WHITE

No utilizado.
Parent da caixa de dilogo.
Define tipo de posicionamento e mtrica da janela,
.T. em pixels, .F., modo texto (80/24).
No utilizado.
No utilizado.
No utilizado.
No utilizado.
No utilizado.

Mtodos da classe TDialog


Activate

Principal mtodo da classe TDialog, pois, esse


mtodo que vai ativar a caixa na tela. Deve
obrigatoriamente ser chamado sempre que o
mtodo construtor de uma janela for acionado.
Este mtodo tambm possui recursos de
monitoramento de eventos. Quando os eventos
forem declarados dentro deste mtodo, no ser
mais necessrio declara-los de forma estrutural.
Sintaxe do mtodo Activate
<oDlg>:Activate(<oDlg>:bLClicked[:={|nRow,nCol,nFlags|<uClick>}],
<oDlg>:bMoved
[ := <{uMoved}> ],
<oDlg>:bPainted [ := {|hDC,cPS|<uPaint>}],<.center.>, [{|Self|
<uValid>}],[ ! <.NonModal.> ], [{|Self|<uInit>}],
<oDlg>:bRClicked [ := {|nRow,nCol,nFlags|<uRClicked>}],
[{|Self|<uWhen>}] )

bLClicked
bRClicked
bLDblClick

Bloco de cdigo disparado quando acionado boto


esquerdo do mouse.
Bloco de cdigo disparado quando acionado boto
direito do mouse.
Bloco de cdigo disparado quando acionado duplo
clique do mouse.
12

bValid
bInit
bWhen
bGotFocus
bLostFocus
bKeyDown

Bloco de cdigo para validar a sada da janela.


Bloco de cdigo para validar a inicializao da
janela.
Bloco de cdigo para validar a inicializao da
janela antes de ser desenhada na tela.
Bloco de cdigo disparado quando a janela pega o
foco para si. Equivale clusula when.
Bloco de cdigo disparado quando a janela perde o
foco. Equivale clusula valid.
Bloco de cdigo disparado quando pressionada
uma tecla. Equivale clusula inkey(0).
Ex.: oWnd:bKeyDown := { | nKey,nFlags | MiFuncion (nKey) }

lFocused
End
Destroy
SetFocus
Refresh

.T. est com o foco, .F. no est com foco.


Mtodo de finalizao do objeto.
Mtodo destructor do objeto.
Fora a obteno do foco.
Executa a atualizao dos controles da tela.

Exemplo de Cdigo Fonte para Criao de Objeto de Janela


#include "protheus.ch"
/*

Programa OBJ_DLG Autor Organon TI Consultoria Data 13/05/04

Desc.
Exemplo de criao de um objeto de dilogo simples.

Uso
APx

*/
User Function OBJ_DLG()
Local oDlg

//Objeto de Dilogo

oDlg := TDialog():New(10,10,300,500,"Teste de Dilogo",,,,,,,,,.T.,,,,,)


oDlg:lCentered := .T.
oDlg:Activate(,,,,,.F.)
Return

Objetos de Controle
A grande finalidade da criao das janelas e caixas de dilogo a
interao com os usurios durante o processamento de suas rotinas.
Para isso devem ser utilizados objetos de controle como botes, caixas
13

de texto, radio button, chekbox entre outros. Abaixo esto descritos os


objetos necessrios para criao de janelas personalizadas para diversas
finalidades. Sempre que utilizarmos os objetos de controle, no podemos
esquecer de informar a propriedade oParent de cada um, apontando
para a janela na qual o objeto ir pertencer.
Botes
Botes so utilizados para dispararem eventos e rotinas dentro de uma
janela. OADVPL possui dois tipos de botes, derivados da classe
TBUTTON (Boto simples) e SBUTTON (boto estilo speed button, com
bitmap).
Sintaxe da Classe TBUTTON
[ <oBtn> := ] TButton():New( <nRow>, <nCol>, <cCaption>, <oWnd>,;
<{uAction}>, <nWidth>, <nHeight>, <nHelpId>, <oFont>, <.default.>,;
<.pixel.>, <.design.>, <cMsg>, <.update.>, <{WhenFunc}>,;
<{uValid}>, <.lCancel.> )

nRow
nCol
cCaption
oWnd
Action
nWidth
nHeight
nHelpID
oFont
Default
Pixel (.T./.F.)
Design
cMsg
Update
When
Valid
Cancel

Linha inicial.
Coluna inicial.
Texto do boto.
Janela parent.
Bloco de cdigo com a rotina a ser disparada.
Tamanho do boto.
Altura do boto.
No utilizado.
Objeto de fonte do boto.
Define se vir com o foco quando mostrada a tela.
Define tipo de posicionamento e mtrica da
janela, .T. em pixels, .F., modo texto (80/24).
No utilizado.
Mensagem estilo Hint com a descrio do boto.
No utilizado.
Bloco de cdigo que valida a execuo da ao do
boto, antes de executar.
Bloco de cdigo que valida a execuo da ao do
boto, depois de executar.
No utilizado.

Sintaxe da Classe SBUTTON


[ <oBtn> := ] SButton():New( <nTop>,<nLeft>,<nType>,<{ uAction }>,;
<oWnd>,<.mode.>,<cMsg>,<{uWhen}>)

nTop
nLeft

Linha inicial.
Coluna inicial.
14

nType
Action
oWnd
Mode
cMsg
Update
When

Texto do boto.
Bloco de cdigo com a rotina a ser disparada.
Janela parent.
No utilizado.
Mensagem estilo Hint com a descrio do boto.
No utilizado.
Bloco de cdigo que valida a execuo da ao do
boto, antes de executar.

Exemplos de Cdigo Fonte para Criao de um Objetos de


botes
Cdigo Fonte exemplo para criao de botes simples.
#include "protheus.ch"
/*

Programa OBJ_BTN Autor Organon TI Consultoria Data 13/05/04

Desc.
Exemplo de criao de um objeto de dilogo simples, com botes.

Uso
APx

*/
User Function OBJ_BTN()
Local _oDlg
Local _oBtn1
Local _oBtn2

//Objeto de Dilogo
//Objeto de Boto
//Objeto de Boto

_oDlg := TDialog():New(10,10,300,500,"Teste de Dilogo",,,,,,,,,.T.,,,,,)


_oDlg:lCentered := .T.
//Exibe botes
_oBtn1 := TButton():New(130,180,"Boto 1",_oDlg,{|| MSGInfo("Teste de
boto","Teste")},30,12,,,.T.,.T.,,"Teste",,,,)
_oBtn2 := TButton():New(130,210,"Fechar",_oDlg,{|| _oDlg:End()},30,12,,,.T.,.T.,,"Fechar",,,,)
_oDlg:Activate()
Return

Exemplo de criao de botes simples.

15

Cdigo fonte exemplo para criao de botes com bitmap.


#include "protheus.ch"
/*

Programa OBJ_BTN2 Autor Organon TI Consultoria Data 13/05/04

Desc.
Exemplo de criao de um objeto de dilogo simples, com botes

de bitmap.

Uso
APx

*/
User Function OBJ_BTN2()
Local _oDlg
Local _oBtn1, _oBtn2, _oBtn3, _oBtn4, _oBtn5, _oBtn6,;
_oBtn7, _oBtn8, _oBtn9, _oBtn10, _oBtn11,_oBtn12,;
_oBtn13, _oBtn14, _oBtn15, _oBtn16, _oBtn17, _oBtn18,;
_oBtn19, _oBtn20, _oBtn21, _oBtn22

//Objeto de Dilogo
//Objetos de Botes

_oDlg := TDialog():New(10,10,300,500,"Teste de Dilogo",,,,,,,,,.T.,,,,,)


_oDlg:lCentered := .T.
//Exibe
_oBtn1
_oBtn2
_oBtn3
_oBtn4
_oBtn5
_oBtn6
_oBtn7
_oBtn8
_oBtn9
_oBtn10
_oBtn11
_oBtn12
_oBtn13
_oBtn14

todos tipos vlidos de botes


:= SButton():New(020,010,01,{||
:= SButton():New(040,010,02,{||
:= SButton():New(060,010,03,{||
:= SButton():New(080,010,04,{||
:= SButton():New(100,010,05,{||
:= SButton():New(120,010,06,{||
:= SButton():New(020,040,07,{||
:= SButton():New(040,040,08,{||
:= SButton():New(060,040,09,{||
:= SButton():New(080,040,10,{||
:= SButton():New(100,040,11,{||
:= SButton():New(120,040,12,{||
:= SButton():New(020,070,13,{||
:= SButton():New(040,070,14,{||

MSGInfo("Tipo
MSGInfo("Tipo
MSGInfo("Tipo
MSGInfo("Tipo
MSGInfo("Tipo
MSGInfo("Tipo
MSGInfo("Tipo
MSGInfo("Tipo
MSGInfo("Tipo
MSGInfo("Tipo
MSGInfo("Tipo
MSGInfo("Tipo
MSGInfo("Tipo
MSGInfo("Tipo

1", "Informao")},_oDlg,,"Tipo
2", "Informao")},_oDlg,,"Tipo
3", "Informao")},_oDlg,,"Tipo
4", "Informao")},_oDlg,,"Tipo
5", "Informao")},_oDlg,,"Tipo
6", "Informao")},_oDlg,,"Tipo
7", "Informao")},_oDlg,,"Tipo
8", "Informao")},_oDlg,,"Tipo
9", "Informao")},_oDlg,,"Tipo
10","Informao")},_oDlg,,"Tipo
11","Informao")},_oDlg,,"Tipo
12","Informao")},_oDlg,,"Tipo
13","Informao")},_oDlg,,"Tipo
14","Informao")},_oDlg,,"Tipo

1")
2")
3")
4")
5")
6")
7")
8")
9")
10")
11")
12")
13")
14")

16

_oBtn15
_oBtn16
_oBtn17
_oBtn18
_oBtn19
_oBtn20
_oBtn21
_oBtn22

:=
:=
:=
:=
:=
:=
:=
:=

SButton():New(060,070,15,{||
SButton():New(080,070,17,{||
SButton():New(100,070,18,{||
SButton():New(120,070,19,{||
SButton():New(020,100,20,{||
SButton():New(040,100,21,{||
SButton():New(060,100,22,{||
SButton():New(080,100,23,{||

MSGInfo("Tipo
MSGInfo("Tipo
MSGInfo("Tipo
MSGInfo("Tipo
MSGInfo("Tipo
MSGInfo("Tipo
MSGInfo("Tipo
MSGInfo("Tipo

15","Informao")},_oDlg,,"Tipo
16","Informao")},_oDlg,,"Tipo
17","Informao")},_oDlg,,"Tipo
18","Informao")},_oDlg,,"Tipo
19","Informao")},_oDlg,,"Tipo
20","Informao")},_oDlg,,"Tipo
21","Informao")},_oDlg,,"Tipo
22","Informao")},_oDlg,,"Tipo

15")
16")
17")
18")
19")
20")
21")
22")

_oDlg:Activate()
Return

Tipos vlidos de botes com bitmap

Rtulos de Texto
Rtulos so muito importantes para a definio de campos na tela, bem
como exibio de texto livre. A Classe responsvel pela criao de
rtulos a TSAY.
Sintaxe da Classe TSAY

17

[ <oSay> := ] TSay():New( <nRow>, <nCol>, <{cText}>,[<oWnd>], [<cPict>],;


<oFont>, <.lCenter.>, <.lRight.>, <.lBorder.>, <.lPixel.>, <nClrText>,
<nClrBack>, <nWidth>, <nHeight>)

nRow
nCol
cText
oWnd
cPict
oFont
lCenter
lRight
lBorder
Pixel (.T./.F.)
nClrText
nClrBack
nWidth
nHeight

Linha inicial.
Linha Final.
Texto a ser exibido.
Janela parent.
Picture do texto.
Objeto para selecionar a fonte da janela.
Centraliza o texto no espao do objeto.
Alinha direita (usado para nmeros).
No utilizado
Define tipo de posicionamento e mtrica da
janela, .T. em pixels, .F., modo texto (80/24).
Define a cor do texto.
Define cor de fundo na exibio do texto.
Define o tamanho do objeto.
Define a altura do objeto.

Seleo de fontes para o objeto de rtulo de texto

Objetos de rtulo de texto podem ter seu fonte padro alterado para
outro qualquer encontrado no sistema operacional. Para isso, deve ser
criado um objeto derivado da classe TFONT que ter as caractersticas
do fonte selecionado. Aps carregar o objeto de fonte, basta declara-lo
na propriedade oFont do rtulo de texto.
Sintaxe da classe TFont
<oFont> := TFont():New(<cName>,<nWidth>,<nHeight>,<.from.>,
[<.bold.>],<nEscapement>,,<nWeight>,[<.italic.>])

cName
nWidth
nHeight
From
Bold (.T./.F.)
nEscapement
Reservado
nWeight
Italic

Nome da fonte.
Comprimento da fonte (normalmente 9).
Tamanho do fonte.
No utilizado.
Ativa negrito.
No utilizado.
No utilizado.
Ativa itlico.

Exemplo de criao de um objeto de fonte


_oFont := TFont():New("Arial",09,12,,.T.,,,,.T.)

Cdigo fonte exemplo para criao de rtulos.


#include "protheus.ch"
/*

18

Programa OBJ_SAY Autor Organon TI Consultoria Data 13/05/04

Desc.
Exemplo de criao de texto livre na janela.

Uso
APx

*/
User Function OBJ_SAY()
Local _oDlg
Local _oBtn1, _oBtn2
Local _oSay

//Objeto de Dilogo
//Objetos de Botes
//Objeto de rtulo

_oDlg := TDialog():New(10,10,300,500,"Teste de Dilogo",,,,,,,,,.T.,,,,,)


_oDlg:lCentered := .T.
//Exibe todos tipos vlidos de botes
_oBtn1 := SButton():New(130,180,01,{|| _oDlg:End()},_oDlg,,"Tipo 1")
_oBtn2 := SButton():New(130,210,02,{|| _oDlg:End()},_oDlg,,"Tipo 2")
//Cria objeto de fonte
_oFont := TFont():New("Arial",09,12,,.T.,,,,.T.)
//Exibe o objeto de rtulo
_oSay := TSay():New(020,010,{||"Exemplo de texto livre..."},_oDlg,"@!",_oFont,.T.,,,.T.,,,200,20)
_oDlg:Activate()
Return

Exemplo de apresentao de mensagem de texto em caixas de dilogo

19

Caixas de Texto
Caixas de texto so objetos importantes para entrada de dados. Atravs
desse objeto pode-se editar valores de campos para serem processados.
Sintaxe da Classe TGET
[ <oGet> := ] TGet():New( <nRow>, <nCol>, bSETGET(<uVar>),[<oWnd>],;
<nWidth>, <nHeight>, <cPict>, <{ValidFunc}>,<nClrFore>, <nClrBack>,;
<oFont>, <.design.>,<oCursor>, <.pixel.>, <cMsg>, <.update.>, <{uWhen}>,;
<.lCenter.>, <.lRight.>,[\{|nKey, nFlags, Self| <uChange>\}],;
<.readonly.>,<.pass.>)

nRow
nCol
bSetGet
oWnd
nWidth
nHeight
cPict
Valid
nClrFore
nClrBack
oFont
Design
oCursor
Pixel (.T./.F.)
cMsg
Update
When
lCenter
(.T./.F.)
lRight (.T./.F.)
nKey
nFlags
Change
lReadOnly
Pass (.T./.F.)

Linha inicial.
Coluna inicial.
Varivel de memria do campo.
Janela parent.
Tamanho do campo.
Altura do campo.
Picture do campo.
Bloco de cdigo com funo de validao do
campo.
No utilizado.
Define a cor de fundo do objeto.
Objeto que define a fonte utilizada no campo.
No utilizado.
No utilizado.
Define tipo de posicionamento e mtrica da
janela, .T. em pixels, .F., modo texto (80/24).
Mensagem tipo Hint do campo.
No utilizado.
Bloco de cdigo para validao na entrada do
campo.
Centraliza o texto na caixa de texto.
Alinha dados direita.
No utilizado.
No utilizado.
Bloco de cdigo para validar quando alterado o
campo.
Deixa o campo somente para leitura.
Converte o texto para o formato password (***).

Cdigo fonte exemplo para criao de caixas de texto.


#include "protheus.ch"
/*

20


Programa OBJ_GET Autor Organon TI Consultoria Data 13/05/04

Desc.
Exemplo de criao de caixas de texto e rtulos.

Uso
APx

*/
User Function OBJ_GET()
Local
Local
Local
Local
Local
Local
Local

_oDlg
_oBtn1, _oBtn2
_oSay1, _oSay2, _oSay3
_oGet1, _oGet2, _oGet3
_cVar1 := Space(06)
_cVar2 := Date()
_cVar3 := 0

//Objeto de Dilogo
//Objetos de Botes
//Objeto de rtulo
//Objeto de caixa de
//Varivel utilizada
//Varivel utilizada
//Varivel utilizada

texto
no Get
no Get
no Get

_oDlg := TDialog():New(10,10,300,500,"Teste de Dilogo",,,,,,,,,.T.,,,,,)


_oDlg:lCentered := .T.
//Exibe todos tipos vlidos de botes
_oBtn1 := SButton():New(130,180,01,{|| _oDlg:End()},_oDlg,,"Tipo 1")
_oBtn2 := SButton():New(130,210,02,{|| _oDlg:End()},_oDlg,,"Tipo 2")
//Exibe o objeto de rtulo
_oSay1 := TSay():New(010,010,{||"Caixa de Texto"},_oDlg,,,,,,.T.,,,80,20)
_oSay2 := TSay():New(040,010,{||"Caixa de Data"},_oDlg,,,,,,.T.,,,80,20)
_oSay3 := TSay():New(070,010,{||"Caixa de Nmero"},_oDlg,,,,,,.T.,,,80,20)
//Exibe as caixas de texto
_oGet1 := TGet():New(020,010,bSetGet(_cVar1),_oDlg,50,12,"@!",,,,,,,.T.)
_oGet2 := TGet():New(050,010,bSetGet(_cVar2),_oDlg,50,12,,,,,,,,.T.)
_oGet3 := TGet():New(080,010,bSetGet(_cVar3),_oDlg,50,12,"@E 999,999.99",,,,,,,.T.)
_oDlg:Activate()
Return

Exemplo de variao de caixas de texto com formatos de dados


diferentes

CheckBox
21

A classe TCHECKBOX criar uma caixa de marca/desmarca na janela.


Seu funcionamento consiste em armazenar em uma varivel lgica a
seleo do usurio, sendo .T. para marcado e .F. para desmarcado.
Sintaxe da Classe TCheckBox
[ <oCbx> := ] TCheckBox():New( <nRow>, <nCol>, <cCaption>,;
[bSETGET(<lVar>)], <oWnd>, <nWidth>, <nHeight>, <nHelpId>,;
[<{uClick}>], <oFont>, <{ValidFunc}>, <nClrFore>, <nClrBack>,;
<.design.>, <.pixel.>, <cMsg>, <.update.>, <{WhenFunc}> )

nRow
nCol
cCaption
bSetGet
oWnd
nWidth
nHeight
nHelpID
Click
oFont
Valid
nClrFore
nClrBack
Design
Pixel (.T./.F.)
cMsg
Update
When

Linha inicial.
Coluna inicial.
Texto do checkbox.
Varivel lgica que conter o valor selecionado do
checkbox.
Janela parent.
Tamanho do objeto.
Alturado objeto.
No utilizado.
Bloco de cdigo disparado com o evento de um
clique do mouse.
Objeto de seleo de fonte para o texto do objeto.
Bloco de cdigo responsvel pela validao do
objeto.
No utilizado.
Define a cor de fundo do objeto.
No utilizado.
Define tipo de posicionamento e mtrica da
janela, .T. em pixels, .F., modo texto (80/24).
Mensagem estilo hint do objeto.
No utilizado.
Bloco de cdigo para validar a entrada no campo.

Cdigo fonte exemplo para criao de CheckBoxes


#include "protheus.ch"
/*

Programa OBJ_CBX Autor Organon TI Consultoria Data 13/05/04

Desc.
Exemplo de criao de checkbox.

Uso
APx

*/
User Function OBJ_CBX()
Local _oDlg

//Objeto de Dilogo

22

Local _oBtn1, _oBtn2


Local _oCbx
Local _lVar

//Objetos de Botes
//Objeto CheckBox
//Varivel para armazenar seleo do usurio

_oDlg := TDialog():New(10,10,300,500,"Teste de Dilogo",,,,,,,,,.T.,,,,,)


_oDlg:lCentered := .T.
//Exibe todos tipos vlidos de botes
_oBtn1 := SButton():New(130,180,01,{|| _oDlg:End()},_oDlg,,"Tipo 1")
_oBtn2 := SButton():New(130,210,02,{|| _oDlg:End()},_oDlg,,"Tipo 2")
//Exibe o objeto checkbox
oCbx := TCheckBox():New(10,10,"Exemplo de Checkbox", bSetGet(_lVar),_oDlg,80,12)
_oDlg:Activate()
Return

Exemplo de criao de dilogo com checkbox.

ComboBox
A classe TCOMBOBOX criar uma caixa de seleo estilo drop-down na
janela. Seu funcionamento consiste em armazenar em uma varivel
caracter a seleo do usurio. Os itens so armazenados em um array,
que depois passado como propriedade do objeto.
Sintaxe da Classe TComboBox
[ <oCbx> := ] TComboBox():New( <nRow>, <nCol>, bSETGET(<cVar>),;
<aItems>, <nWidth>, <nHeight>, <oWnd>, <nHelpId>,;
[{|Self|<uChange>}], <{uValid}>, <nClrText>, <nClrBack>,;
<.pixel.>, <oFont>, <cMsg>, <.update.>, <{uWhen}>)

23

nRow
nCol
bSetGet
aItens
nWidth
nHeight
oWnd
nHelpID
Change
Valid
nClrText
nClrBack
Pixel (.T./.F.)
oFont
cMsg
Update
When

Linha inicial.
Coluna inicial.
Varivel que conter o valor selecionado do objeto.
Array contendo a lista de itens do objeto.
Tamanho do objeto.
Alturado objeto.
Janela parent.
No utilizado.
Bloco de cdigo disparado com o evento alterao
no objeto.
Bloco de cdigo disparado para validar o objeto.
Define a cor do texto do objeto.
Define a cor de fundo do objeto.
Define tipo de posicionamento e mtrica da
janela, .T. em pixels, .F., modo texto (80/24).
Objeto de seleo de fonte para o texto do objeto.
Mensagem estilo hint do objeto.
No utilizado.
Bloco de cdigo para validar a entrada no objeto.

Cdigo fonte exemplo para criao de ComboBoxes


#include "protheus.ch"
/*

Programa OBJ_CBX Autor Organon TI Consultoria Data 13/05/04

Desc.
Exemplo de criao de combobox.

Uso
APx

*/
User Function OBJ_CBX()
Local
Local
Local
Local
Local

_oDlg
_oBtn1, _oBtn2
_oCbx
_cVar
:= Space(06)
_aVar
:= {}

AADD(_aVar,
AADD(_aVar,
AADD(_aVar,
AADD(_aVar,
AADD(_aVar,

"Item
"Item
"Item
"Item
"Item

//Objeto de Dilogo
//Objetos de Botes
//Objeto ComboBox
//Varivel que armazenar o item selecionado
//Array contendo os itens do ComboBox

1")
2")
3")
4")
5")

_oDlg := TDialog():New(10,10,300,500,"Teste de Dilogo",,,,,,,,,.T.,,,,,)


_oDlg:lCentered := .T.
//Exibe todos tipos vlidos de botes
_oBtn1 := SButton():New(130,180,01,{|| _oDlg:End()},_oDlg,,"Tipo 1")
_oBtn2 := SButton():New(130,210,02,{|| _oDlg:End()},_oDlg,,"Tipo 2")
//Exibe o objeto ComboBox
oCbx := TComboBox():New(10,10,bSetGet(_cVar),_aVar,100,12,_oDlg,,,,,,.T.)

24

_oDlg:Activate()
Return

Exemplo de criao de dilogo com ComboBox.

ListBox
A classe TLISTBOX criar uma caixa de seleo estilo lista na janela.
Seu funcionamento consiste em armazenar em uma varivel numrica
ou caracter a seleo do usurio. Os itens so armazenados em um
array, que depois passado como propriedade do objeto.
Sintaxe da Classe TListBox
[ <oLbx> := ] TListBox():New( <nRow>, <nCol>, bSETGET(<cnVar>),;
<aList>, <nWidth>, <nHeight>, <{uChange}>, <oWnd>, <{uValid}>,;
<nClrFore>, <nClrBack>, <.pixel.>, <.design.>, <{uLDblClick}>,;
<oFont>, <cMsg>, <.update.>, <{uWhen}>)

nRow

Linha inicial.
25

nCol
bSetGet
aList
nWidth
nHeight
Change
oWnd
Valid
nClrFore
nClrBack
Pixel (.T./.F.)
Design
DblClick
oFont
cMsg
Update
When

Coluna inicial.
Varivel que conter o valor selecionado do objeto.
Array contendo a lista de itens do objeto.
Tamanho do objeto.
Alturado objeto.
Bloco de cdigo disparado com o evento alterao
no objeto.
Janela parent.
Bloco de cdigo disparado para validar o objeto.
No utilizado.
Define a cor de fundo do objeto.
Define tipo de posicionamento e mtrica da
janela, .T. em pixels, .F., modo texto (80/24).
No utilizado.
Bloco de cdigo disparado no evento de duplo
clique.
Objeto de seleo de fonte para o texto do objeto.
Mensagem estilo hint do objeto.
No utilizado.
Bloco de cdigo para validar a entrada no objeto.

Cdigo fonte exemplo para criao de ListBoxes


#include "protheus.ch"
/*

Programa OBJ_LST Autor Organon TI Consultoria Data 13/05/04

Desc.
Exemplo de criao de listbox.

Uso
APx

*/
User Function OBJ_LST()
Local
Local
Local
Local
Local

_oDlg
_oBtn1, _oBtn2
_oLbx
_cVar
:= Space(06)
_aVar
:= {}

AADD(_aVar,
AADD(_aVar,
AADD(_aVar,
AADD(_aVar,
AADD(_aVar,

"Item
"Item
"Item
"Item
"Item

//Objeto de Dilogo
//Objetos de Botes
//Objeto ListBox
//Varivel que armazenar o item selecionado
//Array contendo os itens do ListBox

1")
2")
3")
4")
5")

_oDlg := TDialog():New(10,10,300,500,"Teste de Dilogo",,,,,,,,,.T.,,,,,)


_oDlg:lCentered := .T.
//Exibe todos tipos vlidos de botes
_oBtn1 := SButton():New(130,180,01,{|| _oDlg:End()},_oDlg,,"Tipo 1")
_oBtn2 := SButton():New(130,210,02,{|| _oDlg:End()},_oDlg,,"Tipo 2")

26

//Exibe o objeto ListBox


oLbx := TListBox():New(10,10,bSetGet(_cVar),_aVar,100,50,,_oDlg,,,,.T.)
_oDlg:Activate()
Return

Exemplo de criao de dilogo com ListBox

Radio Button
A classe TRADMENU criar um campo de seleo de opes na janela
estilo Radio Button. Seu funcionamento consiste em armazenar em uma
varivel numrica a seleo do usurio. Os itens so armazenados em
um array, que depois passado como propriedade do objeto.
Sintaxe da Classe TRadMenu
[ <oRadMenu> := ] TRadMenu():New( <nRow>, <nCol>, {<cItems>},;
[bSETGET(<nVar>)], <oWnd>, [{<nHelpId>}], <{uChange}>,<nClrFore>,;
<nClrBack>, <cMsg>, <.update.>, <{uWhen}>,<nWidth>, <nHeight>,;
<{uValid}>, <.lDesign.>, <.lLook3d.>,<.lPixel.>)

nRow
nCol
aItens
bSetGet
oWnd
HelpId
Change
nClrFore
nClrBack
cMsg

Linha inicial.
Coluna inicial.
Array contendo a lista de itens do objeto.
Varivel que conter o valor selecionado do objeto.
Janela parent.
No utilizado.
Bloco de cdigo disparado com o evento alterao
no objeto.
No utilizado.
Define a cor de fundo do objeto.
Mensagem estilo hint do objeto.
27

Update
When
nWidth
nHeight
Valid
Design
Look3D
Pixel (.T./.F.)

No utilizado.
Bloco de cdigo para validar a entrada no objeto.
Tamanho do objeto.
Alturado objeto.
Bloco de cdigo disparado para validar o objeto.
No utilizado.
No utilizado.
Define tipo de posicionamento e mtrica da
janela, .T. em pixels, .F., modo texto (80/24).

Cdigo fonte exemplo para criao de Radio Button


#include "protheus.ch"
/*

Programa OBJ_RAD Autor


Data 13/05/04

Desc.
Exemplo de criao de Radio Button.

Uso
APx

*/
User Function OBJ_RAD()
Local
Local
Local
Local
Local

_oDlg
_oBtn1, _oBtn2
_oRad
_nVar
:= 1
_aVar
:= {}

AADD(_aVar,
AADD(_aVar,
AADD(_aVar,
AADD(_aVar,
AADD(_aVar,

"Item
"Item
"Item
"Item
"Item

//Objeto de Dilogo
//Objetos de Botes
//Objeto Radio Button
//Varivel que armazenar o item selecionado
//Array contendo os itens do Radio Button

1")
2")
3")
4")
5")

_oDlg := TDialog():New(10,10,300,500,"Teste de Dilogo",,,,,,,,,.T.,,,,,)


_oDlg:lCentered := .T.
//Exibe todos tipos vlidos de botes
_oBtn1 := SButton():New(130,180,01,{|| _oDlg:End()},_oDlg,,"Tipo 1")
_oBtn2 := SButton():New(130,210,02,{|| _oDlg:End()},_oDlg,,"Tipo 2")
//Exibe o objeto Radio Button
oRad := TRadMenu():New(10,10,_aVar,bSetGet(_nVar),_oDlg,,,,,,,,80,20,,,,.T.)
_oDlg:Activate()
Return

Exemplo de criao de dilogo com ListBox

28

Folders
Uma importante classe a ser utilizada nas aplicaes a classe Tfolder.
Essa classe nos permite criar vrias instncias de uma aplicao
dividindo-as em vrias pastas diferentes. muito til por exemplo
quando temos uma tela de entrada de dados muito grande gerando a
necessidade de subdividi-la em vrias partes diferenciando por assunto
ou outra forma de diviso a critrio do desenvolvedor.
Sintaxe da Classe TFolder
[<oFolder> := ] TFolder():New( <nRow>, <nCol>,[\{<cPrompt>\}], \
{<cDlgName1> [,<cDlgNameN>]\},<oWnd>, <nOption>, <nClrFore>, <nClrBack>,
<.lPixel.>,<.lDesign.>, <nWidth>, <nHeight>, <cMsg> )

nRow
nCol
cPrompt
CDlgName1...
N
oWnd
nOption
nClrFore
nClrBack
Pixel (.T./.F.)
Design
nWidth
nHeight
cMsg

Linha inicial.
Coluna inicial.
Array contendo os textos de exibio das pastas.
Array contendo os nomes dos objetos de pasta.
Janela parent.
Nmero da pasta default na inicializao da janela.
No utilizado.
Define a cor de fundo do objeto.
Define tipo de posicionamento e mtrica da
janela, .T. em pixels, .F., modo texto (80/24).
No utilizado.
Tamanho do objeto.
Alturado objeto.
Mensagem estilo hint do objeto.
29

Mtodos importantes da classe TFolder

oFolder
:SetOption(n)
oFolder
:aDialogs[n]

Fora a seleo da pasta representada por n,


onde n a sequencia nmerica de cada pasta.
Retorna o objeto individual de cada pasta do
Folder criado. Muito til para ser usado como
parent de outros objetos, quando houver a
necessidade de armazena-los nas pastas
corretas.

Cdigo fonte exemplo para criao de mltiplos Folders com vrios objetos
dentro
#include "protheus.ch"
/*

Programa OBJ_FLD Autor Organon TI Consultoria Data 13/05/04

Desc.
Exemplo de criao de Folders.

Uso
APx

*/
User Function OBJ_FLD()
Local
Local
Local
Local

_oDlg
_oBtn1, _oBtn2
_oFld
_oSay1, oSay2, oSay3

//Objeto de Dilogo
//Objetos de Botes
//Objeto Folder
//Objeto Folder

_oDlg := TDialog():New(10,10,300,500,"Teste de Dilogo",,,,,,,,,.T.,,,,,)


_oDlg:lCentered := .T.
//Exibe objetos de botes
_oBtn1 := SButton():New(130,180,01,{|| _oDlg:End()},_oDlg,,"Tipo 1")
_oBtn2 := SButton():New(130,210,02,{|| _oDlg:End()},_oDlg,,"Tipo 2")
//Exibe o objeto Folder
_oFld := TFolder():New(05,01,{"Pasta1","Pasta2","Pasta3"},{"Fld1","Fld2","Fld3"},_oDlg,1,,,.T.,,244,120)
//Exibe
_oSay1
_oSay2
_oSay3

o objeto Rtulo em seus respectivos objetos Folders


:= TSay():New(020,010,{||"Texto do Folder 1..."},_oFld:aDialogs[1],,,.T.,,,.T.,,,200,20)
:= TSay():New(020,010,{||"Texto do Folder 2..."},_oFld:aDialogs[2],,,.T.,,,.T.,,,200,20)
:= TSay():New(020,010,{||"Texto do Folder 3..."},_oFld:aDialogs[3],,,.T.,,,.T.,,,200,20)

_oDlg:Activate()
Return

Exemplo de criao de dilogo com ListBox

30

Browse
Browses so ferramentas importantes para a apresentao de dados. O
ADVPL disponibiliza uma classe poderosa para criao de ferramentas de
browse, a classe TWBROWSE. Essa ferramenta ser constantemente
usada no dia-a-dia do desenvolvedor ADVPL, devido a sua gama de
recursos. Alm de apresentar informaes de campos no formato
tradicional, essa classe possui recursos de apresentao de bitmaps em
suas colunas. Com isso podemos desenvolver colunas com marcadores
coloridos e marcadores tipo checkbox, comumente conhecidos como
markbrowse.
Sintaxe da Classe TWBrowse
[ <oBrw> := ] TWBrowse():New( <nRow>, <nCol>, <nWidth>, <nHeigth>,;
[\{|| \{<Flds> \} \}], [\{<aHeaders>\}], [\{<aColSizes>\}], ;
<oDlg>, <(cField)>, <uValue1>, <uValue2>,[<{uChange}>],;
[\{|nRow,nCol,nFlags|<uLDblClick>\}],[\{|nRow,nCol,nFlags|<uRClick>\}],;
<oFont>, <oCursor>, <nClrFore>, <nClrBack>, <cMsg>,<.update.>, <cAlias>,;
<.pixel.>, <{uWhen}>,<.design.>, <{uValid}>)

nRow
nCol
nWidth
nHeight
Flds
aHeaders
aColSizes
oDlg

Linha inicial.
Coluna inicial.
Tamanho do objeto.
Altura do objeto.
Registros do browse.
Array contendo o nome dos campos para exibio.
Array contendo o tamanho de cada campo.
Janela parent.
31

cField
Value1
Value2
Change
bLDblClick
bRClick
oFont
oCursor
nClrFore
nClrBack
cMsg
Update
cAlias
Pixel (.T./.F.)
When
Design
Valid

No utilizado.
No utilizado.
No utilizado.
Bloco de cdigo disparado na alterao do objeto.
Bloco de cdigo disparado no duplo clique do
mouse.
Bloco de cdigo disparado no clique do boto
direito.
Define a fonte padro do objeto.
No utilizado.
No utilizado.
Define a cor de fundo do objeto.
Exibe mensagem estilo hint no objeto.
No utilizado.
No utilizado.
Define tipo de posicionamento e mtrica da
janela, .T. em pixels, .F., modo texto (80/24).
Bloco de cdigo disparado na entrada do objeto.
No utilizado.
Bloco de cdigo disparado na validao do objeto.

Cdigo fonte exemplo para criao de browse completo


#include "protheus.ch"
/*

Programa OBJ_BRW Autor Organon TI Consultoria Data 13/05/04

Desc.
Exemplo de criao de Browse.

Uso
APx

*/
User Function OBJ_BRW()
Local
Local
Local
Local
Local
Local
Local
Local

_oDlg
//Objeto de Dilogo
_oBtn1, _oBtn2
//Objetos de Botes
_oBrw
//Objeto Browse
_aFields := {}
//Campos do Browse
_aHeader := {}
//Cabealho do Browse
_oOk
:= LoadBitmap(GetResources(),"LBOK")
_oNo
:= LoadBitmap(GetResources(),"LBNO")
_oVerde
:= LoadBitmap(GetResources(),"BR_VERDE")

_aFields
_aHeader

:= {{.F., _oVerde, "Exemplo de browse"}}


:= {" ", " ", "Campo 1"}

_oDlg := TDialog():New(10,10,300,500,"Teste de Dilogo",,,,,,,,,.T.,,,,,)


_oDlg:lCentered := .T.
//Exibe objetos de botes
_oBtn1 := SButton():New(130,180,01,{|| _oDlg:End()},_oDlg,,"Tipo 1")
_oBtn2 := SButton():New(130,210,02,{|| _oDlg:End()},_oDlg,,"Tipo 2")
//Exibe o objeto Browse
_oBrw := TWBrowse():New(10,10,225,115,,_aHeader,,_oDlg,,,,,,,,,,,,.F.,,.T.,,.F.)

32

_oBrw:SetArray(_aFields)
_oBrw:bLDblClick := {|| _aFields[_oBrw:nAT,1] := !_aFields[_oBrw:nAT,1]}
_oBrw:bLine
:= {|| {If(_aFields[_oBrw:nAT,1],_oOk,_oNo),_aFields[_oBrw:nAT,2],;
_aFields[_oBrw:nAT,3]}}
_oDlg:Activate()
Return

Exemplo de criao de Browse com recursos de marca e legenda

33

Criao de janelas mestre-detalhe OOP


Modelo 3
Janelas mestre-detalhe so muito importantes para cadastros
envolvendo duas tabelas relacionadas, normalmente cabealhos e itens.
O ADVPL nos proporciona algumas classes de objetos para elaborao
de telas complexas envolvendo tabelas relacionadas. O tutorial a seguir
nos mostra como montar uma tela mestre-detalhes passo-a-passo. As
classes envolvidas so MSMGET e MSGETDADOS. A tela construda no
ADVPL possui algumas caractersticas peculiares. A tela normalmente
apresentar trs sees bsicas, a Enchoice, a GetDados e o rodap
para apresentao de resultados. A imagem abaixo demonstra
exatamente o funcionamento dessa tela.
Enchoice
Bar

Enchoice

GetDado
s

Rodap

A janela que traz os itens do cabealho criada pela classe MSMGET e


os detalhes so montados pela classe MSGETDADOS. As informaes da
GetDados so provenientes de dois arrays, aHeader e aCols. O aHeader
contm informaes sobre os campos, como nome para exibio,
tamanho do campo etc. O aCols possui os dados a serem exibidos. Antes
de montar a tela, deve-se criar o aCols e carrega-lo com as informaes
da tabela. Um detalhe a ser considerado que deveremos criar o aCols
com um campo extra no final, pois, ele armazenar um valor lgico
informando se o registro foi deletado ou no. Essa informao ser muito
til durante a gravao dos registros, para que registros descartados
no sejam gravados.
34

Sintaxe da classe MSMGET


MSMGET():NEW( cAlias, nReg, nOpc, [ uPar1 ], [ uPar2 ], [ uPar3 ],
[ aACho ], [ aPos ], [ aCpos ], [ uPar4 ], [ uPar5 ], [ uPar6 ],
[ uPar7 ], [ oWnd ], [ uPar8 ], [ lMemoria ], [ lColuna ], [ uPar9 ],
[ lSemPastas ] )

CAlias
nReg
uPar1
uPar2
uPar3
aAcho
aPos

aCpos
uPar4

uPar5
uPar6
uPar7
oWnd
uPar8
lMemoria
lColuna
uPar9
lSemPastas

Alias dos dados a serem cadastrados.


Nmero do registro editado.
Parmetro reservado.
Parmetro reservado.
Parmetro reservado.
Array com os campos a serem editados.
Vetor com as coordenadas onde a MsMGet ser
criada no formato {coord. superior, coord.
esquerda, coord. direita, coord. inferior}.Funo
executada para validar o contexto da linha atual do
aCols.
Array com os campos que podero ser alterados.
Parmetro reservado. Nome dos campos do tipo
caracter que utilizaro incremento automtico. Este
parmetro deve ser no formato +<nome do
primeiro
campo>+<nome
do
segundo
campo>+....
Parmetro reservado.
Parmetro reservado.
Parmetro reservado.
Janela parent.
Parmetro reservado.
Indica se ser usado variveis de memria ou os
campos da tabela para cadastramento dos dados.
Valor padro falso.
Indica se a MsMGet sera apresentada com um
objeto por linha (uma coluna). Valor padro falso.
Parmetro reservado.
Parmetro reservado.
Indica se no ser usado as Pastas de Cadastro na
MsMGet. Funo executada para validar a excluso
de uma linha do aCols.

35

Construindo um cdigo fonte para criao de um modelo 3

Inicialmente iremos montar um markbrowse para iniciarmos a


visualizao geral da tabela principal. Aps selecionar o registro a ser
trabalhado, ser aberta a janela modelo 3 com todas opes de trabalho
para o usurio. No nosso exemplo estaremos utilizando as tabelas SZ1
(cabealho) e SZ2 (Itens). Nas opes do menu do markbrowse,
trocaremos as funes padro por outra personalizada que ir disparar o
modelo 3 com o registro selecionado.
#include "protheus.ch"
/*

Programa OBJ_MOD3 Autor Organon TI Consultoria Data 13/05/04

Desc.
Exemplo de criao de Modelo3.

Uso
APx

*/
User Function OBJ_MOD3()
Private
Private
Private
Private

cCadastro
aHeader
aCols
aRotina

AADD(aRotina
AADD(aRotina
AADD(aRotina
AADD(aRotina
AADD(aRotina

:=
:=
:=
:=

"Modelo 3 Exemplo"
{}
{}
{}

,{"Pesquisar" ,
,{"Visualizar",
,{"Incluir"
,
,{"Alterar"
,
,{"Excluir"
,

"AxPesqui"
,
'U_MOD3EXEC("SZ1",RecNo(),2)',
'U_MOD3EXEC("SZ1",RecNo(),3)',
'U_MOD3EXEC("SZ1",RecNo(),4)',
'U_MOD3EXEC("SZ1",RecNo(),5)',

//Titulo do cadastro
//aHeader original do modelo3
//aCols original do modelo3
//Reservado
0,
0,
0,
0,
0,

1})
2})
3})
4})
5})

dbSelectArea("SZ1")
MBrowse(006, 001, 022, 075, "SZ1")
Return

Aps criado o markbrowse, notem que as funes do menu utilizadas


foram trocadas pela U_MOD3EXEC. Nessa funo, passaremos como
parmetro a tabela principal, o registro a ser editado e a ao que o
usurio estar fazendo. As aes so identificadas numericamente.
Termos 2-Visualizao, 3-Incluso, 4-Alterao, 5-Excluso.

36

Sintaxe da classe MSMGET


MSMGET():NEW( cAlias, nReg, nOpc, [ uPar1 ], [ uPar2 ], [ uPar3 ],
[ aACho ], [ aPos ], [ aCpos ], [ uPar4 ], [ uPar5 ], [ uPar6 ],
[ uPar7 ], [ oWnd ], [ uPar8 ], [ lMemoria ], [ lColuna ], [ uPar9 ],
[ lSemPastas ] )

nSuperior

Distancia entre a MsGetDados e o extremidade


superior do objeto que a contm..
nEsquerda
Distancia entre a MsGetDados e o extremidade
esquerda do objeto que a contm.
nInferior
Distancia entre a MsGetDados e o extremidade
esquerda do objeto que a contm.
nDireita
Distancia entre a MsGetDados e o extremidade
inferior do objeto que a contm.
nOpc
Posio do elemento do vetor aRotina que a
MsGetDados usar como referencia.
cLinhaOK
Funo executada para validar o contexto da linha
atual do aCols.
cTudoOk
Funo executada para validar o contexto geral da
MsGetDados (todo aCols).
cIniPos
Nome dos campos do tipo caracter que utilizaro
incremento automtico. Este parmetro deve ser
no formato +<nome do primeiro campo>+<nome
do segundo campo>+....
lApagar
Habilita deletar linhas do aCols. Valor padro falso.
aAlter
Vetor com os campos que podero ser alterados.
uPar1
Parmetro reservado.
lVazio
Habilita validao da primeira coluna do aCols para
esta no poder estar vazia. Valor padro falso.
nMax
Nmero mximo de linhas permitidas. Valor padro
99.
cCampoOk
Funo executada na validao do campo.
cSuperApagar Funo executada quando pressionada as teclas
<Ctrl>+<Delete>.
uPar2
Parmetro reservado.
cApagaOk
Funo executada para validar a excluso de uma
linha do aCols.
oWnd
Janela parent.

37

/*

Programa OBJ_MOD3 Autor Organon TI Consultoria Data 13/05/04

Desc.
Modelo 3 OOP.

Uso
APx

*/
User Function MOD3EXEC(_cAlias, _nRecNo, _nOpc)
Local _oDlg
Local _oBtn1, _oBtn2
Private nOpcA
//Seleciona area
dbSelectArea("SZ1")
dbSetOrder(1)

//Objeto de Dilogo
//Objetos de Botes
//Retorno da Enchoice Bar.
//Cabealho
//Filial + Codigo

//Cria as variaveis de memoria da enchoice


RegToMemory(_cAlias, If(_nOpc==3, .T., .F.))
//Cria as caixa de dilogo principal
_oDlg := TDialog():New(10,10,500,700,"Teste de Dilogo",,,,,,,,,.T.,,,,,)
_oDlg:lCentered := .T.
_oDlg:bInit
:= EnchoiceBar(_oDlg, {|| nOpcA:=1, If(U_MOD3TUDOK(), _oDlg:End(),;
nOpcA := 0)}, {|| _oDlg:End()})
//Cria os campos da enchoice.
Zero()
_oEnc := MsMGet():New(_cAlias, _nRecno, _nOpc,,,,,{012,000,070,345},,2,,,, _oDlg)
//Carrega as matrizes aHeader e aCols.
MONTAHEADER(_nOpc)
//Monta a estrutura da getdados.
_oGet1 := MsGetDados():New(70, 001, 210, 345, _nOpc,,,,.T.,,,,,,,,,_oDlg)
_oDlg:Activate()
//Se incluiu ou alterou algum registro, faz a gravao.
If nOpcA == 1 .and. (_nOpc == 3 .or. _nOpc == 4 .or. _nOpc == 5)
BeginTran()
ATUAMOD3(_nOpc)
EndTran()
Else
RollBackSX8()
EndIf
Return

38

A funo MOD3EXEC() cria uma caixa de dilogo e dentro dela monta o


modelo3. Na inicializao da janela, chamada no mtodo oDlg:bInit a
funo EnchoiceBar, que ser responsvel pela criao dos botes de
confirmao e cancelamento, alm de realizar a validao do modelo3
geral. O segundo parmetro identifica se foi confirmada a operao do
usurio e dispara a rotina U_MOD3TUDOK(), cujo retorno dever ser .T.
ou .F. dependendo da validao. Caso .F., no deixa encerrar a tela at
que o usurio corrija os campos errados ou em branco.
Subseqentemente chamada a classe MSMGET, que ir trazer os
dados do arquivo de cabealho na tela. Antes de chamar a classe
MSGETDADOS, a rotina MONTAHEADER executada para carregar os
dados dos vetores aHeader e aCols.
/*

Programa MONTAHEADER Autor Organon TI


Data 24/07/2003

Desc.
Rotina para criar as matrizes aHeader e aCols da GetDados.

Uso
AP6

*/
Static Function MONTAHEADER(_nOpc)
Local _nUsado := 0
Local _cNum
:= ""
aHeader := {}
aCols
:= {}
//Monta o aHeader.
_nUsado := 0
dbSelectArea("SX3")
dbSetOrder(1)
dbSeek("SZ2")
While !EOF() .and. SX3->X3_ARQUIVO == "SZ2"
If X3USO(SX3->X3_USADO) .and.;
cNivel >= SX3->X3_NIVEL .and.;
AllTrim(X3_CAMPO) <> ("Z2_CODIGO")
AADD(aHeader, {Trim(X3TITULO()),;
SX3->X3_CAMPO
,;
SX3->X3_PICTURE ,;
SX3->X3_TAMANHO ,;
SX3->X3_DECIMAL ,;
SX3->X3_VALID
,;
SX3->X3_USADO
,;
SX3->X3_TIPO
,;
SX3->X3_ARQUIVO ,;
SX3->X3_CONTEXT })
_nUsado++
Endif
dbSkip()

39

EndDo
//Monta o aCols.
//Opcao Inclui.
If _nOpc == 3
For x := 1 to Len("SZ2")
_nUsado := Len(aHeader)
aCols := {Array(_nUsado + 1)}
aCols[1, _nUsado + 1] := .F.
For y := 1 to _nUsado
aCols[1, y] := CriaVar(aHeader[y, 2], .F.)
Next y
Next x
//Monta o aCols.
//Visualiza, Altera e Exclui.
Else
_nUsado := Len(aHeader)
dbSelectArea("SZ2")
dbSeek(xFilial("SZ2") + M->Z1_CODIGO)
If Found()
While SZ2->Z2_CODIGO == M->Z1_CODIGO .and. !EOF()
AADD(aCols, Array(_nUsado + 1))
For y := 1 to _nUsado
aCols[Len(aCols), y] := FieldGet(FieldPos(aHeader[y, 2]))
Next
aCols[Len(aCols), _nUsado + 1] := .F.
dbSkip()
EndDo
//Se nao encontrar nenhum reg., abre um aCols em vazio apenas para exibir.
Else
nUsado := Len(aHeader)
aCols := {Array(_nUsado + 1)}
aCols[1, _nUsado + 1] := .F.
For y := 1 to _nUsado
aCols[1, y] := CriaVar(aHeader[y, 2], .F.)
Next y
EndIf
EndIf
Return

40

A funo MONTAHEADER ir verificar qual foi a opo selecionada pelo


usurio. Caso tenha escolhido incluso, abre um aCols com um registro
em branco. Nos demais casos ir varrer a tabela de itens e ir
armazenar em sua matriz como se fosse um filtro. Os dados podero ser
alterados dependendo da operao e conseqentemente o processo
inverso dever ser feito para atualizar a tabela. A rotina responsvel por
essa ao a ATUAMOD3.
/*

Programa ATUAMOD3 Autor Organon TI


Data 24/07/2003

Desc.
Rotina para gravar os dados da enchoice e das getdados do

modelo3.

Uso
AP6

*/
Static Function ATUAMOD3(_nOpc)
Local _cVar
Local bCampo

:= {|nCPO| Field(nCPO)}

//Inicia alteraes no cabecalho.

dbSelectArea("SZ1")
If _nOpc == 3
RecLock("SZ1", .T.)
Else
RecLock("SZ1", .F.)
EndIf
//Se estiver incluindo ou alterando grava o cabecalho (SZ1).
If _nOpc == 3 .or. _nOpc == 4
For x := 1 to FCount()
If "FILIAL" $ Field(x)
FieldPut(x, xFilial("SZ1"))
Else
FieldPut(x, M->&(EVAL(bCampo, x)))
EndIf
Next x
//Se nao estiver incluindo ou alterando exclui o cabecalho (SZ1).
Else
dbDelete()
EndIf
MsUnlock()
//Se estiver alterando, apaga os detalhes e cria novamente conforme aCols.

41

//Se for exlusao, apenas apaga.


If _nOpc == 4 .or. _nOpc == 5
dbSelectArea("SZ2")
dbSeek(xFilial("SZ2") + SZ1->Z1_CODIGO)
While SZ2->Z2_CODIGO == SZ1->Z1_CODIGO
RecLock("SZ2", .F.)
dbDelete()
MsUnlock()
dbSkip()
EndDo
EndIf
//Se estiver incluindo ou alterando, grava os Itens das GetDados.
If _nOpc == 3 .or. _nOpc == 4
For y := 1 to Len(aCols)
If aCols[y][Len(aCols[y])] == .F.
RecLock("SZ2", .T.)
FieldPut(FieldPos("Z2_FILIAL"), xFilial("SZ2"))
FieldPut(FieldPos("Z2_CODIGO"), M->Z1_CODIGO)
For z := 1 to Len(aHeader)
FieldPut(FieldPos(aHeader[z, 2]), aCols[y, z])
Next z
MsUnlock()
EndIf
Next y
EndIf
Return

Por ltimo deve ser desenvolvida a rotina de validao geral do


modelo3. Nessa rotina poderemos validar qualquer informao da
janela, sempre observando o retorno com valor lgico. Se retornar .F., a
janela no encerrar at que o usurio corrija as informaes de acordo
com a regra da funo.
/*

Programa MOD3TUDOK Autor Organon TI


Data 24/07/2003

Desc.
Validao geral do modelo 3.

Uso
AP6

*/
User Function MOD3TUDOK()

42

//Inclua aqui as validaes da tela modelo 3.


Return(.T.)

Criao de relatrios com qualidade grfica


Classe TMSPRINTER
A Classe TMSPRINTER inovou a maneira de produzir relatrios com o
ADVPL. Na programao estruturada os relatrios so impressos em
formato texto, com layout simples. Isso pode ser um problema uma vez
que podem surgir necessidades de implementaes com qualidade
grfica superior, formulrios com layout avanado, incluso de imagens
etc. Para resolver essa questo, utilizaremos a classe TMSPRINTER.
Sintaxe da Classe TMSPRINTER
[ <oPrn> := ] TMSPrinter():New()
Principais mtodos da classe TMSPRINTER

StartPage
SetPortrait
SetLandscape
IsPrinterActiv
e
Preview
Print
Setup
EndPage

Inicia uma nova pgina.


Ajusta relatrio no padro retrato.
Ajusta relatrio no padro paisagem.
Verifica se a impressora est ativa.
Exibe o gerenciador de impresso e o relatrio em
vdeo.
Direciona a impresso direto para a impressora.
Abre a caixa de setup de impressoras.
Encerra a pgina.

Principais mtodos para impresso de dados

Say
Exibe um texto no relatrio.
[ <oPrn> := ] TMSPrinter():Say(nLin, nCol, cTexto, oFont, nTam)

nLin
nCol
cTexto
oFont
nTam

Linha inicial.
Coluna inicial.
Texto a ser impresso.
Define a fonte do texto impresso.
Tamanho do texto.

43

SayBitmap
Exibe um bitmap no relatrio.
[ <oPrn> := ] TMSPrinter():SayBitmap(nLin, nCol, cBitmap, nWidth, nHeight)

nLin
nCol
cTexto
nWidth
nAlatura

Linha inicial.
Coluna inicial.
Nome do bitmap a ser impresso.
Largura do bitmap.
Altura do Bitmap.

Box
Imprime uma caixa no relatrio.
[ <oPrn> := ] TMSPrinter():Box(nLin, nCol, nWidth, nHeight)

nLin
nCol
nWidth
nAlatura

Linha inicial.
Coluna inicial.
Largura da caixa.
Altura da caixa.

Line
Imprime uma linha no relatrio.
[ <oPrn> := ] TMSPrinter():Line(nLin, nCol, nWidth, nHeight)

nLin
nCol
nWidth
nAlatura

Linha inicial.
Coluna inicial.
Largura da caixa.
Altura da caixa.

44

Cdigo fonte exemplo para impresso de relatrios com qualidade grfica


#include "protheus.ch"
/*

Programa OBJ_PRN Autor Organon TI Consultoria Data 16/04/04

Desc.
Exemplo de impresso de relatrio OOP grfico.

Uso
APx

*/
User Function OBJ_PRN()
Local
Local
Local
local
Local
Local
Local

oFont1
oFont2
oFont3
oFont4
oFont5
oFont6
oPrint

:=
:=
:=
:=
:=
:=

TFont():New("Arial",09,08,,.F.,,,,,.F.)
TFont():New("Arial",09,12,,.F.,,,,,.F.)
TFont():New("Arial Black",09,16,,.T.,,,,,.F.)
TFont():New("Arial",09,12,,.T.,,,,,.F.)
TFont():New("Courier New",09,18,,.T.,,,,,.F.)
TFont():New("Courier New",09,14,,.T.,,,,,.F.)

//Carrega classe de impresso


oPrint := TMSPrinter():New()
oPrint:StartPage()
oPrint:Box(0040,0040,0660,1400)
oPrint:SayBitmap(0050,0050,"LogoGM.bmp",
oPrint:Say(0060,0280,"Teste de impresso
oPrint:Say(0160,0280,"Teste de impresso
oPrint:Say(0260,0280,"Teste de impresso
oPrint:Say(0360,0280,"Teste de impresso
oPrint:Say(0460,0280,"Teste de impresso
oPrint:Say(0560,0280,"Teste de impresso

0200, 0200)
de relatrio",oFont1,100)
de relatrio",oFont2,100)
de relatrio",oFont3,100)
de relatrio",oFont4,100)
de relatrio",oFont5,100)
de relatrio",oFont6,100)

oPrint:EndPage()
oPrint:Preview()
Return

45

Rotinas de Web
Envio de e-mail pelo sistema (Send Mail) atravs de SMTP
O ADVPL possui rotinas de envio de e-mail atravs de SMTP. Esse
recurso pode ser muito til para envio de informaes do sistema pela
web. Basicamente o envio de e-mails feito por trs funes bsicas.
Durante o envio, temos a opo de enviar ainda arquivos anexos, com
cpia e cpia oculta. Tambm podemos selecionar o tipo de corpo de
mensagem, HTML ou texto.
Funo para conectar-se ao servidor
[<lResult>:=]MailSmtpOn( <cServer>, <cUser>, <cPass>, <nTimeOut> )

cServer
cUser
cPass
nTimeOut

Endereo IP do servidor.
Usurio para autenticao.
Senha de autenticao.
Time out.

Funo para envio da mensagem


[<lResult>:=]MailSend( <cFrom>, \{ <aTo> \}, \{ <aCc> \}, \{ <aBcc> \},
<cSubject>, <cBody>, \{ <aFiles> \}, <.lText.> ) ; ;

cFrom
aTo
aCc
aBcc
cSubject
cBody

E-mail do remetente.
Array contendo todos os destinatrios.
Array contendo destinatrios a copiar.
Array contendo destinatrios a copiar modo oculto.
Assunto da mensagem.
Corpo da mensagem.
46

aFiles
lText (.T./.F.)

Array contendo nome dos arquivos anexos.


Modo do corpo da mensagem, .T. - texto, .F.
HTML.

Funo para desconectar-se do servidor


[<lResult>:=]MailSmtpOff()

Cdigo fonte exemplo para envio de e-mails pelo sistema


#include "protheus.ch"
/*

Programa OBJ_EML Autor Organon TI Consultoria Data 16/04/04

Desc.
Exemplo de envio de e-mail pelo sistema.

Uso
APx

*/
User Function OBJ_EML()
Local lResult
Local cBody := '<p><font face="Arial">Teste de envio de e-mail...</font></p>'
//Conecta com o servidor SMTP na conta especificada
lResult := MailSmtpOn("200.157.215.4","organon@organon-ti.com.br","XXXXXX",100)
If !lResult
MsgInfo("No foi possvel conectar-se ao servidor SMTP...","Ateno")
EndIf
//Envia o e-mail
lResult := MailSend("organon@organon-ti.com.br",{"info@organon-ti.com.br"},,,;
"Teste de envio de email",cBody,,.F.)
If !lResult
MsgInfo("No foi possvel enviar a mensagem para a conta especificada...","Ateno")
EndIf
//Desconecta do servidor SMTP
lResult := MailSmtpOff()
If !lResult
MsgInfo("Erro ao tentar desconectar-se do servidor SMTP...","Ateno")
EndIf
Return

47

48

Anda mungkin juga menyukai