2010-08-13 3 views
4

Je viens de découvrir que le verrouillage des majuscules et la touche majuscule (et probablement plus de touches) affectent tous les claviers connectés à l'ordinateur. Donc, séparer les frappes est très bien, mais les verrous shift/majuscules rend tout fou (Quand un seul problème est lié au test d'un programme que j'ai codé, je n'ai que deux mains. les changements d'utilisateur pour capitaliser, les entrées de tous les utilisateurs à ce moment sont également capitalisés)Puis-je capturer les touches Capslock/Shift?

Puis-je capturer Capslock et Shift enfoncée dans FormKeyPress? Partout ailleurs d'ailleurs?
Puis-je sauvegarder une touche Shift? (afin que je puisse appliquer correctement le 'shift' à l'entrée utilisateur respective)

Toute autre suggestion pour résoudre ce problème est la bienvenue.

Répondre

7

pour vérifier si le décalage ley est d'essayer dans cette:

if GetKeyState(VK_SHIFT)<0 //tests if shiftkey is down 
then ShowMessage('shift key is down''); 

et pour détecter si le verrouillage des majuscules est essayez ceci:

if Odd(GetKeyState(VK_CAPITAL)) //tests if caps lock is on 
then showmessage('caps lock is on'); 

et si vous voulez vérifier l'état des deux quart de travail et capslock:

 if Odd(GetKeyState(VK_CAPITAL)) then 
      if GetKeyState(VK_SHIFT)<0 then 
      showmessage('capslock is on and shift key is down too') 
      else 
      showmessage('capslock is on but shift key is NOT down'); 

GetKeyState est une fonction api windows vous pouvez en lire davantage here

2

Vous pouvez les saisir en cas OnKeyDown

procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); 
begin 
    if Key = VK_SHIFT then 
    ShowMessage('Shift Pressed'); 

    if Key = VK_CAPITAL then 
    ShowMessage('Caps Lock Pressed'); 
end; 
1
if Key = VK_SHIFT then 
    ShowMessage('Shift Pressed'); 

il aurait dû y avoir:

if shift = [ssShift] then ... 

Les tests programme Shift: TShiftState pour la touche SHIFT maintenez enfoncée la touche, pas key :word; il est vérifié pour les autres caractères ordinaux

Cela ne fonctionne pas pour CAPSLOCK - Je n'ai pas trouvé le code. Il y a seulement: ssShift, ssAlt, ssCtrl, ssLeft, ssRight, ssMiddle, ssDouble, il semble donc avoir à utiliser dans ce cas:

if Odd(GetKeyState(VK_CAPITAL)) then ... 
Questions connexes