我需要拦截 TEdits 上的 TAB 键盘敲击并以编程方式抑制它们。在某些情况下,我不希望焦点更改为下一个控件。
我尝试使用 KeyPreview=true 在 TEdit 级别和 TForm 上处理 KeyPress、KeyDown。我偷看了以下建议:
但它没有用。事件被触发,比方说,Enter 键但不是 TAB 键。
我正在使用 Delphi 7。感谢您的帮助。
我需要拦截 TEdits 上的 TAB 键盘敲击并以编程方式抑制它们。在某些情况下,我不希望焦点更改为下一个控件。
我尝试使用 KeyPreview=true 在 TEdit 级别和 TForm 上处理 KeyPress、KeyDown。我偷看了以下建议:
但它没有用。事件被触发,比方说,Enter 键但不是 TAB 键。
我正在使用 Delphi 7。感谢您的帮助。
如果要拦截 TAB 键行为,则应捕获该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.