お知らせ

電子会議

ライブラリ

パレット

Delphi FAQ検索

Delphi FAQ一覧

サンプル蔵





FDelphi FAQ
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