AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

WM_KEYDOWN in ApplicationEventsMessage()

Ein Thema von taaktaak · begonnen am 10. Dez 2011 · letzter Beitrag vom 10. Dez 2011
Antwort Antwort
taaktaak

Registriert seit: 25. Okt 2007
Ort: Radbruch
1.993 Beiträge
 
Delphi 7 Professional
 
#1

WM_KEYDOWN in ApplicationEventsMessage()

  Alt 10. Dez 2011, 12:54
Delphi-Version: 7
Moin, Moin.

Ich muss mit TApplicationEvents Tastatureingaben (incl. Tastenkombinationen) auswerten. Je nach Tastenkombination werden verschiedene MenuEinträge oder Speedbuttons aufgerufen. Meine Lösung ist ...
Delphi-Quellcode:
procedure TfoMain.ApplicationEventsMessage(var Msg:tagMSG;var Handled:Boolean);
var Shift : TShiftState;
    Key : Word;

 procedure GetShiftState(var Shift:TShiftState);
 var KeyboardState : TKeyboardState;
 begin
  Shift:=[];
  GetKeyboardState(KeyboardState);
  if (KeyboardState[vk_Shift] and 128=128) then Shift:=Shift+[ssShift];
  if (KeyboardState[vk_Control] and 128=128) then Shift:=Shift+[ssCtrl];
  if (KeyboardState[vk_Menu] and 128=128) then Shift:=Shift+[ssAlt];
 end;

begin
 if Msg.message=WM_KeyDown then begin

  GetShiftState(Shift);
  Key:=Msg.wParam;

  if Shift=[] then // ...................................................... xx
   case Msg.wParam of
    vk_F1 : begin m_HelpCommandsClick(nil); Handled:=true end;
    // ..
    end

  else

  if Shift=[ssShift] then // ......................................... Shift+xx
   case Msg.WParam of
    ord('O') : begin sbuInsertOperation.Click; Handled:=true end;
    // ..
    end

  else

  if Shift=[ssCtrl] then // ........................................... Ctrl+xx
   case Msg.WParam of
    vk_Up : begin sbuUpSizeFont.Click; Handled:=true end;
    // ..
    end

  else

  if Shift=[ssAlt] then // ............................................. Alt+xx
   Showmessage('alt+xx')// wird NICHT erkannt

  else

  if Shift=[ssShift,ssCtrl] then // ............................. Shift+Ctrl+xx
   case Msg.WParam of
    ord('L') : begin sbuLoad.Click; Handled:=true end;
    // ..
    end

  else

  if Shift=[ssShift,ssAlt] then // ............................... Shift+Alt+xx
   Showmessage('shift+alt+xx') // wird als Shift+xx erkannt

  else

  if Shift=[ssCtrl,ssAlt] then // ................................. Ctrl+Alt+xx
   Showmessage('ctrl+alt+xx');

  end;
end;
Für fast alle Kombinationen funktioniert das auch; aber leider nicht für die Fälle ALT+Taste und SHIFT+ALT+Taste. Hmm, war lange Zeit "inaktiv" und habe leider gar keine Idee. Das Erkennen von ALT+Taste wäre aber sehr wichtig! Wo ist der Fehler??
Ralph
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#2

AW: WM_KEYDOWN in ApplicationEventsMessage()

  Alt 10. Dez 2011, 13:02
if Msg.message=WM_SYSKEYDOWN then
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
taaktaak

Registriert seit: 25. Okt 2007
Ort: Radbruch
1.993 Beiträge
 
Delphi 7 Professional
 
#3

AW: WM_KEYDOWN in ApplicationEventsMessage()

  Alt 10. Dez 2011, 13:09
Ok, funktioniert jetzt alles wie gewünscht!
Vielen Dank!
Ralph
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:13 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