【问题标题】:Intercept TAB key in RichEdit在 RichEdit 中截取 TAB 键
【发布时间】:2011-10-29 13:27:18
【问题描述】:

这里有很多类似的问题,但我找不到我的问题的答案。

我有一个TRichEdit,并希望在用户按下 Tab 时实现一些自定义行为。我将富编辑的WantTabs 属性设置为True 并尝试在OnKeyDown 中添加我的自定义行为,这工作正常,但不幸的是之后“正常”选项卡行为也被执行(在编辑)。我尝试在事件处理程序中将Key 设置为0,但这没有帮助。

如何防止“正常”选项卡行为被执行?

【问题讨论】:

    标签: delphi delphi-xe vcl


    【解决方案1】:

    改用OnKeyPress 事件:

    procedure TForm1.RichEdit1KeyPress(Sender: TObject; var Key: Char);
    begin
      if Key = chr(VK_TAB) then
      begin
        beep;
        Key := #0;
      end;
    end;
    

    或者,如果您确实需要使用OnKeyDown 事件,只需删除关键消息:

    procedure TForm1.RichEdit1KeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    var
      msg: TMsg;
    begin
      if Key = VK_TAB then
      begin
        beep;
        while PeekMessage(msg, RichEdit1.Handle, WM_KEYFIRST, WM_KEYLAST,
          PM_REMOVE) do;
      end;
    end;
    

    【讨论】:

    • +1 非常感谢,这行得通!所以,OnKeyPressOnKeyDown 之间似乎存在一些根本区别。你能解释一下这是什么吗?
    • @Smasher:插入字符是按键。 (如果你按下VK_RIGHT,你会得到一个按键向下和一个按键向上(当然),但没有按键,因为没有'VK_RIGHT字符'插入到控件中。)
    猜你喜欢
    • 1970-01-01
    • 2012-05-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-28
    • 2012-10-15
    • 2016-03-06
    • 1970-01-01
    相关资源
    最近更新 更多