jpfollenius
jpfollenius

Reputation: 16612

Intercept TAB key in RichEdit

There are lot of similar questions on here, but I couldn't find an answer for my problem.

I have a TRichEdit and want to implement some custom behaviour when the user presses Tab. I set the rich edit's WantTabs property to True and tried to add my custom behaviour in OnKeyDown, which works fine, but unfortunately after that the "normal" tab behaviour is executed as well (inserting a tab character in the edit). I tried setting Key to 0 in the event handler but that doesn't help.

How can I prevent the "normal" tab behaviour from being executed?

Upvotes: 3

Views: 2347

Answers (1)

Andreas Rejbrand
Andreas Rejbrand

Reputation: 108963

Use the OnKeyPress event instead:

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

Alternatively, if you really need to use the OnKeyDown event, simply remove the key messages:

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;

Upvotes: 6

Related Questions