Вопрос по – Перехватить клавишу TAB и подавить ее

11

Мне нужно перехватить нажатие клавиши TAB на TEdits и подавить их программно. В некоторых случаях я не хочу, чтобы фокус переключался на следующий элемент управления.

Я пытался обрабатывать KeyPress, KeyDown как на уровне TEdit, так и на TForm с KeyPreview = true. Я выслушал советы от:

Intercept TAB key in RichEdit How do I make the TAB key close a TComboBox without losing the current position?

Но это не сработало. События инициируются, скажем, клавишей Enter, НО не клавишей TAB.

Я использую Delphi 7. Спасибо за вашу помощь.

Они не уволены, потому чтоTABключ предназначен для того, чтобы перемещать фокус на следующий элемент управления, поэтому он имеет специальную обработку. TLama
Спасибо TLama. Поведение объясняется. Так ты думаешь, есть ли выход? Jako

Ваш Ответ

1   ответ
16

CM_DIALOGKEY сообщение. В этом примере, если вы установитеYouWantToInterceptTab логическое значение True,TAB Ключ будет съеден:

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
  private
    YouWantToInterceptTab: Boolean;
    procedure CMDialogKey(var AMessage: TCMDialogKey); message CM_DIALOGKEY;
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.CMDialogKey(var AMessage: TCMDialogKey);
begin
  if AMessage.CharCode = VK_TAB then
  begin
    ShowMessage('TAB key has been pressed in ' + ActiveControl.Name);

    if YouWantToInterceptTab then
    begin
      ShowMessage('TAB key will be eaten');
      AMessage.Result := 1;
    end
    else
      inherited;        
  end
  else
    inherited;
end;

end.
Уважаемый TLama, это сработало просто отлично. Лучшая вырезка и вставка когда-либо;) Jako

Похожие вопросы