No artigo de hoje, vou mostrar como abrir uma página de internet ou html local via TWebEngine.
Esse artigo foi montado como base, do exemplo enviado pelo grande Jorge Alberto ( LinkedIn ). Você também pode visualizar outros exemplos dele no GitHub.
No caso pessoal, peguei o exemplo do Jorge, e fiz pequenas alterações, a lógica usada foi:
- Mostrar uma pergunta, se deseja abrir um site de uma url ou de um arquivo local
- Se for de uma página de internet, será aberto totvs.com, instanciando um TWebEngine e usando o método navigate para a url
- Se for um arquivo local, será buscado o conteúdo do html em uma pasta na Protheus data, com o arquivo de nome AppletWeb.html. No caso, será instanciado um TWebEngine e o método usado para carregar o arquivo html é o SetHtml
Abaixo um print de exemplo:
E abaixo o código fonte desenvolvido pelo Jorge:
#INCLUDE "TOTVS.CH"
/*/{Protheus.doc} WebEng
Exemplo de abertura de página WEB ou estática com TWebEngine()
@type function
@version 12.1.25
@author Jorge Alberto
@since 30/06/2021
@obs Pequenas alterações e adaptações feitas por Daniel Atilio
/*/
User Function WebEng()
Local aArea := GetArea()
Local aParamBox := {}
//Adicionando os parâmetros que serão utilizados
aAdd( aParamBox,{3,"Tipo de página", 1,{"WEB","HTML Local"},50,"",.T.} )
//Se a pergunta for confirmada
If ParamBox( aParamBox, "exemplo")
//Se for a primeira opção será uma página de internet
If MV_PAR01 == 1
WEB()
//Senão, será um html local
Else
HTML()
EndIf
EndIf
RestArea(aArea)
Return
/*/{Protheus.doc} WEB
Página HTML da Web
@type function
@version 12.1.25
@author Jorge Alberto
@since 30/06/2021
@obs Pequenas alterações e adaptações feitas por Daniel Atilio
/*/
Static Function WEB()
Local aSize := MsAdvSize()
Local nPort := 0
Local cUrl := "https://www.totvs.com/"
Local oModal
Local oWebEngine
Private oWebChannel := TWebChannel():New()
//Cria a dialog
oModal := MSDialog():New(aSize[7],0,aSize[6],aSize[5], "Página Web",,,,,,,,,.T./*lPixel*/)
//Prepara o conector
nPort := oWebChannel::connect()
//Cria o componente que irá carregar a url
oWebEngine := TWebEngine():New(oModal, 0, 0, 100, 100,/*cUrl*/, nPort)
oWebEngine:bLoadFinished := {|self, url| /*conout("Fim do carregamento da pagina " + url)*/ }
oWebEngine:navigate(cUrl)
oWebEngine:Align := CONTROL_ALIGN_ALLCLIENT
oModal:Activate()
Return
/*/{Protheus.doc} HTML
Página HTML local
@type function
@version 12.1.25
@author Jorge Alberto
@since 30/06/2021
@obs Pequenas alterações e adaptações feitas por Daniel Atilio
/*/
Static Function HTML()
Local aSize := MsAdvSize()
Local nPort := 0
Local cPasta := "\x_web\"
Local cHtml := cPasta + "AppletWeb.html"
Local oModal
Local oWebEngine
Private oWebChannel := TWebChannel():New()
//Se a pasta não existir, cria a pasta
If ! ExistDir(cPasta)
MakeDir(cPasta)
EndIf
//Se o arquivo não existir, cria um vazio
If ! File(cHtml)
MemoWrite(cHtml, "<h1>Arquivo não encontrado!</h1>")
EndIf
//Cria a dialog
oModal := MSDialog():New(aSize[7],0,aSize[6],aSize[5], "Página Local",,,,,,,,,.T./*lPixel*/)
//Prepara o conector
nPort := oWebChannel::connect()
//Cria o componente que irá carregar o arquivo local
oWebEngine := TWebEngine():New(oModal, 0, 0, 100, 100,/*cUrl*/, nPort)
oWebEngine:SetHtml( MemoRead(cHtml) )
oWebEngine:Align := CONTROL_ALIGN_ALLCLIENT
oModal:Activate()
Return
Obs.: No passado eu montei um exemplo de TWebEngine, inclusive com execução de Javascript, caso você tenha interesse em visualizar, clique aqui.
Bom pessoal, por hoje é só.
Abraços e até a próxima.

Bom dia, sugiro também, para abertura de HTML sem necessidade de criar um novo arquivo usando uma variável contendo o código html.
Neste caso incluo o box numa tela MVC usando o AddOtherObject().
//Alimenta a variável com o código HTML
cHTML := ” + Chr(10)
cHTML += ‘ ‘ + Chr(10)
cHTML += ‘ ‘ + Chr(10)
cHTML += ” + Chr(10)
// Prepara o conector WebSocket
PRIVATE oWebChannel := TWebChannel():New()
nPort := oWebChannel:connect()
// Cria componente
oWebEng := TWebEngine():New(oWebBox, 000, 000, nLargBox, nAltBox, , nPort)
oWebEng:SetHtml( cHTML )
oWebEng:bLoadFinished := {|self,url| conout(“Termino da carga do pagina: ” + cUrlHome) }
oWebEng:Align := CONTROL_ALIGN_ALLCLIENT
Boa noite Wagner.
Opa, muito obrigado pela contribuição e comentário.
Grande abraço.