Para que serve um temporizador? Bem, imagine que você precise fazer uma função e
que ela tenha de ser executada repetidas vezes a cada intervalo de tempo determinado
por você, e que o programa principal siga em frente executando as outras funções.
O temporizador faz isso por você, executa repetidamente a função desejada.
É muito útil para atualizar horário ou datas num sistema, sem parar a execução principal.
Segue o código de uso do temporizador para fazer um relógio digital, bons estudos:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 |
//exemplo temporizador: inclua 'igbr' funcao temporizador_exec ( componente , janela ) tempo = sis.data ( ); //retorna o tempo dia e hora ig.rotulo_def_texto ( componente , tempo ); //definindo a data como o texto do rotulo imprima( tempo ); fim janela = ig.janela ("Temporizador teste" , 450 , 200 ); ig.conecte( janela , ig.destruido , 'ig.saia( )' ); ig.janela_posicione ( janela , 0 , 0 ); //posicionando a janela em coordenadas coluna / linha caixav = ig.caixavertical( falso , 0 ); ig.ad( janela , caixav ); rotulo = ig.rotulo ( sis.data( ) ) ; ig.componente_modifique_fonte ( rotulo , "Arial",ig.negrito,22 ); cor = ig.cor( 0 , 0 , 2222222 , '*t' );//o '*t' força o retorno de uma tabela. ig.componente_modifique_fg ( rotulo , ig.estado_normal , cor ); ig.caixa_ad ( caixav , rotulo , verdadeiro , verdadeiro , 2 ); temporizador_1 = ig.temporizador ( 1 , //id deve ser de 1 a 10 1000 , //intervalo de tempo em milisegundos janela , [[ temporizador_exec ( rotulo , janela ) ]] ); //fim temporizador //apos criar o temporizador basta inicia-lo: ig.temporizador_inicie( temporizador_1 , janela ); //o número máximo suportado é 10 temporizadores. funcao callback ( bt ) //se o botao estiver marcado a funcao abaixo retorna verdadeiro se ig.botao_seletor_obt_ativo ( bt ) == verdadeiro entao ig.temporizador_pare ( temporizador_1 , janela ); senao ig.temporizador_reinicie ( temporizador_1 , janela ); fim fim bt_pause = ig.botao_checagem ( "Pausar / Continuar temporizador"); ig.conecte( bt_pause , ig.clique , 'callback( %s)'); ig.caixa_ad( caixav , bt_pause , falso , falso , 2 ); ig.componente_mostre_todos ( janela ); ig.fimprograma( ); |
Esta é a função que será executada pelo temporizador, já no início do programa:
1 |
funcao temporizador_exec ( componente , janela ) |
Dentro dela temos os seguintes comandos:
sis.data( ) retorna uma string do dia e hora, e depois definimos a data como texto do rótulo
1 2 3 4 |
tempo = sis.data ( ); //retorna o tempo dia e hora ig.rotulo_def_texto ( componente , tempo ); //definindo a data como o texto do rotulo imprima( tempo ); |
No caso, componente é o “%s” passado como parâmetro no temporizador logo a frente no código, lembre-se que %s são caracteres que serão substituídos por um parâmetro passado automaticamente à função callback durante a execução.
e tempo é a string obtida da data e horário do sistema com o comando sis.data ( );
A novidade mesmo aqui é o temporizador que é criado pela função ig.temporizador, sua sintaxe é:
temp = ig.temporizador ( id , intervalo , componente_pai , string_da_funcao_callback );
onde teremo:
id = é a identidade do temporizador, é um número de 1 a 10, apenas esses números poderão ser usados,
pois só é possível criar 10 temporizadores, uma limitação é claro, mas é mais do que suficientes.
intervalo = é o tempo de espera para a função ser executada novamente, é em milisegundos, isto é,
se quiser um segundo deve passar o parâmetro 1000 ;
componente_pai = sem esse parâmetro não funciona, dá erro. Simplesmente passe a variável da janela principal,
para que serve este parâmetro? Muito simples, ao ser destruído o componente pai o temporizador é destruído também.
e por útilmo:
string_da_funcao_callback = é a função que você criou para ser repetida, deve passar a string dela ex:
se você criou uma função chamada tempori ( comp , janela ) o parâmetro será [[ tempori ( comp, janela ) ]] , com os
duplos colchetes indicando string.
Uma vez criado o temporizador ainda falta iniciá-lo, dar a partida, usando a seguinte função:
o primeiro parâmetro é a variável que guarda o temporizador, o segundo é o componente_pai de novo.
1 |
ig.temporizador_inicie( temporizador_1 , janela ); |
Para pausar o temporizador use:
1 |
ig.temporizador_pare ( temporizador_1 , janela ); |
e para reiniciar:
1 |
ig.temporizador_reinicie ( temporizador_1 , janela ); |
No exemplo acima coloquei essas funções dentro da callback do botão checagem, para que quando estiver ativo o botão
o temporizador pare e se tiver desmarcado, o temporizador reinicia.
Criando o botão checagem, não tem segredo algum, veja:
o único parâmetro é o texto que irá aparecer no botão.
1 |
bt_pause = ig.botao_checagem ( "Pausar / Continuar temporizador"); |
Para conectar uma função neste botão siga a mesma forma dos botões normais, use o sinal ig.clique:
1 |
ig.conecte( bt_pause , ig.clique , 'callback( %s)'); |
Ora, ainda não entendi o %s no parâmetro da string da função callback!
Veja é muito mais simples do que aparece, o %s é substituído durante a execução da callback pelo próprio
componente conectado a ela, que no caso é o bt_pause, seria o mesmo que bt_pause no lugar do %s:
1 |
ig.conecte( bt_pause , ig.clique , 'callback( bt_pause )'); |
porém é muito mais reaproveitável e flexível usar o %s , muito útil quando você cria e conecta componentes
dinamicamente por meio de matrizes.
Bom, queremos saber quando o botão checagem está marcado ou não e de
acordo com isso realizar um comando ou outro, para isso existe a seguinte função
que retorna verdadeiro caso o botão esteja marcado ou falso caso ele não esteja,
com isso é só fazer uma condição e pronto:
O único parâmetro é o botão a ser verificado, retorno = falso ou verdadeiro
1 |
se ig.botao_seletor_obt_ativo ( bt ) == verdadeiro entao |
No nosso exemplo acima nós definimos na condição que se ele estiver marcado o temporizador pára
senão o temporizador reinicia:
1 2 3 4 5 |
se ig.botao_seletor_obt_ativo ( bt ) == verdadeiro entao ig.temporizador_pare ( temporizador_1 , janela ); senao ig.temporizador_reinicie ( temporizador_1 , janela ); fim |
Bom, pessoal, é isso aí, até a próxima.
Att. Adalberto