Página 1 de 1

msginfo com tempo para fechar sozinho

Enviado: 09 Dez 2019 10:43
por claudiochaves
Ola,

Alguém teria algum exemplo de codigo para criar um msginfo com tempo para caso o usuario nao clique , ele feche sozinho?

Obrigado, abraços,

msginfo com tempo para fechar sozinho

Enviado: 09 Dez 2019 13:32
por alaminojunior

Código: Selecionar todos

#include "hwgui.ch"
STATIC Thisform

FUNCTION troco(vTroco)
   LOCAL ootroco, oTroco, oLabel1, oTimer1Troco, oLabel2

   if vTroco = nil .or. vTroco = 0
      return
   endif 
   INIT DIALOG ootroco TITLE "" ;
   AT 0, 0 SIZE 548,156  ;
   FONT HFont():Add( 'Tahoma',0,-67,700,,,) ;
   STYLE WS_POPUP + DS_CENTER + WS_VISIBLE + WS_SYSMENU + MB_USERICON  ;
   ON OTHERMESSAGES {|| onOtherMessages(ootroco) }
   Thisform:= ootroco
            
   SET TIMER otimer1troco OF ootroco VALUE 20000 ACTION  {|| ootroco:CLOSE() } // aqui pode ser parametrizado 5, 10, 20, 30 segundos ...
 
   @ 70,38 GET oTroco VAR vTroco SIZE 408,83 ;
        STYLE ES_RIGHT +ES_READONLY ;
        COLOR 255  PICTURE '@E 999,999.99' MAXLENGTH 10   NOBORDER

   @ 13,2 SAY oLabel1 CAPTION "Troco"  SIZE 85,36   ;
        FONT HFont():Add( 'Tahoma',0,-28,700,,,)

   @ 7,140 SAY oLabel1 CAPTION "ESC - Sai"  SIZE 58,21   ;
        FONT HFont():Add( 'Tahoma',0,-12,700,,,)
   
   ACTIVATE DIALOG ootroco
   UPDATEWINDOW( ootroco:handle )
   
RETURN

Código: Selecionar todos

STATIC FUNCTION onOtherMessages(oo)
IF LASTKEY() = 27
   oo:Close( )
ENDIF
return

msginfo com tempo para fechar sozinho

Enviado: 09 Dez 2019 14:02
por claudiochaves
Muito obrigado Alamino, abraços

msginfo com tempo para fechar sozinho

Enviado: 29 Jun 2020 17:12
por claudiochaves
Oi Pessoal, boa tarde.

Com os exemplos e ajuda dos colegas, cheguei neste resultado. Deixo aqui caso alguém necessite de um exemplo.
Com certeza, tem o que melhorar, mas já atendeu minhas necessidades.

Obrigado a todos, abraços,

Código: Selecionar todos

FUNCTION AVISAR( pTempo , pTitulo , pMsg , pLargura , pAltura )
			LOCAL oAvisarTempoStatus , oAvisarTempoTimer , oAvisarTempoLblSaida , oAvisarTempoLblMsg , vAvisarMsg , vTmpCont
			Private oAvisarTempoDlg
			if pLargura = Nil ; pLargura := 600 ; Endif
			if pAltura  = Nil ; pAltura := 200  ; Endif
			vAvisarMsg := ""
			For vTmpCont=1 to len(pMsg)
				vAvisarMsg := vAvisarMsg + iif( subs( pMsg,vTmpCont,1) = ";" , chr(13)+CHR(10) , subs( pMsg,vTmpCont,1) )
			Next
			INIT DIALOG oAvisarTempoDlg TITLE pTitulo AT 0, 0 SIZE pLargura,pAltura FONT RCG_Font_Arial_10 STYLE WS_POPUP + DS_CENTER + WS_VISIBLE + WS_SYSMENU + MB_USERICON ON OTHERMESSAGES {|| onOtherMessages(oAvisarTempoDlg) }
				Thisform:= oAvisarTempoDlg   
				SET TIMER oAvisarTempoTimer OF oAvisarTempoDlg VALUE 1000 ACTION {|| TimerAvisar(oAvisarTempoDlg , oAvisarTempoLblSaida , oTroco , oBtnx_AvisarTempoSaida ) } // aqui pode ser parametrizado 5, 10, 20, 30 segundos ... 		
				@  10          ,  5 BUTTONEX oBtnx_AvisarTempoSaida CAPTION "Esc - Sair" SIZE 80          , 25         STYLE BS_CENTER + WS_TABSTOP FONT RCG_Font_Arial_8 ON CLICK {|| EndDialog() } TOOLTIP "Finalizar tela"
				@  pLargura-50 ,  5 GET      oTroco                  VAR pTempo          SIZE 40          , 25         STYLE ES_RIGHT + ES_READONLY FONT RCG_Font_Arial_8 PICTURE "999" NOBORDER
				@  10          , 40 GET     oAvisarTempoLblMsg       VAR vAvisarMsg      SIZE pLargura-20 , pAltura-50 STYLE ES_MULTILINE +ES_WANTRETURN +ES_AUTOVSCROLL +WS_VSCROLL+ES_READONLY FONT RCG_Font_Arial_10_Negrito
			ACTIVATE DIALOG oAvisarTempoDlg
			UPDATEWINDOW( oAvisarTempoDlg:handle )
		Return .t.
		
		Function TimerAvisar( pObjTela , pObjLbl , pObjConta , pBotao )
			RCG_SetGet_Refresh( pObjConta , str( pObjConta:Value-1,3) )
			if pObjConta:Value < 1
				pObjTela:CLOSE() 
			Endif
		Return .t.
		
		STATIC FUNCTION onOtherMessages(pObjTela)
			IF LASTKEY() = 27
				pObjTela:Close( )
			ENDIF
		return

msginfo com tempo para fechar sozinho

Enviado: 02 Set 2025 22:19
por lucimauro
Ola claudio chaves,
No seu código faltou a função RCG_SetGet_Refresh()