2017-01-28 3 views
-1

J'ai beaucoup de lignes pour vérifier le contenu tapé d'un champ Edit1.Text, mais je dois utiliser l'événement OnKeyUp (pour certaines raisons), alors comment puis-je traduire ' ce code à Key: Type de mot (normalement sa clé: Char sur OnKeyPress)?Comment vérifier la clé Pressé événement OnKeyUp

if not (key in ['0'..'9', #08]) then begin 
    key:=#0; 
+0

Cela semble tout faux, c'est quand la clé descend que la décision doit être prise. Essayez de taper. –

Répondre

0

Utilisez Ord (Key) pour convertir la valeur Word d'une clé de clavier en valeur de caractère. Sinon, utilisez une valeur VK_ si disponible.

Dans votre extrait que vous avez de l'omble mixte (« 0 » .. « 9 ») avec des valeurs (# 08), je ne suis pas sûr que ce soit ok vous devez le tester. Si ce n'est pas le cas, (# 08) doit être vérifié directement sur Key ou Chr (Key) dans une autre comparaison.

En outre, il peut être préférable d'utiliser VK_UNKNOWN plutôt que # 0.

Voici un événement KeyUp J'utilise dans un code de travail, je l'ai écrit dans Lazarus. HTH.

procedure TfrmMain.lbCmdLinesKeyUp(Sender : TObject; var Key : Word; Shift : TShiftState); 
begin 

    if (Key = vk_return) and (lbCmdLines.ItemIndex > -1) then 
    begin 
    if (Shift = [ ssCtrl ]) then 
    begin 
     if btnLineEdit.Enabled then 
     btnLineEdit.Click; 
    end 
    else 
    begin 
     if btnRun.Enabled then 
     btnRun.Click; 
    end; 
    end; 

    if (Key = Ord('C')) or (Key = Ord('c')) then 
    begin 
    if Shift = [ ssCtrl ] then 
     actCopyClipCmdLine.Execute; 
//order, apparently, doesn't matter, both work 
    //if Shift = [ ssCtrl, ssShift ] then 
    if Shift = [ ssShift, ssCtrl ] then 
     mniCopyCLListClipClick(Self); 
    //if (ssCtrl in Shift) and (ssShift in Shift) and (ssAlt in Shift) then 
    if Shift = [ ssCtrl, ssShift, ssAlt ] then 
     actCopyCmdLine.Execute; 
    end; 
end;