Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Por fin una de novato: como capturo teclado como con TMainMenu (https://www.clubdelphi.com/foros/showthread.php?t=56127)

mamcx 08-05-2008 01:01:41

Por fin una de novato: como capturo teclado como con TMainMenu
 
Ok, estoy haciendo una pequeña utilidad y jugando con una idea. En fin.

Tengo un TActionList, y en una aplicacion normal, uno haria un TMenu y le jala las acciones al menu.

Pero en esta utildad no hay ni menu ni barra de herramientas, todo es teclado y ya. Asi que me pregunto como hacer para capturar los comandos y mapearlos al TActionList sin hacer un monstruoso codigo en el KeyUp con todos los comandos?

Porque pa' rematar, la lista de comandos cambiaria entre idiomas (quizas lo libere en ingles & español) asi que quiero es dejar todo en un TActionList.

Osea que estoy buscando un componente que emule el comportamiento del menu y/o una forma generica de hacer lo mismo sino existe.

roman 08-05-2008 01:07:33

¿Qué para eso no está la propiedad ShortCut de los TAction?

// Saludos

mamcx 08-05-2008 01:57:52

Si, eso lo se.

Haz esta prueba pa' que me entiendas.

Pon un TActionList en un Form sin menu. Le pones los shorcuts a los TAction. Corres la forma y haces lo comandos de teclado. Obviamente no son capturados....

roman 08-05-2008 02:15:29

Ok. Ya hice la prueba:

Código:

Action1
  ShortCut: Ctr+A
  OnExecute: ShowMessage('Hola mundo');

En el formulario no hay nada más.

Ejecuto, oprimo Ctrl+A y recibo el mensaje.

Algo en tu formulario debe estar interceptando la acción; las acciones no depende de menús ni nada por el estilo.

// Saludos

roman 08-05-2008 12:11:39

Mario:

¿No será que tienes el ActionList fuera del formulario?

Hace tiempo tuve esa duda porque si colocas el ActionList en un DataModule, los ShortCuts no son detectados por el formulario. Hice la pregunta en los foros de Borland y esto es lo que me sugirió Peter Below:

Código Delphi [-]
interface

type
  TForm1 = class(TForm)
  protected
    function IsShortCut(var Message: TWMKey): Boolean; override;
  end;

implementation

function TForm1.IsShortCut(var Message: TWMKey): Boolean;
begin
  Result := inherited IsShortCut(Message);
  if not Result then
    Result := DataModule2.ActionList1.IsShortCut(Message);
end;

Viendo el código original de IsShortCut, es sencillo deducir el porqué del problema y porqué la solución propuesta funciona.

// Saludos

ecfisa 09-05-2008 15:36:06

Dentro.
 
Probé el ejemplo de roman y funciona correctamente. Y el ActionList definitivamente, esta dentro del Form.

mamcx 09-05-2008 18:13:49

Excelente Roman.

Te dedico esta cancion:

http://www.youtube.com/watch?v=KVKDQgT_b-Y

;)

Ñuño Martínez 12-05-2008 09:42:48

Lo siento, pero no puedo evitarlo:
Cita:

Empezado por mamcx
Por fin una de novato

¡Enhorabuena! ¿A que no fue tan difícil? :D


La franja horaria es GMT +2. Ahora son las 23:51:32.

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