Página 1 de 2
KEYSEC(), existe outra função que faça a mesma coisa?
Enviado: 26 Nov 2007 00:54
por clodoaldomonteiro
Olá amigos!
Estou tentando usar a keysec() da ctp.lib no meu sistema, só que dá pau, devido ao uso de outras libs, tais como gaspro, nanfor, pro_exo e outras, que não podem sair de circulação.
O que eu quero é uma função idêntica ou parecida à keysec(), que dispare uma tecla depois de um certo tempo, pois estou fazendo alguns descanços de tela.
Desde já agradeço a atenção.
Enviado: 26 Nov 2007 01:08
por Maligno
Acho que a melhor forma de fazer esse descanso de tela sem o uso de KeySec() seria fazer rodar uma função em background com uma contagem de tempo. Pra isso você pode usar, por exemplo, a biblioteca NanFor, que possui uma função exatamente pra isso: FT_OnTick(). Tem também a BG_EVENTS (acho que é esse o nome), que pode ser encontrada no site
The Oasis.
Enviado: 26 Nov 2007 01:19
por clodoaldomonteiro
Valeu Malígno!
Tu é rápido no gatilho mermo.
Enviado: 26 Nov 2007 16:42
por clodoaldomonteiro
Cara!
Testei mas não deu certo e num achei a bg_events.
Enviado: 26 Nov 2007 16:50
por Maligno
clodoaldomonteiro escreveu:Cara!
Testei mas não deu certo e num achei a bg_events.
Por quê não deu certo?
O bg_events está neste link
aqui, mas atende pelo nome de BGEV5.ZIP.
Enviado: 26 Nov 2007 21:20
por clodoaldomonteiro
Malígno!
Fiz de acordo com o exemplo:
ft_ontick("caos",10).
"Caos" é o nome da função que faz cair as letras, o descanço de tela.
Enviado: 27 Nov 2007 00:13
por Maligno
E não funcionou? O que acontece?
Enviado: 27 Nov 2007 01:12
por clodoaldomonteiro
Não acontece nada.
Nomeu prg mãe eu chamo uma lib que roda descasos de tela, e tentei rodar a ontick e não mostrou nada.
Eu usei o V5 para descompilar a lib de descanços de tela e lá vi que ele usa a função keysec, só que quando pego esses prgs para incorporar ao meu sistema rega alguns erros, não sei porque.
Ou seja, acho que o erro tá no modo como eu compilo, eu acho, por isso quero saber se tem alguma função similar à keysec().
Enviado: 27 Nov 2007 01:18
por Maligno
Essa função configurada na FT_OnTick() deveria, a princípio, medir a passagem do tempo e ou algum outro parâmetro e ela, quando for apropriado, disparar uma outra função para o descanso de tela. Faça esse teste. Configure na FT_OnTick() uma função que dispara uma outra quanto Time() for igual a uma hora qualquer. Você vai ver que funciona muito bem. Eu uso direto.
Enviado: 28 Nov 2007 00:11
por clodoaldomonteiro
O primeiro parâmetro da ft_ontick é a função que vai ser rodada e o segundo parâmetro é a quantidade de segundos que vai ficar contando, tipo: ft_ontick("caos",50)?
Ou o segundo parâmetro deve ser informado a hora que vai ser disparada a função, tipo: ft_ontick("caos",17:00)?
Outra, o primeiro parâmetro, que é a função a ser disparada, deve estar entre aspas, porque na documentação diz que deve.
Enviado: 28 Nov 2007 00:23
por Maligno
clodoaldomonteiro escreveu:O primeiro parâmetro da ft_ontick é a função que vai ser rodada e o segundo parâmetro é a quantidade de segundos que vai ficar contando, tipo: ft_ontick("caos",50)?
Não. O segundo parâmetro é a quantidade de ticks de relógio que precisarão passar para que a função seja invocada. Pra você ter uma base de comparação, ocorrem 18,204 ticks de relógio a cada segundo.
Outra, o primeiro parâmetro, que é a função a ser disparada, deve estar entre aspas, porque na documentação diz que deve.
A função é um bloco de código. Não uma string. Não tinha reparado, mas parece que você usou uma string simples. Não é isso. Troque por algo como FT_OnTick({||Caos()},10).
Enviado: 28 Nov 2007 00:59
por clodoaldomonteiro
Cara, deu certo mesmo.
Tive que colocar um KEYBOARD CHR(13) antes de chamar a função, pois sempre chamava o descanso de tela antes de contar, mas ficou muito bom.
No manual da nanfor.lib tem um exemplo que mostra o chamamento da função entre aspas, e era por isso que não dava certo.
Tô de devendo mais uma.
Enviado: 28 Nov 2007 01:24
por clodoaldomonteiro
Malígno, tem uma coisinha!
Quando eu teclo qualquer tecla o contador da função não recomeça, ele simplesmente continua, sendo assim o descanço de tela vai ser disparado, mesmo que eu esteja digitando algo, já a keysec() começa sempre a contar depois do último toque no teclado.
Tem como corrigir esse problema?
Enviado: 28 Nov 2007 05:32
por Maligno
Mostra o código.
Enviado: 28 Nov 2007 11:13
por clodoaldomonteiro
Código: Selecionar todos
//Descanso de tela
IF STR(DRVSSTIPO,1) $ '123456' //PARA A PROTEۂO DA SCRNSAVE.LIB
SET SCRNSAVE TIME TO DRVSSTEMPO //120, TEMPO DE ESPERA
SET SCRNSAVE TYPE TO DRVSSTIPO //2, TIPO DE DESCAN€O
SET SCRNSAVE KEY TO K_ALT_F11 //1=HOME para ativar o descan‡o
SET SCRNSAVE MODELS TO 1
SET SCRNSAVE ON
SET KEY K_END TO
ELSE
SET SCRNSAVE OFF
IF DRVSSTIPO=7
KEYBOARD CHR(13)
FT_ONTICK({||CAOS()},DRVSSTEMPO*18.204) //letras caindo
ELSEIF DRVSSTIPO=8
KEYBOARD CHR(13)
FT_ONTICK({||stars()},DRVSSTEMPO*18.204) //espaço sideral
ELSEIF DRVSSTIPO=9
KEYBOARD CHR(13)
FT_ONTICK({||BIGCLOCK()},DRVSSTEMPO*18.204) //grande relógio
ENDIF
ENDI
Se drvsstipo for de 1 a 6, executa os descanços de tela da LIB pro_exo e de 7 a 9, estou tentando usar a função que vc me indicou.
Coloquei esse IF no prg main e na rotina que parametriza as condições do descanço.
Mais tarde eu queria colocar um descanço que mostrasse questôes e resposta sobre contabilidade pública, que é meu sistema principal.
Seria bem últil para os contadores.