AGENDADOR NO SYSTRAY
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:
Marcelino Neto
VB6.0
Access97
Dao
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
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.
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.
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???
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???
Podemos tentar, pelo menos.
Manda!
Manda!
está anexado, se à ± enteder, me reporte!!!
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:
E agora??? - Vou dar uma fuçada mas não tenho pistas. Alguém tem?
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?
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:
Tire o timer do formulário e faça o teste.
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.
Amigão, tentei igual sua dica e ainda assim à ± obtive resultados!!!
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).
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).
O problema seu é que o timer não está funcionando, é isso ????
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