FECHAMENTO COM TEMPO PROGRAMADO

SIRIOUS 03/01/2015 14:27:32
#443573
[ô]Amigos do forum:[ô]
[ô][ô]Tenho um sistema completo (peças automotivas) em VB6, com inclusões, exclusões, edição, consultas, etc.
[ô]Quando o usuário entra no sistema, é exibida uma tela de entrada, com diversos menus de acesso a outros forms.
[ô]O sistema só carrega a base de dados quando o usuário clica em algum ítem do menu. Dessa maneira, estando na tela de entrada, se houver interrupção de energia, [ô]não há possibilidade de corrupção de dados, uma vez que, como disse, a base de dados não foi carregada ainda.

[ô]Clicando, p.ex., na consulta, a base de dados (banco e respectivas tabelas) é carregada, para exibir os dados conforme o usuário escolher...
[ô]Prevendo que o usuário não saia da consulta (e, portanto, deixe a base de dados aberta), pesquisei no forum e tentei adaptar uma rotina de fechamento da consulta [ô]após aprox. 10 minutos de exibição. Conforme abaixo:

[ô]<Módulo>
Public Declare Function SetTimer Lib [Ô]user32[Ô] (ByVal hwnd As Long, ByVal nIDEvent As Long, ByVal uElapse As Long, ByVal lpTimerFunc As Long) As Long
Public Declare Function KillTimer Lib [Ô]user32[Ô] (ByVal hwnd As Long, ByVal nIDEvent As Long) As Long
Public Sub SubQualquer(ByVal hwnd As Long, ByVal nIDEvent As Long, ByVal uElapse As Long, ByVal lpTimerFunc As Long)
Unload frmListaPecas [ô]Descarrega o form de consultas por nome de peças.
FrmEntrada.Show [ô]Retorna ao form principal (de entrada).
MsgBox [Ô]Consulta Concluida...[Ô] & vbNewLine & _
[Ô]Para voltar, clique em[Ô] & vbNewLine & _
[Ô]Consultas ...[Ô], 64
End Sub

[ô]<Evento Load do form de Consulta>
SetTimer Me.hwnd, 0, 600000, AddressOf SubQualquer [ô]Após aprox. 10 min, desativa a consulta e retorna ao form de entrada.

[ô]Como devo fazer para que a função seja interrompida, caso o usuário resolva encerrar o form de consultas antes do tempo programado?
[ô]<do jeito que está, mesmo que o form de consulta seja encerrado, logo a seguir ele abre sozinho e encerra pela função>..

ASHKATCHUP 03/01/2015 17:50:15
#443575
Simples:

No evento Form_Unload tu deverá chamar encerrar o timer que criou. Portanto, deverá chamar a função KillTimer.

Private Sub Form_Unload(Cancel As Integer)
KillTimer Me.hwnd, 0
End Sub


ACHO que o código acima irá funcionar. Porém, se não resolver o teu problema, tu terá que guardar em alguma variável o retorno da API SetTimer para depois passar como parâmetro para a KillTimer:



Public TimerID As Long

Private Sub Form_Load()
TimerID = SetTimer(Me.hwnd, 0, 6000, AddressOf Teste)
End Sub

Private Sub Form_Unload(Cancel As Integer)
KillTimer Me.hwnd, TimerID
End Sub


SIRIOUS 03/01/2015 19:50:57
#443576
Prezado Ashkatchup, tentei as duas hipóteses, mas não deu resultado.
Diminuí o tempo de resposta do form de consulta para 01 min para testar os exemplos.
Em ambos casos, após sair da consulta e ir para o form de entrada, retorna à consulta sozinho, para depois encerrar após transcorrer o tempo programado....

Alguém conhece alguma rotina que, associada ao evento de descarregar a consulta, anule o efeito desse timer?
Agradeço a colaboração.
Sirious.
SIRIOUS 04/01/2015 12:45:41
#443580
Ashketchup, grato por colaborar.
Achei um código + fácil para obter o que preciso:

[ô]Ponha o timer com intervalo de 60000 (1 minuto) e faca um contador:
CODE
Dim x as Integer

Private Sub Form_Load()
x = 0
End Sub

Private Sub Timer1_Timer()
x = x + 1
If x = 30 Then [ô]equivalente a 30 min.
x = 0
- AQUI EXECUTA SEU CÓDIGO -
End If
End Sub
[txt-color=#0000f0] [/txt-color]
ASHKATCHUP 04/01/2015 14:19:16
#443586
Tua solução (um timer) é a melhor de todas. Só não sugeri pq achei que tu não queria usá-lo.

Abraço!
Tópico encerrado , respostas não são mais permitidas