AGENDADOR NO SYSTRAY

USUARIO.EXCLUIDOS 28/11/2006 10:40:39
#186723
Pessoal desenvolvi o sistema de agendamento de reserva de carros, tudo funciona bem, porém coloquei o sistema para funcionar no systray e o codigo que verifica de tempo em tempo a tabela se ha reserva ou não, funciona quando quer.
Veja o codigo abaixo que está em um timer e me ajudem a detectar o erro. porque funciona quando quer??? Se lanço reserva toda hora!!!
ou seja: faltando uma hora para tal reserva o mesmo tem que maximizar o sistema e me mostrar tal reserva. Porem funciona hora sim ora não.

Veja o Codigo:

Private Sub Reserva_Timer()
On Error GoTo errado

Dim DataReservada As Date
Dim TimeAlarme As Date

DataReservada = Data1.Recordset.Fields("DataReservada")
TimeAlarme = Data1.Recordset.Fields("Horario")

If Format$(Hour(Time - TimeAlarme) & ":" & Minute(Time - TimeAlarme) & ":" & Second(Time - TimeAlarme), "hh:mm:ss") = TimeValue("01:00:00") Then
If DataReservada = Date Then
mnu_sobre_Click 'Levanta o sistema
txtPesquisa = TimeAlarme
txtPesquisaData = DataReservada
End If
End If

Exit Sub
errado:
Dim Numero_erro As String
Numero_erro = CStr(Err.Number)
If Numero_erro = "3021" Or "13" Then
Else
MsgBox ("Error # " & CStr(Err.Number) & " " & Err.De ion)
Err.Clear
End If
End Sub


Marcelino Neto
VB6.0
Access97
Dao
USUARIO.EXCLUIDOS 28/11/2006 11:32:59
#186731
Dê uma olhada nisto:

http://www.vbmania.com.br/vbmania/vbmdetail.php?varID=7&TxtSearch=timer&CmbSort=&varPagina=1

Ao que parece o problema é com o timer do VB - tente trabalhar direto com o windows.
USUARIO.EXCLUIDOS 28/11/2006 11:47:05
#186734
Sua opinião foi excelente!!!
Porém à± entendi o funcionamento da mesma.
Meu sistema é muito simples, se tiver um enteresse maior em me ajudar, eu poderia anexar o sistema o sistema para vc...
Topa???
USUARIO.EXCLUIDOS 28/11/2006 12:01:53
#186739
Podemos tentar, pelo menos.
Manda!
USUARIO.EXCLUIDOS 28/11/2006 12:21:49
#186750
está anexado, se à± enteder, me reporte!!!
USUARIO.EXCLUIDOS 28/11/2006 14:52:18
#186773
Não consigo abrir.

Como eu tenho VB5, abri com o Notepad e excluí a linha RETAINED.

Daí, entrei no VB e tentei abrir o Project1. Deu zebra:
DebugStartuoOption is an invlid key.
C:\TestesVB\Mineiro\Project1.VBP canÂÂÂ't de loaded.


E agora??? - Vou dar uma fuçada mas não tenho pistas. Alguém tem?
USUARIO.EXCLUIDOS 28/11/2006 15:57:26
#186795
Bem... Vamos lá.

Não consegui rodar, mas dei uma lida no frmLembrete e vi que é lá que onde tudo acontece.

Juntei com a dica do WebMaster e o resultado (o seu form modificado, completo) foi o seguinte:


Private Type NOTIFYICONDATA
cbSize As Long
hwnd As Long
uId As Long
uFlags As Long
ucallbackMessage As Long
hIcon As Long
szTip As String * 64
End Type

Private Const NIM_ADD = &H0
Private Const NIM_MODIFY = &H1
Private Const NIM_DELETE = &H2
Private Const WM_MOUSEMOVE = &H200
Private Const NIF_MESSAGE = &H1
Private Const NIF_ICON = &H2
Private Const NIF_TIP = &H4

Private Const WM_LBUTTONDBLCLK = &H203
Private Const WM_LBUTTONDOWN = &H201
Private Const WM_LBUTTONUP = &H202
Private Const WM_RBUTTONDBLCLK = &H206
Private Const WM_RBUTTONDOWN = &H204
Private Const WM_RBUTTONUP = &H205

Private Declare Function Shell_NotifyIcon Lib "shell32" Alias "Shell_NotifyIconA" (ByVal dwMessage As Long, pnid As NOTIFYICONDATA) As Boolean

Dim t As NOTIFYICONDATA


'=====================================================================
'=====================================================================
'=========================( Código Inserido )=========================
'=====================================================================
'=====================================================================

Private mEnabled As Boolean
Private mInterval As Long
Private mStart As Long
Private mName As String
Private mElapsed As Long

Private Declare Function GetTickCount Lib "kernel32" () As Long

Public Property Get Enabled() As Boolean
Enabled = mEnabled
End Property

Public Property Let Enabled(ByVal vEnabled As Boolean)
mStart = 0
End Property

Public Property Get Interval() As Long
Interval = mInterval
End Property

Public Property Let Interval(vInterval As Long)
If vInterval > 0 Then
mStart = 0
mInterval = vInterval
Else
mInterval = 0
mStart = 0
End If
End Property


'=====================================================================
'===========================( F I M )=============================
'=====================================================================


Private Sub cmdCancelar_Click()
Data1.Recordset.CancelUpdate
Frame1.Enabled = False
cmdFechar.Enabled = True
cmdSalvar.Enabled = False
cmdCancelar.Enabled = False
cmdPesquisar.Enabled = True
cmdExcluir.Enabled = True
End Sub


Private Sub cmdExcluir_Click()
If MsgBox("Deseja excluir permanentemente este registro?", vbYesNo + vbQuestion, Me.Caption) = vbNo Then Exit Sub
If Data1.Recordset.EOF Or Data1.Recordset.BOF Then
MsgBox "Não há mais registros!", vbInformation, Me.Caption
cmdExcluir.Enabled = False
Else
Data1.Recordset.Delete
Data1.Recordset.MoveNext
End If
cmdLancarLPM.Enabled = False
End Sub


Private Sub cmdFechar_Click()

'=====================================================================
'=====================================================================
'=========================( Código Inserido )=========================
'=====================================================================
'=====================================================================
Enabled = False
'=====================================================================
'===========================( F I M )=============================
'=====================================================================

Unload Me
Set frmLembrete = Nothing
End Sub


Private Sub cmdLancarLPM_Click()
Data1.Recordset.Edit
Data1.Recordset.Fields("Atendida") = "ATENDIDA"
Frame1.Enabled = True
cmdFechar.Enabled = False
cmdSalvar.Enabled = True
cmdExcluir.Enabled = False
cmdCancelar.Enabled = True
txtUnidade.SetFocus
End Sub


Private Sub cmdPesquisar_Click()
frmConsulta_01.Show
Me.Enabled = False
End Sub


Private Sub cmdSalvar_Click()
Dim Resp As Byte
Resp = MsgBox("Confirma Gravação da LPM " & txtLpmNumero & " em Cadastro de LPMs?", vbYesNo + vbQuestion, Me.Caption)
If Resp = 7 Then Exit Sub

Data1.UpdateRecord
'Frame1.Enabled = False
cmdFechar.Enabled = True
cmdExcluir.Enabled = False
cmdSalvar.Enabled = False
cmdPesquisar.Enabled = True
cmdCancelar.Enabled = False
End Sub


Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
If KeyCode = vbKeyReturn Then
SendKeys "{Tab}"
KeyCode = 0
End If
End Sub


Private Sub Form_KeyPress(KeyAscii As Integer)
'Função para colocar todas as letras do form. em maiúscula
KeyAscii = Asc(UCase(Chr(KeyAscii)))
End Sub


Private Sub Form_Load()

'Indica o caminho do Banco de Dados e faz a conexao com as tabelas
Caminho = ReadINI("Caminho", "BD", App.Path & "\CooperNet.ini")
Set CpnInfo = Workspaces(0).OpenDatabase(Caminho)
'Set Cliente = CpnInfo.OpenRecordset("CadCliente", dbOpenTable)

Data1.DatabaseName = Caminho
Data1.RecordSource = "Select * From CadReserva order by Nome"
Data1.Refresh

Data2.DatabaseName = Caminho
Data2.RecordSource = "Select * From CadCooperados order by Nome"
Data2.Refresh

'Habilitaçao dos botões de command
Frame1.Enabled = False
cmdSalvar.Enabled = False
cmdExcluir.Enabled = False
cmdCancelar.Enabled = False
'Final de linha
lblHorario = dataExtenso(Now)
t.cbSize = Len(t)
t.hwnd = pichook.hwnd
t.uId = 1&
t.uFlags = NIF_ICON Or NIF_TIP Or NIF_MESSAGE
t.ucallbackMessage = WM_MOUSEMOVE
t.hIcon = Me.Icon
t.szTip = "Exemplo de API Shell_NotifyIcon ..." & Chr$(0) 'Texto a ser exibido quando o mouse é movido sobre o ícone.
Shell_NotifyIcon NIM_ADD, t
Me.Hide
App.TaskVisible = False


'=====================================================================
'=====================================================================
'======================( Código Inserido )=======================
'=====================================================================
'=====================================================================

Enabled = True
Interval = 1000

Do While mEnabled
If mStart = 0 Then mStart = GetTickCount
mElapsed = GetTickCount
If (mElapsed - mStart) >= mInterval Then
mStart = GetTickCount
Call Ver_Reservas
End If
DoEvents
Loop

'=====================================================================
'===========================( F I M )=============================
'=====================================================================

End Sub



Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
t.cbSize = Len(t)
t.hwnd = pichook.hwnd
t.uId = 1&
Shell_NotifyIcon NIM_DELETE, t 'Remove o ícone da barra de tarefas.
End Sub


Private Sub Form_Resize()
If (Me.WindowState) = 1 Then
Me.Hide
End If
End Sub


Private Sub pichook_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
'pichook é uma picture box, utilizada pelo Windows para
'reconhecer o ícone na barra de tarefas.
Static rec As Boolean, msg As Long
msg = X / Screen.TwipsPerPixelX
If rec = False Then
rec = True
Select Case msg
Case WM_LBUTTONDBLCLK:
Case WM_LBUTTONDOWN:
Case WM_LBUTTONUP:
Case WM_RBUTTONDBLCLK:
Case WM_RBUTTONDOWN:
Case WM_RBUTTONUP:
'Se for pressionado o botão direito
'sobre o ícone, é exibido um menu pop-up.
Me.PopupMenu mnu_taskbar 'mnuBar-menu criado no form.
End Select
rec = False
End If
End Sub



'=====================================================================
'=====================================================================
'=========================( Código Inserido )=========================
'=====================================================================
'=====================================================================


Private Sub Ver_Reservas() '**** Só mudei o nome
On Error GoTo errado

Dim i As Integer
lblHorario = dataExtenso(Now)
DoEvents

Dim DataReservada As Date
Dim TimeAlarme As Date

DataReservada = Data1.Recordset.Fields("DataReservada")
TimeAlarme = Data1.Recordset.Fields("Horario")

If Format$(Hour(Time - TimeAlarme) & ":" & Minute(Time - TimeAlarme) & ":" & Second(Time - TimeAlarme), "hh:mm:ss") = TimeValue("01:00:00") Then
If DataReservada = Date Then
mnu_sobre_Click
txtPesquisa = TimeAlarme
txtPesquisaData = DataReservada
End If
End If

Exit Sub
errado:
Dim Numero_erro As String
Numero_erro = CStr(Err.Number)
If Numero_erro = "3021" Or "13" Then
Else
MsgBox ("Error # " & CStr(Err.Number) & " " & Err.Description)
Err.Clear
End If
End Sub
'=====================================================================
'===========================( F I M )=============================
'=====================================================================



'=====================================================================
'=====================================================================
'=========================( Código Eliminado )=========================
'=====================================================================
'=====================================================================


'Private Sub Reserva_Timer()
'On Error GoTo errado
'
'Dim i As Integer
'lblHorario = dataExtenso(Now)
'DoEvents
'
'Dim DataReservada As Date
'Dim TimeAlarme As Date
'
'DataReservada = Data1.Recordset.Fields("DataReservada")
'TimeAlarme = Data1.Recordset.Fields("Horario")
'
'If Format$(Hour(Time - TimeAlarme) & ":" & Minute(Time - TimeAlarme) & ":" & Second(Time - TimeAlarme), "hh:mm:ss") = TimeValue("01:00:00") Then
'If DataReservada = Date Then
'mnu_sobre_Click
'txtPesquisa = TimeAlarme
'txtPesquisaData = DataReservada
'End If
'End If
'
'Exit Sub
'errado:
'Dim Numero_erro As String
'Numero_erro = CStr(Err.Number)
'If Numero_erro = "3021" Or "13" Then
'Else
' MsgBox ("Error # " & CStr(Err.Number) & " " & Err.Description)
' Err.Clear
'End If
'End Sub


'=====================================================================
'===========================( F I M )=============================
'=====================================================================



Private Sub txtPesquisa_Change()
Data1.RecordSource = "Select * From CadReserva where horario like '" & txtPesquisa.Text & "*'"
Data1.Refresh
If Me.Data1.Recordset.RecordCount = 0 Then
MsgBox "Reserva não Cadastrada!", vbInformation, Me.Caption
Unload Me
End If
End Sub


Private Sub txtPesquisaData_Change()
Data1.RecordSource = "Select * From CadReserva where DataReservada like '" & txtPesquisaData.Text & "*'"
Data1.Refresh
If Me.Data1.Recordset.RecordCount = 0 Then
MsgBox "Reserva não Cadastrada!", vbInformation, Me.Caption
Unload Me
End If
End Sub


Private Sub txtUnidade_GotFocus()
'selecionar o texto ao receber o foco
With txtUnidade
.SelStart = 0
.SelLength = Len(.Text)
End With
End Sub


Private Sub txtUnidade_KeyPress(KeyAscii As Integer)
'so permite valores numericos
Select Case KeyAscii
Case 8, 48 To 57
'ok
Case Else
KeyAscii = 0
End Select
End Sub


Private Sub txtUnidade_LostFocus()
If txtUnidade.Text = "" Then
txtUnidade.Text = ""
Exit Sub
End If

Dim StrSql As String
StrSql = "Select * from CadCooperados where Unidade = '" & Format(Me.txtUnidade.Text, "00") & "'"

Me.Data2.RecordSource = StrSql
Me.Data2.Refresh

If Me.Data2.Recordset.RecordCount = 0 Then
MsgBox "Unidade não Cadastrada!", vbInformation, Me.Caption
Else
Me.txtCooperado = Me.Data2.Recordset.Nome
Me.txtVeiculo = Me.Data2.Recordset.VeiculoModelo
End If
End Sub


Private Sub mnu_sobre_Click()
Me.WindowState = 0
Me.Show
End Sub


Private Sub mnusair_Click()
Unload Me
End
End Sub




Tire o timer do formulário e faça o teste.
USUARIO.EXCLUIDOS 28/11/2006 16:34:04
#186806
Amigão, tentei igual sua dica e ainda assim à± obtive resultados!!!
USUARIO.EXCLUIDOS 28/11/2006 22:55:12
#186859
Pà'... a m**** é que não consigo rodar na minha máquina para depurar e ver onde errei.

Como fiquei entre dois fogos - a sua lógica e a do WEBMASTER, achei mais fácil pedir HELP pra ele (mandei uma mensagem interna - vamos ver se ele nos ajuda a descobrir onde errei).
WEBMASTER 29/11/2006 08:39:38
#186883
Resposta escolhida
O problema seu é que o timer não está funcionando, é isso ????
USUARIO.EXCLUIDOS 29/11/2006 10:55:43
#186915
Citação:

WEBMASTER escreveu:
O problema seu é que o timer não está funcionando, é isso ????



Antes de mais nada, obrigado por atender o meu apelo.

Quanto à  sua pergunta, foi o que eu entendi que está acontecendo. Tanto que o que tentei foi substituir o timer pela sua rotina de acionamento fora do VB. Fiz alguma m****.

O que eu tentei fazer à  partir da sua rotina foi eliminar a interrupção do LOOP por decurso de tempo passar a administração para a sua variavel ENABLED. E introduzi no loop uma "visitinha" à  rotina dele.
Tópico encerrado , respostas não são mais permitidas