Delphi 截取TAB键并抑制它

Delphi 截取TAB键并抑制它,delphi,keyboard,delphi-7,Delphi,Keyboard,Delphi 7,我需要截取TEDIT上的制表键笔划,并以编程方式抑制它们。 在某些情况下,我不希望焦点更改为下一个控件 我尝试在TEdit级别和TForm上使用KeyPreview=true来处理KeyPress和KeyDown。 我从以下几方面得到了一些建议: 但它不起作用。 这些事件是针对Enter键而不是TAB键触发的 我用的是Delphi7。 谢谢您的帮助。如果您想拦截TAB键行为,您应该捕获CM\u DIALOGKEY消息。在本例中,如果将YouWantToInterceptTab布尔值设置为

我需要截取TEDIT上的制表键笔划,并以编程方式抑制它们。 在某些情况下,我不希望焦点更改为下一个控件

我尝试在TEdit级别和TForm上使用KeyPreview=true来处理KeyPress和KeyDown。 我从以下几方面得到了一些建议:

但它不起作用。 这些事件是针对Enter键而不是TAB键触发的

我用的是Delphi7。
谢谢您的帮助。

如果您想拦截TAB键行为,您应该捕获
CM\u 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.

它们不会被触发,因为
选项卡
键是用来将焦点移动到下一个控件的键,因此它有一个特殊的处理。谢谢你。对这种行为进行了解释。那么你认为,有逃生路线吗?亲爱的特拉玛,这真是太好了。有史以来最佳剪切和粘贴;)