2017-01-28 4 views
-1

Ich habe viele Zeilen, um den getippten Inhalt eines edit1.text Felds zu überprüfen, aber ich muss das OnKeyUp Ereignis verwenden (aus irgendwelchen Gründen), also wie kann ich 'übersetzen' dieser Code zu Schlüssel: Worttyp (normalerweise sein Schlüssel: Zeichen auf OnKeyPress)?Wie gedrückte Taste am OnKeyUp Ereignis zu überprüfen

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

Das sieht alles falsch aus es ist, wenn der Schlüssel untergeht, dass die Entscheidung getroffen werden muss. Versuche einfach zu tippen. –

Antwort

0

Verwenden Sie Ord (Key), um den Word-Wert einer Tastaturtaste in einen Zeichenwert zu konvertieren. Andernfalls verwenden Sie einen VK_-Wert, falls verfügbar.

In Ihrem Snippet haben Sie Char ('0' .. '9') mit Werten (# 08) gemischt, ich bin mir nicht sicher, ob das in Ordnung ist, Sie müssen es testen. Wenn nicht, dann muss (# 08) entweder direkt auf Schlüssel oder Chr (Schlüssel) in einem anderen Vergleich überprüft werden.

Es kann auch vorzuziehen sein, VK_UNKNOWN statt # 0 zu verwenden.

Hier ist ein KeyUp-Ereignis, das ich in irgendeinem Arbeitscode verwende, den ich in Lazarus geschrieben habe. 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; 
Verwandte Themen