|
15番会議室「FAQ編纂委員会」に寄せられた「よくある質問の答え」
[Q]
TAB キー、矢印キー等が押された時にそれらを捕らえてある処理をさせ
たい。
[A]
WMKEYDOWN 手続きで CM_CHILDKEY を捕らえて処理します。
(原案:謎の全知師さん。MES 6 #10575 参照。)
具体的な方法については“[例]”をご覧下さい。
[例]
以下の方法を使いますと、SpinEdit で押された Enter Key のように
コンポーネント内部でキー(メッセージ)が処理されて、 OnKeyPress
イベントなどで上手くキーを拾えないような場合でも、コンポーネント
にキー(メッセージ)が渡される前に捕らえられますので、通常の処理
を殺して代わりに任意の処理をさせる。というようなことも可能となり
ます。
なお、キーが押されたときの処理を、例えば Edit に限りたいような
ときには、if ActiveControl is TEdit then ...; 等と組み合わせて下
さい。(下記 VK_HOME のコード参照。)
//================================================================
{...略...}
private
{ Private 宣言 }
procedure WMKEYDOWN( var Msg : TWMKEYDOWN );//←追加
message CM_CHILDKEY; //←追加
public
{ Public 宣言 }
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.WMKEYDOWN( var Msg : TWMKEYDOWN );
begin
with Msg do
case CharCode of
VK_TAB :
begin {↓ここにキーが押された時の処理を記述}
ShowMessage( 'TAB キーが押されました' );
Result := 1; {←1:本来の処理をさせたくない場合}
end; { 0:本来の処理をさせたい場合 }
VK_RETURN :
begin {↓ここにキーが押された時の処理を記述}
SendMessage( Handle, WM_NEXTDLGCTL, 0, 0 );
Result := 1;
end;
VK_HOME :{↓キーが押された時の処理を Edit に限定}
if ActiveControl is TEdit then
begin
ShowMessage( 'HOME キーが押されました' );
Result := 1;
end;
VK_UP :
begin {↓ここにキーが押された時の処理を記述}
SendMessage( Handle, WM_NEXTDLGCTL, 1, 0 );
Result := 1;
end;
VK_DOWN :
begin {↓ここにキーが押された時の処理を記述}
SendMessage( Handle, WM_NEXTDLGCTL, 0, 0 );
Result := 1;
end;
end;
inherited;
end;
//================================================================
ここにあるドキュメントは NIFTY SERVEの Delphi Users' Forum FDELPHIに寄せられる質問の中から、よくある質問への回答を FDELPHIのメンバーがまとめたものです。 したがって、これらの回答はボーランド株式会社がサポートする公式のものではなく、掲示されている内容についての問い合わせは受けられない場合があります。
Copyright 1996-1998 Delphi Users' ForumFAQ編纂委員会
|