views:

176

answers:

2

I want to have a shortcut key combination (like Ctrl+Alt+D) in my app to invoke a function, but I don't want the shortcut to appear on any menu. Is it possible to have a shortcut available in your app that is otherwise invisible?

+6  A: 

Yes it's possible. You must add an Object of class TAction to your form. You can specify a keyboard shortcut for the Taction and then put your code in event OnExecute of the TAction.

Note that you cannot add a Taction directly to your form, you must put a TactionList on your form and then you can add a Taction to your TActionList.

Giacomo Degli Esposti
+4  A: 

you can use the OnShortCut event of the TApplicationEvents component to this task

check this code

procedure TForm1.ApplicationEvents1ShortCut(var Msg: TWMKey;
  var Handled: Boolean);
begin
  if (Msg.CharCode = Ord('D')) and (HiWord(Msg.KeyData) and KF_ALTDOWN <> 0) and  (GetKeyState(VK_CONTROL) < 0) then
  begin
    ShowMessage('Ctrl+Alt+D Pressed') ;
    Handled := true;
  end;
end;
RRUZ
Excellent. Works a treat and doesn't involve any action components.
If you are already using a TActionList for the other actions on the form, just adding another TAction with the required shortcut is more elegant and improves readability.(as suggested by Giacomo Degli Esposti)
dummzeuch
I'm not using actionlists although I probably should, It's an app that started life before I knew what they were and I've never been bothered enough to retro-fit them.