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.