AGB  ·  Datenschutz  ·  Impressum  







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

Shift + NumPadX erkennen

Ein Thema von Amateurprofi · begonnen am 31. Jul 2018 · letzter Beitrag vom 23. Aug 2018
Antwort Antwort
Seite 2 von 2     12   
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.685 Beiträge
 
Delphi 11 Alexandria
 
#11

AW: Shift + NumPadX erkennen

  Alt 31. Jul 2018, 21:14
Ich habe das selbe Problem mit Redeemers Vorschlag, weder per TApplicationEvents noch per TApplication, jeweils das TShortcutEvent Event, kommt dabei nur etwas positives heraus wenn numlock ausgeschaltet ist.
Ich hatte gehofft auf diese Weise beides abfangen zu können
Delphi-Quellcode:
procedure TForm1.ApplicationEvents1ShortCut(var Msg: TWMKey;
var Handled: Boolean);
var
  ss: TShiftState;
begin
  ss := KeyDataToShiftState(Msg.KeyData);
  if ss = [ssShift] then
  begin
   if ((Msg.Charcode = VK_NUMPAD0) or (Msg.Charcode = VK_INSERT)) then // theoretisch sollte das ohne/mit numlock codes abdecken
   begin
    ShowMessage(IntToStr(Msg.CharCode));
    Handled := True;
   end;
  end;
end;
Pustekuchen.
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.685 Beiträge
 
Delphi 11 Alexandria
 
#12

AW: Shift + NumPadX erkennen

  Alt 31. Jul 2018, 22:10
Hier ein work-around, aber happert noch hier und da, aber um Dir meinen Grundgedanken zu verdeutlichen:
Delphi-Quellcode:
procedure TForm1.ApplicationEvents1ShortCut(var Msg: TWMKey;
var Handled: Boolean);
  procedure SetNumLock(Active: Boolean);
  var
    State: SHORT;
    Scan: UINT;
  begin
    Scan := MapVirtualKey(VK_NUMLOCK, 0);
    State := GetKeyState(VK_NUMLOCK);
    // Prüfen ob Status nicht schon korrekt ist
    if Active xor (State and $0001 = $0001) then
     begin
       // User hat den Finger drauf :o) ( also erstmal wieder loslassen )
       if State < 0 then
        keybd_event(VK_NUMLOCK, Scan, KEYEVENTF_KEYUP, 0);
       // Taste drücken
       keybd_event(VK_NUMLOCK, Scan, 0, 0);
       // User hat nicht den Finger drauf :o) ( also loslassen )
       if State >= 0 then
        keybd_event(VK_NUMLOCK, Scan, KEYEVENTF_KEYUP, 0);
     end;
  end;
var
  ss: TShiftState;
  OrgState, KBstate: TKeyboardState;
begin
  ss := KeyDataToShiftState(Msg.KeyData);
  GetKeyboardState(KBstate);
  OrgState := KBstate;
  if ss = [ssShift] then
  begin
   if KBstate[VK_NUMLOCK] <> 0 then
    begin
      KBstate[VK_NUMLOCK] := 0;
      SetNumLock(False);
      SetKeyboardState(KBstate);
      Msg.CharCode := $0;
      Handled := True;
    end;
   if ((Msg.Charcode = VK_NUMPAD0) or (Msg.Charcode = VK_INSERT)) then
   begin
    ShowMessage('Numpad 0 + Shift: '+IntToStr(Msg.CharCode));
    Handled := True;
   end;
{  if OrgState[VK_NUMLOCK] <> 0 then
    begin
      SetKeyboardState(OrgState);
      SetNumLock(True);
      Msg.CharCode := $0;
    end;}

   if not Handled = True then if (Msg.Charcode <> VK_SHIFT) then ShowMessage(IntToStr(Msg.CharCode));
  end;
end;
Das Problem: sobald man Shift drückt wechselt NumLock An/Aus/An/Aus usw usf, also da muss noch dolle was gemacht werden, ansonsten klappt es damit ganz gut.
Gruß vom KodeZwerg

Geändert von KodeZwerg (31. Jul 2018 um 22:19 Uhr)
  Mit Zitat antworten Zitat
Amateurprofi

Registriert seit: 17. Nov 2005
Ort: Hamburg
1.041 Beiträge
 
Delphi XE2 Professional
 
#13

AW: Shift + NumPadX erkennen

  Alt 1. Aug 2018, 11:23
Meine Frage "Frage, was hast Du vor?" zielte daraufhin, welche Aufgabe mit dem Erkennen von den Tastaturdruckkombinationen erreicht werden soll. Das beim Druck von Shift+NumPad1 eben genau diese Kombination festgestellt werden soll, ist schon klar.

Habe mal ein bisserl rumprobiert:

Beim Drücken von Strg und/oder Alt plus einer NumPad-Taste bekommt man die entsprechende Info. Ob man dabei Shift betätigt oder nicht, ändert nichts am Ergebnis. Shift ist nie dabei.

Wenn man nun aber Numlock ausschaltet, dann erfährt man auch, ob Shift in der Tastenkombination plus einer NumPad-Taste dabei ist.

Meine Googlelitis brachte auch nix zum Vorschein, außer: Du bist nicht alleine mit diesem Problem.
Naja, "nicht alleine mit dem Problem".
eigentlich habe ich nicht wirklich ein Problem, denn ich habe ja eine funktionierende Lösung, die ich in #1 gezeigt habe.
Mein Ansinnen war, eine elegantere Methode aufgezeigt zu bekommen.
Gruß, Klaus
Die Titanic wurde von Profis gebaut,
die Arche Noah von einem Amateur.
... Und dieser Beitrag vom Amateurprofi....
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.685 Beiträge
 
Delphi 11 Alexandria
 
#14

AW: Shift + NumPadX erkennen

  Alt 22. Aug 2018, 21:36
Schau mal bitte in das Projekt rein, ich habe total normale Delphi Methoden veranschaulicht und auch ein SHIFT+NumPadX lässt sich damit auslesen, egal ob NumLock on/off.
Angehängte Dateien
Dateityp: 7z Tastentester.7z (1,7 KB, 8x aufgerufen)
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat
Amateurprofi

Registriert seit: 17. Nov 2005
Ort: Hamburg
1.041 Beiträge
 
Delphi XE2 Professional
 
#15

AW: Shift + NumPadX erkennen

  Alt 22. Aug 2018, 23:50
Schau mal bitte in das Projekt rein, ich habe total normale Delphi Methoden veranschaulicht und auch ein SHIFT+NumPadX lässt sich damit auslesen, egal ob NumLock on/off.
Ich weiß ja nun nicht was dir angezeigt wird.
Das folgende wird mir angezeigt:
Angegeben habe ich jeweils in der ersten Zeile, die Taste die ich drücke (oder loslasse) und in der zweiten Zeile die 4 Werte die angezeigt werden.
NumPad2 Down
2 98 Leer 50
NumPad2 Up
2 98 98 50

Shift Down
2 16 98 50
NumPad1 Down
2 35 16 50
NumPad1 Up
2 16 35 50
Shift Up
2 16 16 50

Bei NumPad1 Down kommt im FormKeyDown genau das, was Probleme macht, nämlich die Information Key=35 und Shift-Taste gedrückt. Also Shift + VK_End,
Tatsächlich gedrückt war aber Shift + Numpad1.
Sehr schön ist auch zu sehen, das Shift + Numpad1 kein FormKeyPress auslöst.
Um auf die Tasten bzw. Tastenkombinationen zu reagieren bleibt also nur FormKeyDown (oder FormKeyUp) - ich bevorzuge FormShortcut.
Und da kommt bei Shift + NumpadX etwas anderes als tatsächlich gedrückt wurde.

Was ich jetzt nicht so richtig verstehe ist Dein Kommentar "und auch ein SHIFT+NumPadX lässt sich damit auslesen", denn genau das ist nicht der Fall - jedenfalls nicht bei mir.
Gruß, Klaus
Die Titanic wurde von Profis gebaut,
die Arche Noah von einem Amateur.
... Und dieser Beitrag vom Amateurprofi....
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.685 Beiträge
 
Delphi 11 Alexandria
 
#16

AW: Shift + NumPadX erkennen

  Alt 23. Aug 2018, 00:15
Welch eine Schande, ich dachte echt das ich per KeyUp und KeyDown schon ganz gut liege.
Ich habe es nicht tief genug mit anderen Tasten getestet bzw total außer Acht gelassen.

Tut mir leid für Störung.

Ps:
Da stehen oftmals noch alte Werte in den Feldern, das war halt ein Schuss in den Ofen auch wenn ich das noch ausbügel mit den Feldern bleibt es falsch.
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


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 06:54 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