USUÁRIO:      SENHA:        SALVAR LOGIN ?    Adicione o VBWEB na sua lista de favoritos   Fale conosco 

 

  Dicas

  Visual Basic    (ActiveX/Controles/DLL)

Título da Dica:  Supere as limitações do componente Timer
Postada em 3/9/2003 por Ð@®l@n            
O componente timer do VB é limitado a 65000 milisegundos, o que é um pouco mais que um minuto.

Para superarmos essa limitação precisaremos abrir mão do componente Timer e fazer uso de duas API's : SetTimer e KillTimer.

As API's não possuem a limitação de 65000 pois utilizam variáveis LONG para a definição do Timer.

Essas API's em questão são um bom exemplo do uso de uma função de CallBack : Passamos o endereço de uma sub em nossa aplicação para a API e ela chama nossa sub a cada intervalo de tempo determinado.

A declaração das API's pode ficar em um módulo ou em um formulário, mas a função de CallBack, a função que será chamada pela API, precisa ficar em um módulo. Veja a declaração das API's :


Declare Function SetTimer Lib "user32" (ByVal hwnd As Long, ByVal nIDEvent As Long, ByVal uElapse As Long, ByVal lpTimerFunc As Long) As Long
Declare Function KillTimer Lib "user32" (ByVal hwnd As Long, ByVal nIDEvent As Long) As Long

Os parâmetros da função SetTimer são :

hwnd : O handle da janela owner do timer
nIDEvent : O ID do timer. Deve ser único para o hwnd, mas diferentes hwnd podem criar timers com o mesmo ID, sem problema
uElapse : O tempo em milisegundos
lpTimerFunc : Um ponteiro para a função a ser chamada

Vamos considerar um exemplo de um form com 2 botões, um para iniciar o timer outro para desativa-lo. Veja como fica o código :


Private Sub Command2_Click()
KillTimer Me.hwnd, 0
End Sub

Private Sub Form_Load()

SetTimer Me.hwnd, 0, 120000, AddressOf TimerProc
End Sub


A função AddressOf é utilizada para obter o ponteiro para a função que será chamada pelo timer, a sub TimerProc em nosso exemplo. Vejamos então como fica a sub TimerProc :


Public Sub TimerProc(ByVal hwnd As Long, ByVal nIDEvent As Long, ByVal uElapse As Long, ByVal lpTimerFunc As Long)
MsgBox "teste"
End Sub

Ela recebe da API os mesmos parâmetros do timer, para poder identifica-lo. Na sub em questão basta realizarmos a tarefa que desejamos ou chamar outra sub que a realize.
 


CyberWEB Network Ltda.    © Copyright 2000-2019   -   Todos os direitos reservados.
Powered by HostingZone - A melhor hospedagem para seu site
Topo da página