Ir al contenido


Foto

SysTrayIcon


  • Por favor identifícate para responder
28 respuestas en este tema

#21 escafandra

escafandra

    Advanced Member

  • Administrador
  • 4.111 mensajes
  • LocationMadrid - España

Escrito 31 octubre 2014 - 01:22

Tienes razón, debía haberlo comentado.

Se trata de permitir que desde el evento OnMinimize de TSysTrayIcon, se puedan realizar cambios en sus propiedades Visible y Hide, antes de minimizarse en el SysTray o en la barra e tareas. Se trata de poder tomar y/o cambiar esa decisión justo en el momento de minimizar la aplicación.  ;)

Saludos.
  • 0

#22 escafandra

escafandra

    Advanced Member

  • Administrador
  • 4.111 mensajes
  • LocationMadrid - España

Escrito 06 mayo 2015 - 05:17

Repongo los archivos subidos, tras la pérdida con la última mudanza, en el mensaje inicial del hilo.

 

 

Saludos.


  • 0

#23 escafandra

escafandra

    Advanced Member

  • Administrador
  • 4.111 mensajes
  • LocationMadrid - España

Escrito 25 marzo 2016 - 10:47

Actualizo el control SystrayIcon tras reportar un bug cuando el form principal hace una llamada a


delphi
  1. Application.ShowMainForm:= False;

Ahora admite la expresión anterior y la aplicación se inicia sin ventana, pudiendo ser restaurada desde el SysTray.

El componente está probado en Builder 5 y delphi 6 y 7. Acompaño el enlace de descarga en el mensaje inicial del hilo.


Saludos.


  • 0

#24 escafandra

escafandra

    Advanced Member

  • Administrador
  • 4.111 mensajes
  • LocationMadrid - España

Escrito 02 abril 2016 - 11:47

Me he seguido entreteniendo con este componente y he mejorado el efecto de la propiedad Hide eliminando el efecto de "insinuación" en la barra de tareas al minimizarse y he añadido los eventos que responden a los mensajes  NIN_BALLOONSHOW, NIN_BALLOONHIDE, NIN_BALLOONUSERCLICK y NIN_BALLOONTIMEOUT
 

MSD

  • If a user passes the mouse pointer over an icon with which a balloon tooltip is associated, the version 6.0 Shell (Windows XP)sends the following messages.
      • NIN_BALLOONSHOW - Sent when the balloon is shown (balloons are queued).
      • NIN_BALLOONHIDE - Sent when the balloon disappears—for example, when the icon is deleted. This message is not sent if the balloon is dismissed because of a timeout or a mouse click.
      • NIN_BALLOONTIMEOUT - Sent when the balloon is dismissed because of a timeout.
      • NIN_BALLOONUSERCLICK - Sent when the balloon is dismissed because of a mouse click.

El componente está probado en Builder 5 y 6 y en delphi 6 y 7. Posiblemente funcione en versiones posteriores.
Acompaño el enlace de descarga en el mensaje inicial del hilo.


Saludos.
  • 0

#25 escafandra

escafandra

    Advanced Member

  • Administrador
  • 4.111 mensajes
  • LocationMadrid - España

Escrito 07 abril 2016 - 06:31

Me han pedido que añada un TimeOut a la notificación en el SysTray. Lo he implementado aprovechando que había añadido las respuestas en la anterior versión a NIN_BALLOONSHOW, NIN_BALLOONHIDE, NIN_BALLOONUSERCLICK y NIN_BALLOONTIMEOUT
 
El funcionamiento es diferente si se trata de WinXP que en S.O. superiores.
1.- En WinXP he implementado un Timer cuyo intervalo lo maneja la propiedad BalloonInterval del componente TSysTrayIcon.
2.- Para el resto de SS.OO. La solución me gusta algo menos pues me obliga a cambiar la configuración del S.O. en SPI_SETMESSAGEDURATION. Esto cambia el TimeOut de todas las notificaciones de la sesión. Afortunadamente la pila de notificaciones no admite otra hasta que no termina la primera, eso me permite restaurar el valor que tenía configurado el sistema y ser transparente al usuario. El juego se hace con la API SystemParametersInfo:


delphi
  1. procedure TSysTrayIcon.DoBalloonShow();
  2. var
  3.   Interval: integer;
  4. begin
  5.   FBalloonTimer.Enabled:= true;
  6.   Interval:= BalloonInterval div 1000;
  7.   SystemParametersInfo(SPI_GETMESSAGEDURATION, 0, @SystemNotificationTimeOut, SPIF_SENDCHANGE);
  8.   SystemParametersInfo(SPI_SETMESSAGEDURATION, 0, Pointer(Interval), SPIF_SENDCHANGE);
  9.  
  10.   if @FOnBalloonShow <> nil then FOnBalloonShow(self);
  11. end;
  12.  
  13. procedure TSysTrayIcon.DoBalloonHide;
  14. begin
  15.   FBalloonTimer.Enabled:= false;
  16.   SystemParametersInfo(SPI_SETMESSAGEDURATION, 0, Pointer(SystemNotificationTimeOut), SPIF_SENDCHANGE);
  17.  
  18.   if @FOnBalloonHide <> nil then FOnBalloonHide(self);
  19. end;

En WinXP podríamos colocar cualquier límite al valor de BalloonInterval pero he decidido que sean de 5 segundos a 5 minutos, la razón es por que esos son los límites que impone win8 y win10.

 

Los nuevos enlaces, junto con los antiguos, los dejo en el mensaje inicial del hilo.

 

 

Saludos.


  • 2

#26 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.419 mensajes
  • LocationRepública Dominicana

Escrito 07 abril 2016 - 06:38

Genial amigo :)


  • 0

#27 aguml

aguml

    Newbie

  • Miembros
  • Pip
  • 7 mensajes

Escrito 07 abril 2020 - 12:40

Buenas amigo Escafandra, siento revivir un tema tan antiguo pero he estado muy alejado de este mundillo y estoy desempolvando todo y quiero instalar este componente en Embarcadero C++Builder 2010 y no veo la manera de como hacerlo. ¿podrias ayudarme ahora que estamos confinados? 8o|


  • 0

#28 escafandra

escafandra

    Advanced Member

  • Administrador
  • 4.111 mensajes
  • LocationMadrid - España

Escrito 09 abril 2020 - 10:03

No tengo C++Builder 2010 pero no creo que sea muy distinto a instalarlo en Berlin.

 

He visto algún problema a la hora de compilar en Berlin:

 1. Un Aviso por el uno de StrPLCopy que es obsoleta

 2. Problema de Unicode con TNotifyIconData

 3. Problema al esconder el icono de la Barra de tareas.

 

Todos los problemas están solucionados en la actualización TSysTrayIcon 4 para C++Builder que publico hoy aquí

 

La forma de instalar el componente es similar a otras veces:

Menu->Component->Install Component Se escoge el archivo SysTrayIcon.cpp y elegir un Package Name

 

 

 

Saludos.


  • 0

#29 escafandra

escafandra

    Advanced Member

  • Administrador
  • 4.111 mensajes
  • LocationMadrid - España

Escrito 09 abril 2020 - 01:20

Aprovecho para adaptar el componente para delphi Berlin. Para los que usen delphi y Builder, quizás sea más interesante instalas la versión delphi, que podrá usarse en Builder C++ sin problemas, así se evita la duplicidad del componente, cosa no permitida.

 

La versión delphi podéis encontrarla aquí.

 

Saludos.


  • 1




IP.Board spam blocked by CleanTalk.