Página 1 de 1

Relógio em tempo real e poupa tela

Enviado: 23 Jan 2009 11:43
por alvaro.bernardi
Rotina para colocar um relógio em tempo real na tela (DOS) ativando (ou não) sua rotina de poupar tela
** Rotina aproveitada do exemplo do help do Visual XHarbour e modificada por mim ****

Código: Selecionar todos

PROCEDURE oRelogio(vPoupa)
***********************************************************
* oRelogio()
* Rotina para colocar um relógio em tempo real na tela
* com pupador de tela
*
* Sintaxe:
*   oRelogio([vPoupa])
*   [vPoupa] = Opcional - Se definida como .T. (padrão)
*                         ativa sua rotina de poupar a tela
*                         Se .F. desativa
***********************************************************

PUBLIC nTask
PUBLIC vTC, vTDecorr
  if empty(vPoupa) .or. vPoupa == nil
     vPoupa := .t.
  endif
  vTC := 0
  vTDecorr := Seconds()
  HB_IdleAdd( {|| HB_BackGroundRun() } )
  nTask := HB_BackGroundAdd( {|| ShowTime( 1, MaxCol()-9, vPoupa ) }, 1000 )
  SET BACKGROUND TASKS ON
RETURN

********************************

PROCEDURE ShowTime( nRow, nCol, vPoupaTela )
*****************************************
* Rotina em segundo plano para o relógio
* e o poupador de tela
*****************************************
   @ nRow, nCol SAY CHR(180) COLOR "W+/G"
   @ Row(), Col() SAY Time() COLOR "N/G"
   @ Row(), Col() SAY CHR(195) COLOR "W+/G"
   if vPoupaTela
      if vTC <> lastkey()
         vTC := lastkey()
         vTDecorr := seconds()
      else
         if seconds() - vTDecorr > 300   // 5 MINUTOS  = 300 SEGUNDOS (60*5)
            do Sua_Rotina_poupar_tela   // Coloque aqui sua rotina de poupar tela
            vTDecorr := Seconds()
            vTC := Lastkey()
         endif
      endif
   endif
RETURN

********************************
Faça sua rotina utilizando um laço de que possa sair quando alguma tecla ou gesto do mouse for detectado.

Código: Selecionar todos

** Exemplo
PROCEDURE Poupa()
LOCAL vTela
vTela := savescreen(0,0,24,79)
scroll(00,00,24,79,00)
do while inkey()=0
   ...
   ...
   ...
   if lastkey()>0 //.or.inkey()=27
      exit
   endif
enddo
restscreen(0,0,24,79,vTela)
return(nil)
Se você quiser desabilitar o relógio utilize a seguinte linha

HB_BackGroundDel( nTask )

obs: "nTask" deve ser uma variável publica

Re: Relógio em tempo real e poupa tela

Enviado: 23 Jan 2009 13:27
por sygecom
o xHarbour já conta com a função ShowTime() que faz exatamente como era no clipper.

Código: Selecionar todos

PROCEDURE Main
      CLS
      ShowTime( 0, MaxCol()-8,,"N/BG" ,.T. , .T. )

      USE Customer

      Browse()

   RETURN

Re: Relógio em tempo real e poupa tela

Enviado: 23 Jan 2009 17:54
por alvaro.bernardi
Ok

minha intenção era coloca o relógio junto com o poupador de tela...