Delphi 捕获一个';删除';按键
我不知道如何捕捉Deletekey按键。 我发现在ASCII代码表中,它位于127位,但是Delphi 捕获一个';删除';按键,delphi,delphi-2009,keypress,Delphi,Delphi 2009,Keypress,我不知道如何捕捉Deletekey按键。 我发现在ASCII代码表中,它位于127位,但是if(Key=#127)然后什么也没有得到 然后我检查了VK_DELETE的值,它是47。我试着用它,但没用 KeyPreview:=true在我的表单中设置 我试图将ShowMessage(IntToStr(Ord(Key))添加到表单按键事件中,但在单击Delete键时,我从未收到弹出的消息 我需要在Dynamicly创建的编辑字段中处理Delete键。我想控制用户可以在该字段中删除文本的哪一部分,我知
if(Key=#127)然后什么也没有得到
然后我检查了VK_DELETE
的值,它是47。我试着用它,但没用
KeyPreview:=true
在我的表单中设置
我试图将ShowMessage(IntToStr(Ord(Key))
添加到表单按键事件中,但在单击Delete键时,我从未收到弹出的消息
我需要在Dynamicly创建的编辑字段中处理Delete键。我想控制用户可以在该字段中删除文本的哪一部分,我知道如何使用Backspace键处理文本删除,现在需要弄清楚如何使用Delete键
谢谢您应该处理OnKeyDown
而不是OnKeyPress
事件。如果您这样做,那么VK_DELETE
应该适合您。请注意,OnKeyDown
和onkeydup
的参数是一个Word
,而不是Char
至于OnKeyPressMghie的答案是正确的,下面是一个示例:
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if Key=VK_DELETE then
showmessage('Delete key was pressed');
end;
请注意,用户还可以使用剪切到剪贴板来删除文本,因此您可能还需要处理该问题。您可以使用OnKeyDown事件来过滤所按下的不需要的删除键:
procedure TForm1.Edit1KeyDown(Sender: TObject; var Key: Word; Shift:
TShiftState);
begin
if Key = VK_DELETE then begin
Beep;
Key:= 0;
end;
end;
您也可以通过选择文本然后键入新文本来删除它。@Greg Hewgill,这是很容易避免的。我可以在让用户写东西之前检查在按键事件中选择了文本的哪一部分。