Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > API de Windows
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 24-02-2008
Stevenmn Stevenmn is offline
Miembro
 
Registrado: may 2007
Posts: 13
Poder: 0
Stevenmn Va por buen camino
Application.ProcessMessages;

Buenas necestio saber que hace esto: Application.ProcessMessages;

cual es la funcion de eso ?
Procesar los mensajes, pero como asi....

Ademas necesti saber que hace para tratar de hacer eso mismo en c o c++, si alguien tambien sabe el equivalente de Application.ProcessMessages; de delphi en c o c++ le agradeceria lo posteara.
Responder Con Cita
  #2  
Antiguo 24-02-2008
Avatar de ArdiIIa
[ArdiIIa] ArdiIIa is offline
Miembro Premium
 
Registrado: nov 2003
Ubicación: Valencia city
Posts: 1.481
Poder: 22
ArdiIIa Va por buen camino
Te propongo un sencillo ejercicio:

Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
Var I : integer;
begin
I := 0;
while i < 100 Do
Begin
Edit1.Text := IntToStr(I);
inc(i);
sleep(20);
//Application.ProcessMessages;
End;

Prueba a ejecutar ese código con y sin comentar la línea //Application.ProcessMessages;

Trata de mover tu ventana cuando se está ejecutando el código, tanto de un modo u otro.


Como observarás, cuando comentas la línea, tu ventana queda "colapsado" de tal modo que hasta que no finalice el bucle, no hará otra cosa. Sin embargo, si el programa (procesa los mensajes), hace tanto lo que está dentro del bucle como cualquier otra operación requerida por el programa.

Tradicionalmente Windows siempre ha trabajado procesando grandes colas de mensajes. Cada programa windows, envía y recibe en varios mensajes o eventos para realizar cualquier operación. y estos mensajes son los que en este caso hacemos que se actualicen o nó.

En C supongo que el planteamiento es hacer un bucle que controle las operaciones y mensajes que procesa el programa, por ejemplo:

Pinta la ventana
Pregunta si se ha pulsado una tecla
etc....

Las funciones asimilables para este proceso además de un bucle serían

Código Delphi [-]
        TranslateMessage
        DispatchMessage
Mas o menos es como lo entiendo yo...
__________________
Un poco de tu generosidad puede salvar la vida a un niño. ASÍ DE SENCILLO
Responder Con Cita
  #3  
Antiguo 24-02-2008
Stevenmn Stevenmn is offline
Miembro
 
Registrado: may 2007
Posts: 13
Poder: 0
Stevenmn Va por buen camino
Muchas gracias..
Responder Con Cita
  #4  
Antiguo 24-02-2008
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 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
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Tthread Vs. Application -> ProcessMessages(); Peterman Varios 8 31-05-2007 04:05:03
Application.ProcessMessages y Application.HandleMessages molinero1 Varios 13 09-05-2007 15:53:29
Problema con Application.ProcessMessages Coco API de Windows 0 25-02-2005 16:28:44
No funciona Application.ProcessMessages Sr_Sombrero Varios 0 24-01-2005 23:21:01
Web Application LILYBEL Internet 3 21-10-2004 16:18:10


La franja horaria es GMT +2. Ahora son las 15:10:01.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi