2017-01-28 8 views
-1

edit1.textフィールドの型付きの内容をチェックするための行がたくさんありますが、何らかの理由でOnKeyUpイベントを使用する必要があります。このコードをKey:Wordのタイプ(通常はKey:OnKeyPressのChar)に変換しますか?OnKeyUpイベントで押されたキーを確認する方法

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

これは、鍵が落ちたときにそれが取られる必要があることを間違っているように見えます。ただ試してみてください。 –

答えて

0

キーボードのキーのWord値を文字値に変換するには、Ord(キー)を使用します。それ以外の場合は、VK_値を使用します。

あなたのスニペットでは、char( '0' .. '9')とValues(#08)を混ぜたので、テストする必要はないとは思いません。そうでなければ(#08)、別の比較でKeyまたはChr(Key)に直接チェックする必要があります。

また、#0ではなくVK_UNKNOWNを使用することをお勧めします。

私はLazarusで書いた作業コードでKeyUpイベントを使用しています。 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; 
関連する問題