PDA

Ver la Versión Completa : Cerrar FORM con la tecla escape


lmpadron
11-12-2013, 15:53:04
Saludos comunidad

Tengo esta "pequeña aplicación" y necesito cerrar todas las ventanas (forms) excepto la principal (MAIN) con la tecla escape (VK_ESC), intente escribiendo el evento ONKEYPRESS de la FORM pero no sucede nada, imagino sea porque sobre estas FORMS estan otros componentes (paneles, grids, etc...) por loq ue el evento nunca se produce sobre el FORM.
Ahora bien, escribir este evento en cada posible componente en que el usuario pueda estar enfocado (focus) es una tragedia por lo que imagino ya de ante mano a alguien se le halla presentado esta dificultad y por supuesto sea capaz de ayudarme.
Realice una busqueda por el club pero no encontré nada !!!
Imagino que tal ves exista algo como eventos globales, tal ves definiendo el ONKEYPRESS o algo parecido pueda lograr que las ventanas se cierren.
Gracias por su tiempo

dec
11-12-2013, 16:20:25
Hola,

Mira a ver si poner la propiedad del formulario "KeyPreview" (http://docwiki.embarcadero.com/Libraries/XE5/en/Vcl.Forms.TCustomForm.KeyPreview) a "True" te sirve de algo. ;)

lmpadron
11-12-2013, 19:40:00
Pues si !!! asi funciona perfectamente !!! ... Gracias Dec!!!

dec
11-12-2013, 22:14:22
Hola,

Una forma de evitar codificar nada en los eventos mencionados suele ser utilizar la propiedad "Default", "Cancel" y "ModalResult" de un determinado botón. En pocas palabras, podemos imaginar dos botones: "Aceptar" y "Cancelar". En el primer botón ponemos a "True" su propiedad "Default" y su propiedad "ModalResult" a "mrOk". En el segundo botón ponemos a "True" su propiedad "Cancel" y su propiedad "ModalResult" a "mrCancel".

Haciendo esto no será necesario codificar nada para cerrar un formulario "modal" al pulsar la tecla "Escape" y/o "Enter", sino que este será el comportamiento "por defecto". Claro está que para esto será necesario poner en el formulario dichos botones "Aceptar" y "Cancelar", pero, esto suele ser habitual en los "diálogos" de los programas en Windows.