Mostrar tela de temporizador sem o botão de fechar | Ti Responde 0259

No vídeo de hoje, vamos demonstrar em como exibir uma tela que ficará aberta por alguns segundos sem a opção de fechar.

Recentemente nos perguntaram, se teria alguma forma de exibir uma tela que exibe uma mensagem por alguns segundos, mas sem ter a opção de fechar ela.

Pensando nisso, montamos um exemplo, onde vamos demonstrar a função que criamos, e também comparando com outras possibilidades.

Segue abaixo o vídeo exemplificando:

Abaixo o código fonte desenvolvido:

//Bibliotecas
#Include "tlpp-core.th"
#Include "TOTVS.ch"

//Declaração da namespace
Namespace custom.terminal.youtube
    
/*/{Protheus.doc} User Function video0259
Exemplo de como acionar uma mensagem com temporizador mas sem o botão de fechar / cancelar
@type Function
@author Atilio
@since 08/08/2026
@example custom.terminal.youtube.u_video0259()
/*/

User Function video0259()
    Local aArea       := FWGetArea() As Array
    Local cMessage    := "" As Character
    Local nSeconds    := 5 As Numeric

    //Monta a mensagem que será exibida
    cMessage := "Exemplo de Teste!"
    cMessage += "Aguarde " + cValToChar(nSeconds) + " segundos"

    //Usando a OmsMsgTime
    OmsMsgTime(cMessage, nSeconds)

    //Usando a Aviso (tem que passar em milissegundos)
    Aviso("Exemplo Aviso (Timer)", cMessage, {}, 2, "Sub Título", , , , nSeconds * 1000)

    //Usando a função customizada, sem botão de fechar / cancelar
    u_zDlgEspera(cMessage, "Teste zDlgEspera", nSeconds)

    FWRestArea(aArea)
Return

E abaixo o código da zDlgEspera:

//Bibliotecas
#Include "TOTVS.ch"

/*/{Protheus.doc} User Function zDlgEspera
Função que abre uma dialog sem opção de fechar e sem o -ESC- por um curto período de tempo
@type  Function
@author Atilio
@since 11/07/2024
@param cMensagem, Caractere, Mensagem que aparecerá na tela
@param cTitulo, Caractere, Título da tela da mensagem
@param nSegundos, Numérico, Número de segundos
/*/
 
User Function zDlgEspera(cMensagem, cTitulo, nSegundos)
    Local aArea         := FWGetArea()
    Local bTimer        := {|| oDialog:DeActivate()}
    Local oDialog
    Local oPanel
    Local oSayMsg
    Default cMensagem   := "Aguarde 3 segundos"
    Default cTitulo     := "Atenção"
    Default nSegundos   := 3
 
    //Configura a Dialog
    oDialog := FWDialogModal():New()
    oDialog:SetBackground(.F.)
    oDialog:SetTitle(cTitulo)
    oDialog:SetEscClose(.F.)
    oDialog:SetSize(80, 150) 
    oDialog:SetCloseButton(.F.)
    oDialog:CreateDialog() 
    oDialog:SetTimer(nSegundos, bTimer)
 
    //Pega o painel e insere uma mensagem nele
    oPanel := TPanel():New(/*nRow*/, /*nCol*/, /*cText*/, oDialog:GetPanelMain())
    oPanel:Align := CONTROL_ALIGN_ALLCLIENT
    oSayMsg := TSay():New(1, 1, {|| cMensagem}, oPanel, /*cPicture*/, /*oFont*/, /*uParam7*/, /*uParam8*/, /*uParam9*/, .T., /*nClrText*/, /*nClrBack*/, (oPanel:nWidth)/2 - 1, (oPanel:nHeight)/2 - 1, /*uParam15*/, /*uParam16*/, /*uParam17*/, /*uParam18*/, /*uParam19*/, .T.)
 
    //Abre a Dialog
    oDialog:Activate()    
 
    FWRestArea(aArea)
Return

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