Delphi 捕获一个';删除';按键

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键。我想控制用户可以在该字段中删除文本的哪一部分,我知

我不知道如何捕捉Deletekey按键。 我发现在ASCII代码表中,它位于127位,但是
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
至于
OnKeyPress

Mghie的答案是正确的,下面是一个示例:

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,这是很容易避免的。我可以在让用户写东西之前检查在按键事件中选择了文本的哪一部分。