Ver Mensaje Individual
  #2 (permalink)  
Antiguo 03/08/2009, 11:37
leophp
 
Fecha de Ingreso: julio-2002
Ubicación: stgo rec
Mensajes: 438
Antigüedad: 22 años, 9 meses
Puntos: 3
Respuesta: poner menu y balloon en systray

Me respondo a mi mismo, aquí esta la solución si a alguien le sirve

Agreguen al proyecto 2 cajas de textbox, 1 picturebox, 3 CommandButton y un menu llamado menu_test (visible false) y un submenu llamado menu_test_cerrar

Código:
Option Explicit
' -- Api SetForegroundWindow Para traer la ventana al frente
Private Declare Function SetForegroundWindow Lib "user32" (ByVal hWnd As Long) As Long

'Estructura NOTIFYICONDATA para usar con Shell_NotifyIcon
Private Type NOTIFYICONDATA
   cbSize As Long
   hWnd As Long
   uID As Long
   uFlags As Long
   ucallbackMessage As Long
   hIcon As Long
   szTip As String * 128
   dwState As Long
   dwStateMask As Long
   szInfo As String * 256
   uTimeout As Long
   szInfoTitle As String * 64
   dwInfoFlags As Long
End Type

'Constantes
Private Const NOTIFYICON_VERSION = 3
Private Const NOTIFYICON_OLDVERSION = 0

Private Const NIM_ADD = &H0
Private Const NIM_MODIFY = &H1
Private Const NIM_DELETE = &H2

Private Const NIM_SETFOCUS = &H3
Private Const NIM_SETVERSION = &H4

Private Const NIF_MESSAGE = &H1
Private Const NIF_ICON = &H2
Private Const NIF_TIP = &H4

Private Const NIF_STATE = &H8
Private Const NIF_INFO = &H10

Private Const NIS_HIDDEN = &H1
Private Const NIS_SHAREDICON = &H2

Private Const NIIF_NONE = &H0
Private Const NIIF_WARNING = &H2
Private Const NIIF_ERROR = &H3
Private Const NIIF_INFO = &H1
Private Const NIIF_GUID = &H4

Private Const WM_MOUSEMOVE = &H200
Private Const WM_LBUTTONDOWN = &H201
Private Const WM_LBUTTONUP = &H202
Private Const WM_LBUTTONDBLCLK = &H203
Private Const WM_RBUTTONDOWN = &H204
Private Const WM_RBUTTONUP = &H205
Private Const WM_RBUTTONDBLCLK = &H206
 
' Declaración Api
Private Declare Function Shell_NotifyIcon Lib "shell32" Alias "Shell_NotifyIconA" _
(ByVal dwMessage As Long, pnid As NOTIFYICONDATA) As Boolean

'Variable para la estructura anterior
Private sysTray As NOTIFYICONDATA
Private Sub Command1_Click()
    With sysTray
        .cbSize = Len(sysTray)
        .hWnd = Me.Picture1.hWnd
        .uID = vbNull
        .uFlags = NIF_ICON Or NIF_INFO Or NIF_MESSAGE Or NIF_TIP
        .ucallbackMessage = WM_MOUSEMOVE
        .hIcon = Me.Picture
        .szTip = " Acá colocar el toolTip " & vbNullChar
        .dwState = 0
        .dwStateMask = 0
   End With
   'Notifica en el systray
   Shell_NotifyIcon NIM_ADD, sysTray
End Sub
Private Sub Command2_Click()
    With sysTray
        .cbSize = Len(sysTray)
        .hWnd = Me.Picture1.hWnd
        .uID = vbNull
        .uFlags = NIF_ICON Or NIF_INFO Or NIF_MESSAGE Or NIF_TIP
        .ucallbackMessage = WM_MOUSEMOVE
        .hIcon = Me.Picture1
        .szTip = " Acá colocar el toolTip" & vbNullChar
        .dwState = 0
        .dwStateMask = 0
        .szInfo = Text2 & Chr(0)
        .szInfoTitle = Text1 & Chr(0)
        .dwInfoFlags = NIIF_INFO
        .uTimeout = 100
    End With
    'Modifica el ícono con la información
    Shell_NotifyIcon NIM_MODIFY, sysTray
End Sub
Private Sub Command3_Click()
    ' Elimina el ícono de la barra de notificación
    Shell_NotifyIcon NIM_DELETE, sysTray
End Sub
Private Sub Form_Load()
    Command1.Caption = "Notificar en el Systray"
    Command2.Caption = "Mostrar el Balloon diálogo"
    Command3.Caption = "Eliminar del systray"
    Text1.Text = App.EXEName
    Text2.Text = " Ejemplo para colocar un Baloon tip en el systray"
    Me.Command1.Value = True
    Me.Command2.Value = True
    Me.Hide
End Sub
Private Sub menu_test_cerrar_Click()
    End
End Sub
Private Sub Picture1_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
Dim msg As Long
    If (Me.ScaleMode = vbPixels) Then
        msg = X
    Else
        msg = X / Screen.TwipsPerPixelX
    End If
    Select Case msg
        Case WM_RBUTTONUP, WM_LBUTTONUP
            Call SetForegroundWindow(Me.Picture1.hWnd)
            ' -- Si hacemos Click con el boton derecho mostramos el popup Menu
            Me.PopupMenu Me.menu_test
    End Select
End Sub
__________________
Saludos
Leo