Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Como asignar funciones a las teclas F1, F2, ...., F12 (https://www.clubdelphi.com/foros/showthread.php?t=52608)

marilinspi 25-01-2008 20:36:40

Como asignar funciones a las teclas F1, F2, ...., F12
 
hola a todos, mi pregunta es la siguiente: estoy parada sobre un formulario y al pulsar la tecla F1 o F2 o F3 o cualquiera de las funciones quiero que me habra otro formulario o me habra un menu contextual o me relice alguna accion, el tema es como hago? he escuchado que hay un componente pero no se cual es, ni como usarlo.... espero sus respuestas, desde ya muchas gracias.

dec 25-01-2008 20:49:56

Hola,

Un buen componente es el "TActionList", que te permite incluir "acciones" en tu código, que a su vez pueden ser ejecutadas mediante una tecla de acceso directo, como puedan ser las que mencionas. Si no recuerdo mal está en la pestaña "Additional" y es bastante sencillo de utilizar. Además se integra muy bien con otros componentes: fíjate que a los botones (y es sólo un ejemplo) se les puede asignar una "acción", de modo que sea ejecutada cuando se hace clic en ellos.

egostar 25-01-2008 20:53:46

Puedes usar el evento OnKeyDown de la forma y "preguntar" que tecla fué presionada.

Código Delphi [-]
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  case key of
     VK_F1 : begin
           //Hacer algo F1
          ShowMessage('Se presionó F1'); //Por ejemplo
     end;
     VK_F2 : begin
           //Hacer algo F2
     end;
     VK_F3 : begin
           //Hacer algo F3
     end;
  end;
end;

Salud OS

jcarteagaf 25-01-2008 20:55:47

Teclas de Funcion
 
Tambien es importante colocar la propiedad keypreview en True de la forma para que funcione el codigo del anterior post.

Saludos

egostar 25-01-2008 21:00:59

Cita:

Empezado por jcarteagaf (Mensaje 260978)
Tambien es importante colocar la propiedad keypreview en True de la forma para que funcione el codigo del anterior post.

Saludos

Tienes toda la razón, se me olvido comentar ese detalle, ya que si el foco está en algún otro objeto, no funcionará.

Gracias.:)

Salud OS

ixMike 25-01-2008 21:16:28

Si tu programa tiene un menú (TMainMenu) con que asignes a cada menú la propiedad ShorrCut a la combinación correspondiente, ya lo tienes.

Por cierto, en las versiones antiguas de Delphi (como la mía :() no existe ese tal TActionList. (qué suerte tenéis, cabrones :D)


Salu2.

marilinspi 25-01-2008 21:18:23

hola egostar primero gracias....me funciono la solucion que me diste, pero quisiera saber si hay alguna lista de todas las VK_ es decir si eso mismo lo puedo hacer con cualquier tecla... por ejemplo que el apretar la tecla N haga alguna accion como hizo cuando aprete F1. Gracias desde ya.

ixMike 25-01-2008 21:25:14

Cita:

Empezado por marilinspi (Mensaje 260996)
hola egostar primero gracias....me funciono la solucion que me diste, pero quisiera saber si hay alguna lista de todas las VK_ es decir si eso mismo lo puedo hacer con cualquier tecla... por ejemplo que el apretar la tecla N haga alguna accion como hizo cuando aprete F1. Gracias desde ya.

En la ayuda de Delphi hay una lista. Lo que no recuerdo es en qué parte :(

De todas formas, VK_ son constantes numéricas, puedes sacar el número de cualquier tecla...

Abre un nuevo proyecto, en en FormKeyDown colocas esto:

Código Delphi [-]
Caption:=IntToStr(Key);


Ejecutas y vas probando las teclas ;)


Salu2.

ixMike 25-01-2008 21:27:44

Vale, abre el archivo "Win32.hlp", y busca en él "VK_ list", y te aparecerá un artículo llamado "Virtual key codes". Ahí tienes la lista completa.


Salu2. :)

jcarteagaf 25-01-2008 21:32:38

Teclas de Funcion
 
La lista tambien esta en la ayuda de Delphi, en Virtual Key Codes.

La comparacion la podrias hacer

Código Delphi [-]
if Key = ord('N') then

 .....

Saludos.

ixMike 25-01-2008 21:36:51

Cita:

Empezado por jcarteagaf (Mensaje 261003)
La lista tambien esta en la ayuda de Delphi, en Virtual Key Codes.

La comparacion la podrias hacerif Key = ord('N') then

Saludos.

Bueno, en mi Delphi no está :( o no sé encontrarlo ;)

En cuanto al código que has puesto, si está pensado para el evento OnKeyDown / OnKeyUp, hay que decir que la letra tiene que estar en mayúsculas, ya que su VK coincide con su código ASCII/ANSI (no sé cuál de los dos) en MAYÚSCULAS, si se pone en minúsculas no va. Ya no sé que pasará con la "Ñ" y otros "carácteres extraños" :D


Salu2.

jcarteagaf 25-01-2008 21:52:37

Teclas de Funcion
 
Uso la version 7 del delphi, en ese help encontre la lista.

Y el codigo que puse es exclusivo para los eventos Onkeydown y onkeyup

Código Delphi [-]
if key = ord('N') then

 ....

es valido para mayusculas o minusculas, ya que se obtiene el valor de las Api de Windows de la tecla presionada.

Ahora si se necesita saber el estado de las teclas Shift, Alt, Control se usa el parametro Shift del evento.

Para la Ñ el valor de key es 192.

Saludos

ixMike 25-01-2008 22:07:03

Cita:

Empezado por jcarteagaf (Mensaje 261017)
es valido para mayusculas o minusculas, ya que se obtiene el valor de las Api de Windows de la tecla presionada.s

Puedes comprobar que si pulsas "A" su VK es 65, mientras que si pulsas "a" su VK sigue siendo el mismo, 65. Pero Ord('A') devuelve 65 mientras que Ord('a') devuelve 97.

De todas formas, lo que necesitaba nuestro amigo (o amiga :)) era la lista, y eso ya sabe encontrarlo ;)


Salu2.

marilinspi 25-01-2008 22:10:07

Gracias
 
hola gracias a todos la verdad me dieron una gran mano. Lo solucione con los VK_ asignandole a cada tecla una funcion.

egostar 25-01-2008 22:58:04

Bueno amigo ixMike, aquí la lista de las VK's

http://api.farmanager.com/en/winapi/...lkeycodes.html

Salud OS

Lepe 26-01-2008 03:56:32

Si no quieres conectarte a internet, en la ayuda de delphi buscando por "virtual keycodes" también aparece el listado. No recuerdo que venga el valor hex.

Saludos


La franja horaria es GMT +2. Ahora son las 22:32:49.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi