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.