PDA

Ver la Versión Completa : Atajos de Teclado en Formularios MDIForm


Paradiso
14-09-2007, 16:50:36
Hola A Todos
Pregunta: No puedo hacer que el formulario principal de mi aplicacion.capture una tecla pulsada
considerando que el formulario principal tiene en true la propiedad keypreview
y el mismo es MDIForm.

Gracias.

:confused:

gluglu
14-09-2007, 16:55:11
Donde la estás intentando capturar ? En el evento OnKeyPress, en el evento OnKeyDown, o mediante un TActionManager ?

Paradiso
17-09-2007, 14:08:14
En el Evento OnKeyDown.

Saludos...

gluglu
17-09-2007, 19:41:00
Pues te pediría que pusieras un poco de tu código, ya que a mi no me dá problemas de ningún tipo.

Está claro que tienes que poner la rutina del evento OnKeyDown que quieres capturar en tu form principal que es MDIForm.

Y si tienes la propiedad KeyPreview a True de dicho MDIForm, antes de comprobar ningun otro evento de teclado te debe de entrar a dicho procedimiento OnKeyDown del Form principal (el MDIForm). Podrías comprobarlo también con el Debug, a ver si realmente te está entrando a dicho procedimiento. A lo mejor estás buscando donde no es y descativas algo o cambias algo en otra parte de tu código.

Lo dicho, si pudieras poner algo de tu código sería mejor.

Saludos, ;)

Paradiso
18-09-2007, 13:57:55
Bueno Mira, lo he debuggeado y efectivamente no pasa por el evento onkeyDown :

propiedad KeyPreview del Formulario MdiForm en True.


procedure TfmPrincipal.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin

if key = vk_f1 then showmessage('Hola Mundo');


end;

end.


lo que si les comento, que yo tengo un componente image con un jpg cubriendo todo el area cliente del formulario principal, de todas formas, lo puse en visible false y asi y todo no entra al evento FormKeyDown.

lo que yo necesito hacer es que el usuario apretando las teclas de funcion acceda a las operaciones mas comunes de mi sistema.

saludos.

paldave
18-09-2007, 14:22:19
Claro, lo que sucede es que al ser el formulario un MDIForm no captura las pulsaciones.
Lo que debes utilizar es un TActionList, como lo describo en este hilo. (http://www.clubdelphi.com/foros/showthread.php?t=47703)

gluglu
18-09-2007, 14:32:52
Efectivamente tienes razón. Lo acabo de comprobar y no funciona.

Lo que pasa es que yo lo tenía sobre un MDIChild con Frames y pensaba que funcionaría de igual manera con el formulario principal.

Consultado la ayuda de Delphi :

If KeyPreview is true, keyboard events occur on the form before they occur on the active control. (The active control is specified by the ActiveControl property.) If KeyPreview is false, keyboard events occur only on the active control.

Lo que te va a provocar que pongas el KeyPreview a True es que se ejecute el evento OnKeyDown del Form que contiene el control activo antes que el evento OnKeyDown del propio control activo.

Tendrás que utilizar entonces un TActionManager que seguro que si funciona.

Si necesitas más ayuda al respecto de la utilización de este componente puedes consultar la propia ayuda del foro, o si tienes cualquier duda en concreto vuelve a preguntar por aqui.

;)

gluglu
18-09-2007, 14:34:19
... se me adelantaron mientras estaba escribiendo :o

paldave
18-09-2007, 14:49:24
Vamos, vamos, A escribir más rápido!!! :)

Paradiso
20-09-2007, 16:52:10
Muchas Gracias!!! :)

Pruebo y Comento.

Saludos.:D