Club Builder - Foros de discusión Club Builder
Foro de C++Builder en español
 
 FAQFAQ   BuscarBuscar   MiembrosMiembros   Grupos de UsuariosGrupos de Usuarios   RegistrarseRegistrarse 
 PerfilPerfil   Entra para ver tus mensajes privadosEntra para ver tus mensajes privados   EntrarEntrar 

Evitar Guardar en cola otros Eventos

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Consultas
Ver tema anterior :: Ver tema siguiente  
Autor Mensaje
Mensaje    Asunto: Evitar Guardar en cola otros Eventos Responder citando

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
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

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
Ver perfil de usuario Enviar mensaje privado MSN Messenger
Mensaje    Asunto: Responder citando

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
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

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
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

Código:

void __fastcall TForm1::AppMessage(MSG& Msg, bool& Handled)
{
     if (WM_LBUTTONDOWN == Msg.message && Flag)
        Handled = true;
}
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

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
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

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
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

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
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

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
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

Asi Perfecto, era el doble click

Gracias
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mostrar mensajes de anteriores:   
Cambiar a:  
No puedes publicar temas nuevos en este foro
No puedes responder a temas en este foro
No puedes editar tus mensajes en este foro
No puedes borrar tus mensajes en este foro
No puedes votar en las encuestas de este foro


Hosting WordPress Indedmedia desde 3,99 €
© 2002–2026 Club Builder · Funciona con phpBB.