|
16番会議室「玉石混淆みんなで作るSample蔵」に寄せられたサンプル
"矢印キーでフォーカス移動2"
■説明
Form1 に碁盤の目のように配置されたボタンへのフォーカスを、矢印
キーで移動させます。(上下左右に)
名前の設定方法がポイントです。FindComponent( ) を使用します。
■注意点
ボタンの配置は以下のようにして下さい。また、各ボタン名も以下の
ようにして下さい。各ボタンの後ろの数字が[列][行]を表します。
なお、TabOrder 順は、Btn11 → Btn34 の順(番号の小さい方から大
きい方へ順)に大きくなるように指定して下さい。
┌─────┐ ┌─────┐ ┌─────┐
│ Btn11 │ │ Btn21 │ │ Btn31 │
└─────┘ └─────┘ └─────┘
┌─────┐ ┌─────┐ ┌─────┐
│ Btn12 │ │ Btn22 │ │ Btn32 │
└─────┘ └─────┘ └─────┘
┌─────┐ ┌─────┐ ┌─────┐
│ Btn13 │ │ Btn23 │ │ Btn33 │
└─────┘ └─────┘ └─────┘
┌─────┐ ┌─────┐ ┌─────┐
│ Btn14 │ │ Btn24 │ │ Btn34 │
└─────┘ └─────┘ └─────┘
■サンプルコード
//=====================================================================
{...略...}
private
{ Private 宣言 }
procedure WMKEYDOWN( var Msg : TWMKEYDOWN );
message CM_CHILDKEY;
public
{ Public 宣言 }
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
var
ACol, ARow : Integer;
procedure TForm1.WMKEYDOWN( var Msg : TWMKEYDOWN );
begin
if ActiveControl is TButton then
with Msg do
begin
Result := 1;
case CharCode of
VK_LEFT:
if ACol > 1 then
begin
ACol := ACol - 1;
TButton(
FindComponent( 'Btn' + IntToStr( ACol * 10 + ARow ))
).SetFocus;
end;
VK_UP:
if ARow > 1 then
begin
SelectNext( ActiveControl, False, True );
ARow := ARow - 1;
end;
VK_RIGHT:
if ACol < 3 then
begin
ACol := ACol + 1;
TButton(
FindComponent( 'Btn' + IntToStr( ACol * 10 + ARow ))
).SetFocus;
end;
VK_DOWN:
if ARow < 4 then
begin
SelectNext( ActiveControl, True, True );
ARow := ARow + 1;
end;
else Result := 0;
end;
end;
inherited;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
ARow := 1;
ACol := 1;
end;
procedure TForm1.Btn11Click(Sender: TObject);
begin
with TButton( Sender ) do
begin
ARow := StrToInt( Name[5] ); //ボタン名に依存します
ACol := StrToInt( Name[4] ); //ボタン名に依存します
end;
end;
{...略...}
//=====================================================================
97/10/18(Sat) 18:46 Fermion [KHF03264]
Original document by Fermion 氏 ID:(KHF03264)
ここにあるドキュメントは NIFTY SERVEの Delphi Users' Forum の16番会議室「玉石混淆みんなで作るSample蔵」に投稿されたサンプルです。これらのサンプルはボーランド株式会社がサポートする公式のものではありません。また、必ずしも動作が検証されているものではありません。これらのサンプルを使用したことに起因するいかなる損害も投稿者、およびフォーラムスタッフはその責めを負いません。使用者のリスクの範疇でご使用下さい。
Copyright 1996-2002 Delphi Users' Forum
|