Вопрос по – Перехватить клавишу TAB и подавить ее
Мне нужно перехватить нажатие клавиши 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. Спасибо за вашу помощь.
1
ответ
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
Похожие вопросы
Они не уволены, потому что<code>TAB</code>ключ предназначен для того, чтобы перемещать фокус на следующий элемент управления, поэтому он имеет специальную обработку.
Спасибо TLama. Поведение объясняется. Так ты думаешь, есть ли выход?
<a href="http://delphi.about.com/cs/adptips2002/a/bltip0702_5.htm" rel="nofollow noreferrer">delphi.about.com/cs/adptips2002/a/bltip0702_5.htm</a>