Ir al contenido


Foto

[RESUELTO] Hacer parpadear la aplicación en la barra de tareas


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

#1 cadetill

cadetill

    Advanced Member

  • Moderadores
  • PipPipPip
  • 994 mensajes
  • LocationEspaña

Escrito 04 octubre 2010 - 04:43

Buenas,

Según tengo entendido, para hacer parpadear una aplicación en la barra de tareas se necesita hacer uso de la api FlashWindow. Pues bien, soy incapaz de que me funcione en un XP Home (no he probado en otro SO aun).

Lo que he hecho es poner un timer con 500ms y la instrucción



delphi
  1. procedure TMainFrm.tFlashTimer(Sender: TObject);
  2. begin
  3.   FlashWindow(Application.Handle, True);
  4. end;



Alguna sugerencia?

Gracias

Nos leemos

  • 0

#2 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.448 mensajes
  • LocationMéxico

Escrito 04 octubre 2010 - 04:48

Hola

Que no es así



delphi
  1.   FlashWindow(Form1.Handle, True);



Salud OS

  • 0

#3 Delphius

Delphius

    Advanced Member

  • Administrador
  • 6.295 mensajes
  • LocationArgentina

Escrito 04 octubre 2010 - 05:49

Hola,

No conozco esa API, yo tenía entendido que se realiza con la API AnimateWindow^o|

Ejemplo:


delphi
  1. AnimateWindows(Form1.Handle, 500, AW_CENTER);



NOTA: No he probado el code, no tengo Delphi abierto en este momento  :p Ha sido escrito medio al voleo.

Saludos,
  • 0

#4 Delphius

Delphius

    Advanced Member

  • Administrador
  • 6.295 mensajes
  • LocationArgentina

Escrito 04 octubre 2010 - 06:28

Perdón... AnimateWindows no hace eso...  :p

NO es el efecto titilante en la barra.
Lo que tu buscas amigo es algo como el efecto del Messenger, que titila la ventana de conversación cuanto está minimizada.

Umm... déjame pensarlo. Estaba seguro de que esto se conseguía con AnimateWindows.

Por otro lado FlashWindows lo que hace es "titilar" la ventana una sola vez. Se ve un efecto de cambio en la barra de título... cambia a como si pasara a segundo plano y volviera a estar al frente.
Su uso es como menciona Eliseo.

Saludos,
  • 0

#5 Delphius

Delphius

    Advanced Member

  • Administrador
  • 6.295 mensajes
  • LocationArgentina

Escrito 04 octubre 2010 - 07:49

Pues después de hacer una búsqueda llegué a que el código de Cadetill debería funcionar.

Así es como funciona:



delphi
  1. FlashWindow(Application.Handle, true);



Se debe hacer uso de un timer si se desea que sea ininterrumpido.
Según la MSDN funciona en Windows 2000 en adelante. Lo que quizá tenga que ver es si está habilitada la opción de efectos visuales, o "temas" para ser exacto. Quizá pase por allí la cosa.

Saludos,
  • 0

#6 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.448 mensajes
  • LocationMéxico

Escrito 04 octubre 2010 - 08:33

Bueno, ejecuté ambos códigos en diferentes SO's

Windows XP

Application.Handle nada se movió
Form1.Handle se veía el parpadeo en la barra de Herramientas

Windows Vista

Application.Handle se veía el parpadeo en la barra de Herramientas
Form1.Handle se veía el parpadeo en la forma pero no en la barra de herramientas

Salud OS

  • 0

#7 Delphius

Delphius

    Advanced Member

  • Administrador
  • 6.295 mensajes
  • LocationArgentina

Escrito 04 octubre 2010 - 08:43

Ummm  ^o| ... Pues podría jurar a que en XP funciona... La imagen no miente amigo.
¿Tendrá que ver que uso la versión Profesional y temas habilitados?  ^o|

Saludos,

PD: Perdón por el bmp y el tamañote... es la fatiga de no pasarla a png y hacerla más chica.  :p

Archivos adjuntos


  • 0

#8 Caral

Caral

    Advanced Member

  • Moderador
  • PipPipPip
  • 4.266 mensajes
  • LocationCosta Rica

Escrito 04 octubre 2010 - 08:49

Hola
No sabia que usabas delphi 6 como yo  (y)
Como me gusta...... :D
Saludos
PD: Ahora seguid, que estoy aprendiendo. (y) (b)
  • 0

#9 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.448 mensajes
  • LocationMéxico

Escrito 04 octubre 2010 - 09:01

Pruebas

Windows Vista, Turbo Delphi 2006

Salud OS

Archivos adjuntos


  • 0

#10 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.448 mensajes
  • LocationMéxico

Escrito 04 octubre 2010 - 09:02

Pruebas

Windows Vista, Delphi XE

Salud OS

Archivos adjuntos


  • 0

#11 Delphius

Delphius

    Advanced Member

  • Administrador
  • 6.295 mensajes
  • LocationArgentina

Escrito 04 octubre 2010 - 09:17

¡Sopas!  :|
Si que está raro esto...

En uno te titila con el ApplicationHandle y en otro con el Form1.Handle. O yo vi cualquier cosa...

A me titila con el Application. Con Form1 no hace eso, sino que titila la ventana alternando entre con-foco, sin-foco.
En cambio con Application hace dichosamente el efecto.

Prueba en ambos SO de esta manera:



delphi
  1. FlashWindow(Form1.Handle; true);
  2. FlashWindow(Application.Handle; true);



Es decir con ambas instrucciones. Con ello se debería obligar a forzar a animar de ambas maneras... a ver que resulta. Se que puede parecer chapuza... pero en una de esas...

Saludos,
  • 0

#12 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.448 mensajes
  • LocationMéxico

Escrito 04 octubre 2010 - 09:23

A mi me parece que esto tiene que ver con la propiedad del VCL, TApplication.MainFormOnTaskbar que salió a partir de Delphi 2007.

Salud OS
  • 0

#13 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.448 mensajes
  • LocationMéxico

Escrito 04 octubre 2010 - 09:26

Pues si, ese es el punto

The new VCL property TApplication.MainFormOnTaskbar in Delphi 2007
marzo 27 2007 6:06a.m.

In Delphi 2007, one of the changes we made in VCL was to provide better support for Window Vista, particularly in relation to window animations which occur when your application is minimized, restored or closed. Nathanial Woolls has a good write-up on some of the related issues.


Enlace

Salud OS
  • 0

#14 Delphius

Delphius

    Advanced Member

  • Administrador
  • 6.295 mensajes
  • LocationArgentina

Escrito 04 octubre 2010 - 09:33

Vaya... lo que te puede llevar a ocasionar una simple propiedad.

Y yo que ya estaba lanzando algunas palabrotas a los de Mocosoft. Ufa... me cortaste la alegría de darles en donde no les da el sol.  :D

Aunque... después de todo... según el artículo parte de la culpa es del Vista... así que ... ******

Saludos,
PD: Yo creería que esa propiedad se implementó en D7
  • 0

#15 cadetill

cadetill

    Advanced Member

  • Moderadores
  • PipPipPip
  • 994 mensajes
  • LocationEspaña

Escrito 04 octubre 2010 - 11:23

Buenas,

Pues sí que ha dado de sí el tema :D

Conocía la propiedad (por haberla visto en el código, no por nada más) pero la verdad es que no me había parado nunca a ver qué hacía :p

Hoy haré alguna prueba y ya os comento el resultado en un XP Home ;)

Muchas gracias

  • 0

#16 escafandra

escafandra

    Advanced Member

  • Administrador
  • 4.107 mensajes
  • LocationMadrid - España

Escrito 05 octubre 2010 - 12:21

Quizás el problema está en localizar bien la ventana de la aplicación. La pruebas que he hecho funcionan con Application.Handle.
Form1.Handle hace parpadear la barra caption.

Puede ser interesante probar algo así:



delphi
  1. var
  2.   HW: THandle;
  3. begin
  4.   HW:= FindWindow('TApplication', PCHAR(Application.Title));
  5.   FlashWindow(HW, true);
  6. end;



Saludos.
  • 0

#17 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.448 mensajes
  • LocationMéxico

Escrito 05 octubre 2010 - 07:44

Pues no, tampoco funciona con IDE's que utilizan la propiedad Application.MainFormOnTaskbar.

Por omisión se agrega la propiedad con valor = true, hacemos un pequeño cambio



delphi
  1.   Application.MainFormOnTaskbar := False;



Bingo!!!!, ya funciona el Aplication.Handle

Salud OS

  • 0

#18 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.448 mensajes
  • LocationMéxico

Escrito 05 octubre 2010 - 07:49

De la ayuda de Delphi

The MainFormOnTaskBar property controls how Windows taskbar buttons are handled by VCL.

If the property is true, a taskbar button represents the application's main form and displays its caption. If false, a taskbar button represents the application's (hidden) main window and bears the application's Title.


Enlace

Salud OS
  • 0

#19 cadetill

cadetill

    Advanced Member

  • Moderadores
  • PipPipPip
  • 994 mensajes
  • LocationEspaña

Escrito 05 octubre 2010 - 09:00

Buenas,

Bueno, he realizado pruebas con lo que me habéis comentado todos. El resultado es el siguiente.

Como bien dice el amigo egostar, el culpable de todo es la propiedad MainFormOnTaskBar. Si esta propiedad está en true (valor por defecto), lo que se visualiza en la barra de tareas es el form principal (y su caption), con lo que si queremos ese comportamiento tendremos que usar el FlashWindow con el handle del form. En cambio, si lo que queremos es que nos salga el título de la aplicación, deberemos poner en false dicha propiedad y entonces usar el handle de la aplicación.

Es decir:
FlashWindow(Application.Handle, True);
funciona con
Application.MainFormOnTaskBar := False;

y

FlashWindow(Form1.Handle, True);
funciona con
Application.MainFormOnTaskBar := True;

Con esta segunda opción, también hacemos parpadear la barra de título de la ventana principal. Como el efecto ya me gusta, es la que he escogido.

Pues gracias a todos

Nos leemos

PD: la solución del amigo escafandra tiene el mismo comportamiento que usar el handle de la aplicación.

  • 0

#20 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.448 mensajes
  • LocationMéxico

Escrito 05 octubre 2010 - 09:08

Pues ya podemos colocar este hilo como resuelto :)

Salud OS
  • 0




IP.Board spam blocked by CleanTalk.