ndice
______________________________________________________________________________________________________________
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
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
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
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.
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.)
bLClicked
bRClicked
bLDblClick
bGotFocus
bLostFocus
bKeyDown
lFocused
End
Destroy
SetFocus
Refresh
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
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
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.
bLClicked
bRClicked
bLDblClick
bValid
bInit
bWhen
bGotFocus
bLostFocus
bKeyDown
lFocused
End
Destroy
SetFocus
Refresh
Desc.
Exemplo de criao de um objeto de dilogo simples.
Uso
APx
*/
User Function OBJ_DLG()
Local oDlg
//Objeto de Dilogo
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
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.
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.
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
15
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
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
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
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.
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.
18
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
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 (***).
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
CheckBox
21
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.
Desc.
Exemplo de criao de checkbox.
Uso
APx
*/
User Function OBJ_CBX()
Local _oDlg
//Objeto de Dilogo
22
//Objetos de Botes
//Objeto CheckBox
//Varivel para armazenar seleo do usurio
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.
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")
24
_oDlg:Activate()
Return
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.
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")
26
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).
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")
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
oFolder
:SetOption(n)
oFolder
:aDialogs[n]
Cdigo fonte exemplo para criao de mltiplos Folders com vrios objetos
dentro
#include "protheus.ch"
/*
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:Activate()
Return
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.
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
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
33
Enchoice
GetDado
s
Rodap
CAlias
nReg
uPar1
uPar2
uPar3
aAcho
aPos
aCpos
uPar4
uPar5
uPar6
uPar7
oWnd
uPar8
lMemoria
lColuna
uPar9
lSemPastas
35
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
36
nSuperior
37
/*
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
38
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
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)}
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
Desc.
Validao geral do modelo 3.
Uso
AP6
*/
User Function MOD3TUDOK()
42
StartPage
SetPortrait
SetLandscape
IsPrinterActiv
e
Preview
Print
Setup
EndPage
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
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.)
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.
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.)
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