Escolar Documentos
Profissional Documentos
Cultura Documentos
1
Índice
______________________________________________________________________________________________________________
Introdução à Linguagem Orientada a Objetos..............4
Conceitos Básicos da OOP..........................................4
Classe..................................................................................................................................4
Objeto..................................................................................................................................4
Mensagem...........................................................................................................................5
Método................................................................................................................................5
Método CONSTRUCTOR..............................................................................................5
Método DESTRUCTOR.................................................................................................5
Eventos................................................................................................................................5
Herança...............................................................................................................................6
Encapsulamento..................................................................................................................6
Criação de Janelas padrão OOP...................................7
Sintaxe do método Constructor da classe TWindow:..........................................................8
Propriedades dos objetos da classe TWindow.....................................................................8
Principais propriedades de estilo de janela.....................................................................9
Tabela de cores padrão..................................................................................................10
Métodos da classe TWindow.............................................................................................11
Sintaxe do método Activate...........................................................................................11
Exemplo de Código Fonte para Criação de um Objeto de Janela.....................................12
Caixas de Diálogo no padrão OOP.............................13
Sintaxe do método Constructor da classe TDialog:..........................................................13
Propriedades dos objetos da classe TWindow...................................................................13
Principais propriedades de estilo de caixas de diálogo.................................................14
Tabela de cores padrão..................................................................................................14
Métodos da classe TDialog...............................................................................................15
Sintaxe do método Activate..........................................................................................15
Exemplo de Código Fonte para Criação de Objeto de Janela...........................................16
Objetos de Controle.................................................17
Botões................................................................................................................................17
Sintaxe da Classe TBUTTON.......................................................................................17
Sintaxe da Classe SBUTTON.......................................................................................18
Exemplos de Código Fonte para Criação de um Objetos de botões.................................19
Código Fonte exemplo para criação de botões simples................................................19
Código fonte exemplo para criação de botões com bitmap..........................................20
Rótulos de Texto................................................................................................................22
Sintaxe da Classe TSAY................................................................................................22
Seleção de fontes para o objeto de rótulo de texto........................................................23
Sintaxe da classe TFont.............................................................................................23
Exemplo de criação de um objeto de fonte...............................................................23
Código fonte exemplo para criação de rótulos..............................................................24
Caixas de Texto.................................................................................................................25
Sintaxe da Classe TGET...............................................................................................25
Código fonte exemplo para criação de caixas de texto.................................................26
CheckBox..........................................................................................................................27
Sintaxe da Classe TCheckBox......................................................................................27
2
Código fonte exemplo para criação de CheckBoxes.....................................................28
ComboBox........................................................................................................................29
Sintaxe da Classe TComboBox.....................................................................................29
Código fonte exemplo para criação de ComboBoxes...................................................30
ListBox..............................................................................................................................31
Sintaxe da Classe TListBox..........................................................................................32
Código fonte exemplo para criação de ListBoxes.........................................................32
Radio Button.....................................................................................................................33
Sintaxe da Classe TRadMenu.......................................................................................34
Código fonte exemplo para criação de Radio Button...................................................35
Folders...............................................................................................................................36
Sintaxe da Classe TFolder.............................................................................................36
Métodos importantes da classe TFolder........................................................................36
Código fonte exemplo para criação de múltiplos Folders com vários objetos dentro. .37
Browse...............................................................................................................................38
Sintaxe da Classe TWBrowse.......................................................................................38
Código fonte exemplo para criação de browse completo.............................................39
Criação de janelas mestre-detalhe OOP.....................41
Modelo 3...........................................................................................................................41
Sintaxe da classe MSMGET.........................................................................................42
Construindo um código fonte para criação de um modelo 3.........................................43
Sintaxe da classe MSMGET.........................................................................................44
Criação de relatórios com qualidade gráfica..............51
Classe TMSPRINTER.......................................................................................................51
Sintaxe da Classe TMSPRINTER.................................................................................51
Principais métodos da classe TMSPRINTER...............................................................51
Principais métodos para impressão de dados................................................................51
Say.............................................................................................................................51
SayBitmap.................................................................................................................52
Box............................................................................................................................52
Line...........................................................................................................................52
Código fonte exemplo para impressão de relatórios com qualidade gráfica.................53
Rotinas de Web........................................................54
Envio de e-mail pelo sistema (Send Mail) através de SMTP............................................54
Função para conectar-se ao servidor.............................................................................54
Função para envio da mensagem..................................................................................54
Função para desconectar-se do servidor........................................................................55
Código fonte exemplo para envio de e-mails pelo sistema...........................................55
Workflow...........................................................................................................................56
Configuração dos parâmetros do workflow..................................................................56
Configuração doAgendamento do envio do workflow.................................................58
Configuração doAgendamento do envio do workflow.................................................58
Configuração do JOB no APxsrv.ini.............................................................................58
Código fonte para iniciar o job do workflow................................................................59
Ponto de entrada chamado na confirmação do cadastro de produtos............................59
Rotina de tratamento do retorno do workflow..............................................................60
Rotina de tratamento do Timeout do workflow............................................................61
Código fonte HTML utilizado no exemplo de atualização de preços pelo workflow. .61
3
Introdução à Linguagem Orientada a Objetos
A programação orientada à objetos é uma modalidade de
desenvolvimento de software que difere muito da conhecida linguagem
procedural que usamos no dia-a-dia.
Ela apresenta uma estratégia diferenciada de organizar, planejar,
escrever, atualizar e fazer manutenção do software.
As linguagens de alto nível representam uma conexão inteligente entre
o programador e o computador. Sua evolução é paralela às técnicas e
métodos do desenvolvimento do software, sendo inspirada pelo anseio
de criar componentes de softwares robustos e reutilizáveis que reduzem
os ciclos e o tempo da produção do software. Esta diminuição no tempo
de produção é ainda mais relevante quando uma equipe de
programadores está trabalhando em um projeto de software.
A história das linguagens de programação reflete a evolução de
linguagens estruturadas e destas para as orientadas ao objeto. As
linguagens estruturadas são linguagens procedurais, onde um programa
é particionado em um conjunto de procedimentos e funções. A
seqüência de rotinas descreve como os dados são manipulados.
Especificamente, o programador controla a interação entre o código e os
dados. O foco principal das linguagens procedurais é a rotina, enquanto
foco secundário são os dados que estão sendo manipulados.
Objeto
Um objeto é um membro de uma classe, tendo em si todas as
características da classe na qual foi herdado. Suas propriedades são
protegidas por conceitos de encapsulamento.
Mensagem
Uma mensagem é uma solicitação enviada a um objeto para chamar
um de seus métodos. Também podem ser acionadas por algum evento.
4
Método
Um método é o procedimento ou função chamado para atuar num
objeto. Um método define como uma mensagem deve ser executada.
A OOP (Programação Orientada a Objetos) permite uma abordagem mais
simples para a utilização de dados usando objetos que respondem a
mensagens. Esta abordagem demonstra uma noção de que objetos em
um programa são similares a alunos em uma sala de aula – você passa
um exercício ou um trabalho para um aluno ou à um grupo de alunos (o
objeto, neste caso) solicitando que lhe seja apresentado uma solução
para um determinado problema. Supondo-se que o trabalho seja
passado ao aluno ou grupo certo, ele responderá usando sua experiência
e recursos. O método pelo qual o trabalho é executado depende do
objeto receptor (aluno). Os detalhes da resposta são transparentes ao
professor (emissor da mensagem). Todo objeto por regra possui um
método CONSTRUCTOR e um método DESTRUCTOR.
Método CONSTRUCTOR
É o responsável por ativar o objeto durante a execução de uma rotina. Esse
método aloca o objeto na memória e o torna disponível para uso. O objeto será
carregado com todas suas propriedades e particularidades. Somente após o
método CONSTRUCTOR ser disparado é que poderemos em seguida acertar
suas propriedades e eventos. No ADVPL, o método CONSTRUCTOR é chamado
pela cláusula New(), como veremos nos exercícios a seguir.
Método DESTRUCTOR
Após a sua utilização, cada objeto deve ser removido da memória, para que no
decorrer da aplicação a performance não seja degradada. Para isso, utilizaremos
o método DESTRUCTOR. No ADVPL, os métodos a serem utilizados são End() ou
Destroy().
Eventos
Evento nada mais é do que uma ação acontecendo em um determinado
momento no objeto. Na programação OOP, um evento pode disparar
outras rotinas e modificar o processamento. Foi criado para interagir
com as ações do usuário determinando o processamento de forma
inteligente. Vamos imaginar uma tela de entrada de dados. Podemos ter
vários eventos relacionados ao usuário que a estiver operando, como
por exemplo, o clique de um mouse, o movimento do cursor do mouse
sobre algum campo, a seleção de uma determinada tecla, entre outros.
Dependendo da ação, determinamos o que será executado e haverá
interação com o usuário.
Herança
Uma outra característica da OOP é a herança, um recurso que produz
um grande efeito, que lhe permite criar subclasses. Cada subclasse
recebe as características de sua classe-mãe (da mesma forma que uma
criança traz consigo características peculiares de seus pais). Uma
5
subclasse acrescenta novos atributos às classes herdadas e pode
também substituir qualquer atributo herdado.
Encapsulamento
Uma das principais características da OOP é o encapsulamento, pois
evita que o programador não precise acessar diretamente os campos de
dados de um objeto. Para isto é necessário criar métodos que serão os
responsáveis pelo tratamento de dados.
Encapsulamento na verdade é unir numa única estrutura, campos de
dados e códigos que agirão sobre eles (métodos). O grande benefício do
encapsulamento é que o programador trabalha voltado única e
exclusivamente ao campo de dados que deseja atingir com seu código.
Outra grande vantagem a ser considerada é a proteção do código
interno, fazendo com que rotinas externas não interfiram diretamente
em seu código.
6
A classe que utilizaremos para criação de janelas no ADVPL é a
TWINDOW. Essa classe será responsável pela geração da caixa
retangular com todas as características de uma tela padrão, onde dentro
dela deverão ser inseridos novos objetos de acordo com a necessidade.
A classe TWINDOW possui grande flexibilidade em seu
desenvolvimento, permitindo a criação de janelas em tamanhos
definidos, título, botões de maximizar e minimizar, cores de fundo, além
de uma grande funcionalidade para desenvolvedores que utilizam a
programação estruturada, a possibilidade de criar janelas baseadas em
pixel na mesma métrica das janelas em modo texto.
<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.>)
7
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_OVERLAPPED
WS_EX_DLGMODALFRAME WS_POPUP
WS_EX_LEFTSCROLLBAR WS_SYSMENU
WS_EX_MDICHILD WS_THICKFRAME
WS_EX_NOPARENTNOTIFY WS_VISIBLE
WS_EX_RIGHT WS_VSCROLL
WS_EX_RTLREADING
oMenu Não utilizado.
oBrush Não utilizado.
oIcon Não utilizado.
oParent Identifica qual é o objeto pai. Se não declarado,
assume a janela principal do sistema.
vScroll Não utilizado.
hScroll Não utilizado.
nClrFore Não utilizado.
Tabela de cores
Low Intensity colors padrão High Intensity Colors
CLR_BLACK CLR_GRAY
CLR_BLUE CLR_HBLUE
CLR_GREEN CLR_HGREEN
CLR_CYAN CLR_HCYAN
CLR_RED CLR_HRED
CLR_MAGENTA CLR_HMAGENTA
CLR_BROWN CLR_YELLOW
CLR_HGRAY CLR_WHITE
CLR_LIGHTGRAY
CLR_HGRAY
oCursor Não utilizado.
Border Não utilizado.
SysMenu .T. exibe botão sysmenu, .F. inibe.
(.T./.F.)
Caption (.T./.F.) .T. exibe titulo da janela, .F. inibe.
Iconize Não utilizado.
Maximize .T. exibe botão maximize, .F. inibe.
8
(.T./.F.)
Pixel (.T./.F.) Define tipo de posicionamento e métrica da janela,
.T. em pixels, .F., modo texto (80/24).
<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 Bloco de código disparado quando acionado botão
esquerdo do mouse.
bRClicked Bloco de código disparado quando acionado botão
direito do mouse.
bLDblClick Bloco de código disparado quando acionado duplo
clique do mouse.
bGotFocus Bloco de código disparado quando a janela pega o
foco para si. Equivale à cláusula when.
bLostFocus Bloco de código disparado quando a janela perde o
foco. Equivale à cláusula valid.
9
bKeyDown Bloco de código disparado quando pressionada
uma tecla. Equivale à cláusula inkey(0).
Ex.: oWnd:bKeyDown := { | nKey,nFlags | MiFuncion (nKey) }
lFocused .T. está com o foco, .F. não está com foco.
End Método de finalização do objeto.
Destroy Método destructor do objeto.
SetFocus Força a obtenção do foco.
Refresh Executa a atualização dos controles da tela.
#include "protheus.ch"
/*
ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
±±ÉÍÍÍÍÍÍÍÍÍÍÑÍÍÍÍÍÍÍÍÍÍËÍÍÍÍÍÍÍÑÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍËÍÍÍÍÍÍÑÍÍÍÍÍÍÍÍÍÍÍÍÍ»±±
±±ºPrograma ³ OBJ_JAN ºAutor ³ Organon TI Consultoria º Data ³ 13/05/04 º±±
±±ÌÍÍÍÍÍÍÍÍÍÍØÍÍÍÍÍÍÍÍÍÍÊÍÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÊÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍ͹±±
±±ºDesc. ³ Exemplo de criação de um objeto de janela simples. º±±
±±º ³ º±±
±±ÌÍÍÍÍÍÍÍÍÍÍØÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ͹±±
±±ºUso ³ APx º±±
±±ÈÍÍÍÍÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ±±
±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
*/
User Function OBJ_JAN()
Return
WS_EX_CONTEXTHELP WS_OVERLAPPED
WS_EX_DLGMODALFRAME WS_POPUP
WS_EX_LEFTSCROLLBAR WS_SYSMENU
WS_EX_MDICHILD WS_THICKFRAME
WS_EX_NOPARENTNOTIFY WS_VISIBLE
WS_EX_RIGHT WS_VSCROLL
WS_EX_RTLREADING
nClrText Não utilizado.
11
nClrBack Seleciona a cor de fundo da janela. Default:
branca.
Tabela de cores
Low Intensity colors padrão High Intensity Colors
CLR_BLACK CLR_GRAY
CLR_BLUE CLR_HBLUE
CLR_GREEN CLR_HGREEN
CLR_CYAN CLR_HCYAN
CLR_RED CLR_HRED
CLR_MAGENTA CLR_HMAGENTA
CLR_BROWN CLR_YELLOW
CLR_HGRAY CLR_WHITE
CLR_LIGHTGRAY
CLR_HGRAY
oBrush Não utilizado.
oWnd Parent da caixa de diálogo.
Pixel (.T./.F.) Define tipo de posicionamento e métrica da janela,
.T. em pixels, .F., modo texto (80/24).
oIco Não utilizado.
oFont Não utilizado.
nHelpID Não utilizado.
nWidth Não utilizado.
nHeight Não utilizado.
<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 Bloco de código disparado quando acionado botão
esquerdo do mouse.
bRClicked Bloco de código disparado quando acionado botão
direito do mouse.
bLDblClick Bloco de código disparado quando acionado duplo
clique do mouse.
12
bValid Bloco de código para validar a saída da janela.
bInit Bloco de código para validar a inicialização da
janela.
bWhen Bloco de código para validar a inicialização da
janela antes de ser desenhada na tela.
bGotFocus Bloco de código disparado quando a janela pega o
foco para si. Equivale à cláusula when.
bLostFocus Bloco de código disparado quando a janela perde o
foco. Equivale à cláusula valid.
bKeyDown Bloco de código disparado quando pressionada
uma tecla. Equivale à cláusula inkey(0).
Ex.: oWnd:bKeyDown := { | nKey,nFlags | MiFuncion (nKey) }
lFocused .T. está com o foco, .F. não está com foco.
End Método de finalização do objeto.
Destroy Método destructor do objeto.
SetFocus Força a obtenção do foco.
Refresh Executa a atualização dos controles da tela.
#include "protheus.ch"
/*
ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
±±ÉÍÍÍÍÍÍÍÍÍÍÑÍÍÍÍÍÍÍÍÍÍËÍÍÍÍÍÍÍÑÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍËÍÍÍÍÍÍÑÍÍÍÍÍÍÍÍÍÍÍÍÍ»±±
±±ºPrograma ³ OBJ_DLG ºAutor ³ Organon TI Consultoria º Data ³ 13/05/04 º±±
±±ÌÍÍÍÍÍÍÍÍÍÍØÍÍÍÍÍÍÍÍÍÍÊÍÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÊÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍ͹±±
±±ºDesc. ³ Exemplo de criação de um objeto de diálogo simples. º±±
±±º ³ º±±
±±ÌÍÍÍÍÍÍÍÍÍÍØÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ͹±±
±±ºUso ³ APx º±±
±±ÈÍÍÍÍÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ±±
±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
*/
User Function OBJ_DLG()
oDlg:Activate(,,,,,.F.)
Return
Objetos de Controle
A grande finalidade da criação das janelas e caixas de diálogo é a
interação com os usuários durante o processamento de suas rotinas.
Para isso devem ser utilizados objetos de controle como botões, caixas
13
de texto, radio button, chekbox entre outros. Abaixo estão descritos os
objetos necessários para criação de janelas personalizadas para diversas
finalidades. Sempre que utilizarmos os objetos de controle, não podemos
esquecer de informar a propriedade oParent de cada um, apontando
para a janela na qual o objeto irá pertencer.
Botões
Botões são utilizados para dispararem eventos e rotinas dentro de uma
janela. OADVPL possui dois tipos de botões, derivados da classe
TBUTTON (Botão simples) e SBUTTON (botão estilo speed button, com
bitmap).
14
nType Texto do botão.
Action Bloco de código com a rotina a ser disparada.
oWnd Janela parent.
Mode Não utilizado.
cMsg Mensagem estilo Hint com a descrição do botão.
Update Não utilizado.
When Bloco de código que valida a execução da ação do
botão, antes de executar.
//Exibe botões
_oBtn1 := TButton():New(130,180,"Botão 1",_oDlg,{|| MSGInfo("Teste de
botão","Teste")},30,12,,,.T.,.T.,,"Teste",,,,)
_oBtn2 := TButton():New(130,210,"Fechar",_oDlg,{|| _oDlg:End()},30,12,,,.T.,.T.,,"Fechar",,,,)
_oDlg:Activate()
Return
15
Código fonte exemplo para criação de botões com bitmap.
#include "protheus.ch"
/*
ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
±±ÉÍÍÍÍÍÍÍÍÍÍÑÍÍÍÍÍÍÍÍÍÍËÍÍÍÍÍÍÍÑÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍËÍÍÍÍÍÍÑÍÍÍÍÍÍÍÍÍÍÍÍÍ»±±
±±ºPrograma ³ OBJ_BTN2 ºAutor ³ Organon TI Consultoria º Data ³ 13/05/04 º±±
±±ÌÍÍÍÍÍÍÍÍÍÍØÍÍÍÍÍÍÍÍÍÍÊÍÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÊÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍ͹±±
±±ºDesc. ³ Exemplo de criação de um objeto de diálogo simples, com botões º±±
±±º ³ de bitmap. º±±
±±ÌÍÍÍÍÍÍÍÍÍÍØÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ͹±±
±±ºUso ³ APx º±±
±±ÈÍÍÍÍÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ±±
±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
*/
User Function OBJ_BTN2()
16
_oBtn15 := SButton():New(060,070,15,{|| MSGInfo("Tipo 15","Informação")},_oDlg,,"Tipo 15")
_oBtn16 := SButton():New(080,070,17,{|| MSGInfo("Tipo 16","Informação")},_oDlg,,"Tipo 16")
_oBtn17 := SButton():New(100,070,18,{|| MSGInfo("Tipo 17","Informação")},_oDlg,,"Tipo 17")
_oBtn18 := SButton():New(120,070,19,{|| MSGInfo("Tipo 18","Informação")},_oDlg,,"Tipo 18")
_oBtn19 := SButton():New(020,100,20,{|| MSGInfo("Tipo 19","Informação")},_oDlg,,"Tipo 19")
_oBtn20 := SButton():New(040,100,21,{|| MSGInfo("Tipo 20","Informação")},_oDlg,,"Tipo 20")
_oBtn21 := SButton():New(060,100,22,{|| MSGInfo("Tipo 21","Informação")},_oDlg,,"Tipo 21")
_oBtn22 := SButton():New(080,100,23,{|| MSGInfo("Tipo 22","Informação")},_oDlg,,"Tipo 22")
_oDlg:Activate()
Return
Rótulos de Texto
Rótulos são muito importantes para a definição de campos na tela, bem
como exibição de texto livre. A Classe responsável pela criação de
rótulos é a TSAY.
17
[ <oSay> := ] TSay():New( <nRow>, <nCol>, <{cText}>,[<oWnd>], [<cPict>],;
<oFont>, <.lCenter.>, <.lRight.>, <.lBorder.>, <.lPixel.>, <nClrText>,
<nClrBack>, <nWidth>, <nHeight>)
Objetos de rótulo de texto podem ter seu fonte padrão alterado para
outro qualquer encontrado no sistema operacional. Para isso, deve ser
criado um objeto derivado da classe TFONT que terá as características
do fonte selecionado. Após carregar o objeto de fonte, basta declara-lo
na propriedade oFont do rótulo de texto.
<oFont> := TFont():New(<cName>,<nWidth>,<nHeight>,<.from.>,
[<.bold.>],<nEscapement>,,<nWeight>,[<.italic.>])
_oFont := TFont():New("Arial",09,12,,.T.,,,,.T.)
18
ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
±±ÉÍÍÍÍÍÍÍÍÍÍÑÍÍÍÍÍÍÍÍÍÍËÍÍÍÍÍÍÍÑÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍËÍÍÍÍÍÍÑÍÍÍÍÍÍÍÍÍÍÍÍÍ»±±
±±ºPrograma ³ OBJ_SAY ºAutor ³ Organon TI Consultoria º Data ³ 13/05/04 º±±
±±ÌÍÍÍÍÍÍÍÍÍÍØÍÍÍÍÍÍÍÍÍÍÊÍÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÊÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍ͹±±
±±ºDesc. ³ Exemplo de criação de texto livre na janela. º±±
±±º ³ º±±
±±ÌÍÍÍÍÍÍÍÍÍÍØÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ͹±±
±±ºUso ³ APx º±±
±±ÈÍÍÍÍÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ±±
±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
*/
User Function OBJ_SAY()
_oDlg:Activate()
Return
19
Caixas de Texto
Caixas de texto são objetos importantes para entrada de dados. Através
desse objeto pode-se editar valores de campos para serem processados.
20
±±ÉÍÍÍÍÍÍÍÍÍÍÑÍÍÍÍÍÍÍÍÍÍËÍÍÍÍÍÍÍÑÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍËÍÍÍÍÍÍÑÍÍÍÍÍÍÍÍÍÍÍÍÍ»±±
±±ºPrograma ³ OBJ_GET ºAutor ³ Organon TI Consultoria º Data ³ 13/05/04 º±±
±±ÌÍÍÍÍÍÍÍÍÍÍØÍÍÍÍÍÍÍÍÍÍÊÍÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÊÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍ͹±±
±±ºDesc. ³ Exemplo de criação de caixas de texto e rótulos. º±±
±±º ³ º±±
±±ÌÍÍÍÍÍÍÍÍÍÍØÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ͹±±
±±ºUso ³ APx º±±
±±ÈÍÍÍÍÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ±±
±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
*/
User Function OBJ_GET()
_oDlg:Activate()
Return
CheckBox
21
A classe TCHECKBOX criará uma caixa de “marca/desmarca” na janela.
Seu funcionamento consiste em armazenar em uma variável lógica a
seleção do usuário, sendo .T. para marcado e .F. para desmarcado.
_oDlg:Activate()
Return
ComboBox
23
nRow Linha inicial.
nCol Coluna inicial.
bSetGet Variável que conterá o valor selecionado do objeto.
aItens Array contendo a lista de itens do objeto.
nWidth Tamanho do objeto.
nHeight Alturado objeto.
oWnd Janela parent.
nHelpID Não utilizado.
Change Bloco de código disparado com o evento alteração
no objeto.
Valid Bloco de código disparado para validar o objeto.
nClrText Define a cor do texto do objeto.
nClrBack Define a cor de fundo do objeto.
Pixel (.T./.F.) Define tipo de posicionamento e métrica da
janela, .T. em pixels, .F., modo texto (80/24).
oFont Objeto de seleção de fonte para o texto do objeto.
cMsg Mensagem estilo hint do objeto.
Update Não utilizado.
When Bloco de código para validar a entrada no objeto.
24
_oDlg:Activate()
Return
ListBox
25
nCol Coluna inicial.
bSetGet Variável que conterá o valor selecionado do objeto.
aList Array contendo a lista de itens do objeto.
nWidth Tamanho do objeto.
nHeight Alturado objeto.
Change Bloco de código disparado com o evento alteração
no objeto.
oWnd Janela parent.
Valid Bloco de código disparado para validar o objeto.
nClrFore Não utilizado.
nClrBack Define a cor de fundo do objeto.
Pixel (.T./.F.) Define tipo de posicionamento e métrica da
janela, .T. em pixels, .F., modo texto (80/24).
Design Não utilizado.
DblClick Bloco de código disparado no evento de duplo
clique.
oFont Objeto de seleção de fonte para o texto do objeto.
cMsg Mensagem estilo hint do objeto.
Update Não utilizado.
When Bloco de código para validar a entrada no objeto.
26
//Exibe o objeto ListBox
oLbx := TListBox():New(10,10,bSetGet(_cVar),_aVar,100,50,,_oDlg,,,,.T.)
_oDlg:Activate()
Return
Radio Button
_oDlg:Activate()
Return
28
Folders
Código fonte exemplo para criação de múltiplos Folders com vários objetos
dentro
#include "protheus.ch"
/*
ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
±±ÉÍÍÍÍÍÍÍÍÍÍÑÍÍÍÍÍÍÍÍÍÍËÍÍÍÍÍÍÍÑÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍËÍÍÍÍÍÍÑÍÍÍÍÍÍÍÍÍÍÍÍÍ»±±
±±ºPrograma ³ OBJ_FLD ºAutor ³ Organon TI Consultoria º Data ³ 13/05/04 º±±
±±ÌÍÍÍÍÍÍÍÍÍÍØÍÍÍÍÍÍÍÍÍÍÊÍÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÊÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍ͹±±
±±ºDesc. ³ Exemplo de criação de Folders. º±±
±±º ³ º±±
±±ÌÍÍÍÍÍÍÍÍÍÍØÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ͹±±
±±ºUso ³ APx º±±
±±ÈÍÍÍÍÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ±±
±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
*/
User Function OBJ_FLD()
_oDlg:Activate()
Return
30
Browse
31
cField Não utilizado.
Value1 Não utilizado.
Value2 Não utilizado.
Change Bloco de código disparado na alteração do objeto.
bLDblClick Bloco de código disparado no duplo clique do
mouse.
bRClick Bloco de código disparado no clique do botão
direito.
oFont Define a fonte padrão do objeto.
oCursor Não utilizado.
nClrFore Não utilizado.
nClrBack Define a cor de fundo do objeto.
cMsg Exibe mensagem estilo hint no objeto.
Update Não utilizado.
cAlias Não utilizado.
Pixel (.T./.F.) Define tipo de posicionamento e métrica da
janela, .T. em pixels, .F., modo texto (80/24).
When Bloco de código disparado na entrada do objeto.
Design Não utilizado.
Valid Bloco de código disparado na validação do objeto.
Código fonte exemplo para criação de browse completo
#include "protheus.ch"
/*
ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
±±ÉÍÍÍÍÍÍÍÍÍÍÑÍÍÍÍÍÍÍÍÍÍËÍÍÍÍÍÍÍÑÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍËÍÍÍÍÍÍÑÍÍÍÍÍÍÍÍÍÍÍÍÍ»±±
±±ºPrograma ³ OBJ_BRW ºAutor ³ Organon TI Consultoria º Data ³ 13/05/04 º±±
±±ÌÍÍÍÍÍÍÍÍÍÍØÍÍÍÍÍÍÍÍÍÍÊÍÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÊÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍ͹±±
±±ºDesc. ³ Exemplo de criação de Browse. º±±
±±º ³ º±±
±±ÌÍÍÍÍÍÍÍÍÍÍØÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ͹±±
±±ºUso ³ APx º±±
±±ÈÍÍÍÍÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ±±
±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
*/
User Function OBJ_BRW()
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
Criação de janelas mestre-detalhe OOP
Modelo 3
Enchoice
GetDado
s
Rodapé
35
Construindo um código fonte para criação de um modelo 3
dbSelectArea("SZ1")
MBrowse(006, 001, 022, 075, "SZ1")
Return
36
Sintaxe da classe MSMGET
37
/*
ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
±±ÉÍÍÍÍÍÍÍÍÍÍÑÍÍÍÍÍÍÍÍÍÍËÍÍÍÍÍÍÍÑÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍËÍÍÍÍÍÍÑÍÍÍÍÍÍÍÍÍÍÍÍÍ»±±
±±ºPrograma ³ OBJ_MOD3 ºAutor ³ Organon TI Consultoria º Data ³ 13/05/04 º±±
±±ÌÍÍÍÍÍÍÍÍÍÍØÍÍÍÍÍÍÍÍÍÍÊÍÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÊÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍ͹±±
±±ºDesc. ³ Modelo 3 OOP. º±±
±±º ³ º±±
±±ÌÍÍÍÍÍÍÍÍÍÍØÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ͹±±
±±ºUso ³ APx º±±
±±ÈÍÍÍÍÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ±±
±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
*/
User Function MOD3EXEC(_cAlias, _nRecNo, _nOpc)
//Seleciona area
dbSelectArea("SZ1") //Cabeçalho
dbSetOrder(1) //Filial + Codigo
_oDlg:Activate()
BeginTran()
ATUAMOD3(_nOpc)
EndTran()
Else
RollBackSX8()
EndIf
Return
38
A função MOD3EXEC() cria uma caixa de diálogo e dentro dela monta o
modelo3. Na inicialização da janela, é chamada no método oDlg:bInit a
função EnchoiceBar, que será responsável pela criação dos botões de
confirmação e cancelamento, além de realizar a validação do modelo3
geral. O segundo parâmetro identifica se foi confirmada a operação do
usuário e dispara a rotina U_MOD3TUDOK(), cujo retorno dever ser .T.
ou .F. dependendo da validação. Caso .F., não deixa encerrar a tela até
que o usuário corrija os campos errados ou em branco.
Subseqüentemente é chamada a classe MSMGET, que irá trazer os
dados do arquivo de cabeçalho 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)
For y := 1 to _nUsado
aCols[1, y] := CriaVar(aHeader[y, 2], .F.)
Next y
Next x
//Monta o aCols.
Else
_nUsado := Len(aHeader)
dbSelectArea("SZ2")
dbSeek(xFilial("SZ2") + M->Z1_CODIGO)
If Found()
For y := 1 to _nUsado
Next
dbSkip()
EndDo
//Se nao encontrar nenhum reg., abre um aCols em vazio apenas para exibir.
Else
nUsado := Len(aHeader)
For y := 1 to _nUsado
Next y
EndIf
EndIf
Return
40
A função MONTAHEADER irá verificar qual foi a opção selecionada pelo
usuário. Caso tenha escolhido inclusão, 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 poderão ser
alterados dependendo da operação e conseqüentemente o processo
inverso deverá ser feito para atualizar a tabela. A rotina responsável por
essa ação é 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)}
RecLock("SZ1", .T.)
Else
RecLock("SZ1", .F.)
EndIf
If "FILIAL" $ Field(x)
FieldPut(x, xFilial("SZ1"))
Else
EndIf
Next x
dbDelete()
EndIf
MsUnlock()
dbSelectArea("SZ2")
dbSeek(xFilial("SZ2") + SZ1->Z1_CODIGO)
While SZ2->Z2_CODIGO == SZ1->Z1_CODIGO
RecLock("SZ2", .F.)
dbDelete()
MsUnlock()
dbSkip()
EndDo
EndIf
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)
Next z
MsUnlock()
EndIf
Next y
EndIf
Return
/*
ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
±±ÉÍÍÍÍÍÍÍÍÍÍÑÍÍÍÍÍÍÍÍÍÍÍËÍÍÍÍÍÍÍÑÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍËÍÍÍÍÍÍÑÍÍÍÍÍÍÍÍÍÍÍÍ»±±
±±ºPrograma ³ MOD3TUDOK º Autor ³ Organon TI º Data ³ 24/07/2003 º±±
±±ÌÍÍÍÍÍÍÍÍÍÍØÍÍÍÍÍÍÍÍÍÍÍÊÍÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÊÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍ͹±±
±±ºDesc. ³ Validação geral do modelo 3. º±±
±±ÌÍÍÍÍÍÍÍÍÍÍØÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ͹±±
±±ºUso ³ AP6 º±±
±±ÈÍÍÍÍÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ±±
±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
*/
User Function MOD3TUDOK()
42
//Inclua aqui as validações da tela modelo 3.
Return(.T.)
[ <oPrn> := ] TMSPrinter():New()
Say
Exibe um texto no relatório.
43
SayBitmap
Exibe um bitmap no relatório.
Box
Imprime uma caixa no relatório.
Line
Imprime uma linha no relatório.
44
Código fonte exemplo para impressão de relatórios com qualidade gráfica
#include "protheus.ch"
/*
ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
±±ÉÍÍÍÍÍÍÍÍÍÍÑÍÍÍÍÍÍÍÍÍÍËÍÍÍÍÍÍÍÑÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍËÍÍÍÍÍÍÑÍÍÍÍÍÍÍÍÍÍÍÍÍ»±±
±±ºPrograma ³ OBJ_PRN º Autor ³Organon TI Consultoriaº Data ³ 16/04/04 º±±
±±ÌÍÍÍÍÍÍÍÍÍÍØÍÍÍÍÍÍÍÍÍÍÊÍÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÊÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍ͹±±
±±ºDesc. ³ Exemplo de impressão de relatório OOP gráfico. º±±
±±ÌÍÍÍÍÍÍÍÍÍÍØÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ͹±±
±±ºUso ³ APx º±±
±±ÈÍÍÍÍÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ±±
±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
*/
User Function OBJ_PRN()
oPrint:StartPage()
oPrint:Box(0040,0040,0660,1400)
oPrint:SayBitmap(0050,0050,"LogoGM.bmp", 0200, 0200)
oPrint:Say(0060,0280,"Teste de impressão de relatório",oFont1,100)
oPrint:Say(0160,0280,"Teste de impressão de relatório",oFont2,100)
oPrint:Say(0260,0280,"Teste de impressão de relatório",oFont3,100)
oPrint:Say(0360,0280,"Teste de impressão de relatório",oFont4,100)
oPrint:Say(0460,0280,"Teste de impressão de relatório",oFont5,100)
oPrint:Say(0560,0280,"Teste de impressão de relatório",oFont6,100)
oPrint:EndPage()
oPrint:Preview()
Return
45
Rotinas de Web
Envio de e-mail pelo sistema (Send Mail) através de SMTP
[<lResult>:=]MailSmtpOff()
Local lResult
Local cBody := '<p><font face="Arial">Teste de envio de e-mail...</font></p>'
If !lResult
MsgInfo("Não foi possível conectar-se ao servidor SMTP...","Atenção")
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("Não foi possível enviar a mensagem para a conta especificada...","Atenção")
EndIf
If !lResult
MsgInfo("Erro ao tentar desconectar-se do servidor SMTP...","Atenção")
EndIf
Return
47
48