Página 2 de 2

Enviado: 28 Nov 2007 11:20
por Maligno
Mas onde está o controle do tempo? Não aparece aí. Como ele é feito? Tem inicializador? Esse ENTER é desnecessário, a meu ver. Acho que você não está inicializando a variável de controle de tempo. Daí o erro.

Enviado: 28 Nov 2007 11:34
por clodoaldomonteiro
Eu coloquei o KEYBOARD CHR(13) porque ele tava disparando o descanso logo no início do sistema.

Já o controle do tempo é "drvsstempo*18.204", é uma variável que o usuário diz quanto tempo quer esperar para ativar o descanço vezes 18.204, que é o número de ticks para cada segundo.

Eu teria que fazer outra coisa antes disso tudo?

Enviado: 28 Nov 2007 11:43
por Maligno
Variável contadora é uma coisa. Variável de configuração é outra. Quando você inicializa um sistema de proteção de tela, a variável contadora deverá, de início, conter um valor tal que não dispare o protetor. Isso já elimina o ENTER. Por exemplo: começa com X, sendo este X uma cópia da variável de configuração (ou seu default (> 0), se não configurado). No decorrer do tempo, essa variável contadora vai sendo decrementada até chegar em 0, quando o protetor dispara. Se neste tempo alguma tecla for pressionada, você recarrega esta variável com aquele mesmo X. E começa tudo de novo.

Enviado: 28 Nov 2007 11:46
por clodoaldomonteiro
Hum!
Pensei que a ontick fisesse isso automaticamente, como a keysec().

Tu pode fazer um desenho, hehe, um exemplo.

Enviado: 28 Nov 2007 13:07
por Maligno
Não. Ela não faz isso automaticamente. Ela apenas executa a função determinada a cada intervalo de tempo. O controle de tempo de disparo do protetor de tela fica a seu cargo.

A grosso modo, você teria, apenas como exemplo:

FT_OnTick({||ScrSavCtrl()},nTicks)

Isso garante a execução do controlador do protetor de tela a cada intervalo de nTicks (o valor que achar conveniente). Esse controlador ao ser executado pela primeira vez, inicializaria o conjunto de controle, incluindo aí a variável que salva a última tecla pressionada (usando LastKey(), por exemplo). Há várias maneiras de fazer isso. Fica por conta de sua imaginação. Só não esqueça de incluir um flag para desativar o processamento de controle enquanto o protetor estiver ativado.

Tente aí. Se não der, mostra o que fez pra gente trocar alguma idéia.

Enviado: 28 Nov 2007 18:31
por clodoaldomonteiro
Achei a função DoIdle() da Fast.Lib que faz a mesma coisa da FT_OnTick(), mas ainda não é idêntica a keysec().

Enviado: 28 Nov 2007 18:47
por clodoaldomonteiro
A DoInterval(), também da fast.lib faz a mesma coisa, duas funções para fazer a mesma coisa.

Enviado: 28 Nov 2007 19:14
por Maligno
Ambas (ou pelo menos a DoInterval()) devem usar a mesma função não-documentada do Clipper: _evLow. Portanto, deve dar no mesmo.

Enviado: 29 Nov 2007 11:24
por Daniel
a minha fica assim

Código: Selecionar todos

   xdaniel:= "(43)3423-8445 "
   xdaniel1:= " "
   xdaniel2:= xdaniel3:= 1
   xdaniel5:= Seconds() + 150
   xdaniel7:= Seconds()
   GFonTickx("GfClock", 30)

********************************
Function GFCLOCK(Arg1, Arg2, Arg3)
   Local Local1:= Row(), Local2:= Col(), Arg4, xdantela, xdantela1

   serc:= SetCursor()
   xdaniel4:= SubStr(time(),8,1)
   xdaniel6:= Seconds()
   If NextKey() != 0
      xdaniel5:= Seconds() + 150
   EndIf
   SetCursor(0)
   If xdaniel6 >= xdaniel5 .And. NextKey() == 0
      xdantela1:= SetColor()
      Set Color To
      xdantela:= SaveScreen()
      If CurDir() == "KIPAPEL"
         Do desctela
      ElseIf CurDir() == "JR"
         Do desctel2
      EndIf
      SetColor(xdantela1)
      xdaniel5:= Seconds() + 150
      RestScreen(,,,, xdantela)
   EndIf
   Default Arg1 To 0
   Default Arg4 To SetColor()
   Default Arg2 To MaxCol() - 11
   Default Arg3 To SetColor()
   SetPos(Arg1, Arg2+3)
   dispout(Time(), "W+")
   SetPos(Local1, Local2)
   SetCursor(serc)

   Return Nil
nao sei porque ela tem que ser execultada duas vezes para funcionar, dai e so usar a metade do tempo.

Enviado: 29 Nov 2007 12:53
por clodoaldomonteiro
Daniel!

Para chamar funções de descanso de tela, use a função keysec() da CT.LIB.

Ex.:
SET KEY K_ALT_F10 TO DESCANSO
KEYSEC(K_ALT_F10,nSEGUNDOS,,.T.)

... dica do Eolo.

No meu caso, é que a CTP.lib tá gerando algum conflito com outras libs que uso, tais como: GASP52MP.LIB, FAST.LIB, NANFOR.LIN, PRO_EXO.LIB, DBFNSX.LIB, LFN.LIB, LL.LIB, CMPI.LIB e a lib do blinker.

Enviado: 29 Nov 2007 15:43
por Daniel
esta funcao e da lib grump, uso ela pra descansode tela,relogio e para fazer programa de demostracao que funciona 15 minuntos e desliga