Resumen Iconos en el "notification area"   (2 mensajes )

-----Original Message-----
De: Jose Maria Ferrer Costa <xara@redestb.es>
Para: lista vb <vb-esp@ccc.uba.ar>
Fecha: Lunes 29 de Diciembre de 1997 12:17 PM
Asunto: (VB-ESP) iconos en el "notification area"


>Estimados amigos:
>
>Estoy realizando un programa y he puesto el icono en el area de
notificacion
>de windows.(osea al lado del reloj)
>pues bien necesitaria saber como puedo acceder a los eventos del mouse en
>dicha area, como pulsar el boton izquierdo del raton , o el derecho.



Traducido de la base de conocimientos (Lo que se encuentre entre corchetes
son cambios para adaptar el artículo a un texto corto):

Cómo manipular iconos en el área de tareas con Visual Basic
ID del articulo: Q162613
Fecha de creación: 24-ENE-1997
Fecha de revisión: 28-ENE-1997
La información en este artículo se aplica a:
Las ediciones Estándar, Profesional, y Empresarial Editions de Microsoft
Visual Basic, sólo de 32 bitios, para Windows, versión 4.0

Resumen

Una de las nuevas características de la interfaz del usuario de Windows 95 y
NT 4.0 es el área de estado de la barra de tareas. Este artículo [discute]
cómo utilizar Visual Basic para agregar, modificar y eliminar los
indicadores de estado y notificación en el área de marras.

MAYOR INFORMACIÓN

El área de estado de la barra de tareas se ubica a la derecha del botón
Inicio, y le proporciona a usted de indicadores de notificación o estado
acerca de sus programas. Los iconos con información sobre herramientas se
usan de manera típica como indicadores en el área de estado de la barra de
tareas. [...]

Para manejar un icono en ésta área, utilice la función API de Windows
llamada Shell_NotifyIcon que se encuentra en el archivo Shell32.dll. Esta
función le permite agregar, modificar, eliminar, establecer una cadena de
información sobre herramientas, y enviar un mensaje de retorno para ejecutar
eventos del ratón. Visual Basic no acepta mensajes o funciones de retorno de
manera directa. No obstante, existen tres maneras de solucionar esta
limitación:

La difícil: Créese un control que acepte mensajes de retorno. Tómese como
referencia el artículo publicado en The Microsoft Systems Journal que se
cita en la sección de Referencias de este artículo para informarse al
respecto. Para crear este control, necesitará de Visual C++.

La fácil: Utilice un control de terceros que intercepte tales mensajes, como
el Message Blaster.

La simple: Utilice un control intrínseco de Visual Basic que sirva como una
ventana donde se acepten las reacciones al mensaje de retorno. Este artículo
[trata] este último método. Para ello, será necesario utilizar un evento en
un control que se utiliza rara vez. El evento será utilizado de manera
exclusiva para procesar el mensaje de retorno. En la siguiente sección se
explica la función Shell_NotifyIcon y los requerimientos para utilizarla.

La función Shell_NotifyIcon

Esta función se utiliza para enviar un mensaje a un sistema para agregar,
modificar o eliminar un icono del área de estado de la barra de tareas. La
función devuelve True si el mensaje se envió con éxito o False si ocurrió lo
contrario. Los argumentos de la función son los siguientes:


   dwMessage: Un mensaje que ejecute una acción. Este parámetro puede ser
uno de los siguientes:

      NIM_ADD: Agrega un icono al área de estado.
      NIM_DELETE: Elimina un icono al área de estado.
      NIM_MODIFY: Modifica un icono al área de estado.

   Los valores de estos mensajes pueden localizarse en el archivo de
encabezado Shellapi.h.

   pnid: Un apuntador a una estructura de NOTIFYICONDATA. Para pasar este
argumento a la función, cree un tipo definido por el usuario que se llame
NOTIFYICONDATA (que se muestra luego en esta sección) y pase este tipo de
dato por valor).

La estructura de NOTIFYICONDATA contiene los siguientes elementos:
   cbSize: Pasa el tamaño del tipo de dato NOTIFYICONDATA.
      Tipo de dato: Long.
      Valor: Utilice la función Len con la variable declarada como este tipo
             de dato como el argumento.

   hWnd: Controlador de la ventana utilizada para recibir el mensaje de
         notificación.
      Tipo de dato: Long.
      Valor: La propiedad hWnd del control utilizado para recibir este
mensaje.

   uId: Identificador del icono en el área de estado.
      Tipo de dato: Long.
      Value: Cualquier valor que se encuentre dentro de los límites del
             tipo de dato Long.

   uFlags: Matriz de banderas que indica cuales de los otros miembros
           contienen datos válidos.
      Tipo de dato: Long.
      Valor: Cualquier combinación de las siguientes constantes que indican
             que el miembro de esta estructura es válido y que será
utilizado:
         NIF_ICON: El pasar esta bandera indica que el valor de hIcon será
el
                   que aparezca en el área de estado de la barra de tareas.
         NIF_MESSAGE: El pasar esta bandera indica que el valor de
                      uCallBackMessage será utilizado como el mensaje
                      de retorno.
         NIF_TIP: El pasar esta bandera indica que el valor de szTip será
                  utilizado como la información sobre herramientas del
                  icono en el área de estado de la barra de tareas.

   uCallBackMessage: Identificador del mensaje de notificación que se envía
                     a la ventana que se utiliza para recibir los mensajes.
      Tipo de dato: Long.
      Valor: El mensaje que se utiliza para identificar que un evento del
             ratón ha ocurrido dentro de los límites que forman al
             rectángulo donde se encuentra el icono en el área de estado
             de la barra de tareas.

   hIcon: Controlador del icono que se despliega en el área de estado de la
          barra de tareas.
      Tipo de dato: Long.
      Value: La imagen que será utilizada como un icono en el área de estado
             de la barra de tareas. Esta puede ser la propiedad Icon de un
             control, una imagen de un control Image, o cualquier icono.

   szTip: Cadena por utilizarse como el texto de la información sobre
herramientas.
      Tipo de dato: Cadena de longitud fija de hasta 64 bytes.
      Value: Cualquier cadena terminada en Nulo menor a 64 bytes.

La siguiente sección explica el uso de esta función mediante un programa de
ejemplo que maneja iconos en el área de estado de la barra de tareas.

Programa de ejemplo

Este programa consiste de un formulario que contiene dos botones de comando
y el cuadro de diálogo común. Cuando haga clic en el icono Agregar,
establecerá los valores del tipo de dato NOTIFYICONDATA. En este tipo de
dato, establecerá los siguientes valores.

   cbSize: La longitud de la variable que utiliza la función Len.
   hWnd: El controlador de la ventana utilizada para recibir los mensajes
         de retorno. En este programa de ejemplo se utiliza el formulario
         como la ventana receptora de estos mensajes.
   uId: El identificador del icono. Aunque puede utilizar cualquier número,
el
        programa de ejemplo utiliza las constantes vbNull.
   uFlags: Matriz de banderas que indican cuales miembros de esta estructura
son
           válidos. El programa de ejemplo los utilizará todos para obtener
la
           mayor versatilidad.
   uCallBackMessage: El mensaje que será enviado cuando ocurra alguna
actividad
                     del ratón en el icono del área de estado de la barra de
                     tareas. El mensaje que se envía se dirige a algun
evento
                     del ratón en el control especificado mediante el valor
de
                     hWnd. Deberá utilizar un evento que pueda manejar
                     estos mensajes de manera exclusiva. Por ejemplo, el
                     programa de ejemplo utilizará el mensaje WM_MOUSEMOVE
dado
                     que este mensaje apuntará al evento MouseMove del
Formulario.
                     Este evento es rara vez utilizado en un formulario, por
lo
                     que se convierte en un serio candidato para el propósit
o
                     que nos ocupa.
   hIcon: El icono que será desplegado en el área de estado de la barra de
tareas.
          El programa de ejemplo utiliza el icono del formulario.
   szTip: La cadena de información sobre herramientas. Esta debe finalizar
con
          un carácter de Null, por ello que la constante vbNullChar será
          concatenada.

Luego de establecer la información, llamará a la función Shell_NotifyIcon y
pasará a NOTIFYICONDATA junto a un mensaje para agregar al icono al área de
estado de la barra de tareas. Al pasar el apuntador del ratón sobre tal
icono ahora ubicado en el área de marras, el formulario recibirá un mensaje
de WM_MOUSEMOVE. Este mensaje apuntará al evento MouseMove del formulario.
El argumento X será el producto de una de las constantes del ratón que
indicará lo que ha ocurrido (como un clic izquierdo, clic derecho, clic
sencillo o doble clic) y la propiedad TwipsPerPixelX de la pantalla. Así, la
información capturada por el ratón será producida al dividir el argumento X
entre la propiedad citada. El resultado es entonces utilizado en una
instrucción Select Case para evaluar lo que se deberá hacer para el efecto.

Mire, cuando haga doble clic en el icono, aparecerá el cuadro de diálogo que
le permitirá seleccionar un icono distinto. El valor de hIcon del tipo de
dato NOTIFYICONDATA cambiará a este nuevo icono. Luego, la será llamada la
función Shell_NotifyIcon con la nueva información y un mensaje de
modificación para tal icono en el área de estado de la barra de tareas. Si
hace clic con el botón derecho en el icono, se presentará una función
InputBox que cambia el texto de la información sobre herramientas. La nueva
cadena terminará en Null al concatenarle la constante vbNullChar y el valor
de szTip se cambia a la nueva cadena. La función de Shell_NotifyIcon vuelve
a ser llamada con la nueva información y un mensaje para modificar. Al hacer
clic en el icono Eliminar o al salir de la aplicación, se llamará a la
función de marras con un mensaje de que elimine el icono.

PASOS PARA CREAR EL PROGRAMA DE EJEMPLO

Inicie al Visual Basic. Si ya se encuentra en ejecución, cree un nuevo
proyecto.
Coloque dos botones de comando y un control CommonDialog en Form1.

Copie el siguiente código en la ventana de codificación del Form1:

Option Explicit

' Declárese una variable definida por el usuario para ser pasada
' a la función 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 * 64
End Type

' Declárense las constantes para la función API. Estas constantes pueden
' encontrarse en el archivo de encabezado Shellapi.h.

' Las siguientes constantes son mensajes que se envían a la función
' Shell_NotifyIcon para agregar, modificar, o eliminar un icono del
' área de estado de la barra de tareas.
Private Const NIM_ADD = &H0
Private Const NIM_MODIFY = &H1
Private Const NIM_DELETE = &H2

' La siguiente constante es el mensaje que se envía cuando ocurre un
' evento del ratón en la superficie rectangular del icono del área
' de estado de la barra de tareas.
Private Const WM_MOUSEMOVE = &H200

' Las siguientes constantes son las banderas que indican los miembros
' válidos del tipo de dato NOTIFYICONDATA.
Private Const NIF_MESSAGE = &H1
Private Const NIF_ICON = &H2
Private Const NIF_TIP = &H4

' Las siguientes constantes son utilizadas para determinar la entrada del
' usuario en el icono que se encuentra en el área conocida.
' Constantes para el clic izquierdo.
Private Const WM_LBUTTONDBLCLK = &H203 ' Doble click
Private Const WM_LBUTTONDOWN = &H201 ' Botón oprimido
Private Const WM_LBUTTONUP = &H202 ' Botón soltado

' Constantes para el clic derecho.
Private Const WM_RBUTTONDBLCLK = &H206 ' Doble clic
Private Const WM_RBUTTONDOWN = &H204 ' Botón oprimido
Private Const WM_RBUTTONUP = &H205 ' Botón soltado

' Declárese la función API.
Private Declare Function Shell_NotifyIcon Lib "shell32" _
        Alias "Shell_NotifyIconA" _
        (ByVal dwMessage As Long, pnid As NOTIFYICONDATA) As Boolean

' Declárese la variable con el tipo definido por el usuario.
Dim nid As NOTIFYICONDATA

Private Sub Command1_Click()
  ' Hágase clic en este botón para agregar un icono al área de estado.
  ' Establezca los valores individuales para NOTIFYICONDATA.
  With nid
    .cbSize = Len(nid)
    .hWnd = Form1.hWnd
    .uId = vbNull
    .uFlags = NIF_ICON Or NIF_TIP Or NIF_MESSAGE
    .uCallBackMessage = WM_MOUSEMOVE
    .hIcon = Form1.Icon
    .szTip = "Programa de ejemplo para el área de estado" & vbNullChar
  End With
  ' Llame a la función Shell_NotifyIcon para agregar el icono
  Shell_NotifyIcon NIM_ADD, nid
End Sub

Private Sub Command2_Click()
  ' Hágase clic en este botón para eliminar el icono del área de estado.
  Shell_NotifyIcon NIM_DELETE, nid
End Sub

Private Sub Form_Load()
  ' Establezca los mensajes de los botones.
  Command1.Caption = "Agregar icono"
  Command2.Caption = "Eliminar icono"
End Sub

Private Sub Form_Terminate()
  ' Elimine el icono agregado al área de estado cuando el
  ' programa finalice.
  Shell_NotifyIcon NIM_DELETE, nid
End Sub

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

  ' Este evento ocurre cuando el apuntador del ratón se encuentra en
  ' la superficie rectangular del icono en el área de estado.
  Dim lngMsj As Long, _
      strFiltro As String, _
      strToolTip As String
  lngMsj = CLng(X) / Screen.TwipsPerPixelX

  Select Case lngMsj ' Evaluemos qué ocurrió
    Case WM_LBUTTONDOWN
    Case WM_LBUTTONUP
    Case WM_LBUTTONDBLCLK
      CommonDialog1.DialogTitle = "Seleccione un icono"
      strFiltro = "Archivos de icono (*.ico)|*.ico"
      strFiltro = strFiltro & "|Todos los archivos (*.*)|*.*"
      CommonDialog1.Filter = strFiltro
      CommonDialog1.ShowOpen
      If CommonDialog1.filename <> "" Then
        Form1.Icon = LoadPicture(CommonDialog1.filename)
        nid.hIcon = Form1.Icon
        Shell_NotifyIcon NIM_MODIFY, nid
      End If
    Case WM_RBUTTONDOWN
      strToolTip = InputBox("Capture el mensaje:", _
                   "Información sobre herramientas")
      If strToolTip <> "" Then
        nid.szTip = strToolTip & vbNullChar
        Shell_NotifyIcon NIM_MODIFY, nid
      End If
    Case WM_RBUTTONUP
      Case WM_RBUTTONDBLCLK
  End Select
End Sub


Presione la tecla F5 para ejecutar el proyecto u oprima el botón Ejecutar de
la barra de herramientas. Haga clic en Agregar icono para añadir un icono al
área de estado. Haga doble clic en este icono para cambiarlo. Haga clic con
el botón derecho para cambiar la cadena de información sobre herramientas.
Haga clic en el botón Eliminar icono para removerlo del área de estado.

REFERENCIAS:
"Hardcore Visual Basic," Bruce McKinney, Microsoft Press, 1995 Microsoft
Win32 SDK, Shell_NotifyIcon and NOTIFYICONDATA "Microsoft Systems Journal,"
February 1996, "The Visual Programmer," page 93, Joshua Trupin "Visual Basic
Programmer's Journal," March 1996, "Q & A," page 136, Carl Franklin

EQUIVALENCIAS:
Información sobre herramientas: ToolTip
Mensajes de retorno: Callback messages
Formulario: Form
área de estado de la barra de herramientas: toolbar status area
área de estado de la barra de herramientas: toolbar status tray

----------------------------------------------------------------------------
----
KBCategory: kbusage kbhowto
KBSubcategory: APrgOther
Additional reference words: 4.00 kbdsd Shell_NotifyIcon
THE INFORMATION PROVIDED IN THE MICROSOFT KNOWLEDGE BASE IS PROVIDED "AS IS"
WITHOUT WARRANTY OF ANY KIND. MICROSOFT DISCLAIMS ALL WARRANTIES, EITHER
EXPRESS OR IMPLIED, INCLUDING THE WARRANTIES OF MERCHANTABILITY AND FITNESS
FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL MICROSOFT CORPORATION OR ITS
SUPPLIERS BE LIABLE FOR ANY DAMAGES WHATSOEVER INCLUDING DIRECT, INDIRECT,
INCIDENTAL, CONSEQUENTIAL, LOSS OF BUSINESS PROFITS OR SPECIAL DAMAGES, EVEN
IF MICROSOFT CORPORATION OR ITS SUPPLIERS HAVE BEEN ADVISED OF THE
POSSIBILITY OF SUCH DAMAGES. SOME STATES DO NOT ALLOW THE EXCLUSION OR
LIMITATION OF LIABILITY FOR CONSEQUENTIAL OR INCIDENTAL DAMAGES SO THE
FOREGOING LIMITATION MAY NOT APPLY.
©1997 Microsoft Corporation. All rights reserved. Legal Notices.

****************************************************************************
********

Nota. Se incluye un ejemplo modificado de un programa creado por Consentino
Mariano y, dadas las modificaciones, me tomé la atribución de agregar mi
nombre.

El ejemplo original fue mejorado en su código y funcionalidad para servir de
mejor ejemplo.

+¡Saludos desde México!+
| |
| .+'~~'+. |
| * Tron * David.BAS |
| `+,__,+' |
| |
+-adgarza@spin.com.mx--+

Download tskbrico.zip  

Estimado José:
    Aca te mando un pequeño regalito que le hice a unos amigos, nada del
otro mundo, pero hace lo que vos pedís.

Y si te sirve, aca tenes el fuente:


P.D.: Espero que les guste a todos, es de esas cosas que no llevan mucho
trabajo, pero nunca nos tomamos el tiempo de hacer.

      Saludos,
                             marianok
                  marianok@technologist.com
                  ICQ #: 3967735 "marianok"
 proximamente en: http://www.geocities.com/ResearchTriangle/Lab/3429


>----------
>From:     Jose Maria Ferrer Costa[SMTP:xara@redestb.es]
>Sent:     Lunes 29 de Diciembre de 1997 15:59
>To:     lista vb
>Subject:     (VB-ESP) iconos en el "notification area"
>
>Estimados amigos:
>
>Estoy realizando un programa y he puesto el icono en el area de notificacion
>de windows.(osea al lado del reloj)
>pues bien necesitaria saber como puedo acceder a los eventos del mouse en
>dicha area, como pulsar el boton izquierdo del raton , o el derecho.
>
>la funcion que utilizo es la "shell_notifyicon" del api
>
>pero no hay manera de conseguir recojer los mensages que envia windows a mi
>programa. alguien puede ayudarme a interceptar dichos mensages?
>
>gracias por su tiempo
>
>Jose Maria Ferrer Costa
>xara@redestb.es
>
>
>


Download arbolito.exe  Download arbolito.zip  



Resumen Resumen

Visual Basic Página de Visual Basic

Página principal Página principal

www.jrubi.com