![]() |
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 ?
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:57 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