Logo Passei Direto
Buscar
Material
páginas com resultados encontrados.
páginas com resultados encontrados.
left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

Prévia do material em texto

A Linguagem AdvPl 
Revisão: 09/06/2003 
 
A Linguagem AdvPl teve seu início em 1994, sendo na verdade uma evolução na 
utilização de linguagens no padrão xBase pela Microsiga Software S.A. (Clipper, Visual 
Objects e depois FiveWin). Com a criação da tecnologia Protheus, era necessário criar 
uma linguagem que suportasse o padrão xBase para a manutenção de todo o código 
existente do sistema de ERP Siga Advanced. Foi então criada a linguagem chamada 
Advanced Protheus Language. 
 
O AdvPl é uma extensão do padrão xBase de comandos e funções, operadores, 
estruturas de controle de fluxo e palavras reservadas, contando também com funções e 
comandos disponibilizados pela Microsiga que a torna uma linguagem completa para a 
criação de aplicações ERP prontas para a Internet. Também é uma linguagem orientada 
a objetos e eventos, permitindo ao programador desenvolver aplicações visuais e criar 
suas próprias classes de objetos. 
 
Quando compilados, todos os arquivos de código tornam-se unidades de inteligência 
básicas, chamados APO´s (de Advanced Protheus Objects). Tais APO´s são mantidos 
em um repositório e carregados dinamicamente pelo Protheus Server para a execução. 
Como não existe a linkedição, ou união física do código compilado a um determinado 
módulo ou aplicação, funções criadas em AdvPl podem ser executadas em qualquer 
ponto do ambiente Advanced Protheus. 
 
O compilador e o interpretador da linguagem AdvPl é o próprio servidor Protheus 
(Protheus Server), e existe um ambiente visual para desenvolvimento integrado 
(Protheus IDE) onde o código pode ser criado, compilado e depurado. 
 
Os programas em AdvPl podem conter comandos ou funções de interface com o 
usuário. De acordo com tal característica, tais programas são subdivididos nas seguintes 
categorias: 
Programação Com Interface Própria com o Usuário 
 
Nesta categoria entram os programas desenvolvidos para serem executados através do 
terminal remoto do Protheus, o Protheus Remote. O Protheus Remote é a aplicação 
encarregada da interface e da interação com o usuário, sendo que todo o processamento 
do código em AdvPl, o acesso ao banco de dados e o gerenciamento de conexões é 
efetuado no Protheus Server. O Protheus Remote é o principal meio de acesso a 
execução de rotinas escritas em AdvPl no Protheus Server, e por isso permite executar 
qualquer tipo de código, tenha ele interface com o usuário ou não. Porém nesta 
categoria são considerados apenas os programas que realizem algum tipo de interface 
remota utilizando o protocolo de comunicação do Protheus. 
 
Pode-se criar rotinas para a customização do sistema ERP Advanced Protheus, desde 
processos adicionais até mesmo relatórios. A grande vantagem é aproveitar todo o 
ambiente montado pelos módulos do ERP Advanced Protheus. Porém, com o AdvPl é 
possível até mesmo criar toda uma aplicação, ou módulo, do começo. 
 
Todo o código do sistema ERP Advanced Protheus é escrito em AdvPl. 
Programação Sem Interface Própria com o Usuário 
 
As rotinas criadas sem interface são consideradas nesta categoria porque geralmente 
têm uma utilização mais específica do que um processo adicional ou um relatório novo. 
Tais rotinas não têm interface com o usuãrio através do Protheus Remote, e qualquer 
tentativa nesse sentido (como a criação de uma janela padrão) ocasionará uma exceção 
em tempo de execução. Estas rotinas são apenas processos, ou Jobs, executados no 
Protheus Server. Algumas vezes, a interface destas rotinas fica a cargo de aplicações 
externas, desenvolvidas em outras linguagens, que são responsáveis por iniciar os 
processos no servidor Protheus através dos meios disponíveis de integração e 
conectividade no Protheus. 
 
De acordo com a utilização e com o meio de conectividade utilizado, estas rotinas são 
subcategorizadas assim: 
 Programação por Processos 
 Programação de RPC 
 Programação Web 
 Programação TelNet 
 
Programação por Processos 
 
Rotinas escritas em AdvPl podem ser iniciadas como processos individuais (sem 
interface) no Protheus Server através de duas maneiras: Iniciadas por outra rotina AdvPl 
através da chamada de funções como StartJob ou CallProc ou iniciadas 
automaticamente na inicialização do Protheus Server (quando propriamente 
configurado). 
Programação de RPC 
 
Através de uma biblioteca de funções disponível no Protheus (uma API de 
comunicação), pode-se executar rotinas escritas em AdvPl diretamente no Protheus 
Server, através de aplicações externas escritas em outras linguagens. Isto é o que se 
chama de RPC (de Remote Procedure Call, ou Chamada de Procedimentos Remota). 
 
O servidor Protheus também pode executar rotinas em AdvPl em outros servidores 
Protheus através de conexão TCP/IP direta utilizando o conceito de RPC. Do mesmo 
modo, aplicações externas podem requisitar a execução de rotinas escritas em AdvPl 
através de conexão TCP/IP direta. 
Programação Web 
 
O Protheus Server pode também ser executado como um servidor Web, respondendo a 
requisições HTTP. No momento destas requisições, pode executar rotinas escritas em 
AdvPl como processos individuais, enviando o resultado das funções como retorno das 
requisições para o cliente HTTP (como por exemplo um Browser de Internet). Qualquer 
rotina escrita em AdvPl que não contenha comandos de interface pode ser executada 
através de requisições HTTP. O Protheus permite a compilação de arquivos HTML 
contendo código AdvPl embutido. São os chamados arquivos AdvPl ASP, para a 
criação de páginas dinâmicas. 
Programação TelNet 
 
TelNet é parte da gama de protocolos TCP/IP que permite a conexão a um computador 
remoto através de uma aplicação cliente deste protocolo. O Protheus Server pode 
emular um terminal TelNet, através da execução de rotinas escritas em AdvPl. Ou seja, 
pode-se escrever rotinas AdvPl cuja interface final será um terminal TelNet ou um 
coletor de dados móvel. 
Classes da Interface Visual 
tSrvObject 
Revisão: 22/02/2003 
Abrangência 
Versão 5.07 Versão 5.08 Versão 6.09 Versão 7.10 
 
Classe mãe de todas as classes de interface. 
Características 
 
Classe abstrata inicial de todas as classes de interface do Advpl. Não deve ser 
instanciada diretamente. 
Propriedades 
Propriedade Tipo Descrição 
nLeft Numérico. Coordenada horizontal em pixels. 
nTop Numérico. Coordenada vertical em pixels. 
nWidth Numérico. Largura em pixels. 
nHeight Numérico. Altura em pixels. 
cCaption Caractere. Título ou conteúdo do objeto. 
cTooltip Caractere. Mensagem exibida quando objeto exibe seu tooltip. 
lShowHint Lógico. 
Flag que ativa .T. ou desativa .F. a exibição do tooltip do 
objeto. 
cMsg Caractere. 
Mensagem exibida na barra de status da janela principal 
quando o objeto ganha foco. 
nClrText Numérico. Cor do texto do objeto. 
nClrPane Numérico. Cor do fundo do objeto. 
bWhen 
Bloco de 
código. 
Executado quando há movimentação de foco na janela.Se 
retornar .T. o objeto continua habilitado, se retornar .F. o 
objeto será desabilitado. 
bValid 
Bloco de 
código. 
Executado quando o conteúdo do objeto é modificado e 
deverá ser validado. Deve retornar .T. se o conteúdo é válido 
e .F. se conteúdo inválido. 
blClicked Bloco de Executado quando acionado click do botão esquerdo do 
código. mouse sobre o objeto. 
brClicked 
Bloco de 
código. 
Executado quando acionado click do botão direito do mouse 
sobre o objeto. 
blDblClick 
Bloco de 
código. 
Executado quando acionado duplo click do botão esquerdo 
do mouse sobre o objeto. 
oWnd Objeto. Janela onde o objeto foi criado. 
lVisible Booleano. Se .T. o objeto é visível, se .F. o objeto é invisível. 
Cargo 
Objeto ou 
variável. 
Conteúdo associado ao objeto. 
bLostFocus 
Bloco de 
código. 
Executado quando objeto perde foco. 
bGotFocus 
Bloco de 
código. 
Executado quando objeto ganha foco. 
 
Métodos 
 SetFocus 
Sintaxe SetFocus( )Descrição Força o foco de entrada de dados mudar para o objeto. 
Retorno NIL 
 Hide 
Sintaxe Hide( ) 
Descrição Torna objeto invisível. 
Retorno NIL 
 
 Show 
Sintaxe Show( ) 
Descrição Torna objeto visível. 
Retorno NIL 
 Enable 
Sintaxe Enable( ) 
Descrição Habilita o objeto. 
Retorno NIL 
 Disable 
Sintaxe Disable( ) 
Descrição Desabilita o objeto. 
Retorno NIL 
 Refresh 
Sintaxe Refresh( ) 
Descrição 
Força atualização (sincronia) de propriedades entre o programa e o 
Protheus Remote. 
 
tFont 
Revisão: 23/02/2003 
Abrangência 
Versão 5.07 Versão 5.08 Versão 6.09 Versão 7.10 
 
Classe que encapsula fonte de edição. 
Hierarquia 
 tFontAbs -> tFont 
Descrição 
 
Utilize objeto tFont para modificar a fonte padrão de controles visuais. 
Propriedades 
 
Vide classes ancestrais. 
Métodos 
 New 
Descrição Método construtor da classe. 
Sintaxe 
New([acName], [nPar2], [anHeight], [lPar4], [alBold], [nPar6], 
[lPar7], [nPar8], [alItalic], [alUnderline]) 
Parâmetros 
Parâmetro Tipo / Descrição 
acName 
Caractere, opcional. Nome da fonte, o padrão é 
“Arial”. 
nPar2 Reservado. 
anHeight 
Numérico, opcional. Tamanho da fonte. O padrão é -
11. 
lPar4 Reservado. 
alBold Lógico, opcional. Se .T. o estilo da fonte será negrito. 
nPar6 Reservado. 
lPar7 Reservado. 
nPar8 Reservado. 
alItalic Lógico, opcional. Se .T. o estilo da fonte será itálico. 
alUnderline 
Lógico, opcional. Se .T. o estilo da fonte será 
sublinhado. 
 
 
Retorno O objeto criado. 
Exemplo 
#INCLUDE "PROTHEUS.CH" 
 
User Function Teste() 
Local oDlg, oSay 
Local oFont:= TFont():New("Courier New",,-14,.T.) 
 
DEFINE MSDIALOG oDlg FROM 0,0 TO 200,200 TITLE "My dialog" PIXEL 
 
// Apresenta o tSay com a fonte Courier New 
 
oSay := TSay():New( 10, 10, {|| "Mensagem"},oDlg,, oFont,,,, .T., 
CLR_WHITE,CLR_RED ) 
 
/* o comando abaixo proporciona o mesmo resultado 
@ 10,10 SAY oSay PROMPT "Mensagem" FONT oFont COLOR CLR_WHITE,CLR_RED 
OF oDlg PIXEL 
*/ 
 
oSay:lTransparent:= .F. 
 
ACTIVATE MSDIALOG oDlg CENTERED 
 
Return 
 
tControl 
Revisão: 23/02/2003 
Abrangência 
Versão 5.07 Versão 5.08 Versão 6.09 Versão 7.10 
 
Classe abstrata mãe de todos os controles editáveis. 
Hierarquia 
 tSrvObject -> tControl 
Características 
 
tControl é a classe comum entre todos os componentes visuais editáveis. 
Propriedades 
Nome Tipo / Descrição 
Align 
Numérico. Alinhamento do controle no espaço disponibilizado pelo seu 
objeto parente. 0 = Nenhum (padrão), 1= no topo, 2 = no rodapé, 3= a 
esquerda, 4 = a direita e 5 = em todo o parente. 
lModified 
Lógico. Se .T. indica que o conteúdo da variável associada ao controle foi 
modificado. 
lReadOnly 
Lógico. Se .T. o conteúdo da variável associada ao controle permanecerá 
apenas para leitura. 
hParent 
Numérico. Handle (identificador) do objeto sobre o qual o controle foi 
criado. 
bChange 
Bloco de código. Executado quando o estado ou conteúdo do controle é 
modificado pela ação sobre o controle. 
Métodos 
 SetFocus 
Descrição Força mudança do foco de entrada de dados para o controle. 
Sintaxe SetFocus( ) 
REtorno NIL 
tButton 
Revisão: 23/02/2003 
Abrangência 
Versão 5.07 Versão 5.08 Versão 6.09 Versão 7.10 
 
Classe de botão. 
Hierarquia 
 tSrvObject -> tControl -> tButton 
Descrição 
 
Utilize a classe tButton para criar um controle visual do tipo botão. 
Propriedades 
Nome Tipo / Descrição 
lProcessing Lógico. Se .T. indica o botão está efetuando uma ação. 
bAction Bloco de código. Executado quando o botão é pressionado. 
Métodos 
 New 
Descrição Método construtor da classe. 
Sintaxe 
New([anRow], [anCol], [acCaption], [aoWnd], [abAction], 
[anWidth], [anHeight], [nPar8], [aoFont], [lPar10], 
[alPixel],[lPar12],[cPar13], [lPar14], [abWhen], [bPar16], [lPar17]) 
Parâmetros 
Parâmetro Tipo / Descrição 
anRow 
Numérico, opcional. Coordenada vertical em pixels ou 
carateres. 
anCol 
Numérico, opcional. Coordenada horizontal em pixels 
ou caracteres. 
acCaption Caractere, opcional. Titulo do botão. 
aoWnd Objeto, opcional. Janela ou controle onde o botão 
deverá ser criado. 
abAction 
Bloco de código, opcional. Bloco que deverá ser 
acionado quando o botão for pressionado. 
anWidth Numérico, opcional. Largura do botão em pixels. 
anHeight Numérico, opcional. Altura do botão em pixels. 
nPar8 Reservado. 
aoFont 
Objeto, opcional. Objeto tipo tFont com propriedades 
da fonte utilizada para o título do botão. 
lPar10 Reservado. 
alPixel 
Lógico, opcional. Se .T. considera as coordenadas 
passadas em pixels, se .F. (padrão) considera em 
caracteres. 
lPar12 Reservado. 
cPar13 Reservado. 
lPar14 Reservado. 
abWhen 
Bloco de código, opcional. Executado quando mudança 
de foco de entrada de dados está sendo efetuada na 
janela onde o controle foi criado. O bloco deve retornar 
.T. se o controle deve permanecer habilitado ou .F. se 
não. 
bPar16 Reservado. 
lPar17 Reservado. 
 
Exemplo 
#include “protheus.ch” 
 
User Function TesteGet() 
 
Local oDlg, oButton, oCombo, cCombo, aItems:= 
{“item1”,”item2”,”item3”} 
 
cCombo:= aItems[2] 
 
DEFINE MSDIALOG oDlg FROM 0,0 TO 300,300 PIXEL TITLE “Meu Combo” 
 
oCombo:= tComboBox():New(10,10,{|u|if(PCount()>0,cCombo:=u,cCombo)},; 
 
aItems,100,20,oDlg,,{||MsgStop(“Mudou item”)},,,,.T.,,,,,,,,,”cCombo”) 
 
// Botão para fechar a janela 
 
oButton:=tButton():New(30,10,”fechar”,oDlg,{||oDlg:End()},100,20,,,,.T
.) 
 
ACTIVATE MSDIALOG oDlg CENTERED 
MsgStop( “O valor é ”+cCombo ) 
 
Return NIL 
tCheckBox 
Revisão: 23/02/2003 
Abrangência 
Versão 5.07 Versão 5.08 Versão 6.09 Versão 7.10 
 
Classe de caixa checkbox. 
Hierarquia 
 tSrvObject -> tControl -> tCheckBox 
Descrição 
 
Utilize a classe tCheckbox quando desejar criar um controle que possua dois estados .T. 
ou .F.. 
Métodos 
 New 
Descrição Método construtor da classe. 
Sintaxe 
New([anRow], [anCol], [acCaption], [abSetGet], [aoWnd], 
[anWidth], [anHeight], [nPar8], [abClick], [aoFont], [abValid], 
[anClrFore], [anClrBack], [lPar14], [alPixel], [cPar16], [lPar17], 
[abWhen]) 
Parâmetros 
Parâmetro Tipo / Descrição 
anRow 
Numérico, opcional. Coordenada vertical em pixels ou 
carateres. 
anCol 
Numérico, opcional. Coordenada horizontal em pixels 
ou caracteres. 
acCaption Caractere, opcional. Texto exibido pelo controle. 
abSetGet 
Bloco de código, opcional. Bloco de código no formato 
{|u| if( Pcount( )>0, <var>:= u, <var> ) } que o controle 
utiliza para atualizar a variável <var>. <var> deve ser 
tipo lógico, se <var> = .T. então o controle aparecerá 
checado. 
aoWnd 
Objeto, opcional. Janela ou controle onde o controle 
deverá ser criado. 
anWidth Numérico, opcional. Largura do controle em pixels. 
anHeight Numérico, opcional. Altura do controle em pixels. 
nPar8 Reservado. 
abClick 
Bloco de código, opcional. Executado quando o 
controle click do botão esquerdo do mouse é acionado 
sobre o controle. 
aoFont 
Objeto, opcional. Objeto tipo tFont com propriedades 
da fonte utilizada para o texto do controle. 
abValid 
Bloco de código, opcional. Executado quando o 
conteúdo do controle deve ser validado, deve retornar 
.T. se o conteúdo for válido e .F. quando o conteúdo 
for inválido. 
anClrFore Numérico, opcional. Cor de fundo do controle. 
anClrBack Numérico, opcional. Cor do texto do controle. 
lPar14 Reservado. 
alPixel 
Lógico, opcional. Se .T. as coordenadas informadas 
são em pixels, se .F. são em caracteres. 
cPar16 Reservado. 
lPar17 Reservado. 
abWhen 
Bloco de código, opcional. Executado quando mudança 
de foco de entrada de dados está sendo efetuada na 
janela onde o controle foi criado. O bloco deve retornar 
.T. se o controle deve permanecer habilitado ou .F.se 
não. 
 
Retorno O objeto construído. 
Exemplo 
#include “protheus.ch” 
 
User Function Teste() 
 
Local oDlg, oButton, oCheck, lCheck:=.F. 
 
DEFINE MSDIALOG oDlg FROM 0,0 TO 300,300 PIXEL TITLE “Meu programa” 
 
oCheck:= tCheckBox():New(10,10,”funcionou?”,; 
 {|u|if( pcount()>0,lCheck:=u,lCheck)}; 
 ,oDlg,100,20,,,,,,,,.T.) 
 
oButton:=tButton():New(30,10,”fechar”,oDlg,{||oDlg:End()},; 
 100,20,,,,.T.) 
 
ACTIVATE MSDIALOG oDlg CENTERED 
If lCheck 
 MsgStop( “Funcionou!” ) 
Endif 
 
Return NIL 
tComboBox 
Revisão: 23/02/2003 
Abrangência 
Versão 5.07 Versão 5.08 Versão 6.09 Versão 7.10 
 
Classe de combobox. 
Hierarquia 
 tSrvObject -> tControl -> tComboBox 
Descrição 
 
Utilize a classe tComboBox para cria uma entrada de dados com múltipla escolha com 
item definido em uma lista vertical, acionada por F4 ou pelo botão esquerdo localizado 
na parte direita do controle. A variável associada ao controle terá o valor de um dos 
itens selecionados ou no caso de uma lista indexada, o valor de seu índice. 
Propriedades 
Nome Tipo / Descrição 
aItems 
Array. Lista de itens, caracteres, a serem exibidos. Pode ter os seguintes 
formatos: a) Seqüencial, exemplo: {“item1”,”item2”,...,”itemN”} ou b) 
Indexada, exemplo: {“a=item1”,”b=item2”, ..., “n=itemN”}. 
nAt Numérico. Posição do item selecionado. 
Métodos 
 New 
Descrição Método construtor da classe. 
Sintaxe 
New([anRow], [anCol], [abSetGet], [anItems], [anWidth], 
[anHeight], [aoWnd], [nPar8], [abChange], [abValid], [anClrText], 
[anClrBack], [alPixel], [aoFont], [cPar15], [lPar16], [abWhen], 
[lPar18], [aPar19], [bPar20], [cPar21], [acReadVar]) 
Parâmetros Parâmetro Tipo / Descrição 
anRow 
Numérico, opcional. Coordenada vertical em pixels ou 
caracteres. 
anCol 
Numérico, opcional. Coordenada horizontal em pixels 
ou caracteres. 
abSetGet 
Bloco de código, opcional. Bloco de código no 
formato {|u| if( Pcount( )>0, <var>:= u, <var> ) } que 
o controle utiliza para atualizar a variável <var>. 
<var> deve ser tipo caracter. Se a lista for seqüencial, 
o controle atualizará <var> com o conteúdo do item 
selecionado, se a lista for indexada, <var> será 
atualizada com o valor do índice do item selecionado. 
anItems 
Array, opcional. Lista de items, caracteres, a serem 
exibidos. Pode ter os seguintes formatos: a) 
Seqüencial, exemplo: {“item1”,”item2”,...,”itemN”} 
ou b) Indexada, exemplo: {“a=item1”,”b=item2”, ..., 
“n=itemN”}. 
anWidth Numérico, opcional. Largura do controle em pixels. 
anHeight Numérico, opcional. Altura do controle em pixels. 
aoWnd 
Objeto, opcional. Janela ou controle onde o controle 
será criado. 
nPar8 Reservado. 
abChange 
Bloco de código, opcional. Executado quando o 
controle modifica o item selecionado. 
abValid 
Bloco de código, opcional. Executado quando o 
conteúdo do controle deve ser validado, deve retornar 
.T. se o conteúdo for válido e .F. quando o conteúdo 
for inválido. 
anClrBack Numérico, opcional. Cor de fundo do controle. 
anClrText Numérico, opcional. Cor do texto do controle. 
alPixel 
Lógico, opcional. Se .T. as coordenadas informadas 
são em pixels, se .F. são em caracteres. 
aoFont 
Objeto, opcional. Objeto tipo tFont utilizado para 
definir as características da fonte utilizada para exibir 
o conteúdo do controle. 
cPar15 Reservado. 
lPar16 Reservado. 
abWhen 
Bloco de código, opcional. Executado quando 
mudança de foco de entrada de dados está sendo 
efetuada na janela onde o controle foi criado. O bloco 
deve retornar .T. se o controle deve permanecer 
habilitado ou .F. se não. 
lPar18 Reservado. 
aPar19 Reservado. 
bPar20 Reservado. 
cPar21 Reservado. 
acReadVar 
Caractere, opcional. Nome da variável que o controle 
deverá manipular, deverá ser a mesma variável 
informada no parâmetro abSetGet, e será o retorno da 
função ReadVar( ). 
 
Retorno O objeto criado. 
 
 Select 
Descrição Muda o item selecionado no combobox. 
Sintaxe Select( [anItem] ) 
Parâmetros 
Parâmetro Tipo / Descrição 
anItem Numérico, opcional. Posição do item a ser selecionado. 
 
Retorno NIL 
Exemplo 
#include “protheus.ch” 
 
User Function TesteGet() 
 
Local oDlg, oButton, oCombo, cCombo, aItems:= 
{“item1”,”item2”,”item3”} 
 
cCombo:= aItems[2] 
 
DEFINE MSDIALOG oDlg FROM 0,0 TO 300,300 PIXEL TITLE “Meu Combo” 
 
oCombo:= tComboBox():New(10,10,{|u|if(PCount()>0,cCombo:=u,cCombo)},; 
 aItems,100,20,oDlg,,{||MsgStop(“Mudou item”)},; 
 ,,,.T.,,,,,,,,,”cCombo”) 
 
// Botão para fechar a janela 
 
@ 40,10 BUTTON oButton PROMPT “Fechar” OF oDlg PIXEL ACTION oDlg:End() 
 
ACTIVATE MSDIALOG oDlg CENTERED 
 
MsgStop( “O valor é ”+cCombo ) 
 
Return NIL 
tGet 
Revisão: 23/02/2003 
Abrangência 
Versão 5.07 Versão 5.08 Versão 6.09 Versão 7.10 
 
Classe de controle para entrada de dados editáveis. 
Hierarquia 
 tSrvObject -> tControl -> tGet 
Descrição 
 
Use tGet para criar um controle que armazene ou altere o conteúdo de uma variável 
através de digitação. O conteúdo da variável só é modicado quando o controle perde o 
foco de edição para outro controle. 
Propriedades 
Nome Tipo / Descrição 
lPassword 
Lógico. Se .T. o controle se comporta como entrada de dados de senha, 
exibindo asteriscos ‘*’ para esconder o conteúdo digitado. 
Picture Caractere. Máscara de formatação do conteúdo a ser exibido. 
Métodos 
 New 
Descrição Método construtor do controle. 
Sintaxe 
New([anRow], [anCol], [abSetGet], [aoWnd], [anWidth], 
[anHeight], [acPict], [abValid], [anClrFore], [anClrBack], [aoFont], 
[lPar12], [oPar13], [alPixel], [cPar15], [lPar16], [abWhen], 
[lPar18], [lPar19], [abChange], [alReadOnly], [alPassword], 
[cPar23], [acReadVar], [cPar25], [lPar26], [nPar27], [lPar28]) 
Parâmetros 
Parâmetro Tipo / Descrição 
anRow Numérico, opcional. Coordenada vertical em pixels 
ou caracteres. 
anCol 
Numérico, opcional. Coordenada horizontal em pixels 
ou caracteres. 
abSetGet 
Bloco de código, opcional. Bloco de código no 
formato {|u| if( Pcount( )>0, <var>:= u, <var> ) } que 
o controle utiliza para atualizar a variável <var>. 
<var> deve ser tipo caracter, numérico ou data. 
aoWnd 
Objeto, opcional. Janela ou controle onde o controle 
será criado. 
anWidth Numérico, opcional. Largura do controle em pixels. 
anHeight Numérico, opcional. Altura do controle em pixels. 
acPict 
Caractere, opcional. Máscara de formatação do 
conteúdo a ser exibido. 
abValid 
Bloco de código, opcional. Executado quando o 
conteúdo do controle deve ser validado, deve retornar 
.T. se o conteúdo for válido e .F. quando o conteúdo 
for inválido. 
anClrFore Numérico, opcional. Cor de fundo do controle. 
anClrBack Numérico, opcional. Cor do texto do controle. 
aoFont 
Objeto, opcional. Objeto tipo tFont utilizado para 
definir as características da fonte utilizada para exibir 
o conteúdo do controle. 
lPar12 Reservado. 
oPar13 Reservado. 
alPixel 
Lógico, opcional. Se .T. as coordenadas informadas 
são em pixels, se .F. são em caracteres. 
cPar15 Reservado. 
lPar16 Reservado. 
abWhen 
Bloco de código, opcional. Executado quando 
mudança de foco de entrada de dados está sendo 
efetuada na janela onde o controle foi criado. O bloco 
deve retornar .T. se o controle deve permanecer 
habilitado ou .F. se não. 
lPar18 Reservado. 
lPar19 Reservado. 
abChange 
Bloco de código, opcional. Executado quando o 
controle modifica o valor da variável associada. 
alReadOnly 
Lógico, opcional. Se .T. o controle não poderá ser 
editado. 
alPassword 
Lógico, opcional. Se .T. o controle exibirá asteriscos 
“*” no lugar dos caracteres exibidos pelo controle 
para simular entrada de senha. 
cPar23 Reservado. 
acReadVar 
Caractere, opcional. Nome da variável que o controle 
deverá manipular, deverá ser a mesmavariável 
informada no parâmetro abSetGet, e será o retorno da 
função ReadVar( ). 
cPar25 Reservado. 
lPar26 Reservado. 
nPar27 Reservado. 
lPar28 Reservado. 
 
Retorno O controle construído. 
Exemplo 
#include “protheus.ch” 
 
User Function TesteGet() 
 
Local oDlg, oGet1, oButton, nGet1:=0 
 
DEFINE MSDIALOG oDlg FROM 0,0 TO 300,300 PIXEL TITLE “Meu Get” 
 
oGet1:= TGet():New(10,10,{|u| if(PCount()>0,nGet1:=u,nGet1}}, oDlg,; 
 100,20,”@E 999,999.99”,; 
 {|o|nGet1>1000.00},,,,,,.T.,,,,,,,,,,”nGet1”) 
 
/* Tem o mesmo efeito 
 @ 10,10 MSGET oGet1 VAR nGet1 SIZE 100,20 OF oDlg PIXEL PICTURE “@E 
999,999.99” VALID nGet1>1000.00 
*/ 
 
// Botão para fechar a janela 
 
@ 40,10 BUTTON oButton PROMPT “Fechar” OF oDlg PIXEL ACTION oDlg:End() 
 
ACTIVATE MSDIALOG oDlg CENTERED 
 
MsgStop( “O valor é ”+Transform(nGet1,”@E 999,999.00”) ) 
 
Return NIL 
tGroup 
Revisão: 23/02/2003 
Abrangência 
Versão 5.07 Versão 5.08 Versão 6.09 Versão 7.10 
 
Classe de painel de grupo de controles. 
Hierarquia 
 tSrvObject -> tControl -> tGroup 
Descrição 
 
Utilize a classe tGroup para criar um painel onde controles visuais podem ser agrupados 
ou classificados. É criada uma borda com título em volta dos controles agrupados. 
Métodos 
 New 
Descrição Método construtor da classe. 
Sintaxe 
New([anTop], [anLeft], [anBottom], [anRight], [acCaption], 
[aoWnd], [anClrText], [anClrPane], [alPixel], [lPar10]) 
Parâmetros 
Parâmetro Tipo / Descrição 
anTop 
Numérico, opcional. Coordenada vertical superior em 
pixels ou caracteres. 
anLeft 
Numérico, opcional. Coordenada horizontal esquerda 
em pixels ou caracteres. 
anBottom 
Numérico, opcional. Coordenada vertical inferior em 
pixels ou caracteres. 
anRight 
Numérico, opcional. Coordenada horizontal direita em 
pixels ou caracteres. 
acCaption Caractere, opcional. Título do grupo. 
aoWnd 
Objeto, opcional. Janela ou controle onde o controle 
será criado. 
anClrText Numérico, opcional. Cor do texto. 
anClrPane Numérico, opcional. Cor do fundo. 
alPixel 
Lógico, opcional. Se .T. as coordenadas informadas são 
em pixels, se .F. são em caracteres. 
lPar10 Reservado. 
 
Retorno O objeto criado. 
Exemplo 
#include “protheus.ch” 
 
User function teste() 
 
Local oDlg, oGroup, oGet1, oGet2, cGet1:=Space(10),; 
 
cGet2:= Space(10) 
 
DEFINE MSDIALOG oDlg FROM 0,0 TO 400,400 TITLE “My test” PIXEL 
 
oGroup:= tGroup():New(10,10,200,200,”grupo de gets”,oDlg,,,.T.) 
 
@ 10,10 MSGET oGet1 VAR cGet1 SIZE 100,10 OF oGroup PIXEL 
 
@ 30,10 MSGET oGet2 VAR cGet2 SIZE 100,10 OF oGroup PIXEL 
 
ACTIVATE MSDIALOG oDlg CENTERED 
 
Return NIL 
tListBox 
Revisão: 23/02/2003 
Abrangência 
Versão 5.07 Versão 5.08 Versão 6.09 Versão 7.10 
 
Classe de lista de items. 
Hierarquia 
 tSrvObject -> tControl -> tListbox 
Descrição 
 
Utilize a classe tListbox para criar uma janela com itens selecionáveis e barra de 
rolagem. Ao selecionar um item, uma variável é atualizada com o conteúdo do item 
selecionado. 
Propriedades 
Nome Tipo / Descrição 
nAt Numérico. Posição do item selecionado. 
aItems Array de items caracteres. Lista do itens selecionáveis. 
Métodos 
 New 
Descrição Método construtor da classe. 
Sintaxe 
New([anRow], [anCol], [abSetGet], [aaItems], [anWidth], 
[anHeigth], [abChange], [aoWnd], [abValid], [anClrFore], 
[anClrBack], [alPixel], [lPar13], [abLDBLClick], [aoFont], 
[cPar16], [lPar17], [abWhen], [aPar19], [bPar20], [lPar21], 
[lPar22], [abRightClick] ) 
Parâmetros 
Parâmetro Tipo / Descrição 
anRow 
Numérico, opcional. Coordenada vertical em pixels 
ou caracteres. 
anCol 
Numérico, opcional. Coordenada horizontal em 
pixels ou caracteres. 
abSetGet 
Bloco de código, opcional. Bloco de código no 
formato {|u| if( Pcount( )>0, <var>:= u, <var> )} 
que o controle utiliza para atualizar a variável 
<var>. <var> deve ser tipo caracter ou numérica. 
aaItems 
Array de items caracteres, opcional. Lista de items 
selecionáveis. 
anWidth Numérico, opcional. Largura do controle em pixels. 
anHeight Numérico, opcional. Altura do controle em pixels. 
abChange 
Bloco de código, opcional. Executado quando o 
item selecionado é alterado. 
aoWnd 
Objeto, opcional. Janela ou controle onde o 
controle será criado. 
abValid 
Bloco de código, opcional. Executado quando o 
conteúdo do controle deve ser validado, deve 
retornar .T. se o conteúdo for válido e .F. quando o 
conteúdo for inválido. 
anClrFore Numérico, opcional. Cor de fundo do controle. 
anClrBack Numérico, opcional. Cor do texto do controle. 
alPixel 
Lógico, opcional. Se .T. as coordenadas informadas 
são em pixels, se .F. são em caracteres. 
lPar13 Reservado. 
abLDBLClick 
Bloco de código, opcional. Executado quando 
acionado duplo click do botão esquerdo do mouse 
sobre o controle. 
aoFont 
Objeto, opcional. Objeto tipo tFont utilizado para 
definir as características da fonte utilizada para 
exibir o conteúdo do controle. 
cPar16 Reservado. 
lPar17 Reservado. 
abWhen 
Bloco de código, opcional. Executado quando 
mudança de foco de entrada de dados está sendo 
efetuada na janela onde o controle foi criado. O 
bloco deve retornar .T. se o controle deve 
permanecer habilitado ou .F. se não. 
aPar19 Reservado. 
bPar20 Reservado. 
lPar21 Reservado. 
lPar22 Reservado. 
abRightClick 
Bloco de código, opcional. Executado quando 
acionado click do botão direito do mouse sobre o 
controle. 
 
Retorno O objeto criado. 
 
 Select 
Descrição Força a seleção de um item. 
Sintaxe Select( [anItem] ) 
Parâmetros 
Parâmetro Tipo / Descrição 
nItem Numérico, opcional. Posição do item a ser selecionado. 
 
Retorno NIL 
 
 Add 
Descrição Insere ou adiciona novo item. 
Sintaxe Add( cText, nPos ) 
Parâmetros 
Parâmetro Tipo / Descrição 
cText Caractere, obrigatório. Texto do item. 
nPos 
Numérico, obrigatório. Se 0 ou maior que o número de 
itens, insere o item no final da lista. Se valor entre 1 e 
número de itens, insere o item na posição informada, 
empurrando o item anterior para baixo. 
 
Retorno NIL 
 
 Modify 
Descrição Modifica o texto de um item. 
Sintaxe Modify( cText, nPos ) 
Parâmetros 
Parâmetro Tipo / Descrição 
cText Caractere, obrigatório. Novo texto do item. 
nPos 
Numérico, obrigatório. Posição a ser modificada deve 
ser maior que 0 e menor ou igual que o número de 
itens. 
 
Retorno NIL 
 
 Del 
Descrição Apaga um item. 
Sintaxe Del( nPos ) 
Parâmetros 
Parâmetro Tipo / Descrição 
nPos 
Numérico, obrigatório. Posição a ser excluida, deve ser 
maior que 0 e menor ou igual que o número de itens. 
 
Retorno NIL 
 
 Len 
Descrição Retorna o número de itens. 
Sintaxe Len( ) 
Retorno Numérico. Número de itens. 
 
 Reset 
Descrição Apaga todos os itens. 
Sintaxe Reset( ) 
Retorno NIL 
Exemplo 
#include “protheus.ch” 
 
User Funcion Teste() 
 
Local oDlg, oList, nList:= 1, aItems:={} 
 
Aadd(aItems,”Item 1”) 
Aadd(aItems,”Item 2”) 
Aadd(aItems,”Item 3”) 
Aadd(aItems,”Item 4”) 
 
DEFINE MSDIALOG oDlg FROM 0,0 TO 400,400 PIXEL TITLE “Teste” 
 
oList:= tListBox():New(10,10,{|u|if(Pcount()>0,nList:=u,nList)}; 
 ,aItems,100,100,,oDlg,,,,.T.) 
 
ACTIVATE MSDIALOG oDlg CENTERED 
 
Return NIL 
tMeter 
Revisão: 23/02/2003 
Abrangência 
Versão 5.07 Versão 5.08 Versão 6.09 Versão 7.10 
 
Classe de régua de processamento. 
Hierarquia 
 tSrvObject -> tControl -> tMeter 
Descrição 
 
Utilize a classe tMeter para criar um controle que exibe uma régua (gauge) de 
processamento, descrevendo o andamento de um processo atraves da exibição de uma 
barra horizontal. 
Propriedades 
Nome Tipo / Descrição 
nTotal 
Numérico. Número total de passos até o preenchimento da régua de 
processo. 
lPercentageLógico. Se .T. considera o passo de movimentação em porcentagem. 
nClrBar Numérico. Cor da barra de andamento. 
Métodos 
 New 
Descrição Método construtor da classe. 
Sintaxe 
New([anRow], [anCol], [abSetGet], [anTotal], [aoWnd], 
[anWidth], [anHeight], [lPar8], [alPixel], [oPar10], [cPar11], 
[alNoPerc], [anClrPane], [nPar14], [anClrBar], [nPar16], [lPar17]) 
Parâmetros 
Parâmetro Tipo / Descrição 
anRow 
Numérico, opcional. Coordenada vertical em pixels ou 
caracteres. 
anCol 
Numérico, opcional. Coordenada horizontal em pixels 
ou caracteres. 
abSetGet 
Bloco de código, opcional. Bloco de código no formato 
{|u| if( Pcount( )>0, <var>:= u, <var> ) } que o controle 
utiliza para atualizar a variável <var>. <var> deve ser 
tipo numérico. 
anTotal 
Numérico, opcional. Numero total de passos até o 
preenchimento da régua de processo. 
aoWnd 
Objeto, opcional. Janela ou controle onde o controle 
sera criado. 
anWidth Numérico, opcional. Largura do controle em pixels. 
anHeight Numérico, opcional. Altura do controle em pixels. 
lPar8 Reservado. 
alPixel 
Lógico, opcional. Se .T. as coordenadas informadas são 
em pixels, se .F. são em caracteres. 
oPar10 Reservado. 
cPar11 Reservado. 
alNoPerc 
Lógico, opcional. Se .T. (padrão) não considera os 
passos de atualização em porcentagem. 
anClrPane Numérico, opcional. Cor de fundo do controle. 
nPar14 Reservado. 
anClrBar Numérico, opcional. Cor da barra de andamento. 
nPar16 Reservado. 
lPar17 Reservado. 
 
Retorno O objeto criado. 
 
 Set 
Descrição Atualiza a posição da régua de processamento. 
Sintaxe Set( [nVal] ) 
Parâmetros 
Parâmetro Tipo / Descrição 
nVal 
Numérico, opcional. Novo valor da posição da régua de 
processamento. 
 
Retorno NIL 
Exemplo 
#include “protheus.ch” 
 
STATIC lRunning:=.F., lStop:=.F. 
 
User Function Teste() 
 
Local oDlg, oMeter, nMeter:=0, oBtn1, oBtn2 
 
DEFINE MSDIALOG oDlg FROM 0,0 TO 400,400 TITLE “Teste” 
 
oMeter:= tMeter():New(10,10,{|u|if(Pcount()>0,nMeter:=u,nMeter)}; 
 ,100,oDlg,100,20,,.T.) // cria a régua 
 
// botão para ativar andamento da régua 
 
@ 30,10 BUTTON oBtn1 PROMPT “Run” OF oDlg PIXEL ACTION 
RunMeter(oMeter) 
 
@ 50,10 BUTTON oBtn2 PROMPT “Stop” OF oDlg PIXEL ACTION lStop:=.T. 
 
ACTIVATE MSDIALOG oDlg CENTERED 
 
Return NIL 
 
 
 
STATIC Function RunMeter(oMeter) 
 
If lRunning 
 Return 
Endif 
 
lRunning:= .T. 
 
oMeter:Set(0) // inicia a régua 
 
While .T. .and. !lStop 
 
 Sleep(1000) // pára 1 segundo 
 
 ProcessMessages() // atualiza a pintura da janela, processa 
mensagens do windows 
 
 nCurrent:= Eval(oMeter:bSetGet) // pega valor corrente da régua 
 
 nCurrent+=10 // atualiza régua 
 
 oMeter:Set(nCurrent) 
 
 if nCurrent==oMeter:nTotal 
 Return 
 endif 
 
Enddo 
 
lRunning:= .F. 
lStop:= .F. 
 
Return 
tMultiGet 
Revisão: 23/02/2003 
Abrangência 
Versão 5.07 Versão 5.08 Versão 6.09 Versão 7.10 
 
Classe de campo Memo de edição. 
Hierarquia 
 tSrvObject -> tControl -> tMultiGet 
Descrição 
 
Utilize a classe tMultiget para criar controle de edição de texto de múltiplas linhas. 
Propriedades 
Nome Tipo / Descrição 
lWordWrap Lógico. Se .T., faz quebra automática de linhas. 
Métodos 
 New 
Descrição Método construtor da classe. 
Sintaxe 
New([anRow], [anCol], [abSetGet], [aoWnd], [anWidth], 
[anHeight], [aoFont], [alHScroll], [anClrFore], [anClrBack], 
[oPar11], [alPixel], [cPar13], [lPar14], [abWhen], [lPar16], 
[lPar17], [alReadOnly], [abValid], [bPar20], [lPar21], 
[alNoBorder], [alNoVScroll]) 
Parâmetros 
Parâmetro Tipo / Descrição 
anRow 
Numérico, opcional. Coordenada vertical em pixels 
ou caracteres. 
anCol 
Numérico, opcional. Coordenada horizontal em 
pixels ou caracteres. 
abSetGet Bloco de código, opcional. Bloco de código no 
formato {|u| if( Pcount( )>0, <var>:= u, <var> ) } que 
o controle utiliza para atualizar a variável <var>. 
<var> deve ser tipo caracter. 
aoWnd 
Objeto, opcional. Janela ou controle onde o controle 
será criado. 
anWidth Numérico, opcional. Largura do controle em pixels. 
anHeight Numérico, opcional. Altura do controle em pixels. 
aoFont 
Objeto, opcional. Objeto tipo tFont utilizado para 
definir as características da fonte utilizada para exibir 
o conteúdo do controle. 
alHScroll 
Lógico, opcional. Se .T., habilita barra de rolagem 
horizontal. 
anClrFore Numérico, opcional. Cor de fundo do controle. 
anClrBack Numérico, opcional. Cor do texto do controle. 
oPar11 Reservado. 
alPixel 
Lógico, opcional. Se .T. as coordenadas informadas 
são em pixels, se .F. são em caracteres. 
cPar13 Reservado. 
lPar14 Reservado. 
abWhen 
Bloco de código, opcional. Executado quando 
mudança de foco de entrada de dados está sendo 
efetuada na janela onde o controle foi criado. O bloco 
deve retornar .T. se o controle deve permanecer 
habilitado ou .F. se não. 
lPar16 Reservado. 
lPar17 Reservado. 
alReadOnly 
Lógico, opcional. Se .T. o controle so permitira 
leitura. 
abValid 
Bloco de código, opcional. Executado quando o 
conteúdo do controle deve ser validado, deve retornar 
.T. se o conteúdo for válido e .F. quando o conteúdo 
for inválido. 
bPar20 Reservado. 
lPar21 Reservado. 
alNoBorder Lógico, opcional. Se .T. cria controle sem borda. 
alNoVScroll 
Lógico, opcional. Se .T., habilita barra de rolagem 
vertical. 
 
Retorno O objeto criado. 
 
 EnableVScroll 
Descrição Habilita a barra de rolagem vertical. 
Sintaxe EnableVScroll( lEnable ) 
Parâmetros 
Parâmetro Tipo / Descrição 
lEnable 
Lógico, obrigatório. Se .T. habilita se .F. desabilita a 
barra de rolagem. 
 
Retorno NIL 
 
 EnableHScroll 
Descrição Habilita a barra de rolagem horizontal. 
Sintaxe EnableHScroll( lEnable ) 
Parâmetros 
Parâmetro Tipo / Descrição 
lEnable 
Lógico, obrigatório. Se .T. habilita se .F. desabilita a 
barra de rolagem. 
 
Retorno NIL 
Exemplo 
#include “protheus.ch” 
User Function Teste() 
 
Local oDlg, oMemo, cMemo:= space(50) 
 
DEFINE MSDIALOG oDlg FROM 0,0 TO 400,400 PIXEL TITLE “My test” 
 
oMemo:= tMultiget():New(10,10,{|u|if(Pcount()>0,cMemo:=u,cMemo)}; 
 ,oDlg,100,100,,,,,,.T.) 
 
@ 200,10 BUTTON oBtn PROMPT “Fecha” OF oDlg PIXEL ACTION oDlg:End() 
 
ACTIVATE MSDIALOG oDlg CENTERED 
 
MsgStop(cMemo) 
 
Return NIL 
tPanel 
Revisão: 23/02/2003 
Abrangência 
Versão 5.07 Versão 5.08 Versão 6.09 Versão 7.10 
 
Classe de painel estático. 
Hierarquia 
 tSrvObject -> tControl -> tPanel 
Descrição 
 
Utilize a classe tPanel quando desejar criar um painel estático, onde podem ser criados 
outros controles com o objetivo de organizar ou agrupar componentes visuais. 
Métodos 
 New 
Descrição Método construtor da classe. 
Sintaxe 
New([anRow], [anCol], [acText], [aoWnd], [aoFont], [alCentered], 
[lPar6], [anClrText], [anClrBack], [anWidth], [anHeight], 
[alLowered], [alRaised]) 
Parâmetros 
Parâmetro Tipo / Descrição 
anRow Numérico, opcional. Coordenada vertical em pixels. 
anCol Numérico, opcional. Coordenada horizontal em pixels. 
acText Caractere, opcional. Texto a ser exibido ao fundo. 
aoWnd 
Objeto, opcional. Janela ou controle onde será criado o 
objeto. 
alCentered 
Lógico, opcional. Se .T. exibe o texto de título ao 
centro do controle. 
lPar6 Reservado. 
anClrText Numérico, opcional. Cor do texto do controle. 
anClrBack Numérico, opcional. Cor do fundo do controle. 
anWidth Numérico, opcional. Largura do controle em pixels. 
anHeight Numérico, opcional. Altura do controle em pixels. 
alLowered 
Lógico, opcional. Se .T. exibe o painel rebaixado em 
relação ao controle de fundo. 
alRaised 
Lógico, opcional. Se .T. exibe a borda do controle 
rebaixada em relação ao controle de fundo. 
 
RetornoO objeto criado. 
Exemplo 
#include “protheus.ch” 
 
User Function Teste() 
 
Local oDlg, oPanel, oBtn1, oBtn2 
 
DEFINE MSDIALOG oDlg FROM 0,0 TO 400,400 PIXEL TITLE “My test” 
 
oPanel:= tPanel():New(10,10,””,oDlg,,,,,CLR_BLUE,100,100) // cria o 
painel 
 
@ 10,10 BUTTON oBtn1 PROMPT “hide” OF oPanel ACTION oPanel:Hide() // 
cria botão sobre o painel 
 
@ 200,10 BUTTON oBtn2 PROMPT “show” OF oDlg ACTION oPanel:Show() // 
cria botão fora o painel 
 
ACTIVATE MSDIALOG oDlg CENTERED 
 
Return 
tRadMenu 
Revisão: 23/02/2003 
Abrangência 
Versão 5.07 Versão 5.08 Versão 6.09 Versão 7.10 
 
Classe de radio group. 
Hierarquia 
 tSrvObject -> tControl -> tRadMenu 
Descrição 
 
Utilize a classe tRadMenu para criar um controle que possibilita escolha de item através 
de uma lista. 
Propriedades 
Nome Tipo / Descrição 
nOption Numérico. Item selecionado. 
aItems Array de caracteres. Lista de items selecionáveis. 
Métodos 
 New 
Descrição Método construtor da classe. 
Sintaxe 
New([anRow], [anCol], [aacItems], [abSetGet], [aoWnd], [aPar6], 
[abChange], [anClrText], [anClrPan], [cPar10], [lPar11], 
[abWhen], [anWidth], [anHeight], [abValid], [lPar16], [lPar17], 
[alPixel]) 
Parâmetros 
Parâmetro Tipo / Descrição 
anRow 
Numérico, opcional. Coordenada vertical em pixels ou 
caracteres. 
anCol 
Numérico, opcional. Coordenada horizontal em pixels 
ou caracteres. 
aacItems Array de caracteres, opcional. Lista de opções. 
abSetGet 
Bloco de código, opcional. Bloco de código no formato 
{|u| if( Pcount( )>0, <var>:= u, <var> ) } que o controle 
utiliza para atualizar a variável <var>. <var> deve ser 
tipo numérico. 
aoWnd 
Objeto, opcional. Janela ou controle onde o controle 
será criado. 
aPar6 Reservado. 
abChange 
Bloco de código, opcional. Executado quando o item 
selecionado é alterado. 
anClrText Numérico, opcional. Cor do texto do controle 
anClrPan Numérico, opcional. Cor de fundo do controle. 
cPar10 Reservado. 
lPar11 Reservado. 
abWhen 
Bloco de código, opcional. Executado quando mudança 
de foco de entrada de dados está sendo efetuada na 
janela onde o controle foi criado. O bloco deve retornar 
.T. para que o controle permaneça habilitado, ou .F. se 
não. 
anWidth Numérico, opcional. Largura do controle em pixels. 
anHeight Numérico, opcional. Altura do controle em pixels. 
abValid 
Bloco de código, opcional. Executado quando o 
conteúdo do controle deva ser validado, retornando .T. 
se o conteúdo for válido, e .F. quando inválido. 
lPar16 Reservado. 
Lpar17 Reservado. 
alPixel 
Lógico, opcional. Se .T. as coordenadas informadas são 
em pixels, se .F. são em caracteres. 
 
Retorno O objeto criado. 
 
 EnableItem 
Descrição Habilita ou desabilita item. 
Sintaxe EnableItem( [nItem], [lEnable]) 
Parâmetros 
Parâmetro Tipo / Descrição 
nItem Numérico, opcional. Item selecionado. 
lEnable 
Lógico, opcional. Se .T. habilita o item se .F. desabilita 
o item. 
 
Retorno NIL 
Exemplo 
#include “protheus.ch” 
 
User Function Teste() 
 
Local oDlg, oButton, oRadio, nRadio:=1 
Local aOptions:={“escolha1”,”escolha2”} 
 
DEFINE MSDIALOG oDlg FROM 0,0 TO 300,300 PIXEL TITLE “Meu Get” 
 
oRadio:= tRadMenu():New(10,10,aOptions,; 
 {|u|if(PCount()>0,nRadio:=u,nRadio)},; 
 oDlg,,,,,,,,100,20,,,,.T.) 
 
@ 40,10 BUTTON oButton PROMPT “Fechar” OF oDlg PIXEL ACTION oDlg:End() 
 
ACTIVATE MSDIALOG oDlg CENTERED 
 
MsgStop(“Escolheu “+aOptions[nRadio] ) 
 
Return NIL 
tSay 
Revisão: 23/02/2003 
Abrangência 
Versão 5.07 Versão 5.08 Versão 6.09 Versão 7.10 
 
Classe de label. 
Hierarquia 
 tSrvObject -> tControl -> tSay 
Descrição 
 
O objeto tipo tSay exibe o conteúdo de texto estático sobre uma janela ou controle. 
Propriedades 
Nome Tipo / Descrição 
lWordWrap 
Lógico. Se .T. quebra o texto em várias linhas de maneira a enquadrar o 
conteúdo na área determinada para o controle, sendo o padrão .F. 
lTransparent 
Lógico. Se .T. a cor de fundo do controle é ignorada assumindo o conteúdo 
ou cor do controle ou janela ao fundo, sendo o padrão .T. 
Métodos 
 New 
Descrição Método construtor da classe. 
Sintaxe 
New([anRow], [anCol], [abText], [aoWnd], [acPicture], [aoFont], 
[lPar7], [lPar8], [lPar9], [alPixels], [anClrText], [anClrBack], 
[anWidth], [anHeight], [lPar15], [lPar16], [lPar17], [lPar18], 
[lPar19]) 
Parâmetros 
Parâmetro Tipo / Descrição 
anRow 
Numérico, opcional. Coordenada vertical em pixels ou 
caracteres. 
anCol Numérico, opcional. Coordenada horizontal em pixels 
ou caracteres. 
abText 
Codeblock, opcional. Quando executado deve retornar 
uma cadeia de caracteres a ser exibida. 
aoWnd 
Objeto, opcional. Janela ou diálogo onde o controle 
será criado. 
acPicture 
Caractere, opcional. Picture de formatação do conteúdo 
a ser exibido. 
aoFont 
Objeto, opcional. Objeto tipo tFont para configuração 
do tipo de fonte que será utilizado para exibir o 
conteúdo. 
lPar7 Reservado. 
lPar8 Reservado. 
lPar9 Reservado. 
alPixels 
Lógico, opcional. Se .T. considera coordenadas 
passadas em pixels se .F., padrão, considera as 
coordenadas passadas em caracteres. 
anClrText Numérico, opcional. Cor do conteúdo do controle. 
anClrBack Numérico, opcional. Cor do fundo do controle. 
anWidth Numérico, opcional. Largura do controle em pixels. 
anHeight Numérico, opcional. Altura do controle em pixels. 
lPar15 Reservado. 
lPar16 Reservado. 
lPar17 Reservado. 
lPar18 Reservado. 
lPar19 Reservado. 
 
Retorno O objeto criado. 
 
 SetText 
Descrição Modifica o conteúdo a ser exibido pelo controle. 
Sintaxe SetText( [xVal] ) 
Parâmetros 
Parâmetro Tipo / Descrição 
xVal 
Caracter / Numérico / Data, Opcional. Valor a ser 
exibido. 
 
Retorno NIL 
 
Exemplo 
#include “protheus.ch” 
 
User Function Teste() 
 
Local oDlg, oSay 
 
DEFINE MSDIALOG oDlg FROM 0,0 TO 200,200 TITLE “My dialog” PIXEL 
 
oSay:= tSay():New(10,10,{||”para exibir”},oDlg,,,,; 
 ,,.T.,CLR_WHITE,CLR_RED,100,20) 
 
ACTIVATE MSDIALOG oDlg CENTERED 
 
Return NIL 
tScrollBox 
Revisão: 23/02/2003 
Abrangência 
Versão 5.07 Versão 5.08 Versão 6.09 Versão 7.10 
Classe de área de scroll. 
Hierarquia 
 tSrvObject -> tControl -> tScrollbox 
Descrição 
Utilize a classe tScrollbox para criar um painel com scroll deslizantes nas laterais do 
controle. 
Métodos 
 New 
Descrição Método construtor da classe. 
Sintaxe 
New([aoWnd], [anTop], [anLeft], [anHeight], [anWidth], 
[alVertical], [alHorizontal], [alBorder]) 
Parâmetros 
Parâmetro Tipo / Descrição 
aoWnd 
Objeto, opcional. Janela ou controle onde o controle 
será criado. 
anTop Numérico, opcional. Coordenada vertical em pixels. 
anLeft 
Numérico, opcional. Coordenada horizontal em 
pixels. 
anHeight Numérico, opcional. Altura do controle em pixels. 
anWidth Numérico, opcional. Largura do controle em pixels. 
alVertical 
Lógico, opcional. Se .T. exibe a barra de scroll 
vertical. 
alHorizontal 
Lógico, opcional. Se .T. exibe a barra de scroll 
horizontal. 
alBorder Lógico, opcional. Se .T. exibe a borda do controle. 
 
Retorno O objeto criado. 
Exemplo 
#include “protheus.ch” 
 
User Function Teste() 
 
Local oDlg, oScr, oGet1, oGet2, oGet3 
 
Local cGet1, cGet2, cGet3 
 
cGet1:= Space(10) 
cGet2:= Space(10) 
cGet3:= Space(10) 
 
DEFINE MSDIALOG oDlg FROM 0,0 TO 400,400 PIXEL “My test” 
 
oScr:= TScrollBox():New(oDlg,10,10,200,200,.T.,.T.,.T.) // cria 
controles dentro do scrollbox 
 
@ 10,10 MSGET oGet1 VAR cGet1 SIZE 100,10 OF oScr PIXEL 
@ 50,10 MSGET oGet2 VAR cGet2 SIZE 100,10 OF oScr PIXEL 
@ 150,100 MSGET oGet3 VAR cGet3 SIZE 100,10 OF oScr PIXEL 
 
ACTIVATE MSDIALOG oDlg CENTERED 
 
Return NIL 
Classe TIBrowser 
Exemplo de uso da classe TIBrowser 
Revisão: 09/06/2003 
AbrangênciaVersão 6.09 Versão 7.10 
 
#include "protheus.ch" 
 
function teste() 
 
local oDlg, oTIBrowser, oBtnNav, oBtnPrint, oBtnHome 
 
DEFINE MSDIALOG oDlg FROM 0,0 TO 320,460 PIXEL TITLE "Teste TIBrowser" 
 
oTIBrowser:= TIBrowser():New( 10,10, 150, 150, 
"http://www.google.com", oDlg ) 
 
@ 10, 160 BUTTON oBtnNav PROMPT "Ir para Microsiga" SIZE 50,10 ACTION 
oTIBrowser:Navigate("http://www.microsiga.com.br") OF oDlg PIXEL 
@ 20, 160 BUTTON oBtnPrint PROMPT "Imprimir" SIZE 50,10 ACTION 
oTIBrowser:Print() OF oDlg PIXEL 
@ 30, 160 BUTTON oBtnHome PROMPT "Home" SIZE 50,10 ACTION 
oTIBrowser:GoHome() OF oDlg PIXEL 
 
ACTIVATE MSDIALOG oDlg CENTERED 
 
return 
 
TIBROWSER:GOHOME 
Revisão: 09/06/2003 
Abrangência 
Versão 6.09 Versão 7.10 
 
Sintaxe 
TIBROWSER:GOHOME ( ) --> nil 
Retorno 
Tipo Descrição 
(NULO) Este método retorna nil 
Descrição 
Direciona navegação para página <HOME> cadastrada no Internet Explorer 
TIBROWSER:NAVIGATE 
Revisão: 09/06/2003 
Abrangência 
Versão 6.09 Versão 7.10 
 
Sintaxe 
TIBROWSER:NAVIGATE ( < ahRef > ) --> nil 
Parâmetros 
Argumento Tipo Descrição 
ahRef Caracter Endereço da página a ser navegada 
Retorno 
Tipo Descrição 
(NULO) Este método sempre retorna nil 
Descrição 
Troca a página a ser visualizada 
TIBROWSER:NEW 
Revisão: 09/06/2003 
Abrangência 
Versão 6.09 Versão 7.10 
 
Sintaxe 
TIBROWSER:NEW ( < anRow > , < anCol > , < anWidth > , < anHeight > , [ ainitLink 
] , [ anWindow ] ) --> Retorno 
Parâmetros 
Argumento Tipo Descrição 
anRow Numérico coordenada vertical 
anCol Numérico Coordenada horizontal 
anWidth Numérico Largura do objeto 
anHeight Numérico Altura do objeto 
ainitLink Caracter 
Endereço da página inicial a ser carregada, se não 
informada, carregará a página <HOME> cadastrada no 
Internet Explorer. 
anWindow Objeto Janela ou componente visual onde o objeto será criado 
Retorno 
Tipo Descrição 
Objeto Retorna o objeto criado 
Descrição 
Cria uma instância do Microsoft Internet Explorer(tm) dentro de um componente visual. 
Para que o objeto esteja disponível para o usuário, é necesário configurar no arquivo de 
configuração do AP Remote (Ex: ap6rmt.ini ) como abaixo: 
 
[config] 
BrowserEnabled=1 
 
ATENÇAO: A classe somente funcionará se o MS Internet Explorer estiver instalado na 
máquina que está executando o AP Remote. 
TIBROWSER:PRINT 
Revisão: 09/06/2003 
Abrangência 
Versão 6.09 Versão 7.10 
 
Sintaxe 
TIBROWSER:PRINT ( ) --> nil 
Retorno 
Tipo Descrição 
(NULO) Este método retorna nil 
Descrição 
Imprime a página que esta sendo visualizada 
Exemplo de uso da Classe TWBrowse 
Revisão: 16/09/2004 
Abrangência 
Versão 5.07 Versão 5.08 Versão 6.09 Versão 7.10 Versão 8.11 
 
A função abaixo cria uma janela de dialogo, com uma twBrowse ocupando toda a 
extensão do diálogo, realizando uma consulta na Tabela SX5, filtrada através do índice 
1, para mostrar apenas os elementos pertencentes à tabela 01 do SX5. 
Vale lembrar que, para testar o fonte abaixo, deve-se compilá-lo no projeto, e inserir 
uma chamada à esta função no Menu do ERP. 
#INCLUDE 'PROTHEUS.CH' 
 
User Function TstTWBrw() 
 
dbselectarea('SX5') 
DbSetORder(1) 
 
DEFINE MSDIALOG oDlg TITLE 'Exemplo TWBrowse' FROM 000, 000 TO 500, 
600 PIXEL 
 
oBrw := TWBrowse():New( NIL,NIL,NIL,NIL,; 
 {|| { SX5->X5_TABELA, SX5->X5_CHAVE, SX5->X5_DESCRI , 
str(SX5->(recno()),8,0) } },; 
 { 'Tabela','Chave','Descrição', 'RECNO'},; 
 NIL, oDlg, "X5_FILIAL+X5_TABELA" ," 01" , " 
01" ,,,,,,,,,, "SX5", .T. ) 
 
 
// Ajusta alinhamento do TWBrowse para pegar o dialogo inteiro 
oBrw:Align := CONTROL_ALIGN_ALLCLIENT 
 
ACTIVATE MSDIALOG oDlg CENTERED 
 
Return 
New 
Revisão: 16/09/2004 
Abrangência 
Versão 5.07 Versão 5.08 Versão 6.09 Versão 7.10 Versão 8.11 
 
Sintaxe 
TWBrowse():New ( [ nRow ] , [ bScroll ] , [ Param25 ] , [ Param27 ] , [ nCol ] , [ 
nWidth ] , [ nHeigth ] , < bLine > , < aHeaders > , [ aColSizes ] , [ oWnd ] , [ cField ] , [ 
cTopLimit ] , [ cBottomLiit ] , [ bChange ] , [ bLDblClick ] , [ Param14 ] , [ oFont ] , [ 
Param16 ] , [ nClrFore ] , [ nClrBack ] , [ Param19 ] , [ Param20 ] , [ cAlias ] , [ lPixel ] 
, [ Param23 ] , [ Param24 ] ) --> oObjTWBrowse 
Parâmetros 
Argumento Tipo Descrição 
nRow Numérico Coordenada vertical inicial do Objeto. 
bScroll Lógico 
Caso .T., habilita barra de scroll horizontal e botões de 
navegação vertical. 
Param25 (NULO) ( parâmetro reservado ) 
Param27 (NULO) ( parâmetro reservado ) 
nCol Numérico Coordenada horizontal inicial do Objeto 
nWidth Numérico Tamanho horizontal do objeto 
nHeigth Numérico Tamanho vertical do objeto 
bLine Code-Block 
Code-Block, que deve retornar um array, com uma 
dimensão, onde devem ser retornados as strings 
referentes aos elementos referentes às colunas do 
Browse. 
aHeaders Array 
Array, que deve retornar um array, com uma dimensão, 
contendo as strings referentes aos Títulos das colunas do 
Browse. 
aColSizes Array 
Array, com uma dimensão, onde devem ser retornados os 
números referentes ào tamanho horizontal das colunas do 
Browse. Caso especificado NIL, os tamanhos das 
colunas são calculados automaticamente. 
oWnd Objeto Objeto visual sobre o qual a tWBrowse será criada. 
cField Caracter 
Utilizado para especificar a expressão de índice para 
definição de limite superior e inferior do Browse. Este 
parâmetro é utilizado quando realizado um browse de 
uma tabela, aberta sob um alias, com uma expressão de 
índice. 
cTopLimit Caracter 
Utilizado para especificar uma string, de acordo com a 
chave de índice passada em cField, a ser utilizada para 
identificar o limite superior do Browse. Apenas devemos 
informar conteúdo neste, caso o parâmetro cField seja 
especificado. 
cBottomLiit Caracter 
Utilizado para especificar uma string, de acordo com a 
chave de índice passada em cField, a ser utilizada para 
identificar o limite inferior do Browse. Apenas devemos 
informar conteúdo neste, caso o parâmetro cField seja 
especificado. 
bChange Code-Block 
Ação a ser executada quando alterado o foco entre as 
linhas do Browse. Recebe o objeto do Browse como 
parâmetro. 
bLDblClick Code-Block 
Ação a ser executada quando executado um dupli-clique 
sobre uma célula do Browse. 
Param14 (NULO) ( parâmetro reservado ) 
oFont Objeto 
Objeto referente à uma fonte alternativa para exibição 
dos dados neste Browse. 
Param16 (NULO) ( parâmetro reservado ) 
nClrFore Numérico 
Cor de escrita dos dados no TWBrowse. Verifique cores 
disponíveis no include "colors.ch" 
nClrBack Numérico 
Cor de fundo da área da TWBrowse não preenchida com 
dados. Verifique cores disponíveis no include "colors.ch" 
Param19 (NULO) ( parâmetro reservado ) 
Param20 (NULO) ( parâmetro reservado ) 
cAlias Caracter 
Caso o Browse seja realizado sobre uma tabela aberta, 
estecifique o alias da tabela a ser utilizada neste 
parâmetro. 
lPixel Lógico 
Caso .T., indica que as coordenadas de tela são 
especificadas em PIXELS. Caso contrário, são 
coordenadas especificadas em CARACTERES. 
Param23 (NULO) ( parâmetro reservado ) 
Param24 (NULO) ( parâmetro reservado ) 
Retorno 
Tipo Descrição 
Objeto Retorna uma nova instância do Objeto da Classe TWBrowse. 
Descrição 
Contrutor da Classe TWBrowse. 
Retorna uma nova instância do Objeto da Classe TWBrowse. 
Classes de Janelas 
MSDialog 
Revisão: 23/02/2003 
Abrangência 
Versão 5.07 Versão 5.08 Versão 6.09 Versão 7.10 
 
Classe de diálogo de entrada de dados. 
Hierarquia 
 tSrvObject -> tWindow -> tDialog -> MSDialog 
Características 
 
MSDialog deve ser utilizada como padrão de janela para entrada de dados. MSDialog é 
um tipo de janela diálogo modal, isto é, não permite que outra janela ativa receba dados 
enquanto esta estiver ativa. 
Propriedades 
 
Vide classes ancestrais.Métodos 
 New 
Descrição Método construtor da classe. 
Sintaxe 
New([anTop], [anLeft], [anBottom], [anRight], [acCaption], 
[cPar6], [nPar7], [lPar8], [nPar9], [anClrText], [anClrBack], 
[oPar12], [aoWnd], [alPixel], [oPar15], [oPar16], [lPar17]) 
Parâmetros 
Parâmetro Tipo / Descrição 
anTop 
Numérico, opcional. Coordenada vertical superior em 
pixels ou caracteres. 
anLeft 
Numérico, opcional. Coordenada horizontal esquerda 
em pixels ou caracteres. 
anBotom 
Numérico, opcional. Coordenada vertical inferior em 
pixels ou caracteres. 
anRight 
Numérico, opcional. Coordenada horizontal direita em 
pixels ou caracteres. 
acCaption Caractere, opcional. Título da janela. 
cPar6 Reservado. 
nPar7 Reservado. 
lPar8 Reservado. 
nPar9 Reservado. 
anClrText Numérico,opcional. Cor do texto. 
anClrBack Numérico,opcional. Cor de fundo. 
oPar12 Reservado. 
aoWnd 
Objeto, opcional. Janela mãe da janela a ser criada, 
padrão é a janela principal do programa. 
alPixel 
Lógico, opcional. Se .T. considera as coordenadas 
passadas em pixels, se .F. considera caracteres. 
oPar15 Reservado. 
oPar16 Reservado. 
nPar17 Reservado. 
 
 
Retorno O Diálogo criado. 
Exemplo 
#INCLUDE “protheus.ch” 
 
User Function Teste() 
 
// cria diálogo 
 
Local oDlg:=MSDialog():New(10,10,300,300,”Meu 
dialogo”,,,,,CLR_BLACK,CLR_WHITE,,,.T.) 
 
// ativa diálogo centralizado 
 
oDlg:Activate(,,,.T.,{||msgstop(“validou!”),.T.},,{||msgstop(“iniciand
o…”) ) 
 
Return 
tDialog 
Revisão: 24/02/2003 
Abrangência 
Versão 5.07 Versão 5.08 Versão 6.09 Versão 7.10 
 
Classe de janela de diálogo. 
Hierarquia 
tSrvObject -> tWindow -> tDialog 
Características 
 
Classe de janela de diálogo de entrada de dados, uso reservado, recomenda-se utilizar a 
classe MSDialog que é herdada desta classe. 
Propriedades 
 
Vide classes ancestrais. 
Métodos 
 New 
Descrição Método construtor da classe. 
Sintaxe 
New([anTop], [anLeft], [anBottom], [anRight], [acCaption], 
[cPar6], [nPar7], [lPar8], [nPar9], [anClrText], [anClrBack], 
[oPar12], [aoWnd], [alPixel], [oPar15], [oPar16], [nPar17], 
[anWidth], [anHeight]) 
Parâmetros 
Parâmetro Tipo / Descrição 
anTop 
Numérico, opcional. Coordenada vertical superior em 
pixels ou caracteres. 
anLeft 
Numérico, opcional. Coordenada horizontal esquerda 
em pixels ou caracteres. 
anBotom Numérico, opcional. Coordenada vertical inferior em 
pixels ou caracteres. 
anRight 
Numérico, opcional. Coordenada horizontal direita em 
pixels ou caracteres. 
acCaption Caractere, opcional. Título da janela. 
cPar6 Reservado. 
nPar7 Reservado. 
lPar8 Reservado. 
nPar9 Reservado. 
anClrText Numérico,opcional. Cor do texto. 
anClrBack Numérico,opcional. Cor de fundo. 
oPar12 Reservado. 
aoWnd 
Objeto, opcional. Janela mãe da janela a ser criada, 
padrão é a janela principal do programa. 
alPixel 
Lógico, opcional. Se .T. considera as coordenadas 
passadas em pixels, se .F. considera caracteres. 
oPar15 Reservado. 
oPar16 Reservado. 
nPar17 Reservado. 
anWidth Numérico, opcional. Largura da janela em pixels. 
anHeight Numérico, opcional. Altura da janela em pixels. 
 
 
Retorno O Diálogo criado. 
 
 Activate 
Descrição Ativa (exibe) o diálogo. Chamar somente uma vez este método. 
Sintaxe 
Activate([bPar1], [bPar2], [bPar3], [alCentered], [abValid], [lPar6], 
[abInit], [bPar8], [bPar9] ) 
Parâmetros 
Parâmetro Tipo / Descrição 
bPar1 Reservado. 
bPar2 Reservado. 
bPar3 Reservado. 
alCentered 
Lógico, opcional. Se .T. exibe a janela centralizada, .F. 
é padrão. 
abValid 
Bloco de código, opcional. Deve retornar .T. se 
conteúdo do diálogo é válido, se retornar .F. o diálogo 
não fechará quando solicitada de encerrar. 
lPar6 Reservado. 
abInit 
Bloco de código, opcional. Executado quando o 
diálogo inicia exibição. 
bPar8 Reservado. 
bPar9 Reservado. 
 
 
Retorno NIL 
 
 End 
Descrição Encerra (fecha) o diálogo. 
Sintaxe End( ) 
Retorno Lógico .T. se o diálogo foi encerrado. 
Exemplo 
#INCLUDE "PROTHEUS.CH" 
 
User Function Teste() 
Local oDlg 
 
// cria diálogo 
oDlg := MSDialog():New(10,10,300,300,"Meu 
dialogo",,,,,CLR_BLACK,CLR_WHITE,,,.T.) 
 
// ativa diálogo centralizado 
oDlg:Activate(,,,.T.,{||msgstop("validou!"),.T.},,{||msgstop("iniciand
o...")} ) 
 
/* os comandos abaixo proporcionam o mesmo resultado 
// cria diálogo 
DEFINE DIALOG oDlg TITLE "Meu dialogo" FROM 10,10 TO 300,300 COLOR 
CLR_BLACK,CLR_WHITE PIXEL 
 
// ativa diálogo centralizado 
ACTIVATE DIALOG oDlg CENTER ON INIT (msgstop("iniciando...")) VALID 
(msgstop("validou!"),.T.) 
*/ 
 
Return NIL 
tWindow 
Revisão: 23/02/2003 
Abrangência 
Versão 5.07 Versão 5.08 Versão 6.09 Versão 7.10 
 
Classe de janela principal de programa. 
Hierarquia 
tSrvObject -> tWindow 
Características 
 
Classe de janela principal de programa, deverá existir apenas uma instância deste objeto 
na execução do programa. 
Propriedades 
 
bInit Bloco de código. Executado quando a janela está sendo exibida. 
lEscClose Lógico. Se .T. habilita o <ESC> cancelar a execução da janela. 
oCtlFocus Objeto. Objeto contido na janela que está com foco de entrada de dados. 
Métodos 
 New 
Descrição Método construtor da janela. 
Sintaxe 
New( [anTop], [anLeft],[anBottom], [anRight], [acTitle], [nPar6], 
[oPar7] ,[oPar8],[oPar9], [aoParent], [lPar11], [lPar12], 
[anClrFore], [anClrBack], [oPar15], [cPar16], [lPar17], [lPar18], 
[lPar19], [lPar20], [alPixel] ); 
Parâmetros 
Parâmetro Tipo / Descrição 
nTop 
Numérico, opcional. Coordenada vertical superior em 
pixels ou caracteres. 
nLeft 
Numérico, opcional. Coordenada horizontal esquerda 
em pixels ou caracteres. 
nBottom 
Numérico, opcional. Coordenada vertical inferior em 
pixels ou caracteres. 
nRight 
Numérico, opcional. Coordenada horizontal inferior em 
pixels ou caracteres. 
cTitle Caractere, opcional. Título da janela. 
nPar6 Reservado. 
oPar7 Reservado. 
oPar8 Reservado. 
oPar9 Reservado. 
oParent Objeto, opcional. Janela mãe da janela corrente. 
lPar11 Reservado. 
lPar12 Reservado. 
nClrFore Numérico, opcional. Cor de fundo da janela. 
nClrText Numérico, opcional. Cor do texto da janela. 
oPar15 Reservado. 
cPar16 Reservado. 
lPar17 Reservado. 
lPar18 Reservado. 
lPar19 Reservado. 
lPar20 Reservado. 
lPixel 
Lógico, opcional. Se .T. (padrão) considera 
coordenadas passadas em pixels, se .F. considera 
caracteres. 
 
Retorno Objeto. A janela construída. 
 Activate 
Descrição Ativa (exibe) a janela. Chamar esse método apenas uma vez. 
Sintaxe 
Activate([acShow], [bPar2], [bPar3], [bPar4], [bPar5], [bPar6], [ 
abInit ], [bPar8], [bPar9], [bPar10], [bPar11], [bPar12] ,[bPar13], 
[bPar14], [bPar15], [abValid], [bPar17], [bPar18] ). 
Parâmetros 
Parâmetro Tipo / Descrição 
acShow 
Caracter, opcional. “ICONIZED” para janela iconizada 
ou “MAXIMIZED” para janela maximizada. 
bPar2 Reservado. 
bPar3 Reservado. 
bPar4 Reservado. 
bPar5 Reservado. 
bPar6 Reservado. 
abInit 
Bloco de código. Executado quando janela está sendo 
exibida. 
bPar8 Reservado. 
bPar9 Reservado. 
bPar10 Reservado. 
bPar11 Reservado. 
bPar12 Reservado. 
bPar13 Reservado. 
bPar14 Reservado. 
bPar15 Reservado. 
abValid 
Bloco de código. Executado quando a janela for 
solicitada de fechar. Deverá retornar .T. se o conteúdo 
da janela for válido, ou .F. se não. Se o bloco retornar 
.F. a janela não fechará. 
bPar17 Reservado. 
bPar18 Reservado. 
 
Retorno NIL 
 End 
Descrição Solicita encerramento da janela. 
Sintaxe End( ) 
Retorno Lógico. .T. se encerrou a janela e .F. se não. 
 Center 
Descrição Centraliza a janela. 
Sintaxe Center( ) 
Retorno NIL 
Exemplo 
#INCLUDE "PROTHEUS.CH" 
 
USER FUNCTION Teste() 
 
LocaloWindow 
Local abInit:= {||conout("ativando!")} 
Local abValid:= {||conout("encerrando!"),.T.} 
 
oWindow:= tWindow():New( 10, 10, 200, 200, "Meu 
programa",,,,,,,,CLR_WHITE,CLR_BLACK,,,,,,,.T. ) 
oWindow:Activate("MAXIMIZED",,,,,,abInit,,,,,,,,,abValid,,) 
 
/* os comandos abaixo proporcionam o mesmo resultado 
DEFINE WINDOW oWindow FROM 10, 10 TO 200,200 PIXEL TITLE "Meu 
programa" COLOR CLR_WHITE,CLR_BLACK 
ACTIVATE WINDOW oWindow MAXIMIZED ON INIT abInit VALID abValid 
*/ 
 
Return NIL 
Classes não visuais 
Classe TMailManager 
Revisão: 09/06/2003 
 
Descrição 
 
A TMailManager é uma classe que tem por finalidade criar conexões em servidores 
SMTP ou POP 
Metodos 
 
New() 
 
Construtor do objeto. 
Init( cPop, cSmtp, cUser, cPass, 
nTimeOut, nPor ) 
 
Inicia uma nova conexão no servidor 
Parametro Descrição 
cPop 
Endereço do servidor POP, no caso de conexão SMTP passe esse como 
""(branco). 
cSmtp 
Endereço do servidor SMTP, no caso de conexão POP passe esse como 
""(branco). 
cUser Login no servidor. 
cPass Senha no servidor. 
nTimeOut Time out para a conexão. 
nPort Porta para se conectar. 
 
SmtpConnect() 
 
Conecta com o servidor, atraves dos parametros de Init 
SetSmtpTimeOut( nTimeOut ) 
 
Configura o tempo para que uma conexão estabelecida ao servidor seja finalizada por 
time-out 
Parametro Descrição 
nTimeOut Tempo para que a conexão seja fechada por Time-Out. 
 
SmtpDisconnect() 
 
Disconecta com o servidor SMTP 
POPConnect() 
 
Conecta com o servidor, atraves dos parametros de Init 
SetPopTimeOut( nTimeOut ) 
 
Configura o tempo para que uma conexão estabelecida ao servidor seja finalizada por 
time-out 
Parametro Descrição 
nTimeOut Tempo para que a conexão seja fechada por Time-Out. 
 
GetNumMsgs( @nNumMsg ) 
 
Retorna o numero de mensagens que existem no servidor 
Parametro Descrição 
nNumMsg 
Parametro passado por referencia, retorna nele o numero de mensagens que 
estão no servidor. 
 
DeleteMsg( nMsg ) 
 
Deleta uma mensagem do servidor 
Parametro Descrição 
nMsg Numero da mensagem a ser deletada. 
 
POPDisconnect() 
 
Disconecta com o servidor POP 
TMAILMANAGER:DELETEMSG 
Revisão: 09/04/2003 
Abrangência 
Versão 5.07 Versão 5.08 Versão 6.09 Versão 7.10 
 
Sintaxe 
TMAILMANAGER:DELETEMSG ( < nMsg > ) --> Nil 
Parâmetros 
Argumento Tipo Descrição 
nMsg Numérico Numero da mensagem a ser deletada. 
Retorno 
Tipo Descrição 
(NULO) Nil 
Descrição 
Deleta uma mensagem do servidor 
TMAILMANAGER:GETNUMMSGS 
Revisão: 09/04/2003 
Abrangência 
Versão 5.07 Versão 5.08 Versão 6.09 Versão 7.10 
 
Sintaxe 
TMAILMANAGER:GETNUMMSGS ( < @nNumMsg > ) --> nRet 
Parâmetros 
Argumento Tipo Descrição 
nNumMsg Numérico 
Parametro passado por referencia, retorna nele o numero 
de mensagens que estão no servidor. 
Retorno 
Tipo Descrição 
Numérico 0 = Lista recebida com sucesso 
Descrição 
Retorna o numero de mensagens que existem no servidor 
TMAILMANAGER:INIT 
Revisão: 09/04/2003 
Abrangência 
Versão 5.07 Versão 5.08 Versão 6.09 Versão 7.10 
 
Sintaxe 
TMAILMANAGER:INIT ( < cPop > , < cSmtp > , < cUser > , < cPass > , [ nTimeOut ] 
, [ nPort ] ) --> Nil 
Parâmetros 
Argumento Tipo Descrição 
cPop Caracter 
Endereço do servidor POP, no caso de conexão SMTP 
passe esse como ""(branco). 
cSmtp Caracter 
Endereço do servidor SMTP, no caso de conexão POP 
passe esse como ""(branco) 
cUser Caracter Login no servidor. 
cPass Caracter Senha no servidor. 
nTimeOut Numérico Time out para a conexão. 
nPort Numérico Porta para se conectar. 
Retorno 
Tipo Descrição 
(NULO) Nil 
Descrição 
Inicia uma nova conexão no servidor 
TMAILMANAGER:NEW 
Revisão: 09/04/2003 
Abrangência 
Versão 5.07 Versão 5.08 Versão 6.09 Versão 7.10 
 
Sintaxe 
TMAILMANAGER:NEW ( ) --> oServer 
Retorno 
Tipo Descrição 
Objeto Construtor do objeto. 
Descrição 
Construtor do objeto. 
TMAILMANAGER:POPCONNECT 
Revisão: 09/04/2003 
Abrangência 
Versão 5.07 Versão 5.08 Versão 6.09 Versão 7.10 
 
Sintaxe 
TMAILMANAGER:POPCONNECT ( ) --> Nil 
Retorno 
Tipo Descrição 
(NULO) Nil 
Descrição 
Conecta com o servidor, atraves dos parametros de Init 
TMAILMANAGER:POPDISCONNECT 
Revisão: 09/04/2003 
Abrangência 
Versão 5.07 Versão 5.08 Versão 6.09 Versão 7.10 
 
Sintaxe 
TMAILMANAGER:POPDISCONNECT ( ) --> nRet 
Retorno 
Tipo Descrição 
Numérico 0 = Disconectado 
Descrição 
Disconecta com o servidor POP 
TMAILMANAGER:SETPOPTIMEOUT 
Revisão: 09/04/2003 
Abrangência 
Versão 5.07 Versão 5.08 Versão 6.09 Versão 7.10 
 
Sintaxe 
TMAILMANAGER:SETPOPTIMEOUT ( < nTimeOut > ) --> nRet 
Parâmetros 
Argumento Tipo Descrição 
nTimeOut Numérico Tempo para que a conexão seja fechada por Time-Out. 
Retorno 
Tipo Descrição 
Numérico 0 = Time out setado 
Descrição 
Configura o tempo para que uma conexão estabelecida ao servidor seja finalizada por 
time-out 
TMAILMANAGER:SETSMTPTIMEO
UT 
Revisão: 09/04/2003 
Abrangência 
Versão 5.07 Versão 5.08 Versão 6.09 Versão 7.10 
 
Sintaxe 
TMAILMANAGER:SETSMTPTIMEOUT ( < nTimeOut > ) --> nRet 
Parâmetros 
Argumento Tipo Descrição 
nTimeOut (NULO) Tempo para que a conexão seja fechada por Time-Out. 
Retorno 
Tipo Descrição 
(NULO) 0 - Time out configurado 
Descrição 
Configura o tempo para que uma conexão estabelecida ao servidor seja finalizada por 
time-out 
TMAILMANAGER:SMTPCONNECT 
Revisão: 09/04/2003 
Abrangência 
Versão 5.07 Versão 5.08 Versão 6.09 Versão 7.10 
 
Sintaxe 
TMAILMANAGER:SMTPCONNECT ( ) --> nRet 
Retorno 
Tipo Descrição 
Numérico 0 - Conectado 
Descrição 
Conecta com o servidor, atraves dos parametros de Init 
TMAILMANAGER:SMTPDISCONNE
CT 
Revisão: 09/04/2003 
Abrangência 
Versão 5.07 Versão 5.08 Versão 6.09 Versão 7.10 
 
Sintaxe 
TMAILMANAGER:SMTPDISCONNECT ( ) --> nRet 
Retorno 
Tipo Descrição 
Numérico 0 = Disconectado 
Descrição 
Disconecta com o servidor SMTP 
TMAILMESSAGE:SEND 
Revisão: 14/04/2003 
Abrangência 
Versão 5.07 Versão 5.08 Versão 6.09 Versão 7.10 
 
Sintaxe 
TMAILMESSAGE:SEND ( < oServer > ) --> nRet 
Parâmetros 
Argumento Tipo Descrição 
oServer Caracter Instancia do servidor criado (SMTP). 
Retorno 
Tipo Descrição 
Numérico 0 = E-mail enviado com sucesso 
Descrição 
Envia o e-mail recebendo como parametro a instancia do servidor criado (SMTP). 
tSocketClient 
Revisão: 30/06/2003 
Abrangência 
Versão 6.09 Versão 7.10 Versão 8.11 
 
Descrição 
Esta classe permite estabelecer uma conexão cliente de socket do tipo TCP genérica. 
Enviar e receber dados através de uma socket genérico e também pode ser usada como 
base para implementação de protocolos não suportados pelo protheus. 
Métodos 
Método Descrição 
CloseConnection Finaliza a conexão TCP genérica (socket ) do objeto corrente. 
Connect Estabelece um conexão TCP genérica (socket ). 
IsConnected Verifica se existe conexão valida no objeto corrente. 
New Cria o objeto tSocketClient, sem conexão ativa. 
Receive 
Recebe os dados pela conexão ativa do objeto, qualquer tipo de 
dado pode ser recebido. 
Reset 
Finaliza anormalmente a conexão, não avisa o outro lado que a 
conexão será finalizada. 
Deve ser utilizado apenas em casos extremos. 
Send Transmite o buffer pela conexão TCP Genérica ativa. 
 
javascript:opendoc('024882')
javascript:opendoc('024884')
javascript:opendoc('024886')
javascript:opendoc('024888')
javascript:opendoc('024890')
javascript:opendoc('024892')
javascript:opendoc('024894')
CloseConnection 
Revisão: 30/06/2003 
Abrangência 
Versão 6.09 Versão 7.10 Versão 8.11 
 
Sintaxe 
oObj:CloseConnection ( ) --> Nil 
Retorno 
Tipo Descrição 
(NULO) Nil 
Descrição 
Finaliza a conexão TCP genérica (socket ) do objeto corrente. 
Connect 
Revisão: 30/06/2003 
 
Sintaxe 
oObj:Connect ( < nPorta > , < cIP > , < nTimeout > ) --> nSucesso 
ParâmetrosArgumento Tipo Descrição 
nPorta Numérico Numero da porta onde a conexão deve ser realizada 
cIP Caracter 
Número IP ou nome do servidor onde a conexão deve ser 
realizada 
nTimeout Numérico 
Número em milisegundos que o método deve esperar para 
conectar 
Retorno 
Tipo Descrição 
Numérico 
Retorna 0 (Zero) se conectou com sucesso, diferente de zero se a conexão 
falhou. 
Descrição 
Estabelece um conexão TCP genérica (socket ). 
IsConnected 
Revisão: 30/06/2003 
Abrangência 
Versão 6.09 Versão 7.10 Versão 8.11 
 
Sintaxe 
oObj:IsConnected ( ) --> lLogico 
Retorno 
Tipo Descrição 
Lógico 
Retorna True se a conexão esta ativa e false caso esteja 
inválida/desconectado. 
Descrição 
Verifica se existe conexão valida no objeto corrente. 
New 
Revisão: 30/06/2003 
Abrangência 
Versão 6.09 Versão 7.10 Versão 8.11 
 
Sintaxe 
tSocketClient():New ( ) --> oSocket 
Retorno 
Tipo Descrição 
Objeto Retorna um Objeto do tipo tSocketClient 
Descrição 
Cria o objeto tSocketClient, sem conexão ativa. 
Receive 
Revisão: 30/06/2003 
Abrangência 
Versão 6.09 Versão 7.10 Versão 8.11 
 
Sintaxe 
oObj:Receive ( < @cBuffer > , < nTimeout > ) --> nQtdRecebida 
Parâmetros 
Argumento Tipo Descrição 
cBuffer Caracter Buffer que conterá os dados a serem recebidos. 
nTimeout Numérico 
tempo em milisegundos que a função receive espera até 
receber algum dado pela conexão. 
Retorno 
Tipo Descrição 
Numérico 
Qtde de bytes recebidos, se houver algum erro nQtdRecebida será menor 
que zero. 
Descrição 
Recebe os dados pela conexão ativa do objeto, qualquer tipo de dado pode ser recebido. 
Reset 
Revisão: 30/06/2003 
Abrangência 
Versão 6.09 Versão 7.10 Versão 8.11 
 
Sintaxe 
oObj:Reset ( ) --> NIL 
Retorno 
Tipo Descrição 
(NULO) Retorno nulo. 
Descrição 
Finaliza anormalmente a conexão, não avisa o outro lado que a conexão será finalizada. 
Deve ser utilizado apenas em casos extremos. 
Send 
Revisão: 30/06/2003 
Abrangência 
Versão 6.09 Versão 7.10 Versão 8.11 
 
Sintaxe 
oObj:Send ( [ cBuffer ] ) --> nQtdTrasmitido 
Parâmetros 
Argumento Tipo Descrição 
cBuffer Caracter Buffer com os dados a serem transmitidos pela conexão. 
Retorno 
Tipo Descrição 
Numérico 
Numero de bytes transmitidos, caso o numero seja diferente do tamanho 
de cBuffer, algum erro aconteceu. 
Descrição 
Transmite o buffer pela conexão TCP Genérica ativa. 
Exemplo da Classe tSocketClient 
Revisão: 30/06/2003 
Abrangência 
Versão 6.09 Versão 7.10 Versão 8.11 
 
O Exemplo abaixo exemplifica a utilização de um cliente socket, note que para o 
programa funcionar corretamente, deve-se alterar os parametros da conexão. 
user function MySocket 
Local oObj := tSocketClient():New() 
 
nResp := oObj:Connect( 999, "172.255.255.255", 1000 ) 
if(nResp == 0 ) 
 Conout( "Conexão OK!" ) 
else 
 Conout( "Erro na Conexão OK! ", nResp ) 
 return 
endif 
cSend = "Ola!!!! Estou transmitindo um dado!" 
nResp := oObj:Send( cSend ) 
if( nResp != len( cSend ) ) 
 conout( "Erro! Dado nao transmitido" ) 
else 
 conout( "Dado Enviado" ) 
endif 
 
cBuffer := "" 
nQtd = oObj:Receive( cBuffer, 10000 ) 
if( nQtd >= 0 ) 
 conout( "Dados Recebidos " + Str( nQtd, 4, 0 ), cBuffer ) 
else 
 conout( "Nao recebi nada" ) 
endif 
cSend = "Dados que será transmitido!!!" 
nResp := oObj:Send( cSend ) 
if( nResp != len( cSend ) ) 
 conout( "Erro! Dado nao transmitido" ) 
else 
 conout( "Dado Enviado" ) 
endif 
if( oObj:IsConnected() ) 
 conout( "OK! Estou conectado" ) 
else 
 conout( "Ops! Nao estou conectado" ) 
endif 
oObj:CloseConnection() 
if( !oObj:IsConnected() ) 
 conout( "Desconectei" ) 
else 
 conout( "Ainda estou conectado, erro na desconexao" ) 
endif 
return 
Exemplo de Conexão SMTP 
Revisão: 17/09/2003 
Abrangência 
Versão 6.09 Versão 7.10 
 
No exemplo abaixo , estabelecemos a conexão com um servidor SMTP , utilizando o 
comando CONNECT SMTP , obtendo o resultado da conexão , e em caso de falha , 
obtemos maiores detalhes utilizando o comando GET MAIL ERROR. 
#INCLUDE "Ap5Mail.ch" 
CONNECT SMTP SERVER "200.246.142.66" ; 
 ACCOUNT "test" 
 PASSWORD "test1234" ; 
 RESULT lOk 
If lOk 
 MsgStop("Conexão OK") 
Else 
 GET MAIL ERROR cSmtpError 
 MsgStop("Erro de conexão : " + cSmtpError) 
Endif 
Exemplo de Envio de e-mail SMTP 
Completo 
Revisão: 17/09/2003 
Abrangência 
Versão 6.09 Versão 7.10 
 
No exemplo abaixo , estabelecemos a conexão com um servidor SMTP , utilizando o 
comando CONNECT SMTP , obtendo o resultado da conexão , e em caso de falha , 
obtemos maiores detalhes utilizando o comando GET MAIL ERROR . Caso a conexão 
seja realizada com sucesso , um e-mail de teste é enviado , tendo também seu starus de 
execução recuperado e tratado convenientemente. 
#INCLUDE "Ap5Mail.ch" 
// Conecta com o Servidor SMTP 
CONNECT SMTP SERVER "200.246.142.66" ; 
 ACCOUNT "test" PASSWORD "test1234" ; 
 RESULT lOk 
If lOk 
 MsgStop( "Conexão OK" ) 
 SEND MAIL FROM "eo@aqui.com.br" ; 
 TO "jose@bemlonge.com.br;joao@exemplo.com.br" ; 
 SUBJECT "Teste de e-Mail" ; 
 BODY "E-MAIL HTML de TESTE" ; 
 RESUILT lOk 
 If lOk 
 MsgStop( "Envio OK" ) 
 Else 
 GET MAIL ERROR cSmtpError 
 MsgSTop( "Erro de envio : " + cSmtpError) 
 Endif 
 // Desconecta do Servidor 
 DISCONNECT SMTP SERVER 
Else 
 GET MAIL ERROR cSmtpError 
 MsgStop( "Erro de conexão : " + cSmtpError) 
Endif 
 
Exemplo da função XMLERROR 
Revisão: 17/07/2002 
Abrangência 
Versão 6.09 Versão 7.10 
 
No exemplo abaixo , tratamos a ocorrência de erro de abertuta do Objeto XML 
#INCLUDE "XmlXFun.xh" 
Local oXml , nXmlStatus 
CREATE oXML XMLFILE "\exemplo.xml" 
nXmlStatus := XMLError() 
If ( nXmlStatus != XERROR_SUCCESS ) 
 Alert("Falha ("+str(nXmlStatus,3)+") na criação do XMLl") 
Else 
 //processamento dop XML .... 
Endif 
Manutencäo de XML em Advpl 
Revisão: 23/05/2003 
Abrangência 
Versão 6.09 Versão 7.10 
 
No exemplo abaixo , é ilustrada de maneira simples a utilização dos comandos e 
funções Advpl para realizarmos manutenções em um arquivo no formato XML. Neste 
exemplo , utilizamos a criação do objeto , a criação de novos nodes a partir do modelo 
proposto , atribuição de suas propriedades , e geração da String XML final a partir do 
Objeto XML . 
#INCLUDE "PROTHEUS.CH" 
#INCLUDE "XMLXFUN.CH" 
 
Function u_TesteXml() 
Local cModelo := '' 
Local aLivros := {} 
Local cXml := '' , oXml 
Local nL , nTotL 
 
// Defino dados dos livros a catalogar 
aadd(aLivros , { "000001",; 
 "Livro Teste" ,; 
 "John Doe",; 
 "10/05/2001"}) 
 
aadd(aLivros , { "000002",; 
 "Livro Ficticeo" ,; 
 "Mary Brahms",; 
 "15/05/2001"}) 
 
// Crio modelo ( apenas estrutura ) em String 
 
cModelo += '<?xml version="1.0"?>' 
cModelo += '<MeuDoc>' 
cModelo += '<Livro>' 
cModelo += '<Id></Id>' 
cModelo += '<Titulo></Titulo>' 
cModelo += '<Autor></Autor>' 
cModelo += '<Data></Data>' 
cModelo += '</Livro>' 
cModelo += '</MeuDoc>' 
 
// Crio o Objeto XML , definindo o Livro como Array 
 
CREATE oXML XMLSTRING cModelo ; 
 SETASARRAY _MeuDoc:_Livro 
 
nXmlStatus := XMLError() 
 
If ( nXmlStatus == XERROR_SUCCESS ) 
 
 // Caso nao houve nenhum tipo de erro de criação do Objeto 
 // Calcula o total de Livros e percorre os elementos do array 
 // para criar os nodes dos livros no XML. 
 
 nTotL := len(aLivros) 
 
 For nL := 1 to nTotL 
 
 If nL > 1 
 // Apenas acrescento nodes novos caso já tenha realizado a 
 // primeira volta do looping , que irá atribuir os valores 
 // do primeiro livro ao node já existente no objeto Xml 
 ADDNODE oXml:_MeuDoc:_Livro NODE '_Livro' ON oXML 
 Endif 
 
 // Atriblui os dados dolivro no objeto Xml 
 oXml:_MeuDoc:_Livro[nL]:_Id:TEXT := aLivros[nL][1] 
 oXml:_MeuDoc:_Livro[nL]:_Titulo:TEXT := aLivros[nL][2] 
 oXml:_MeuDoc:_Livro[nL]:_Autor:TEXT := aLivros[nL][3] 
 oXml:_MeuDoc:_Livro[nL]:_Data:TEXT := aLivros[nL][4] 
 
 Next 
 
 // Ao fim do processo , gera a string XML correspondente ao Objeto 
 
 SAVE oXml XMLSTRING cXml 
 
 // Mostra o XML criado na Tela , usando a função MsgStop 
 MsgStop(cXml) 
Else 
 MsgStop("Erro ("+str(nXmlStatus,3)+") na criação do XML.") 
Endif 
 
Return 
Exemplo da função AEVAL 
Revisão: 03/10/2002 
Abrangência 
Versão 5.07 Versão 5.08 Versão 6.09 Versão 7.10 Versões Anteriores 
 
 
Local aArray := { "Teste" , 123 } 
Local bBlock := { |x,y| conout(valtype(x)) , conout(y) } 
 
aEval(aArray,bBlock) 
 
 
No exemplo acima , criamos um array com 2 elementos : O primeiro é um Caracter , e o 
segundo é um número ; e criamos um code-block que receberá em x ( primeiro 
parametro fornecido pela função aEval) cada elemento do array , e y ( segundo 
parametro fornecido pela aEval ) o número do elemento do array que está sendo 
processado nesta execução. 
 
O resultado de tela no console do Protheus Server deverá ser : 
 
Teste // Conteudo do primeiro elemento 
C // Tipo do conteudo 
1 // Numero do elemento processado 
123 // Conteudo do segundo elemento 
N // Tipo do Segundo Elemento 
2 // Numero do elemento processado 
 
Caso o array passado como parâmetro seja um array multi-Dimensional , serão passados 
como parâmetros os arrays de primeiro nivel para o code-BLock. 
 
Vejamos uma aplicação mais complexa : Um array multi-dimensional temos 2colunas , 
uma de código (string) e uma de valor ( numérica ) , e seja necessário realizar um 
cálculo de totalização da coluna numérica : 
 
aItens := {} 
aadd(aItens,{"Branco",10}) 
aadd(aItens,{"Preto",15}) 
aadd(aItens,{"Cinza",12}) 
 
 
// Podemos realizar a totalização pelo metodo tradicional : 
 
nTotal := 0 
For nI := 1 to len(aItens) 
nTotal := nTotal + aItens[nI][2] 
Next 
conout(nTotal) // 37 
 
 
// Ou utilizando a Funcão aEval : 
 
nTotal := 0 
aeval(aItens , {|x| nTotal += x[2] } ) 
conout(nTotal) 
Exemplo da função EVAL 
Revisão: 17/07/2002 
Abrangência 
Versão 5.07 Versão 5.08 Versão 6.09 Versão 7.10 Versões Anteriores 
 
*** Este exemplo cria um bloco de código que incrementa um número e depois o 
avalia: 
 
bBloco := { |nArg| nArg + 1 } 
? EVAL(bBloco, 1) // Resulta: 2 
 
 
*** Este exemplo demonstra como um bloco de código pode ser compilado em tempo 
de execuçao utilizando-se o operador macro (&): 
 
bBloco := &("{ |nArg| nArg + 1 }") 
? EVAL(bBlock, 1) // Avalia o bloco 
 
Exemplo da função MSCRC32 
Revisão: 02/07/2003 
Abrangência 
Versão 5.07 Versão 5.08 Versão 6.09 Versão 7.10 
 
Através do exemplo abaixo , calculamos o CRC das strings informadas. 
// Le o arquivo lista.txt no ambiente do servidor 
// e calcula o CRC do mesmo. 
cString := memoread('\lista.txt') 
nCRC1 := MSCRC32(cString) 
MsgStop('CRC = '+str(nCRC1,10)) 
 
Exemplo da função MSCRC32STR 
Revisão: 02/07/2003 
Abrangência 
Versão 5.07 Versão 5.08 Versão 6.09 Versão 7.10 Versão 8.11 
 
Através do exemplo abaixo , calculamos o CRC das string informada. 
// Le o arquivo lista.txt no ambiente do servidor 
// e calcula o CRC32 do mesmo. 
cString := memoread('\lista.txt') 
cCRC32 := MSCRC32STR(cString) 
MsgStop('CRC = ['+cCRC32+']') 
Exemplo da função SPLITPATH 
Revisão: 05/05/2003 
Abrangência 
Versão 5.07 Versão 5.08 Versão 6.09 Versão 7.10 
 
No exemplo abaixo , exemplificamos o funcionamento da função SplitPath , usando 
combinações de nomes de arquivos com ou sem drive , caminho , nome de arquivo e/ou 
extensão. 
 
User Function TSTSplit() 
Local aArq := {} , cDrive, cDir, cNome, cExt 
 
aadd(aArq,'c:\path\arquivo.ext') 
aadd(aArq,'c:\path\arquivo') 
aadd(aArq,'c:\path\') 
aadd(aArq,'c:\arquivo') 
aadd(aArq,'\path\arquivo.ext') 
aadd(aArq,'path\arquivo') 
aadd(aArq,'\\servidor\pasta\') 
aadd(aArq,'\\servidor\pasta\arquivo.ext') 
aadd(aArq,'') 
 
For nI := 1 to len(aArq) 
 SplitPath( aArq[nI], @cDrive, @cDir, @cNome, @cExt ) 
 conout( aArq[nI] + ' ['+cDrive+'] ['+ cDir +'] ['+ cNome +'] ['+ 
cExt + ']') 
Next 
 
 
Após executado o programa acima, deve ser exibido no console do Protheus Server o 
texto abaixo : 
 
c:\path\arquivo.ext [c:] [\path\] [arquivo] [.ext] 
c:\path\arquivo [c:] [\path\] [arquivo] [] 
c:\path\ [c:] [\path\] [] [] 
c:\arquivo [c:] [\] [arquivo] [] 
\path\arquivo.ext [] [\path\] [arquivo] [.ext] 
path\arquivo [] [path\] [arquivo] [] 
\\servidor\pasta\ [] [\\servidor\pasta\] [] [] 
\\servidor\pasta\arquivo.ext [] [\\servidor\pasta\] [arquivo] [.ext] 
 [] [] [] [] 
Exemplo da função HTTPGET 
Revisão: 27/01/2004 
Abrangência 
Versão 6.09 Versão 7.10 Versão 8.11 
 
No exemplo abaixo, solicitamos a um servidor http o conteúdo de uma página, e a 
chamada de uma página .asp passando parâmetros via GET 
// Buscar página 
cHtmlPage := Httpget('http://www.servidor.com.br/pageteste.htm') 
 
// Chamar página passando parâmetros 
 
cHtmlPage := 
Httpget('http://www.servidor.com.br/funteste.asp?Id=123&Nome=Teste') 
 
// ou 
 
cHtmlPage := 
Httpget('http://www.servidor.com.br/funteste.asp','Id=123&Nome=Teste') 
 
Exemplo da função 
HTTPLOGONUSER() 
Revisão: 27/01/2004 
Abrangência 
Versão 6.09 Versão 7.10 Versão 8.11 
 
Através da função httplogonuser() , quando utilizamos o Protheus Server como DLL 
ISAPI, juntamente com o IIS, se e somente se desabilitado o acesso anônimo ào site , a 
função retornará uma string contendo o login do usuário. 
A função funciona tanto com links .apl como links .apw. 
Observação : Caso esta função seja chamada via Job , Remote , ou com o Protheus 
Server HTTP sendo executado como Console ou Serviço , sem usar a .dll ISAPI , a 
função sempre retornará uma string em branco. 
User function TstUsrLogin() 
Local cLogin := HttpLogonUser() 
 
IF empty(cLogin) 
 conout("USuario nao identificado") 
Else 
 conout("USuario : "+cLogin) 
Endif 
 
Return " 
 
"+cLogin+" 
 
" 
Exemplo da Função Directory 
Revisão: 09/07/2003 
Abrangência 
Versão 5.07 Versão 5.08 Versão 6.09 Versão 7.10 Versão 8.11 
 
Através do exemplo abaixo , obtemos no array aDirectory todos os diretórios no 
ambiente do servidor a partir do path atual. 
#INCLUDE "Directry.ch" 
aDirectory := DIRECTORY("*.*","D") 
AEVAL( aDirectory, {|aFile| CONOUT(aFile[F_NAME])} ) 
 
Exemplo da Função MSCOMPRES 
Revisão: 07/05/2003 
Abrangência 
Versão 5.07 Versão 5.08 Versão 6.09 Versão 7.10 
 
// Exemplo 1 à Compacta apenas um arquivo 
lRes := MSCOMPRESS( "AP6SRV.EXE", "AP6SRV.MZP" ) 
 
 
// Exemplo 2 à Compacta um diretório com senha 
aNome := {} 
ADIR( "*.DBF", aNome ) 
lRes := MSCOMPRESS( aNome, "ArqComp.MZP", "SENHA" ) 
 
Exemplo da função ADIR 
Revisão: 04/08/2002 
Abrangência 
Versão 5.07 Versão 5.08 Versão 6.09 Versão 7.10 
 
Este exemplo cria um vetor que conterá os nomes de todos os arquivos (.txt) no 
diretório DEFAULT corrente, e os relaciona no console utilizando a funçao AEVAL() : 
 
LOCAL aFiles[ADIR("*.TXT")] 
ADIR("*.TXT", aFiles) 
AEVAL(aFiles, { |element| conout(element) }) 
 
 
*** Vale lembrar que ADIR() é uma funçao de compatibilidade e portanto 
desaconselhada. Ele está superado pela funçao DIRECTORY(), que retorna todas 
as informaçoes de arquivo em um vetor multi-dimensional. *** 
 
Exemplo da função CURDIR 
Revisão: 28/04/2003 
Abrangência 
Versão 5.07 Versão 5.08 Versão 6.09 Versão 7.10 
 
No exemplo abaixo , conferimos o path atual e tentamos setar um novo path atual , 
verificando se a operação foi realizada com sucesso. 
 
cOldDir := curdir() 
cNewDir := '\webadv\xis' 
curdir(cNewDir) // Troca o path 
If cNewDir <> '\'+curdir()// E verifica se trocou mesmo 
 conout('Falha ao Trocar de Path de '+cOldDir + ' para '+cNewDir) 
Else 
 conout('Path de '+cOldDir + ' trocado para '+cNewDir+' com 
sucesso.') 
Endif 
Exemplo da função DIRREMOVE 
Revisão: 01/05/2003 
Abrangência 
Versão 5.07 Versão 5.08 Versão 6.09 Versão 7.10 
 
No exemplo abaixo , executado a partir do Protheus Remoite , tentamos excluir a pasta 
c:\TmpFiles , verificando se houve sucesso nesta operação. 
 
cDelPath := 'c:\TmpFiles' 
lRemoveOk := DIRREMOVE(cDelPath) 
IF !lRemoveOk 
 MsgStop('Falha ao remover a pasta '+cDelPath+' ( File Error 
'+str(Fewrror(),4)+' ) ') 
Else 
 MsgStop('Pasta '+cDelPath+' removida com sucesso.') 
Endif 
 
Exemplo da função DISKSPACE 
Revisão: 01/05/2003 
Abrangência 
Versão 5.07 Versão 5.08 Versão 6.09 Versão 7.10 
 
No exemplo abaixo , obtemos os espaços em disco da unidade de disco da estação local 
e do drive A: da estação local, verificando se houve sucesso na operação. 
 
nBytesLocal := DISKSPACE( ) // Retorna o espaço disponivel na unidade 
de disco local ( remote ). 
IF nBytesLocal < 1048576 
 MsgStop('Unidade de Disco local possui menos de 1 Mb livre.') 
Else 
 MsgStop('Unidade de disco local possui '+str(nBytes_A,12)+' bytes 
livres.') 
Endif 
nBytes_A := DISKSPACE( 1 ) // Retorna o espaço disponivel no drive A: 
local ( remote ). 
If nBytes_A == -1 
 MsgStop('Unidade A: não está disponível ou não há disco no Drive') 
ElseIf nBytes_A < 8192 
 MsgStop('Não há espaço disponível no disco. Substitua o disco na 
Unidade A:') 
Else 
 MsgStop('Unidade A: Verificada . '+str(nBytes_A,12)+' bytes 
livres.') 
Endif 
Exemplo da função FERASE 
Revisão: 01/05/2003 
Abrangência 
Versão 5.07 Versão 5.08 Versão 6.09 Versão 7.10 
 
// Este exemplo apaga todos os arquivos .BAK do diretório corrente no Servidor 
#include 'DIRECTRY.CH' 
aEval(Directory("*.BAK"), { |aFile| FERASE(aFile[F_NAME]) }) 
 
 
// Este exemplo apaga um arquivo no cliente ( Remote ) , informando o status da 
operação 
 
IF FERASE("C:\ListaTXT.tmp") == -1 
 MsgStop('Falha na deleção do Arquivo ( FError'+str(ferror(),4)+ 
')') 
Else 
 MsgStop('Arquivo deletado com sucesso.') 
ENDIF 
Exemplo da função FILE 
Revisão: 04/05/2003 
Abrangência 
Versão 5.07 Versão 5.08 Versão 6.09 Versão 7.10 
 
Nos exemplos abaixo , testamos a existência de um determinado arquivo na estação 
local e no diretório definido como RootPath do ambiente (Environment) no Servidor. 
 
FILE("teste.dbf") // Verifica no diretório corrente do servidor se 
existe o arquivo teste.dbf 
FILE("\SIGAADV\TESTE.dbf") // Verifica no diretório Sigaadv do 
servidor se existe o arquivo teste.dbf 
FILE("C:\TEMP\TESTE.dbf") // // Verifica no diretório Temp do cliente 
(Remote) se existe o arquivo teste.dbf 
 
 
Observação : Caso a função File() seja executada em Job ( programa sem interface 
remota ) , sendo passado um caminho absoluto de arquivo ( exemplo c:\teste.txt) , a 
função retornará .F. e FERROR() retornará -1 ) 
Exemplo da função FOPEN 
Revisão: 05/05/2003 
Abrangência 
Versão 5.07 Versão 5.08 Versão 6.09 Versão 7.10 
 
No exemplo abaixo , tentamos abrir o arquivo error.log para escrita e gravação 
compartilhada. 
#include 'fileio.ch' 
... 
nH := fopen('\sigaadv\error.log' , FO_READWRITE + FO_SHARED ) 
If nH == -1 
 MsgStop('Erro de abertura : FERROR '+str(ferror(),4)) 
Else 
 MsgStop('Arquivo aberto com sucesso.') 
 ... 
 fclose(nH) 
Endif 
... 
Exemplo da função FRENAME 
Revisão: 05/05/2003 
Abrangência 
Versão 5.07 Versão 5.08 Versão 6.09 Versão 7.10 
 
Nos exemplos abaixo , citamos 3 usos da função frename : Renomear arquivos na 
estação Cliente , no Server , e mover arquivos de uma pasta no Client para outra pasta. 
 
// Renomeando um arquivo no Client de origem.txt para destino.txt , na 
pasta c:\Temp 
nStatus1 := frename('c:\Temp\Origem.txt' , 'c:\Temp\Destino.txt' ) 
IF nStatus1 == -1 
 MsgStop('Falha na operação 1 : FError '+str(ferror(),4)) 
Endif 
 
// Renomeando um arquivo no Server, na pasta sigaadv , de error.log 
para error.old 
nStatus2 := frename('\sigaadv\error.log' , '\sigaadv\error.old' ) 
IF nStatus2 == -1 
 MsgStop('Falha na operação 2 : FError '+str(ferror(),4)) 
Endif 
 
// Movendo um arquivo no client , da pasta Raiz para a pasta c:\Temp , 
alterando também o nome do arquivo. 
nStatus3 := frename('c:\Lista.txt','c:\Temp\OldLista.txt') 
IF nStatus3 == -1 
 MsgStop('Falha na operação 3 : FError '+str(ferror(),4)) 
Endif 
Exemplo da função FWRITE 
Revisão: 27/05/2003 
Abrangência 
Versão 5.07 Versão 5.08 Versão 6.09 Versão 7.10 
 
Este exemplo realiza uma cópia de um arquivo Texto chamado ORIGEM.TXT , para 
um arquivo chamado DESTINO.TXT , no ambiente do Protheus Server. 
#INCLUDE "FILEIO.CH" 
#DEFINE F_BLOCK 1024 // Define o bloco de Bytes a serem lidos 
/ gravados por vez 
 
User Function TestCopy() 
Local cBuffer := SPACE(F_BLOCK) 
Local nHOrigem , nHDestino 
Local nBytesLidos , nBytesFalta , nTamArquivo 
Local nBytesLer , nBytesSalvo 
Local lCopiaOk := .T. 
 
// Abre o arquivo de Origem 
nHOrigem := FOPEN("ORIGEM.TXT", FO_READ) 
 
// Testa a abertura do Arquivo 
If nHOrigem == -1 
 MsgStop('Erro ao abrir origem. Ferror = 
'+str(ferror(),4),'Erro') 
 Return .F. 
Endif 
 
// Determina o tamanho do arquivo de origem 
nTamArquivo := Fseek(nHOrigem,0,2) 
 
// Move o ponteiro do arquivo de origem para o inicio do arquivo 
Fseek(nHOrigem,0) 
 
// Cria o arquivo de destino 
nHDestino := FCREATE("DESTINO.TXT", FC_NORMAL) 
 
// Testa a criação do arquivo de destino 
If nHDestino == -1 
 MsgStop('Erro ao criar destino. Ferror = 
'+str(ferror(),4),'Erro') 
 FCLOSE(nHOrigem) // Fecha o arquivo de Origem 
 Return .F. 
Endif 
 
// Define que a quantidade que falta copiar é o próprio tamanho do 
Arquivo 
nBytesFalta := nTamArquivo 
 
// Enquanto houver dados a serem copiados 
While nBytesFalta > 0 
 
 // Determina quantidade de dados a serem lidos 
 nBytesLer := Min(nBytesFalta , F_BLOCK ) 
 
 // lê os dados do Arquivo 
 nBytesLidos := FREAD(nHOrigem, @cBuffer, nBytesLer ) 
 
 // Determina se não houve falha na leitura 
 If nBytesLidos < nBytesLer 
 MsgStop( "Erro de Leitura da Origem. "+; 
 Str(nBytesLer,8,2)+" bytes a 
LER."+; 
 Str(nBytesLidos,8,2)+" bytes 
Lidos."+; 
 "Ferror = 
"+str(ferror(),4),'Erro') 
 lCopiaOk := .F. 
 Exit 
 Endif 
 
 // Salva os dados lidos no arquivo de destino 
 nBytesSalvo := FWRITE(nHDestino, cBuffer,nBytesLer) 
 
 // Determina se não houve falha na gravação 
 If nBytesSalvo < nBytesLer 
 MsgStop("Erro de gravação do Destino. "+; 
 Str(nBytesLer,8,2)+" bytes a 
SALVAR."+; 
 Str(nBytesSalvo,8,2)+" bytes 
gravados."+; 
 "Ferror = 
"+str(ferror(),4),'Erro') 
 lCopiaOk := .F. 
 EXIT 
 Endif 
 
 // Elimina do Total do Arquivo a quantidade de bytes copiados 
 nBytesFalta -= nBytesLer 
 
Enddo 
 
// Fecha os arquivos de origem e destino 
FCLOSE(nHOrigem) 
FCLOSE(nHDestino) 
 
If lCopiaOk 
 MsgStop('Cópia de Arquivos finalizada com sucesso. '+; 
 str(nTamArquivo,12,0)+' bytes 
copiados.','Final') 
Else 
 MsgStop( 'Falha na Cópia. Arquivo de Destino incompleto. '+; 
 'Do total de '+str(nTamArquivo,12,0)+' 
bytes, faltaram '+str(nBytesFalta,12,0)+' bytes.','Final') 
Endif 
 
Return 
Exemplo da função GetClientDir() 
Revisão: 04/05/2003 
Abrangência 
Versão 5.07 Versão 5.08 Versão 6.09 Versão 7.10 
 
No exemplo abaixo , obtemos o drive e diretório onde estão instalados o Remote . 
 
MsgStop('Protheus Remote instalado em '+ GetClientDir()) 
 
Exemplo das funções IsSrvUnix e 
GetRemoteIniName 
Revisão: 12/06/2003 
Abrangência 
Versão 6.09 Versão 7.10 
 
Através do exemplo abaixo, podemos obter o path de execução do AP Remote. 
#include "protheus.ch" 
 
Function TstRmtPath() 
Local cIniName:= GetRemoteIniName()Local lUnix:= IsSrvUnix() 
Local nPos:= Rat( IIf(lUnix,"/","\"),cIniName ) 
Local cPathRmt 
 
if nPos!=0 
 cPathRmt:= Substr( cIniName,1,nPos-1 ) 
else 
 cPathRmt:="" 
endif 
 
QOut( cPathRmt ) 
 
Return 
Exemplo da função ALIAS 
Revisão: 25/07/2002 
Abrangência 
Versão 5.07 Versão 5.08 Versão 6.09 Versão 7.10 Versões Anteriores 
 
No exemplo abaixo , determinamos qual a area de trabalho está atualmente em uso. 
 
cAlias := alias() 
IF empty(cAlias) 
 alert('Não há Area em uso') 
Else 
 alert(Area em uso atual : '+cAlias) 
Endif 
 
Exemplo da função DBAppend 
Revisão: 07/05/2003 
Abrangência 
Versão 5.07 Versão 5.08 Versão 6.09 Versão 7.10 Versões Anteriores 
 
Este exemplo demonstra como se pode utilizar o dbappend liberando e mantendo 
bloqueios anteriores. 
 
USE Clientes NEW 
FOR i:=1 to 5 
 DBAPPEND(.F.) 
 NOME := "XXX" 
 END : ="YYY" 
NEXT 
// Os 5 registros incluídos permanecem bloqueados 
DBAPPEND() 
// Todos os bloqueios anteriores são liberados 
Exemplo da função DBClearAllFilter 
Revisão: 07/05/2003 
Abrangência 
Versão 5.07 Versão 5.08 Versão 6.09 Versão 7.10 Versões Anteriores 
 
Este exemplo demonstra como se pode utilizar DBCLEARALLFILTER para limpar a 
expressão de filtro. 
 
USE Clientes NEW 
DBSETFILTER( {|| Idade < 40}, "Idade < 40") // Seta a expressão de 
filtro 
... 
DBCLEARALLFILTER() 
// Limpa a expressão de filtro de todas as ordens 
 
Exemplo da função DBClearFilter 
Revisão: 07/05/2003 
Abrangência 
Versão 5.07 Versão 5.08 Versão 6.09 Versão 7.10 Versões Anteriores 
 
Este exemplo demonstra como se pode utilizar DBCLEARFILTER para limpar a 
expressão de filtro. 
 
USE Clientes NEW 
DBSETFILTER( {|| Idade < 40}, "Idade < 40" ) // Seta a expressão de 
filtro 
... 
DBCLEARFILTER() 
// Limpa a expressão de filtro 
Exemplo da função DBClearIndex 
Revisão: 07/05/2003 
Abrangência 
Versão 5.07 Versão 5.08 Versão 6.09 Versão 7.10 Versões Anteriores 
 
Este exemplo demonstra como se pode utilizar a função DBCLEARINDEX para fechar 
os índices. 
 
USE Clientes NEW 
DBSETINDEX("Nome") // Abre o arquivo de índice "Nome" 
... 
DBCLEARINDEX() 
// Fecha todos os arquivos de índices 
 
Exemplo da função DBCloseAll 
Revisão: 07/05/2003 
Abrangência 
Versão 5.07 Versão 5.08 Versão 6.09 Versão 7.10 Versões Anteriores 
 
Este exemplo demonstra como se pode utilizar o DBCLOSEALL para fechar todas as 
áreas de trabalho abertas. 
 
USE Clientes NEW 
DBSETINDEX("Nome") // Abre o arquivo de índice "Nome" 
USE Fornecedores NEW 
DBSETINDEX("Idade") // Abre o arquivo de índice "Idade" 
... 
DBCLOSEALL() //Fecha todas as áreas de trabalho e todos os índices 
associados a elas. 
Exemplo da função DBCloseArea 
Revisão: 07/05/2003 
Abrangência 
Versão 5.07 Versão 5.08 Versão 6.09 Versão 7.10 Versões Anteriores 
 
Este exemplo demonstra como se pode utilizar o DBCLOSEAREA para fechar a área 
de trabalho atual. 
 
USE Clientes NEW 
DBSETINDEX("Nome") // Abre o arquivo de índice "Nome" 
... 
DBCLOSEAREA() 
// Fecha a área de trabalho atual 
 
Exemplo da função DBSTRUCT 
Revisão: 08/05/2003 
Abrangência 
Versão 5.07 Versão 5.08 Versão 6.09 Versão 7.10 Versões Anteriores 
 
Este exemplo demonstra como se pode utilizar o DBSTRUCT para recuperar a estrutura 
da tabela corrente. 
 
USE Cliente NEW 
DBSTRUCT() 
//Retorna:{{Cod,N,3,0},{Nome,C,10,0},{Idade,N,3,0},{Nasc,D,8,0},{Pagto
,N,7,2}} 
Exemplo da função DBSkip 
Revisão: 07/05/2003 
Abrangência 
Versão 5.07 Versão 5.08 Versão 6.09 Versão 7.10 Versões Anteriores 
 
Este exemplo mostra como o DBSKIP pode passar do final da tabela e do início da 
tabela 
 
DBUSEAREA( .T.,"dbfcdxads", "\dadosadv609\sa1990.dbf","SSS",.T., .F. ) 
DBGOBOTTOM() 
EOF() // retorna .F. 
DBSKIP() 
EOF() // retorna .T. 
DBGOTOP() 
BOF() // retorna .F. 
DBSKIP(-1) 
BOF() // retorna .T. 
 
Exemplo da função DBUnlock 
Revisão: 08/05/2003 
Abrangência 
Versão 5.07 Versão 5.08 Versão 6.09 Versão 7.10 Versões Anteriores 
 
Este exemplo mostra como liberar todos os registros bloqueados da tabela corrente. 
 
// Driver "DBFCDXADS" utiliza ACE para abertura do arquivo 
DBUSEAREA( .T.,"DBFCDXADS", "\dadosadv609\sa1990.dbf","SSS",.T., .F. ) 
DBRLock() 
.... 
DBUNLOCK() 
Exemplo da função HEADER 
Revisão: 03/10/2002 
Abrangência 
Versão 5.07 Versão 5.08 Versão 6.09 Versão 7.10 Versões Anteriores 
 
Este exemplo define uma pseudo-funçao, DbfSize(), que utiliza HEADER() juntamente 
com RECSIZE() e LASTREC() para calcular o tamanho do arquivo de banco de dados 
corrente em bytes: 
#define DbfSize() ((RECSIZE() * LASTREC()) + HEADER() + 1) 
 
 
Depois, você pode utilizar DbfSize() como se fosse qualquer outra funçao: 
 
USE Sales NEW 
USE Customer NEW 
? DbfSize() 
? Sales->(DbfSize()) 
 
Exemplo da função USED 
Revisão: 09/07/2003 
Abrangência 
Versão 5.07 Versão 5.08 Versão 6.09 Versão 7.10 Versão 8.11 
Versões Anteriores 
 
O exemplo abaixo determina se um arquivo de banco de dados em use na área de 
trabalho corrente: 
USE Customer NEW 
conout(USED()) // Resulta: .T. 
CLOSE 
conout(USED()) // Resulta: .F. 
Exemplo de função DBUnlockAll 
Revisão: 08/05/2003 
Abrangência 
Versão 5.07 Versão 5.08 Versão 6.09 Versão 7.10 
 
Este exemplo mostra como liberar todos os registros bloqueados da tabela corrente. 
 
DBUSEAREA( .T.,"dbfcdxads", "\dadosadv609\sa1990.dbf","SSS",.T., .F. ) 
DBRLock() 
... 
DBUNLOCKALL() 
Exemplo da função DTOC 
Revisão: 13/10/2002 
Abrangência 
Versão 5.07 Versão 5.08 Versão 6.09 Versão 7.10 
 
Os exemplos a seguir demonstram utilizaçoes gerais de DTOC(): 
 
conout( DATE() ) // Resulta: 09/01/90 
conout( DTOC(DATE()) ) // Resulta: 09/01/90 
conout( "Hoje e " + DTOC(DATE()) ) // Resulta: Hoje e 09/01/90 
 
Exemplo da função DTOS 
Revisão: 13/10/2002 
Abrangência 
Versão 5.07 Versão 5.08 Versão 6.09 Versão 7.10 Versões Anteriores 
 
Os exemplos a seguir ilustram DTOS() em conjunto com várias outras funçoes: 
 
conout( DATE() ) // Resulta: 09/01/90 
conout( DTOS(DATE()) ) // Resulta: 19900901 
conout( LEN(DTOS(CTOD(""))) ) // Resulta: 8 
 
 
Este exemplo demonstra como criar um índice com uma data 
composta e chave de caractere utilizando DTOS(): 
Exemplo da função GETIMPWINDOWS 
Revisão: 05/05/2003 
Abrangência 
Versão 5.07 Versão 5.08 Versão 6.09 Versão 7.10 
 
No exemplo abaixo , determinamos as impressoras disponíveis na estação Remote e no 
Server , respectivamente. E , mostramos no Console do Server a(s) impressora(s) 
encontrada(s). 
 
aImpRemote := GetImpWindows(.F.) 
conout('Impressoras na estação remota') 
aeval(aImpRemote , { |x| conout(x) }) 
aImpServer := GetImpWindows(.T.) 
conout('Impressoras no Servidor') 
aeval(aImpServer , { |x| conout(x) }) 
 
Exemplo da função GETPORTACTIVE 
Revisão: 07/05/2003 
Abrangência 
Versão 5.07 Versão 5.08 Versão 6.09 Versão 7.10 
 
No exemplo abaixo, determinamos as portas de impressão disponíveis na estação 
Remote e no Server, respectivamente. E mostramos no Console do Server a(s) porta(s) 
encontrada(s). 
aPortRemote := GetPortActive(.F.) 
conout('Impressoras na estação remota') 
aeval(aPortRemote , { |x| conout(x) }) 
aPortServer := GetPortActive(.T.) 
conout('Impressoras no Servidor') 
aeval(aPortServer , { |x| conout(x) }) 
Veja abaixo um exemplo do que foi mostrado no console do Protheus Server, apos a 
execução da rotina. 
Impressoras na estação remota 
COM1:COM2:COM3:COM4:FILE:LPT1:LPT2:LPT3:\\prnserver\prx-lp1 
Impressoras no Servidor 
COM1:COM2:COM3:COM4:FILE:LPT1:LPT2:LPT3: 
Exemplo da função DESCEND 
Revisão: 08/09/2002 
Abrangência 
Versão 5.07 Versão 5.08 Versão 6.09 Versão 7.10 
 
Este exemplo utiliza DESCEND() em uma expressaoINDEX para criar um índice de 
datas de ordem descendente: 
 
USE Sales NEW 
INDEX ON DESCEND(DTOS(OrdDate)) TO SalesDate 
 
 
Depois, DESCEND() pode ser utilizado para fazer uma pesquisa (SEEK) no índice 
descendente: 
 
DbSEEK(DESCEND(DTOS(dFindDate))) 
 
 
Observação : Faz-se necessária a conversão da Data para String m através da 
função DTOS(), pois a função DESCEND apenas trabalha com Strings. 
Exemplo da Função DAY 
Revisão: 04/08/2002 
Abrangência 
Versão 5.07 Versão 5.08 Versão 6.09 Versão 7.10 Versões Anteriores 
 
Os exemplos seguintes mostram a funçao DAY() sendo utilizada 
de diversas maneiras: 
 
conout( DATE() ) // Resulta: 09/01/90 
conout( DAY(DATE()) ) // Resulta: 1 
conout( DAY(DATE()) + 1) // Resulta: 2 
conout( DAY(CTOD("")) ) // Resulta: 0 
 
 
Este exemplo utiliza DAY() em conjunto com CMONTH() e YEAR() 
para formatar um valor do tipo data: 
 
conout( CMONTH(DATE()) + STR(DAY(DATE())) +; 
 "," + STR(YEAR(DATE())) ) // Resulta: June 15, 1990 
Exemplo da Função MONTH 
Revisão: 22/09/2002 
Abrangência 
Versão 5.07 Versão 5.08 Versão 6.09 Versão 7.10 
 
Estes exemplos ilustram o retorno do mês da data do sistema: 
 
conout( DATE() ) // Resulta: 09/01/90 
conout( MONTH(DATE()) ) // Resulta: 9 
conout( MONTH(DATE()) + 1 ) // Resulta: 10 
 
 
Este exemplo demonstra a funçao MONTH() atuando em uma data nula: 
 
conout( MONTH(CTOD("")) ) // Resulta: 0 
Exemplo da funcão CDOW 
Revisão: 04/08/2002 
Abrangência 
Versão 5.07 Versão 5.08 Versão 6.09 Versão 7.10 Versões Anteriores 
 
Os exemplos a seguir ilustram o funcionamento da funçao CDOW(): 
 
conout( DATE() ) // Resulta: 08/04/02 
conout( CDOW(DATE()) ) // Resulta: Sunday 
conout( CDOW(DATE() + 7) ) // Resulta: Sunday 
conout( CDOW(CTOD("12/06/90")) ) // Resulta: Thursday 
Exemplo da função CMONTH 
Revisão: 04/08/2002 
Abrangência 
Versão 5.07 Versão 5.08 Versão 6.09 Versão 7.10 Versões Anteriores 
 
Os exemplos seguintes ilustram a utilizaçao da funçao CMONTH(): 
 
conout( CMONTH(DATE()) ) // 
Resulta: August 
conout( CMONTH(DATE() + 45) ) // 
Resulta: September 
conout( SUBSTR(CMONTH(DATE()), 1, 3) + STR(DAY(DATE()),3)) // 
Resulta: Aug 4 
Exemplo da função DATE 
Revisão: 04/08/2002 
Abrangência 
Versão 5.07 Versão 5.08 Versão 6.09 Versão 7.10 
 
Os exemplos seguintes mostram a função DATE() utilizada de várias maneiras: 
 
conout( DATE() ) // Resulta: 08/04/02 
conout( DATE() + 30 ) // Resulta: 09/03/02 
conout( DATE() - 30 ) // Resulta: 07/05/02 
dDate = DATE() 
conout( CMONTH(dDate) ) // Resulta: August 
Exemplo da função DOW 
Revisão: 07/05/2003 
Abrangência 
Versão 5.07 Versão 5.08 Versão 6.09 Versão 7.10 Versões Anteriores 
 
Os exemplos a seguir ilustram CDOW() e seu relacionamento com DOW(): 
 
conout( DATE() ) // Resulta: 09/01/89 
conout( DOW(DATE()) ) // Resulta: 3 
conout( CDOW(DATE()) ) // Resulta: Terca-feira 
conout( DOW(DATE() - 2) ) // Resulta: 1 
conout( CDOW(DATE() - 2) ) // Resulta: Domingo 
Exemplo da função ElapTime() 
Revisão: 08/09/2002 
Abrangência 
Versão 5.07 Versão 5.08 Versão 6.09 Versão 7.10 
 
Este exemplo utiliza a função ElapTime() para calcular o tempo necessário para um 
determinado processamento. 
 
cHoraInicio := TIME() // Armazena hora de inicio do processamento 
. 
. <instrucoes> 
. 
cElapsed := ELAPTIME(TIME(),cHoraInicio) // Calcula a diferença de 
tempo 
 
 
Considerando o exemplo acima, caso cHoraInicio seja 23:45:00 , e a hora final do 
processamento seja 00:20:00 , a diferença entre eles , computada na variável cElapsed, 
será 00:15:00 . 
Exemplo da função TIME 
Revisão: 19/10/2002 
Abrangência 
Versão 5.07 Versão 5.08 Versão 6.09 Versão 7.10 
 
Estes exemplos mostram a função TIME() utilizada em conjunto com SUBSTR() 
para extrair a hora, os minutos e os segundos: 
 
cTime := TIME() // Resultado: 10:37:17 
cHora := SUBSTR(cTime, 1, 2) // Resultado: 10 
cMinutos := SUBSTR(cTime, 4, 2) // Resultado: 37 
cSegundos := SUBSTR(cTime, 7, 2) // Resultado: 17 
Exemplo da função YEAR 
Revisão: 13/10/2002 
Abrangência 
Versão 5.07 Versão 5.08 Versão 6.09 Versão 7.10 
 
Os exemplos a seguir ilustram YEAR() usando a data do 
sistema: 
 
conout( DATE() ) // Resulta: 09/01/90 
conout( YEAR(DATE()) ) // Resulta: 1990 
conout( YEAR(DATE()) + 11 ) // Resulta: 2001 
 
 
Este exemplo cria uma funçao definida pelo usuário usando 
YEAR() para formatar um valor data na forma : mês dia, ano: 
 
conout( U_Mdy(DATE()) ) // Resulta: September 20, 
1990 
 
USER FUNCTION Mdy( dDate ) 
Return CMONTH(dDate) + " " + LTRIM(STR(DAY(dDate))); 
 + "," + STR(YEAR(dDate)) 
Exempo da função Seconds() 
Revisão: 09/10/2002 
Abrangência 
Versão 5.07 Versão 5.08 Versão 6.09 Versão 7.10 
 
Este exemplo compara o valor de TIME() com o de SECONDS(): 
 
conout( TIME() ) // Resulta: 10:00:00 
conout( SECONDS() ) // Resulta: 36000.00 
 
 
Este exemplo demonstra como utilizar SECONDS() para informar o tempo decorrido 
em segundos: 
 
LOCAL nStart, nElapsed 
nStart = SECONDS() 
. 
. <processamentos...etc....> 
. 
nElapsed = SECONDS() - nStart 
conout( "Decorridos: " + LTRIM(STR(nElapsed)) + " segundos" ) 
Exemplo da função AADD 
Revisão: 06/08/2002 
Abrangência 
Versão 5.07 Versão 5.08 Versão 6.09 Versão 7.10 
 
Os exemplos a seguir demonstram os efeitos de chamadas múltiplas da função AADD() 
para um vetor: 
 
aArray := {} // Resulta: aArray e um vetor vazio 
AADD(aArray, 5) // Resulta: aArray e { 5 } 
AADD(aArray, 10) // Resulta: aArray e { 5, 10 } 
AADD(aArray, { 12, 10 }) // Resulta: aArray e { 5, 10, { 12, 10 } 
} 
 
Exemplo da função ACOPY 
Revisão: 04/08/2002 
Abrangência 
Versão 5.07 Versão 5.08 Versão 6.09 Versão 7.10 
 
Este exemplo cria dois vetores, cada um deles preenchido com um valor. Os dois 
primeiros elementos do vetor fonte sao entao copiados para o vetor destino: 
 
LOCAL nCount := 2, nStart := 1, aOne, aTwo 
aOne := { 1, 1, 1 } 
aTwo := { 2, 2, 2 } 
ACOPY(aOne, aTwo, nStart, aCont) // Resulta: aTwo e agora { 1, 1, 2 
} 
Exemplo da função ADEL 
Revisão: 17/07/2002 
Abrangência 
Versão 5.07 Versão 5.08 Versão 6.09 Versão 7.10 
 
Este exemplo cria um vetor constante de três elementos, e depois 
elimina o segundo elemento. O terceiro elemento sobe uma posiçao, e ao 
novo terceiro elemento é atribuido NIL: 
 
LOCAL aArray 
aArray := { 1, 2, 3 } // Resulta: aArray e agora { 1, 2, 3 } 
ADEL(aArray, 2) // Resulta: aArray e agora { 1, 3, NIL 
} 
 
Exemplo da função AEVAL 
Revisão: 17/07/2002 
Abrangência 
Versão 5.07 Versão 5.08 Versão 6.09 Versão 7.10 Versões Anteriores 
 
Este exemplo utiliza AEVAL() para fazer uma lista que consiste em itens selecionados 
de um vetor multi-dimensional. 
 
LOCAL aFiles := DIRECTORY("*.dbf"), aNames := {} 
AEVAL(aFiles, { | file | AADD(aNames, file[1]) } ) 
Exemplo da função AFILL 
Revisão: 17/07/2002 
Abrangência 
Versão 5.07 Versão 5.08 Versão 6.09 Versão 7.10 Versões Anteriores 
 
Neste exemplo, é criado um vetor com três elementos. O vetor é depois preenchido com 
falso (.F.). Ao final, aos elementos nas posiçoes dois e três é atribuido o novo valos de 
verdadeiro (.T.): 
 
LOCAL aLogic[3] // Resulta: aLogic e { NIL, NIL, NIL } 
AFILL(aLogic, .F.) // Resulta: aLogice { .F., .F., .F. } 
AFILL(aLogic, .T., 2, 2) // Resulta: aLogic e { .F., .T., .T. } 
 
 
Exemplo da função AINS 
Revisão: 17/07/2002 
Abrangência 
Versão 5.07 Versão 5.08 Versão 6.09 Versão 7.10 Versões Anteriores 
 
Este exemplo demonstra o efeito da utilização de AINS() em um vetor: 
 
LOCAL aArray 
aArray := { 1, 2, 3 } // Resulta: aArray e agora { 1, 2, 3 } 
AINS(aArray, 2) // Resulta: aArray e agora { 1, NIL, 2 
} 
Exemplo da função ARRAY 
Revisão: 26/07/2002 
Abrangência 
Versão 5.07 Versão 5.08 Versão 6.09 Versão 7.10 Versões Anteriores 
 
Este exemplo cria um vetor unidimensional de cinco elementos utilizando a funçao 
ARRAY(), e depois exibe a açao equivalente atribuindo um vetor literal de valores NIL: 
 
aArray := ARRAY(5) 
aArray := { NIL, NIL, NIL, NIL, NIL } 
 
 
Este exemplo ilustra três declaraçoes diferentes que criam o mesmo vetor multi-
dimensional: 
 
aArray := ARRAY(3, 2) 
aArray := { {NIL, NIL}, {NIL, NIL}, {NIL, NIL} } 
aArray := { ARRAY(2), ARRAY(2), ARRAY(2) } 
 
Exemplo da função ASCAN 
Revisão: 26/07/2002 
Abrangência 
Versão 5.07 Versão 5.08 Versão 6.09 Versão 7.10 Versões Anteriores 
 
O exemplo a seguir demonstra a pesquisa em um vetor de três elementos utilizando 
valores simples e um bloco de código como critérios de pesquisa. Os critérios do bloco 
de código ilustram como executar uma pesquisa que nao faz diferenciaçao entre 
maiúsculas e minúsculas: 
 
aArray := { "Tom", "Mary", "Sue" } 
? ASCAN(aArray, "Mary") // Resulta: 2 
? ASCAN(aArray, "mary") // Resulta: 0 
? ASCAN(aArray, { |x| UPPER(x) == "MARY" }) // Resulta: 2 
 
 
O Exemplo abaixo demonstra como continuar a pesquisa dos múltiplos tipos de um 
argumento de pesquisa após ter sido encontrada uma correspondência: 
 
LOCAL aArray := { "Tom", "Mary", "Sue", "Mary" }, nStart := 1 
// Pegar ultima posicao de elemento de vetor 
nAtEnd := LEN(myVetor) 
While (nPos := ASCAN(aArray, "Mary", nStart)) > 0 
 ? nPos, aArray[nPos] 
 // Pegar nova posicao inicial e testar condicao de limite 
 If (nStart := ++nPos) > nAtEnd 
 EXIT 
 EndIf 
EndDo 
Exemplo da função ASIZE 
Revisão: 17/07/2002 
Abrangência 
Versão 5.07 Versão 5.08 Versão 6.09 Versão 7.10 
 
Estes exemplos demonstram a adição de novos elementos e a eliminação de elementos 
existentes: 
 
aArray := { 1 } // Resulta: aArray e { 1 } 
ASIZE(aArray, 3) // Resulta: aArray e { 1, NIL, NIL } 
ASIZE(aArray, 1) // Resulta: aArray e { 1 } 
 
Exemplo da função ASORT 
Revisão: 04/08/2002 
Abrangência 
Versão 5.07 Versão 5.08 Versão 6.09 Versão 7.10 
 
No Exemplo abaixo , ordenamos um array em ordem crescenter , depois em ordem 
decrescente através de um code-block . 
Local aArray := { 3, 5, 1, 2, 4 } 
ASORT(aArray) // Resultado: { 1, 2, 3, 4, 5 } 
ASORT(aArray,,,{ |x, y| x > y }) // Resultado: { 5, 4, 3, 2, 1 } 
No Exemplo abaixo , utilizamos na expressão de ordenação a função upper() , para 
ordenar o array em ordem alfabérica independentemente da informação estar em letras 
maiúsculas e/ou minusculas. 
aArray := { "Fred", Kate", "ALVIN", "friend" } 
ASORT(aArray,,, { |x, y| UPPER(x) < UPPER(y) }) 
No exemplo abaixo , montamos um code-block para ordenação de um array multi-
dimensional , para ordenar o array em ordem crescente do segundo elemento da 
dimensão. 
aKids := { {"Mary", 14}, {"Joe", 23},{"Art", 16} } 
aSortKids := ASORT(aKids,,, { |x, y| x[2] < y[2] }) 
// Resultado : { {"Mary", 14}, {"Art", 16}, {"Joe",23} }

Mais conteúdos dessa disciplina