Como fazer chover no Protheus | Ti Responde 0135

No vídeo de hoje, vamos demonstrar em como “fazer chover” no Protheus.

A dúvida de hoje, nos perguntaram, se seria possível, via AdvPL, fazer alguma pegadinha para mostrar uma tela “chovendo” para o usuário.

 

Pensando nisso, e lembrando de uma conversa que tive há muito tempo atrás com meu amigo Milton Camara, onde ele havia feito uma traquinagem parecida. Foi montado esse exemplo, onde se for terça feira ou sábado, a primeira vez que o usuário abrir o sistema, vai aparecer um vídeo do YouTube com chuva e trovoadas.

 

Segue abaixo o vídeo exemplificando:

 

E abaixo o código fonte desenvolvido:

//Bibliotecas
#Include "Totvs.ch"

/*/{Protheus.doc} User Function ChkExec
Ponto de Entrada acionado ao clicar em alguma opção no menu
@type  Function
@author Atilio
@since 08/03/2024
@see https://tdn.totvs.com/display/public/framework/CHKEXEC+-+Dispara+ponto+de+entrada
/*/

User Function ChkExec()
    Local lContinua := .T.
	Local dDataHoje := Date()
	Local nDiaSeman := Dow(dDataHoje)
	Local cArqJaFoi := ""

    //Se for terça feira ou sábado
    If nDiaSeman == 3 .Or. nDiaSeman == 7

		//Define um nome de arquivo que ficará na temporária do S.O.
		cArqJafoi := GetTempPath() + dToS(dDataHoje) + ".txt" // exempllo: %temp%/20240308.txt

		//Se o arquivo não existe ainda
		If ! File(cArqJaFoi)

			//Cria o arquivo, para que na próxima vez que o usuário abrir alguma rotina, não abrir novamente a tela
			MemoWrite(cArqJaFoi, "Chove chuva...")
    
			//Aciona a função da chuva
			u_zVid0135()
		EndIf
    EndIf

Return lContinua

/*/{Protheus.doc} User Function zVid0135
Chove chuva...
@author Daniel Atilio
@since 08/03/2024
@version 1.0
@type function
@obs Codigo gerado automaticamente pelo Autumn Code Maker
@see http://autumncodemaker.com
/*/

User Function zVid0135()
	Local aArea := FWGetArea()
	
	//Aciona a montagem da tela
	Processa({|| fMontaTela()})
	
	FWRestArea(aArea)
Return

/*/{Protheus.doc} fMontaTela
Montagem da tela
@author Daniel Atilio
@since 08/03/2024
@version 1.0
@type function
@obs Codigo gerado automaticamente pelo Autumn Code Maker
@see http://autumncodemaker.com
/*/

Static Function fMontaTela()
	Local aArea       := FWGetArea()
	Local oDlgWeb
	Local cHtmlMusic := '🎶'
	Local cJanTitulo := cHtmlMusic + cHtmlMusic + ' <strong>Chove chuva</strong>, chove sem parar ' + cHtmlMusic + cHtmlMusic
	//Tamanho da janela
	Local aTamanho := FwGetDialogSize()
	Local nJanLarg := aTamanho[4] / 2
	Local nJanAltu := aTamanho[3] / 2
	//Blocos de código dos botões
	Local bBlocoFech  := {|| oDlgWeb:DeActivate()}
	//Variáveis dos objetos de navegação de páginas
	Local cHtmlText   := ''
	Local nPort       := 0
	Local oPanelHtml
	Private oWebChannel
	Private oWebEngine

	//Cria o HTML base
	cHtmlText := fMontaHtml()

	//Instancia a classe, criando uma janela
	oDlgWeb := FWDialogModal():New()
	oDlgWeb:SetTitle(cJanTitulo)
	oDlgWeb:SetSize(nJanAltu, nJanLarg)
	oDlgWeb:EnableFormBar(.T.)
	oDlgWeb:CreateDialog()
	oDlgWeb:CreateFormBar()
	oDlgWeb:AddButton('Fechar', bBlocoFech, 'Fechar', , .T., .F., .T., )

	//Busca o painel principal da dialog
	oPanelHtml := oDlgWeb:GetPanelMain()
	
	//Prepara o conector WebSocket
	oWebChannel := TWebChannel():New()
	nPort := oWebChannel::connect()

	//Cria componente
	oWebEngine := TWebEngine():New(oPanelHtml, 0, 0, 100, 100, , nPort)
	oWebEngine:SetHtml(cHtmlText)
	oWebEngine:Align := CONTROL_ALIGN_ALLCLIENT

	//Abre a janela
	oDlgWeb:Activate()

	FWRestArea(aArea)
Return

/*/{Protheus.doc} fMontaHtml
Montagem do HTML que será exibido
@author Daniel Atilio
@since 08/03/2024
@version 1.0
@type function
@obs Codigo gerado automaticamente pelo Autumn Code Maker
@see http://autumncodemaker.com
/*/

Static Function fMontaHtml()
	Local aArea := FWGetArea()
	Local cHtml := ''

	cHtml := '<html>' + CRLF
	cHtml += '<head>' + CRLF
	cHtml += '	<title>Gerado pelo Autumn Code Maker</title>' + CRLF
	cHtml += '	<meta charset="UTF-8">' + CRLF
	cHtml += '	<style>' + CRLF
	cHtml += '	  ' + CRLF
	cHtml += '	</style>' + CRLF
	cHtml += '	<script>' + CRLF
	cHtml += '	  ' + CRLF
	cHtml += '	</script>' + CRLF
	cHtml += '</head>' + CRLF
	cHtml += '<body>' + CRLF
	cHtml += '	<iframe width="100%" height="100%" src="https://www.youtube.com/embed/QyqTU5TGi3g?autoplay=1&mute=1" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>' + CRLF
	cHtml += '</body>' + CRLF
	cHtml += '</html>' + CRLF
	
	FWRestArea(aArea)
Return cHtml

Bom pessoal, por hoje é só.

 

Abraços e até a próxima.

Dan (Daniel Atilio)
Cristão de ramificação protestante. Especialista em Engenharia de Software pela FIB, graduado em Banco de Dados pela FATEC Bauru e técnico em informática pelo CTI da Unesp. Entusiasta de soluções Open Source e blogueiro nas horas vagas. Autor e mantenedor do portal Terminal de Informação.

Deixe uma resposta

Terminal de Informação