![]() |
WM_KEYDOWN wird nicht ausgelößt
Habe ein paar probleme mit meinen Keytasten
VK_RIGHT, VK_LEFT, VK_RETURN werden einfach nicht aufgelößt. Habe jetzt schon VK_SHIFT für VK_RETURN eingesetzt. Und muss jetzt feststellen das die beiden VK_RIGHT, VK_LEFT auch nicht funktionieren. Diese hier funktionieren alle..
Delphi-Quellcode:
Was läuft denn hier wieder schief.
procedure PlayStopKeyNote(KeyNote: Integer; Chord: TChord; State: BOOL);
var NewNote: Integer; begin case KeyNote of ord('Y'): NewNote := 12; // Basenote C1 ord('S'): NewNote := 13; // C1# ord('X'): NewNote := 14; // D1 ord('D'): NewNote := 15; // D1# ord('C'): NewNote := 16; // E1 ord('V'): NewNote := 17; // F1 ord('G'): NewNote := 18; // F1# ord('B'): NewNote := 19; // G1 ord('H'): NewNote := 20; // G1# ord('N'): NewNote := 21; // A1 ord('J'): NewNote := 22; // A1# ord('M'): NewNote := 23; // H1 VK_OEM_COMMA: NewNote := 24; // C2 ord('L'): NewNote := 25; // C2# VK_OEM_PERIOD: NewNote := 26; // D2 VK_OEM_3: NewNote := 27; // D2# VK_OEM_MINUS: NewNote := 28; // E2 ord('Q'): NewNote := 29; // F2 ord('2'): NewNote := 30; // F2# ord('W'): NewNote := 31; // G2 ord('3'): NewNote := 32; // G2# ord('E'): NewNote := 33; // A2 ord('4'): NewNote := 34; // A2# ord('R'): NewNote := 35; // H2 ord('T'): NewNote := 36; // C3 ord('6'): NewNote := 37; // C3# ord('Z'): NewNote := 38; // D3 ord('7'): NewNote := 39; // D3# ord('U'): NewNote := 40; // E3 ord('I'): NewNote := 41; // F3 ord('9'): NewNote := 42; // F3# ord('O'): NewNote := 43; // G3 ord('0'): NewNote := 44; // G3# ord('P'): NewNote := 45; // A3 VK_OEM_4: NewNote := 46; // A3# VK_OEM_1: NewNote := 47; // H3 VK_OEM_PLUS: NewNote := 48; // C4 else exit; end; if State then StartNote(NewNote, integer(Chord)) else StopNote(NewNote, integer(Chord)); end; |
AW: WM_KEYDOWN wird nicht ausgelößt
Zitat:
Wie und wo bekommt denn PlayStopKeyNote() seine KeyNotes ? Nutzt du Hooks ? |
AW: WM_KEYDOWN wird nicht ausgelößt
Zitat:
Die Keynotes werden alle in WM_KEYDOWN übergeben. Hatte ich aber auch geschrieben. Diese gehen nicht! VK_RIGHT, VK_LEFT, VK_RETURN Ob mit oder ohne Focus der Anwendung. Hooks benutze ich keine. gruss |
AW: WM_KEYDOWN wird nicht ausgelößt
Anders gefragt, wie schaut dein WM_KEYDOWN aus ?
|
AW: WM_KEYDOWN wird nicht ausgelößt
Zitat:
Auskommentierte ist was nicht an keys funktioniert.
Delphi-Quellcode:
Komme gar nicht erst in WM_KEYDOWN rein mit den angegebenen Keys
WM_KEYDOWN:
begin case wp of VK_SHIFT: begin if not Sustain then SetController(64, 127, Channel); end; {VK_LEFT: SendMessage(WinHandle, WM_COMMAND, ID_BTN_INSTL, 0); VK_RIGHT: SendMessage(WinHandle, WM_COMMAND, ID_BTN_INSTR, 0);} end; if SKAERO_GetCheckButtonStatus(SKAERO_GetMainItem(MainHandle, ID_USEKEY)) = True then if wp <> lastnote then if OnState then // Note von der Tastatur spielen PlayStopKeyNote(wp, TChord(Chord), True); lastnote := wp; end; WM_KEYUP: begin case wp of VK_SHIFT: begin if not Sustain then SetController(64, 0, Channel); end; end; if SKAERO_GetCheckButtonStatus(SKAERO_GetMainItem(MainHandle, ID_USEKEY)) = True then if OnState then begin // zuletzt gespielte Note von der Tastatur stoppen PlayStopKeyNote(wp, TChord(Chord), False); lastnote := -1; end; end; Die anderen gehn. gruss |
AW: WM_KEYDOWN wird nicht ausgelößt
Öhm und wo wird denn da der Keycode geholt ?
Also ala:
Delphi-Quellcode:
WM_KEYDOWN:
begin myKeyCode := wParam end; Ist doch wohl bei dir nonVCL oder ? |
AW: WM_KEYDOWN wird nicht ausgelößt
Zitat:
Delphi-Quellcode:
Aber er kommt nicht in WM_KEYDOWN rein das ist mein Problem
case wp of
VK_SHIFT: Also nicht das wir jetzt was verwechseln.. Ich meine nicht die Keys also Tasten auf dem Piano.. Sondern die von meiner Tastatur! ;) gruss |
AW: WM_KEYDOWN wird nicht ausgelößt
Hallo EWeiss,
ist es nonVCL? Ich habe es sonst in der VCL durchgespielt und es funktioniert: (ich habe es so angepasst, dass mir die Form1.Caption die gedrückten Tasten anzeigt)
Delphi-Quellcode:
Thomas :)
procedure PlayStopKeyNote(KeyNote: Integer; State: TShiftState);
begin case KeyNote of VK_LEFT: Form1.Caption := 'Left'; // Left VK_RIGHT: Form1.Caption := 'Right'; // Right VK_UP: Form1.Caption := 'Up'; // Up VK_DOWN: Form1.Caption := 'Down'; // Down VK_RETURN: Form1.Caption := 'Return'; // Return else Exit; end; end; procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin PlayStopKeyNote(Key, Shift); end; |
AW: WM_KEYDOWN wird nicht ausgelößt
Zitat:
Danke für dein Beispiel Aber ich sagte schon alle Tasten funktionieren nur diese 5 nicht. Wenn ich den Focus erzwinge..
Delphi-Quellcode:
Dann funktionieren alle Tasten die ich angegeben habe um auf dem Piano zu spielen
// Focus für Tasten Eingaben
ID_USEKEY: begin if UseKey then SKAERO_SetCheckButtonStatus(SKAERO_GetMainItem(MainHandle, ID_USEKEY), False); UseKey := not UseKey; SetFocus(MainHandle); end; Aber nicht VK_RIGHT, VK_LEFT, VK_UP, VK_DOWN, VK_RETURN gruss |
AW: WM_KEYDOWN wird nicht ausgelößt
@EWeiss, ja aber irgend wo musst doch "wp" den Tastencoder erhalten vom WM_KEYDOWN oder nicht ?
|
AW: WM_KEYDOWN wird nicht ausgelößt
Hallo EWeiss,
Für mich liest sich das so, als ob etwas noch mit dem Key Event Handling noch im Argen ist. Manche Botschaften (ich glaube auch VK_RETURN...) werden unter Umständen an das ParentControl weitergeleitet und müssen dann anders gehandelt werden. Frag doch mal unsere Spezialisten (Daniel, Luckie ...) Viel Erfolg Thomas :-D |
AW: WM_KEYDOWN wird nicht ausgelößt
Zitat:
Bin davon ausgegangen, da es mit allen Tasten funktioniert hat bisher, das ich die Tasten weiterhin über die Main WinProc verwalten kann. So wie es aussieht geht es aber nicht. Deshalb habe ich die beiden Messagen jetzt in meiner SuperClassing WinProc durchgeschleift.. Jetzt funktionieren die Keys. Up,Down,left,right und enter scheinen keine WM_KEYDOWN Message auszulösen deshalb war es schon richtig das ich meine Funktionen in WM_KEYUP weiterleite und verarbeite. Muss das also wieder ändern.
Delphi-Quellcode:
gruss
WM_KEYDOWN:
SendMessage(GetParent(WinHandle), WM_KEYDOWN, wp, lp); WM_KEYUP: SendMessage(GetParent(WinHandle), WM_KEYUP, wp, lp); |
AW: WM_KEYDOWN wird nicht ausgelößt
Hi hi,
ist zwar schon durch, aber fürs protokoll: jemand hat woanders ausprobiert, das die bezeichneten Tasten mit WM_SYSKEYDOWN auch durchgereicht werden. Das übenrimmt dann also ALLE Tasten... :wink: Mario |
AW: WM_KEYDOWN wird nicht ausgelößt
Zitat:
Also das es an WM_SYSKEYDOWN liegt ist eher unwahrscheinlich. Ich denke das Emil bestimmt in dem Message Handler auf IsDialogMessage zugreift?! Wenn dem so ist, musst du VK_RETURN und die Pfeiltasten mit WM_GETDLGCODE abfangen! |
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:37 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz