16番会議室「玉石混淆みんなで作るSample蔵」に寄せられたサンプル
"矢印キーでフォーカス移動4"
■説明
Form1 に碁盤の目のように配置されたボタンへのフォーカスを、矢印
キーで移動させます。(上下左右に)
以下の例はボタンですが、少々手を加えることで他のコントロールと
混在させることも可能です。
今回のものは TList を利用したものです。
■注意点
(1).ボタンの配置は以下のようにして下さい。
┌─────┐ ┌─────┐ ┌─────┐
│ Button1 │ │ Button2 │ │ Button3 │
└─────┘ └─────┘ └─────┘
┌─────┐ ┌─────┐ ┌─────┐
│ Button4 │ │ Button5 │ │ Button6 │
└─────┘ └─────┘ └─────┘
┌─────┐ ┌─────┐ ┌─────┐
│ Button7 │ │ Button8 │ │ Button9 │
└─────┘ └─────┘ └─────┘
┌─────┐ ┌─────┐ ┌─────┐
│ Button10 │ │ Button11 │ │ Button12 │
└─────┘ └─────┘ └─────┘
(2).ボタンの作成順は Button1 → Button12 として下さい。(※1)
(3).TabOrder は、
Button1 : 0 Button2 : 4 Button3 : 8
Button4 : 1 Button5 : 5 Button6 : 9
Button7 : 2 Button8 : 6 Button9 : 10
Button10: 3 Button11: 7 Button12: 11
として下さい。(※2)
※1,2がポイントですので必ずこの様にして下さい。m(_"_)m
なお、CM_CHILDKEY メッセージを受ける手続き名は任意に定められる
のですが、ここでは解り易いように、WMKeyDown としました。m(_"_)m
また、ButtonList.Count が 0 の場合を篩にかける処理は省略してい
ますのでご注意下さい。
■サンプルコード
//=====================================================================
{...略...}
private
{ Private 宣言 } //↓次の2行を追加します
procedure WMKeyDown( var Msg : TWMKEYDOWN );
message CM_CHILDKEY;
public
{ Public 宣言 }
end;
{...略...}
implementation
{$R *.DFM}
var
ButtonList : TList; //フォーカスの横方向移動順指定のため
//必要であれば縦方向も用意して下さい
procedure TForm1.FormCreate(Sender: TObject);
var
i : Integer;
begin
ButtonList := TList.Create;
for i := 0 to ControlCount - 1 do
if Controls[i] is TButton then ButtonList.Add( Controls[i] );
end; //↑この辺りは必要に応じて・・・
procedure TForm1.FormDestroy(Sender: TObject);
begin
ButtonList.Free;
end;
procedure TForm1.WMKeyDown( var Msg : TWMKEYDOWN );
var
Idx : Integer;
begin
with Msg do
case CharCode of
VK_LEFT :
with ButtonList do
begin
Idx := IndexOf( ActiveControl );
if Idx = -1 then Exit; //List に該当するものがないとき
TWinControl(
Items[ ( Count + Idx - 1 ) mod Count ]
).SetFocus;
Result := 1;
end;
VK_RIGHT :
with ButtonList do
begin
Idx := IndexOf( ActiveControl );
if Idx = -1 then Exit;
TWinControl( Items[ ( Idx + 1 ) mod Count ] ).SetFocus;
Result := 1;
end;
end;
end;
{...略...}
end.
//=====================================================================
98/01/14(水) 16:51 Fermion(KHF03264)
Original document by Fermion 氏 ID:(KHF03264)
ここにあるドキュメントは NIFTY SERVEの Delphi Users' Forum の16番会議室「玉石混淆みんなで作るSample蔵」に投稿されたサンプルです。これらのサンプルはボーランド株式会社がサポートする公式のものではありません。また、必ずしも動作が検証されているものではありません。これらのサンプルを使用したことに起因するいかなる損害も投稿者、およびフォーラムスタッフはその責めを負いません。使用者のリスクの範疇でご使用下さい。
Copyright 1996-2002 Delphi Users' Forum
|