| Ver tema anterior :: Ver tema siguiente |
| Autor |
Mensaje |
Carlos J. Fernandez Master


Registrado: 27 Oct 2004Mensajes: 574
|
Publicado: Jue 11 Jul, 2013 5:40 pm Asunto: Evento para todos los componentes visibles |
|
|
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 |
|
 |
_Leo Site Admin

Registrado: 11 Ago 2002Mensajes: 1875Ubicación: Lanzarote - Islas Canarias (España)
|
Publicado: Sab 13 Jul, 2013 10:57 pm Asunto: |
|
|
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 |
|
 |
Carlos J. Fernandez Master


Registrado: 27 Oct 2004Mensajes: 574
|
Publicado: Lun 15 Jul, 2013 11:20 am Asunto: |
|
|
Leo,
Muchas gracias,
Eres un crack
Carlos _________________ Carlos J. Fernandez |
|
| Volver arriba |
|
 |
Carlos J. Fernandez Master


Registrado: 27 Oct 2004Mensajes: 574
|
Publicado: Lun 15 Jul, 2013 1:23 pm Asunto: |
|
|
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 |
|
 |
_Leo Site Admin

Registrado: 11 Ago 2002Mensajes: 1875Ubicación: Lanzarote - Islas Canarias (España)
|
Publicado: Lun 15 Jul, 2013 7:19 pm Asunto: |
|
|
| 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 |
|
 |
Carlos J. Fernandez Master


Registrado: 27 Oct 2004Mensajes: 574
|
Publicado: Mar 16 Jul, 2013 11:33 am Asunto: |
|
|
Leo,
Va perfecto,
Muchas gracias amigo.
Carlos _________________ Carlos J. Fernandez |
|
| Volver arriba |
|
 |
Carlos J. Fernandez Master


Registrado: 27 Oct 2004Mensajes: 574
|
Publicado: Mie 18 Sep, 2013 5:21 pm Asunto: |
|
|
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 |
|
 |
|