在RichEdit中拦截TAB键

jpf*_*ius 3 delphi vcl delphi-xe

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

我有一个TRichEdit并且想要在用户按下时实现一些自定义行为Tab.我将富编辑的WantTabs属性设置为True并尝试添加我的自定义行为OnKeyDown,这可以正常工作,但不幸的是,之后执行"正常"选项卡行为(在编辑中插入制表符).我尝试在事件处理程序中设置Key,0但这没有帮助.

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

And*_*and 6

请改用OnKeyPress事件:

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

或者,如果您确实需要使用该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;
Run Code Online (Sandbox Code Playgroud)