Ver Mensaje Individual
  #4  
Antiguo 24-02-2008
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Reputación: 27
jachguate Va por buen camino
Para ir un poco mas abajo....

Windows se comunica con las aplicaciones enviándo "mensajes" a cada una. De esta manera, cuándo ocurre algún movimiento del mouse, o se presiona una tecla en el teclado, windows determina las aplicaciones "interesadas" en dicho suceso (por ejemplo, la que tiene el foco es la que recibe los mensajes del teclado) y le envía un mensaje, por decir algo:
  • se ha presionado la tecla "k"
  • se ha dejado de presionar la tecla "k"
  • se ha movido el ratón a la posición 25, 14
  • se ha presionado el botón derecho del ratón
  • se ha dejado de presionar el botón derecho del ratón
  • debes dibujar nuevamente el área que está en tu ventana principal entre las coordenadas 10,5 y 150,80
  • etc.

Todas las aplicaciones windows deben registrar una rutina que procesará los mensajes, que es básicamente un ciclo que está leyendo contínuamente la cola de mensajes.

Todo esto lo hace la vcl de delphi por nosotros...

Dado que una aplicación delphi se ejecuta por defecto en un solo hilo, la "magia" se pierde cuándo haces un ciclo que demora un poco, o mucho... pues tu aplicación deja de responder a los mensajes del sistema.

Esto no solo tiene el inconveniente de dejar "congelada" la interfaz de usuario, sino que el propio windows detecta que "la aplicación no responde", lo que pone nerviosos a algunos usuarios.

Una llamada a Application.ProcessMessages, como ya te han dicho, alivia esta situación, pero tiene a su vez sus inconvenientes, y vale la pena estar consciente de ellos:

Por ejemplo, si normalmente haces un proceso con un botón, en su evento OnClick, que recorre los registros de una base de datos para realizar cierta operación, al añadir una llamada a ProcessMessages, le dará la oportunidad al usuario de hacer Clic nuevamente en el botón mientras el proceso está ejecutándose, lanzará nuevamente el proceso, y eso no siempre es deseable.

Otra cosa indeseable, por ejemplo, es que el usuario puede cerrar la ventana a medio procesar.

Son cosas que no son ni buenas ni malas por si solas... pero que hay que considerar y que depende de vos y tu habilidad para detectarlas y enfrentarlas el lograr un sistema robusto.

Hasta luego.

__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate
Responder Con Cita