quarta-feira, 16 de novembro de 2011

Navegador Web feito em Advpl

Abaixo estou disponibilizando um código que monta um navegador em advpl. Ele guarda as páginas visitadas e permite a navegação entre elas como acontece em um navegador web.

Obs: Para funcionar, é preciso configurar o smartcliente.ini e colocar logo abaixo da marcação [config] a opção:
BrowserEnabled=1




#include "protheus.ch"


User Function Navegador()

Private aPages := {} // array que guarda os endereços visitados
Private nPgVist := -1 // controle a posicao do array aPages

Private aSize := MsAdvSize() // pega o tamanho da tela
Private oDlg1, oTIBrw
Private cNavegado := Space(80) // usado no objeto get para guardar os endereços web
Private lcont := .T.

DEFINE MSDIALOG oDlg1 TITLE "Navegador" From aSize[7],0 to aSize[6],aSize[5] of oMainWnd PIXEL

cNavegado := "http://www.google.com" // pagina inicial
oNav:= TGet():New(10,10,{|u| if(PCount()>0,cNavegado:=u,cNavegado)}, oDlg1,340,5,,,,,,,,.T.,,,,,,,,,,)

@ 010, 350 Button oBtnIr PROMPT "Ir" Size 40,10 Action(Processa({||Navegar()},"Abrindo","Aguarde...")) Of oDlg1 Pixel
@ 010, 390 Button oBtnImp PROMPT "Imprimir" Size 40,10 Action oTIBrw:Print() Of oDlg1 Pixel



@ 010, 430 Button oBtnAnte PROMPT "Anterior" Size 40,10 Action (Retorna()) Of oDlg1 Pixel
@ 010, 470 Button oBtnDep PROMPT "Avançar" Size 40,10 Action(Avanca()) Of oDlg1 Pixel
@ 010, 510 Button oBtnSair PROMPT "Sair" Size 40,10 Action(Sair()) Of oDlg1 Pixel



oTIBrw:= TIBrowser():New( 025,010,aSize[5]-640, 270, "http://www.google.com", oDlg1 )

aaDD(aPages,"http://www.google.com")

oNav:bLostFocus := { || Valido()}


Activate MsDialog oDlg1 Centered

Return


Static Function Navegar()

Ir()

Return


Static Function Ir()

oTIBrw:Navigate(AllTrim(cNavegado),oDlg1)
aaDD(aPages,AllTrim(cNavegado))
nPgVist := Len(aPages)

Return



Static Function Avanca() // proxima proxima pagina que jah foi visitada

if(Len(aPages) > nPgVist .and. Len(aPages) > 1 )
nPgVist++
oTIBrw:Navigate(aPages[nPgVist],oDlg1)
cNavegado := aPages[nPgVist]
oNav:Refresh()
EndIf

Return


Static Function Retorna() // pagina anterior que foi visitada
if(nPgVist>1)
nPgVist--
oTIBrw:Navigate(aPages[nPgVist],oDlg1)
cNavegado := aPages[nPgVist]
oNav:Refresh()
EndIf

Return



Static Function Sair() // fecha a tela
oDlg1:End()
Return



Abaixo um print da tela: