Visual Basic - Menu en Systray

Life is soft - evento anual de software empresarial
 
Vista:

Menu en Systray

Publicado por Ariel (6 intervenciones) el 29/03/2004 17:50:32
El problema es el siguiente
tengo un form con un menu, mediante el trayicn2.ocx muestro un icono en el systray y en el evento rightclick de dicho objeto hago popup del menu.
funciona todo bien salvo que cuando hago click en otra posicion que no sea dentro del menu el este sigue desplegado
¿como puedo hacer para que al hacer click en cualquier lugar el menu desaparezca?
si alguien sabe le agradeceria que me lo dijera por mail([email protected])
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Menu en Systray

Publicado por Stump Kops (41 intervenciones) el 10/04/2004 00:20:51
La verdad deberías usar las funciones de la API de Win32. Existe la función Shell_NotifyIcon en la biblioteca SHELL32.DLL. Podés usar esta función de la siguiente forma:

Sub ShowTrayIcon(Optional Show As Boolean = True)
On Error Resume Next

Dim lpData As NOTIFYICONDATA
Dim IPic As IPictureDisp
Dim i%

Set IPic = MainForm.Icon 'Icono que aparece en la barra de tareas.

With lpData
.uFlags = NIF_ICON Or NIF_MESSAGE 'Muestra el icono y envia el mensaje a la ventana
.hicon = IPic.Handle
.hwnd = MainForm.hwnd 'Controlador de la ventana principal.
.uID = 1

'Mensaje que se envia a la ventana cuando el mouse está sobre el icono
.uCallbackMessage = WM_MOUSEMOVE

.cbSize = LenB(lpData)
End With

If Show Then
'Agrega el icono a la barra de tareas.
Shell_NotifyIcon NIM_ADD, lpData
Else
'Elimina el icono de la barra de tareas.
Shell_NotifyIcon NIM_DELETE, lpData
End If

End Sub

Así se puede ocultar o mostrar el icono en la barra de tareas.

Para controlar el menu y las otras tareas se pone lo siguiente en el evento MouseMove del formulario principal (el evento ocurrirá porque es el que se especificó en la llamada a Shell_NotifyIcon)

Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)

Dim msg As Long

msg = X / Screen.TwipsPerPixelX 'Obtiene el mensaje a
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar