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 

Evento para todos los componentes visibles

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Consultas
Ver tema anterior :: Ver tema siguiente  
Autor Mensaje
Mensaje    Asunto: Evento para todos los componentes visibles Responder citando

Hola amigos,

Quería haceros una consulta sobre algo que estoy haciendo y estoy viendo que si lo hago normal me va a dar mucho trabajo.

La idea es que a todos los componentes visibles, ya sea un Edit, Label o cualquier otro que sea pulsando sobre ellos una combinación de teclas vayan al mismo evento.

Ejemplo:

Pongo el ratón encima de un Label y pulsando "Control+Click" me abre un evento, la historia es como podría hacerlo para todos los controles de la aplicación sin tener que ir uno por uno abriendo el codigo del evento en cuestion.

Hay algo generico que todos los compontes vayan a el sin tener que programar uno a uno?

Un abrazo

Carlos
_________________
Carlos J. Fernandez
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email
Mensaje    Asunto: Responder citando

Añade un componente TApplicationEvents (pestaña: "Additional"), y en su evento OnMessage lo siguiente:

Código:
    if (Msg.message == WM_LBUTTONUP && (GetKeyState(VK_CONTROL) & 0x80))
    {
        ReleaseCapture();
        Handled = true;
        // Aquí puedes llamar a tu evento, o bien ejecutar el código..
        TControl* c = ControlAtPos(ScreenToClient(Msg.pt), false, true);
        Caption = c ? c->Name : String("<?>");
    }

Lo que hace es que al pulsar Control+Click pone el nombre del control en el título de la ventana. ¿Supongo que es algo así lo que quieres?
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

Leo,

Muchas gracias,

Eres un crack

Carlos
_________________
Carlos J. Fernandez
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email
Mensaje    Asunto: Responder citando

Leo,

Un problemilla,

Tengo un TPageControl y dentro de el un DBGrid, cuando hago el click en el DBGrid y consulto que tipo de clase es con:

c->ClassName();

Me dice que es un un TPageControl, el contenedor del DBGrid.

Como puedo saber que realmente el click lo hago en el DBGrid y no en el TPageControl?

Un abrazo.

Carlos
_________________
Carlos J. Fernandez
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email
Mensaje    Asunto: Responder citando

Carlos J. Fernandez escribió:
Tengo un TPageControl y dentro de el un DBGrid, cuando hago el click en el DBGrid y consulto que tipo de clase es con:

c->ClassName();

Me dice que es un un TPageControl, el contenedor del DBGrid.

Como puedo saber que realmente el click lo hago en el DBGrid y no en el TPageControl?

Prueba esta versión, debería funcionar con contenedores anidados.

Añadimos la siguiente función:
Código:
TControl* CustomFindControl(MSG& Msg)
{
    TControl* c = FindControl(Msg.hwnd);
    if (c)
    {
        TPoint pt = c->ScreenToClient(Msg.pt);
        TControl* c2 = static_cast<TWinControl*>(c)->ControlAtPos(pt, false);
        if (c2)
            c = c2;
    }
    return c != Screen->ActiveForm ? c : NULL;
}

Y en el evento OnMessage del TApplicationEvents cambiamos al siguiente código:
Código:
    if (Msg.message == WM_LBUTTONUP && GetKeyState(VK_CONTROL) < 0)
    {
        ReleaseCapture();
        Handled = true;
        // Aquí puedes llamar a tu evento, o bien ejecutar el código..
        TControl* c = CustomFindControl(Msg);
        Caption = c ? c->Name : String("<?>");
    }
    else if (Msg.message == WM_LBUTTONDOWN && GetKeyState(VK_CONTROL) < 0)
        Handled = true;
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

Leo,

Va perfecto,

Muchas gracias amigo.

Carlos
_________________
Carlos J. Fernandez
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email
Mensaje    Asunto: Responder citando

Leo,

Perdona que te moleste en una cosita más.

Estoy intentando aplicar a este código lo siguiente:

La idea es que cada vez que se dispare el evento "BeforePost" de por ejemplo cualquier componente de tipo TADOQuery por ejemplo ejecute un código.

En este caso la idea es que cada vez que haya una modificación de un registro me almacene en un campo DateTime la fecha y la hora para saber cuando se modifico por ultima vez.

Ahora mismo meto el mismo código tabla a tabla y pensaba si hay una manera de hacerlo para todas de una vez, al igual que el código anterior.

Un abrazo.

Carlos
_________________
Carlos J. Fernandez
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email
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.