FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
||||
|
||||
MouseDown en DbGrid no funciona como espero
Buenos días gente del foro,
estoy haciendo un programa y me encuentro conque necesito lanzar un código al hacer MouseDown en un DBGrid pero, ponga lo que ponga, no hace nada a no ser que pulse sobre la barra de titulos del DBGrid o en el espacio, a la derecha, dentro de la grilla, que ya no contiene datos de la tabla (la parte que se queda en blando a partir de la última columna de datos de la grilla), no se porque ocurre esto o si hay alguna forma de decirle al DBGrid que actue el MouseDown en cualquier lugar que se pulse. Espero haberme explicado con suficiente claridad y también que puedan ayudarme con este tema. Gracias y saludos. |
#2
|
||||
|
||||
Me ha parecido entender que sólo funciona cuando has pinchado en el dbgrid, ocurre porque si el dbgrid no tiene el foco entonces no te hará caso, evidentemente, y estará recogiéndolo el evento del form. Para ello puedes poner en el evento del form que le dé el foco al dbgrid cuando detecte el "mousedonw" del ratón.
|
#3
|
||||
|
||||
Vaya, nunca había notado esto, sí que es raro. Responde al MouseUp pero no al MouseDown.
// Saludos |
#4
|
||||
|
||||
Ghost in the Machine
__________________
Dulce Regalo que Satanas manda para mi..... |
#5
|
||||
|
||||
Revisando el código de la VCL veo que es el comportamiento por diseño. El método MouseDown de TCustomDBGrid sólo llama al método heredado de TCustomGrid en los casos señalados.
Tendrías que redefiir el método MouseDown para poder acceder al evento. // Saludos |
#6
|
||||
|
||||
Gracias a todos por sus respuestas,
de momento voy a probar con la solución que propone Casimiro y a ver que pasa. Les mantengo informados, Gracias de nuevo. Saludos |
#7
|
||||
|
||||
Eso no va a servir, porque quien recibe el evento no es el formulario. No es una cuestión de foco, un MouseDown debe, por si sólo, poner el foco en el control. El punto, como dije, es que, el evento MouseDown del TCustomDBGrid nunca llama al método heredado y, por ende, nunca se llama al evento del usuario.
// Saludos |
#8
|
||||
|
||||
Hola otra vez,
efectivamente roman tiene razón, esa solución que proponía Casimiro me ha dejado igual que estaba, no me lanza el código que quería, me gustaría probar con tu solución roman pero en cuanto a redifinir metodos me temo que estoy más verde que la almendra en Junio. Si te encuentras con animo de echarme una mano te lo agradecería. Saludos. |
#9
|
||||
|
||||
quien tiene boca, se equivoca
|
#10
|
||||
|
||||
No pasa nada, más que me equivoco yo seguro que no te equivocas tú, por lo menos veo que el DBGrid viene así de serie, quería comentarles que yo tenía un Grid de terceros que se llama SMDBGrid que si que actua bien en el evento MouseDown pero que lo descarté porque, a diferencia del DBGrid normal, no me dejaba seleccionar una parte de un campo de la línea de un registro, por ejemplo, el cliente se llama "pepito el de los palotes" y el dbgrid me deja seleccinar solo "palote" y luego podía hacer un filtro y que me pusiera todos los clientes "Palote" , por lo que volví al DBGrid.
Saludos. |
#11
|
||||
|
||||
Cita:
Si me he equivocado, roman nos va a corregir . Saluditos
__________________
Disfruten cada minuto de su vida a lado de sus seres queridos como si fuese el ultimo, uno nunca sabe lo que puede pasar. |
#12
|
||||
|
||||
¡Ah! Pero ¿qué fama me hacen!
Claro que no te voy a corregir, lo que has puesto es perfecto // Saludos |
#13
|
||||
|
||||
Hola, a alguno le suena este mensaje "Failed to load resources from resources file please check your setup" y que luego se te cierre el delphi sin despedirse ni nada.
Saludos. |
#14
|
||||
|
||||
Lo raro que me suena es que el evento dispare tu código solo cuando no está sobre la rejilla de datos. La rejilla de datos no es un control, de hecho no es nada más que un lienzo donde se dibujan los datos. Las cabeceras de columnas y las partes en blanco también son parte del mismo lienzo.
|
#15
|
||||
|
||||
Bueno, el error que os ponía antes me lo daba si empezaba a escribir el código que me indicaba Caro a mano, pero si lo copio y pego no me dice nada, sin embargo al compilar no me deja por que me dice que "Method MouseDown not found in base class"
No se que puede estar pasando. Saludos. |
#16
|
||||
|
||||
Cita:
// Saludos |
#17
|
||||
|
||||
Hola, ahora no se muy bien lo que he hecho pero me aparece lo siguiente al compilar: Unsatisfied forward or external declaration:'TDBGrid.MouseDown'.
Voy a preguntar, aunque seguro que ahora me decis: "Pues claro que es por eso, lo tienes que quitar, como no nos lo has dicho antes". Tenía puesto de un código anterior justo encima del TForm1 = class(TForm) la siguiente línea. THackGrid = class(TDBGrid); es de un código que saqué del club para hacer lo siguiente: ¿es posible que este código que os muestro esté creando conflicto con el nuevo código que me proponía Caro para el tema del MouseDown? Es que si no es por eso no se porque no me funciona la solución propuesta. Saludos. |
#18
|
||||
|
||||
Cita:
|
#19
|
||||
|
||||
Cita:
O sea, que a nivel de TControl, es que se llama al evento definido por el usuario. Ahora, si pones un punto de ruptura en el código de TCustomDBGrid.MouseDown, notarás que, no importa donde coloques el cursor del ratón sobr el DBGrid, la ejecución se detiene, indicando que el control recibió el evento. Sin emabargo, si sigues examinando el código, verás que las llamadas a
están bajo algunos condicionales, a diferencia de MouseUp, donde la llamada a
ocurre sin ninguna condición. Al no llamarse al MouseDown de TControl, nunca se llama al evento definidio por el usuario. Y de ahí el comportamiento que describe ElDioni. // Saludos |
#20
|
||||
|
||||
Bueno, ya he conseguido hacer que funcionara el asunto, ahora corregirme si me equivoco, al poner este código que me ha facilitado Caro, en todos los DbGrids que tengo declarados salta el código que he introducido al hacer el MouseDown, si lo que quiero es que solo afecte a un DbGrid en concreto debería declararlo como TDBGridMio = class(DBGrids.TDBGrid) en lugar de TDBGrid = class(DBGrids.TDBGrid) y declarar mi DBGrid como DBGridOrdenes: TDBGridMio; para que no afecte a los otros DbGrids.
¿es así?. Saludos |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Duda con con el evento MouseDown | NEG1414 | C++ Builder | 3 | 05-10-2008 15:00:40 |
Espero me ayuden | BaRdO | JAVA | 0 | 23-08-2007 04:46:31 |
autorefresh no funciona en query y dbgrid | ilichhernandez | Conexión con bases de datos | 6 | 08-11-2005 19:32:00 |
Espero no lleguemos a esto :s | __cadetill | Humor | 7 | 21-11-2003 11:03:19 |
|