FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Buscar | Temas de Hoy | Marcar Foros Como Leídos |
|
Herramientas | Buscar en Tema | Desplegado |
|
#1
|
|||
|
|||
Cancelar ShortCut en un TButton
Hola,
Tengo un problema con las shortcuts en los botones, en un formulario tengo un TButton con una ShortCut, y un StringGrid, en el evento del KeyPress o KeyDown del grid tengo código para buscar el texto que voy pulsando. El problema es que si pulso la tecla del ShortCut del Boton (aunque no tenga pulsado el Alt) se ejecuta, y precisamente eso es lo que quiero evitar, ya que el botón lo que hace es limpiar el grid. No he encontrado la forma de evitar que se ejecute el código del botón sin tocar su código, ya que esto es lo que quiero evitar. Gracias por adelantado |
#2
|
||||
|
||||
Normalmente en las teclas de acceso rápido se usan combinaciones compuestas de ALT o CTRL para evitar esos comportamientos.
¿Qué combinación de teclas tienes asignada al botón? ¿Y qué código tienes programado en los eventos?
__________________
Germán Estévez => Web/Blog Guía de estilo, Guía alternativa Utiliza TAG's en tus mensajes. Contactar con el Clubdelphi P.D: Más tiempo dedicado a la pregunta=Mejores respuestas. |
#3
|
||||
|
||||
El ShortCut del botón esta dado por la letra que sigue al simbolo & que esta en la propiedad Caption del botón. Simplemente elimina el &.
__________________
[Crandel] |
#4
|
||||
|
||||
Cita:
// Saludos |
#5
|
|||
|
|||
Cita:
Como dice Roman esto sería muy drástico. Crandel, lo que sugieres me resultaría muy costoso, el control no es un stringgrid (es un grid derivado del TCustomGrid, aunque el stringgrid se comporta igual), y ese componente lo uso en, no se, quizá 200 pantallas del programa (y todos o casi todos los botaones tienen una tecla de acceso rápido). Lo que ocurre es que los usuarios han solicitado esta funcionalidad, ya que para buscar alguna fila en el grid así es mucho más cómodo que buscarla con los cursores o ratón (y tienen razón), y al tocar el componente, me he dado cuenta que ocurría esto. Por esa razón no quiero tocar el código del programa para solucionar este problema, lo quisiera hacer desde el código del componente. He probado a asignar a la variable por referencia "Char" (creo que se llama así) un valor 0, pero da igual, se ejecuta el código del botón. Si se os ocurre algo ya me contaréis, de todas formas gracias por vuestra atención, y yo seguiré investigando, a ver si descubro algo. Un saludo |
#6
|
|||
|
|||
¿Solución encontrada?
Hola a todos,
Creo que he encontardo una solución, aunque seguramente no sea la mejor, ya que lo he hecho por medio de hooks. Lo que hago es crear un hook de teclado, para capturar las teclas pulsadas. Os explico con el código: Variables que me hacen falta, yo las he puesto globales en la unidad
En la parte del Create del componente:
En el destroy del componente:
y la función KbdHook:
Y eso es todo, seguramente el código se puede mejorar (por ejemplo solo crear un Hook independientemente de los controles que haya), pero es un primer intento. Por mi parte nada más, sólo que si tenéis alguna sugerencia, duda o comentario aquí estoy. Un saludo, Kiko |
#7
|
|||
|
|||
Hola Neftali,
siento no haber contestado antes he estado de puente y he llegado ahora no tengo nada especial puesto en el código, lo puedes probar tú, pon un stringgrid, y en el código del keypress le dices que si pulsas la b le dices que muestre un mensaje, y pon tambien un botón con caption &button1 (tecla de acceso rapido b) y en el código del onclick que te muestre otro mensaje. Al seleccionar el grid y pulsar la b, te muestra los dos mensajes. El tema que no debe ser por el grid, ya que si el foco está en otro botón (en realidad creo que pasa con cualquier control que no sea editable) también ocurre lo mismo. Siento no poner el código, pero ahora mismo estoy con un ordenador que no tiene delphi instalado. Muchas gracias por tu respuesta de todas formas. |
Herramientas | Buscar en Tema |
Desplegado | |
|
|
|