2012-05-06 8 views
11

TEditsでTABキーボードストロークを傍受し、プログラムで抑制する必要があります。 場合によっては、フォーカスを次のコントロールに変更したくない場合があります。TABキーを傍受してそれを抑制する

私はKeyPress、KeyDownとKeyPreview = trueのTFormの両方でKeyDownを処理しようとしました。 私からのアドバイスを覗くました:

しかし、それは動作しませんでした。 イベントは、たとえば、TabキーではなくEnterキーですが、起動されます。

私はDelphi 7を使用しています。 ありがとうございました。

+0

'TAB'keyが次のコントロールにフォーカスを移動し、キーであることを意図しているので、彼らが解雇されていませんしたがって、特別な取り扱いがあります。 – TLama

+1

TLamaに感謝します。その動作を説明します。だからあなたは脱出ルートがあると思いますか? – Jako

+1

http://delphi.about.com/cs/adptips2002/a/bltip0702_5.htm –

答えて

16

Tabキーの動作をインターセプトする場合は、CM_DIALOGKEYメッセージをキャッチする必要があります。あなたがTrueにYouWantToInterceptTabブール値を設定する場合は、この例では、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. 
+2

TLamaさん、こんにちは、これは完全に機能しました。ベストカット&ペーストまで) – Jako

関連する問題