| Ver tema anterior :: Ver tema siguiente |
| Autor |
Mensaje |
neg1414 Master

Registrado: 31 Ene 2007Mensajes: 284
|
Publicado: Lun 07 Feb, 2011 6:10 pm Asunto: Evitar Guardar en cola otros Eventos |
|
|
Buenas Otra Vez...
Mi pegunta es la siguiente..
¿Si dentro del evento click de un Componente (por ejemplo un chekbox1) implemento una serie de operaciones a realizar cuando accedo a el...como puedo evitar que mientras se esten rejecutando dichas operaciones, al accionar otros checkbox2 me guarde esta accion en cola y la ejecute a continuacion de salir del evento Click del checkBox1).?
Espero haberme explicado Bien...
Gracias |
|
| Volver arriba |
|
 |
Tor Master


Registrado: 22 Mar 2005Mensajes: 269Ubicación: obera, misiones, argentina
|
Publicado: Mar 08 Feb, 2011 10:45 am Asunto: |
|
|
Hola neg1414, lo que puedes hacer es dentro de ese evento antes de comenzar con las operaciones, deshabilites los controles o formularios que necesites y luego de terminar lo vuelves a habilitar, en algunos casos si la operaciones puede tomar un tiempo considerable se coloca un ProgressBar.
saludos. _________________ Un experto es aquel que ya ha cometido todos los errores posibles en una materia muy concreta.
(Niels Bohr) |
|
| Volver arriba |
|
 |
neg1414 Master

Registrado: 31 Ene 2007Mensajes: 284
|
Publicado: Mie 09 Feb, 2011 8:05 am Asunto: |
|
|
Gracias por Contestar.....
T u solucion es factible pero me interesaria mas por las caracteristicas de mi programa evitar que el raton estuviera activo ( si fuera solamente el click mejor ) mientras se realizan las operaciones en en el evento.
Es posible...
Gracias. |
|
| Volver arriba |
|
 |
neg1414 Master

Registrado: 31 Ene 2007Mensajes: 284
|
Publicado: Jue 10 Feb, 2011 1:18 pm Asunto: |
|
|
Buscando en este foro he encontrado (Gracias a Leo) la manera de interceptar el mensage cuando se pulsa el boton izquierdo del raton, y usando un Flag que me indica (a true) si se estan realizando las operaciones incluidas en el evento click del componente chekbox1 el programa anularia o no el mensage.
En el Constructor Añado
| Código: |
Application->OnMenssage = AppMessage;
|
y intercepto el mansaje
| Código: |
Void __fastcall AppMessage(MSG &Msg)
Void __fastcall TForm1::AppMessage(MSG &Msg)
{
if(WM_LBUTTONDOWN == Msg.message && Flag)
{
}
} |
Lo que no se Hacer una vez interceptado el mensaje es anularlo , (anular el click del raton)
Como se hace..Gracias |
|
| Volver arriba |
|
 |
_Leo Site Admin

Registrado: 11 Ago 2002Mensajes: 1875Ubicación: Lanzarote - Islas Canarias (España)
|
Publicado: Jue 10 Feb, 2011 1:22 pm Asunto: |
|
|
| Código: |
void __fastcall TForm1::AppMessage(MSG& Msg, bool& Handled)
{
if (WM_LBUTTONDOWN == Msg.message && Flag)
Handled = true;
}
|
|
|
| Volver arriba |
|
 |
neg1414 Master

Registrado: 31 Ene 2007Mensajes: 284
|
Publicado: Jue 10 Feb, 2011 4:18 pm Asunto: |
|
|
Gracias por contestar Leo, Pero.... Todo mi gozo en un pozo, He comprobado que mientras se ejecutan las operaciones en el envento Click del checkbox1, si pulso el boton izquierdo del raton sobre otro CheckBox2,no se produce el mensaje por lo que supongo que guarda el mensaje en un Buffer (como el Buffer del teclado),
Hay alguna posibilidad de anular ese Buffer para que cuando termine de realizar las operaciones del Evento Click del Checkbox1 no realize las del evento Click del CheckBox2 que estan esperando en cola.
Gracias Otra Vez. |
|
| Volver arriba |
|
 |
_Leo Site Admin

Registrado: 11 Ago 2002Mensajes: 1875Ubicación: Lanzarote - Islas Canarias (España)
|
Publicado: Jue 10 Feb, 2011 5:00 pm Asunto: |
|
|
Recuerda si dentro del evento del CheckBox estas ejecutando un bucle de añadir algún:
Application->ProcessMessages();
Ya que sino la cola de mensajes no se procesara hasta que termine, y entonces "AppMessage" no descartara los eventos según se producen que es lo que queremos. |
|
| Volver arriba |
|
 |
neg1414 Master

Registrado: 31 Ene 2007Mensajes: 284
|
Publicado: Vie 11 Feb, 2011 11:46 am Asunto: |
|
|
Gracias por Contestar...
Efectivamente entre las operaciones implementadas en el evento click del CheckBox1 tengo un bucle muy largo (tarda unos 7 minutos en terminar), con una barra de Progreso "adjunta", ademas cambio el icono del raton a "reloj"....
He probado a poner
| Código: | Application->ProcessMessages(); |
dentro del bucle, y mientras se ejecutaba (durante esos 7 minutos ) e hecho varios click con el boton izquierdo del raton sobre otros checkBox (que por cierto tambien contienen las mismas operaciones en sus eventos click).. y aparte de volverme el icono del raton a "Default" hay algun click que si lo ejecuta (creo que va en funcion de la rapidez con que "clikeo")...
Se puede Evitar que esos clicks tengan efecto
Gracias |
|
| Volver arriba |
|
 |
_Leo Site Admin

Registrado: 11 Ago 2002Mensajes: 1875Ubicación: Lanzarote - Islas Canarias (España)
|
Publicado: Vie 11 Feb, 2011 1:08 pm Asunto: |
|
|
| neg1414 escribió: | | creo que va en funcion de la rapidez con que "clikeo" |
Quizás son los doble-clicks, probemos cambiando el código de AppMessage:
| Código: | void __fastcall TForm1::AppMessage(MSG& Msg, bool& Handled)
{
if (Flag && (WM_LBUTTONDBLCLK == Msg.message || WM_LBUTTONDOWN == Msg.message))
Handled = true;
} |
Yo creo que lo más sencillo es lo que te han dicho más arriba, si no quieres más entradas en un control deshabilítalo, si no quieres ninguna entrada en toda la ventana deshabilita la ventana. Es lo más típico en estos casos. |
|
| Volver arriba |
|
 |
neg1414 Master

Registrado: 31 Ene 2007Mensajes: 284
|
Publicado: Sab 12 Feb, 2011 10:37 am Asunto: |
|
|
Asi Perfecto, era el doble click
Gracias |
|
| Volver arriba |
|
 |
|