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
Benutzerbild von KodeZwerg
KodeZwerg

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

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
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 15:36 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