AGB  ·  Datenschutz  ·  Impressum  







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

WM_KEYDOWN wird nicht ausgelößt

Ein Thema von EWeiss · begonnen am 7. Mai 2011 · letzter Beitrag vom 16. Jan 2013
Antwort Antwort
Seite 1 von 2  1 2      
EWeiss
(Gast)

n/a Beiträge
 
#1

WM_KEYDOWN wird nicht ausgelößt

  Alt 7. Mai 2011, 04:51
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:
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;
Was läuft denn hier wieder schief.
  Mit Zitat antworten Zitat
Benutzerbild von turboPASCAL
turboPASCAL

Registriert seit: 8. Mai 2005
Ort: Sondershausen
4.274 Beiträge
 
Delphi 6 Personal
 
#2

AW: WM_KEYDOWN wird nicht ausgelößt

  Alt 7. Mai 2011, 05:27
Was läuft denn hier wieder schief.
Tja, keine Ahnung.

Wie und wo bekommt denn PlayStopKeyNote() seine KeyNotes ?
Nutzt du Hooks ?
Matti
Meine Software-Projekte - Homepage - Grüße vom Rüsselmops -Mops Mopser
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#3

AW: WM_KEYDOWN wird nicht ausgelößt

  Alt 7. Mai 2011, 05:31
Was läuft denn hier wieder schief.
Tja, keine Ahnung.

Wie und wo bekommt denn PlayStopKeyNote() seine KeyNotes ?
Nutzt du Hooks ?
PlayStopKeyNote hat mit dem Problem nichts zu tun sondern soll lediglich zeigen welche Key's funktionieren
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
  Mit Zitat antworten Zitat
Benutzerbild von turboPASCAL
turboPASCAL

Registriert seit: 8. Mai 2005
Ort: Sondershausen
4.274 Beiträge
 
Delphi 6 Personal
 
#4

AW: WM_KEYDOWN wird nicht ausgelößt

  Alt 7. Mai 2011, 05:34
Anders gefragt, wie schaut dein WM_KEYDOWN aus ?
Matti
Meine Software-Projekte - Homepage - Grüße vom Rüsselmops -Mops Mopser
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#5

AW: WM_KEYDOWN wird nicht ausgelößt

  Alt 7. Mai 2011, 05:37
Anders gefragt, wie schaut dein WM_KEYDOWN aus ?
So..
Auskommentierte ist was nicht an keys funktioniert.
Delphi-Quellcode:
    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;
Komme gar nicht erst in WM_KEYDOWN rein mit den angegebenen Keys
Die anderen gehn.


gruss

Geändert von EWeiss ( 7. Mai 2011 um 05:47 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von turboPASCAL
turboPASCAL

Registriert seit: 8. Mai 2005
Ort: Sondershausen
4.274 Beiträge
 
Delphi 6 Personal
 
#6

AW: WM_KEYDOWN wird nicht ausgelößt

  Alt 7. Mai 2011, 05:44
Ö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 ?
Matti
Meine Software-Projekte - Homepage - Grüße vom Rüsselmops -Mops Mopser
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#7

AW: WM_KEYDOWN wird nicht ausgelößt

  Alt 7. Mai 2011, 05:46
Ö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 ?
Jo..
Delphi-Quellcode:
case wp of
        VK_SHIFT:
Aber er kommt nicht in WM_KEYDOWN rein das ist mein Problem

Also nicht das wir jetzt was verwechseln..
Ich meine nicht die Keys also Tasten auf dem Piano..

Sondern die von meiner Tastatur!

gruss

Geändert von EWeiss ( 7. Mai 2011 um 05:52 Uhr)
  Mit Zitat antworten Zitat
madtom

Registriert seit: 24. Feb 2005
Ort: Hamburg
115 Beiträge
 
Delphi XE7 Professional
 
#8

AW: WM_KEYDOWN wird nicht ausgelößt

  Alt 7. Mai 2011, 05:54
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:
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;
Thomas
Thomas
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#9

AW: WM_KEYDOWN wird nicht ausgelößt

  Alt 7. Mai 2011, 05:59
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:
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;
Thomas
Lieber madtom
Danke für dein Beispiel
Aber ich sagte schon alle Tasten funktionieren nur diese 5 nicht.

Wenn ich den Focus erzwinge..

Delphi-Quellcode:
        // 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;
Dann funktionieren alle Tasten die ich angegeben habe um auf dem Piano zu spielen
Aber nicht VK_RIGHT, VK_LEFT, VK_UP, VK_DOWN, VK_RETURN

gruss
  Mit Zitat antworten Zitat
Benutzerbild von turboPASCAL
turboPASCAL

Registriert seit: 8. Mai 2005
Ort: Sondershausen
4.274 Beiträge
 
Delphi 6 Personal
 
#10

AW: WM_KEYDOWN wird nicht ausgelößt

  Alt 7. Mai 2011, 06:13
@EWeiss, ja aber irgend wo musst doch "wp" den Tastencoder erhalten vom WM_KEYDOWN oder nicht ?
Matti
Meine Software-Projekte - Homepage - Grüße vom Rüsselmops -Mops Mopser
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 12:45 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