在RichEdit中拦截TAB键

时间:2011-08-18 07:45:35

标签: delphi delphi-xe vcl

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

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

如何防止执行“正常”标签行为?

1 个答案:

答案 0 :(得分:6)

改为使用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;