Página 1 de 1

Eliminar un icono de la bandeja de sistema

Publicado: 20 Oct 2009, 07:36
por Jonny
Hola

Estoy haciendo un programa, que como otros muchos permite la posibilidad de ocultar la interfaz del mismo y colocar un icono en la bandeja del sistema y viceversa. Volver a mostrar la interfaz eliminando entonces el icono de la bandeja del sistema. Lo de ocultar la ventana y colocar el icono lo tengo hecho sin problemas. La duda que me surge es:
Una vez creado el icono con TraySetToolTip("Nombre del programa") y ocultada la interfaz, cuando mediante una opción hecha para ocultar este icono con Opt("TrayIconHide", 1) en el menú que se desplega al pulsar el botón derecho del ratón sobre este icono y mostrada la interfaz, si quisiéramos volver a ocultar la GUI del programa y colocar otra vez el icono en la bandeja del sistema, si lo hiciéramos igual que antes con TraySetToolTip("Nombre del programa") y pusiéramos Opt("TrayIconHide", 0)
para mostrar nuévamente el icono ¿Aparecería dos veces este en la bandeja del sistema?
Supongo que sí. Entonces ¿Puedo eliminar el icono creado una vez muestro la interfaz? ¿Como?.
Espero haverme explicado...

Salu2!

Re: Eliminar un icono de la bandeja de sistema

Publicado: 20 Oct 2009, 08:38
por Ximorro
Pero, pero... ¿¿lo has probao?? :smt003

Bueno pues la respuesta es que no, no repite, así que puedes hacer el programa tranquilamente.
No hace falta que vuelvas a hacer el TraySetToolTip, el nombre se mantiene, sólo tienes que hacer lo de ocultar y mostrar, que puedes hacer con la opción TrayIconHide o con el comando TraySetState:
TraySetState(1) : muestra el icono
TraySetState(2) : oculta el icono

Lo que no he entendido mucho es como vuelves a mostrar la interfaz, sólo pulsando con el botón derecho en el icono no muestra un GUI oculto. ¿Has hecho una entrada de menú personalizada? ¿por qué la activas con el botón derecho?

Puedes hacerlo con una entrada en el menú o a base de eventos.

Bueno en cualquier caso adelante, la respuesta a tu pregunta es, "no, no repite el icono".
La próxima vez pruébalo, hombre, que son 4 líneas, ¡te cuesta menos hacerlo que preguntarlo!, ja ja ja.

Re: Eliminar un icono de la bandeja de sistema

Publicado: 20 Oct 2009, 16:20
por Jonny
Hola

jeje. Si que hay cosas que es más fácil probar que preguntar...
Entonces a ver si lo he entendido:

El icono siempre está en la bandeja del sistema. Puede ocultarse o mostrarse ¿Verdad?
¿Lo que hace TraySetToolTip() es ponerle un nombre al icono?
Lo confieso, no he mirado la ayuda... Vengo usando la función de algún script que descargué del foro inglés... Pensaba, que creaba el icono. Poreso lo de preguntar si al volver a hacer TraySetToolTip() se creaba otro icono... Si esa función lo que hace es dar un nombre al icono lo entiendo mejor. Entonces, se me ocure, que para que el icono no tenga el nombre del ejecutable (Prueba.au3 por ejemplo) puedo llamar a TraySetToolTip() al iniciar el programa para darle nombre al icono y luego ocultar o mostrar el icono simplemente ¿verdad?
Lo de mostrar la interfaz con el botón derecho del ratón... Es cierto, perdona. Lo dige a medias. Sí, he creado un menú que se desplega al pulsar el botón derecho del ratón sobre el icono y en él puse la opción "Abrir", que muestra la interfaz.

El menú lo creé con algo como esto:

Código: Seleccionar todo


TrayCreateItem("Abrir")

TrayItemSetOnEvent(-1, "ShowInterface")

Func ShowInterface()

WinSetState("Ventana", "", @SW_SHOW)

EndFunc

 
Salu2!

Re: Eliminar un icono de la bandeja de sistema

Publicado: 21 Oct 2009, 13:32
por Ximorro
Pues efectivamente TraySetToolTip lo único que hace es cambiar el texto de la etiqueta que sale cuando pones el ratón sobre el icono, así que ahí es en efecto donde cambias lo de "Prueba.au3". Una cosa importante: ¡¡sólo funciona si el icono está visible!!
Así que si está oculto y cambias el texto, pues es como si no hicieras nada.

Pues ya práctcamente lo tienes, ahora además de mostrar el GUI yo ocultaría el icono, ¿no es eso lo que querías?, así que junto a
WinSetState("Ventana", "", @SW_SHOW)
puedes añadir un
TraySetState(2) ;Esto oculta el icono

Y en el botón o el control del GUI que lo oculta a la bandeja al revés, se oculta el GUI y se muestra el icono:
GUISetState(@SW_HIDE) ;(bueno, o con WinSetState como hacías arriba)
TraySetState(1) ;Muestra el icono

Yo si puedo uso GUISetState, porque WinSetState tiene que buscar la ventana. Si sólo hay un GUI, GUISetState ya trabaja con él directamente. Si hubiera varios también lo uso porque entonces le paso el handler [ GUISetState(@SW_HIDE, $miGUI) ], que supongo que será más rápido que buscar la ventana a través del nombre...
Pero vaya, eso ya es cosa de gustos.