Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Tastendruck bei geöffnetem TMainMenu abfangen (https://www.delphipraxis.net/165040-tastendruck-bei-geoeffnetem-tmainmenu-abfangen.html)

tofse 12. Dez 2011 09:26

Tastendruck bei geöffnetem TMainMenu abfangen
 
Hallo,
gibt es eine Möglichkeit, bei geöffnetem TMainMenu das Drücken einer Taste abzufangen bzw. abzufragen ?
Beim Formular habe ich KeyPreview := true gesetzt und verwende dort onKeyDown. Leider reagiert die Methode nur, wenn das MainMenu geschlossen ist.

Allerdings lautet die Anforderung, im MainMenu auf eine bestimmte Taste zu reagieren.

Hat jemand einen Tipp ?
Danke
Christof

DeddyH 12. Dez 2011 11:07

AW: Tastendruck bei geöffnetem TMainMenu abfangen
 
Meinst Du jetzt einen Hotkey?

ASM 12. Dez 2011 11:20

AW: Tastendruck bei geöffnetem TMainMenu abfangen
 
Zitat:

Zitat von tofse (Beitrag 1140942)
Hat jemand einen Tipp ?

Ja.
Code:
Const
  VK_D = ord('D');
  VK_W = ord('W');
  // .. oder was benötigt wird

Type
  TForm1 = class(TForm)
  {...}
  private
     { Private-Deklarationen }
     procedure WmMenuChar(var m : TMessage); message WM_MENUCHAR;
  {...}
  end;
       
procedure TForm1.WmMenuChar(var m : TMessage);
begin
  if GetKeyState(VK_W) and 128 = 128 then mach_dies
  else
    if GetKeyState(VK_D) and 128 = 128 then mach_das;
  m.Result := 1 ;
end;

tofse 12. Dez 2011 12:11

AW: Tastendruck bei geöffnetem TMainMenu abfangen
 
Danke!!!
Zitat:

Zitat von ASM (Beitrag 1140964)
Zitat:

Zitat von tofse (Beitrag 1140942)
Hat jemand einen Tipp ?

Ja.
Code:
Const
  VK_D = ord('D');
  VK_W = ord('W');
  // .. oder was benötigt wird

Type
  TForm1 = class(TForm)
  {...}
  private
     { Private-Deklarationen }
     procedure WmMenuChar(var m : TMessage); message WM_MENUCHAR;
  {...}
  end;
       
procedure TForm1.WmMenuChar(var m : TMessage);
begin
  if GetKeyState(VK_W) and 128 = 128 then mach_dies
  else
    if GetKeyState(VK_D) and 128 = 128 then mach_das;
  m.Result := 1 ;
end;



Alle Zeitangaben in WEZ +1. Es ist jetzt 08:58 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz