【问题标题】:Capturing a 'delete' key press捕获“删除”按键
【发布时间】:2010-03-06 10:28:40
【问题描述】:

我不知道如何捕获 Delete 按键。 我发现在 ASCII 码表中,它位于 127 位,但 if (Key = #127) then 让我无处可去。

然后我检查了VK_DELETE 的值,它是 47。尝试使用它,但它不起作用。

KeyPreview := true 在我的表单中设置。

我尝试将ShowMessage(IntToStr(Ord(Key))) 添加到 Forms KeyPress 事件中,但在单击 Delete 键时从未弹出消息。

我需要在动态创建的编辑字段中处理 Delete 按键。我想控制用户可以在该字段中删除文本的哪些部分,并且我知道如何使用 Backspace 键处理文本删除,现在需要弄清楚如何使用 Delete 键。

谢谢

【问题讨论】:

    标签: delphi delphi-2009 keypress


    【解决方案1】:

    您应该处理OnKeyDown 而不是OnKeyPress 事件。如果你这样做,那么VK_DELETE 应该适合你。注意OnKeyDownOnKeyUp的参数是Word,而不是CharOnKeyPress

    【讨论】:

      【解决方案2】:

      Mghie 有正确答案,这是一个示例:

      procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
        Shift: TShiftState);
      begin
         if Key=VK_DELETE then
           showmessage('Delete key was pressed');
      end;
      

      请注意,用户还可以使用剪切到剪贴板来删除文本,因此您可能也需要处理它。

      【讨论】:

      • 您也可以通过选择文本然后输入新文本来删除文本。
      • @Greg Hewgill,这很容易避免。在让用户写东西之前,我可以检查 KeyPress 事件中选择了文本的哪一部分。
      【解决方案3】:

      您可以使用 OnKeyDown 事件过滤不想要的 Delete 按键:

      procedure TForm1.Edit1KeyDown(Sender: TObject; var Key: Word; Shift:
          TShiftState);
      begin
        if Key = VK_DELETE then begin
          Beep;
          Key:= 0;
        end;
      end;
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-10-09
        • 1970-01-01
        相关资源
        最近更新 更多