ALERTA ESTILO MSN

FUTURA 28/03/2011 11:55:02
#369432
pessoal, é o seguinte, estou criando em meu aplicativo um correio interno, para troca de informações referente ao sistema, as mensagens ficam gravadas no banco de dados, e queria emitir um alerta de mensagens não lidas ou recebidas através de um form estilo msn, mas q o mesmo não tire o focu do q o usuário esta usando, tem como ?..ja procurei aqui no forum, mas alguns tópicos do assunto foram excluidos..tbem preciso saber como chamar esse form, seria um timer no form MDI ?
ARES 28/03/2011 13:20:03
#369448
Amigo,

Passei por esse problema em uma empresa de serviços, onde precisava alertar a cada 30 minutos que tinha novas ordens de serviços em aberto.

Solução:

Colocar um timmer no frminicial (mdi):

Dim CARATA As clsmsg

Private Declare Function SendMessage Lib [Ô]user32[Ô] Alias [Ô]SendMessageA[Ô] (ByVal hWnd As Long, _
ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Const WM_SYSCOMMAND = &H112&
Const SC_SCREENSAVE = &HF140&


Para verificar se tem mensagens e retornar no systrei do windows

Private Sub Timer1_Timer()
Dim tempoI As Date
[ô]controle de inatividade
On Error GoTo Errlocalizar

tempoI = Format(Now, [Ô]hh:mm:ss[Ô])

myConSystray.ConnectionString = [Ô]provider=microsoft.jet.oledb.4.0;[Ô] & [Ô] data source=[Ô] & App.Path & [Ô]\dbase\sos.mdb[Ô]
myConSystray.Open


With mycmd
Set .ActiveConnection = myConSystray
.CommandType = adCmdText
.CommandText = [Ô]Select *from oc001 where liquidado <> 1 and consolidado <> 1 [Ô]
Set rssystray = .Execute

End With

With rssystray

If .EOF And .BOF Then
myConSystray.Close
Exit Sub
Else

If tempoI = [Ô]00:00:00[Ô] Or tempoI = [Ô]00:30:00[Ô] _
Or tempoI = [Ô]01:00:00[Ô] Or tempoI = [Ô]01:30:00[Ô] _
Or tempoI = [Ô]02:00:00[Ô] Or tempoI = [Ô]02:30:00[Ô] _
Or tempoI = [Ô]03:00:00[Ô] Or tempoI = [Ô]03:30:00[Ô] _
Or tempoI = [Ô]04:00:00[Ô] Or tempoI = [Ô]04:30:00[Ô] _
Or tempoI = [Ô]05:00:00[Ô] Or tempoI = [Ô]05:30:00[Ô] _
Or tempoI = [Ô]06:00:00[Ô] Or tempoI = [Ô]06:30:00[Ô] _
Or tempoI = [Ô]07:00:00[Ô] Or tempoI = [Ô]07:30:00[Ô] _
Or tempoI = [Ô]08:00:00[Ô] Or tempoI = [Ô]08:00:00[Ô] _
Or tempoI = [Ô]09:00:00[Ô] Or tempoI = [Ô]09:30:00[Ô] _
Or tempoI = [Ô]10:00:00[Ô] Or tempoI = [Ô]10:30:00[Ô] _
Or tempoI = [Ô]11:00:00[Ô] Or tempoI = [Ô]11:30:00[Ô] _
Or tempoI = [Ô]12:00:00[Ô] Or tempoI = [Ô]12:30:00[Ô] _
Or tempoI = [Ô]13:00:00[Ô] Or tempoI = [Ô]13:30:00[Ô] _
Or tempoI = [Ô]14:00:00[Ô] Or tempoI = [Ô]14:30:00[Ô] _
Or tempoI = [Ô]15:00:00[Ô] Or tempoI = [Ô]15:30:00[Ô] _
Or tempoI = [Ô]16:00:00[Ô] Or tempoI = [Ô]16:30:00[Ô] _
Or tempoI = [Ô]17:00:00[Ô] Or tempoI = [Ô]17:30:00[Ô] _
Or tempoI = [Ô]18:00:00[Ô] Or tempoI = [Ô]18:30:00[Ô] _
Or tempoI = [Ô]19:00:00[Ô] Or tempoI = [Ô]19:30:00[Ô] _
Or tempoI = [Ô]20:00:00[Ô] Or tempoI = [Ô]20:30:00[Ô] _
Or tempoI = [Ô]21:00:00[Ô] Or tempoI = [Ô]21:30:00[Ô] _
Or tempoI = [Ô]22:00:00[Ô] Or tempoI = [Ô]22:30:00[Ô] _
Or tempoI = [Ô]23:00:00[Ô] Or tempoI = [Ô]23:30:00[Ô] Then

PlayHitMe

Set CARATA = New clsmsg
CARATA.ShowNews [Ô]Existe ordem de serviços pendente de aprovação, favor verificar[Ô], [Ô]Connect system[Ô], [Ô] & connect system & projeto ares[Ô], [Ô]connect system[Ô], 0, &HFF0000, &HFF00&, [Ô]E:\BRASCOBRA\EXEMPLOS\systray\FUNDO.BMP[Ô], 30, 8000, 20, WP_LowerRight, , , [Ô]Arial red[Ô], , 9


End If
End If

End With


saida:

Set rssystray = Nothing
Set mycmd = Nothing
myConSystray.Close

Errlocalizar:

With Err

If .number <> 0 Then
MsgBox [Ô]Erro ao gerar informação no SysTray[Ô], vbInformation, [Ô]Objetivo[Ô]
.number = 0
GoTo saida
End If
End With

End Sub


Para emiter aviso sonoro como o msn

Sub PlayHitMe()
[ô]emissão de alertas sonoros no visual basic
[ô]está opção faz com que quando o systray e acionado para mensagem de cheques vencidos
[ô]o sistema toque uma musica em formato wav
Dim i As Integer
Dim sFName As String
sFName = App.Path & [Ô]    ype.wav[Ô]

i = sndPlaySound(ByVal CStr(sFName), SND_ASYNC)

End Sub

no modulo
Public Declare Function Shell_NotifyIcon Lib _
[Ô]shell32.dll[Ô] Alias [Ô]Shell_NotifyIconA[Ô] _
(ByVal dwMessage As Long, lpData As _
NOTIFYICONDATA) As Long

Public 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

Public Const WM_LBUTTONDOWN = &H201
Public Const WM_LBUTTONDBLCLK = &H203
Public Const WM_RBUTTONDOWN = &H204
Public Const WM_RBUTTONDBLCLK = &H206

Public Const NIM_ADD = &H0
Public Const NIM_DELETE = &H2
Public Const NIM_MODIFY = &H1
Public Const NIF_ICON = &H2
Public Const NIF_MESSAGE = &H1
Public Const NIF_TIP = &H4

Public Enum Actions
TrayAdd = &H0
TrayModify = &H1
TrayDelete = &H2
End Enum

Public Sub SysTray(Action As Actions, hWnd As _
Long, ToolTip As String, Icon As _
StdPicture)
Dim STray As NOTIFYICONDATA
STray.uID = vbNull
STray.uCallbackMessage = &H200
STray.hWnd = hWnd
STray.hIcon = Icon
STray.szTip = ToolTip & vbNullChar
STray.uFlags = NIF_MESSAGE Or NIF_ICON Or _
NIF_TIP
STray.cbSize = Len(STray)
Select Case Action
Case NIM_ADD
Call Shell_NotifyIcon(NIM_ADD, STray)
Case NIM_MODIFY
Call Shell_NotifyIcon(NIM_MODIFY, STray)
Case NIM_DELETE
Call Shell_NotifyIcon(NIM_DELETE, STray)
End Select
End Sub

em outro modulo para a música

Declare Function sndPlaySound Lib [Ô]winmm.dll[Ô] Alias [Ô]sndPlaySoundA[Ô] (ByVal lpszSoundName As String, ByVal uFlags As Long) As Long


Segue a .dll e o som

Eu esbarrei em um problema no timer em rede, onde quando tem mais de 1 usuário ao mesmo tempo da conflito de conexão. Eu não analisei como resolver ainda, más é extremante facil


MARCELO.TREZE 28/03/2011 13:28:16
#369452
olha tem esse aqui

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