Intercept TAB key in RichEdit
delphi, delphi-xe, vcl
Solution
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;
Problem
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?