Перехватить клавишу TAB в RichEdit - PullRequest
3 голосов
/ 18 августа 2011

Здесь много похожих вопросов, но я не смог найти ответ на мою проблему.

У меня есть TRichEdit, и я хочу реализовать некоторое пользовательское поведение, когда пользователь нажимает Tab . Я установил для WantTabs свойства расширенного редактирования значение True и попытался добавить свое пользовательское поведение в OnKeyDown, что работает нормально, но, к сожалению, после этого также выполняется "нормальное" поведение табуляции (вставка символа табуляции в редактировать). Я попытался установить Key в 0 в обработчике событий, но это не помогает.

Как я могу предотвратить выполнение "нормального" поведения табуляции?

1 Ответ

6 голосов
/ 18 августа 2011

Вместо этого используйте событие 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;
...