掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
Onkeydownで数字と仮想キーの入力をするには (ID:38522)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
困られている現象を完全には再現/理解はできないのですが、実現したいことが下記のようなことではないかと推測して見ました。 ●Form1→PageControl1→TabSheet1→Button0〜9,Eがある (TabSheet1を挿入し、Button10は削除) ●キーボードより、数字'0'〜'9'を押した場合に対応するButton0〜9のOnClickイベントが発生 ●キーボードより、リターンキーを押した場合にはButtonEのOnClickイベントが発生 ここで厄介なのは、TButtonにフォーカスがある場合には、リターンキーを押すとTForm1.KeyDownは処理されずにフォーカスがあるTButtonのOnClickイベントが発生することです。 よって、TButtonのOnClickイベントで、フォーカスをTabSheet1へ移動させました。 また、タブによるフォーカス移動もしないように全てのTButtonのTabStopプロパティをFalseにします。 Delphi6 Personal,Win2000の環境で希望通りの処理とはなっています。 なお、TForm1.KeyDownというprocedure名ではなく、TForm1.FormKeyDownを使っています。 // *** サンプルコード *** // procedure TForm1.ButtonClick(Sender: TObject); begin ShowMessage(TButton(Sender).Caption+'が押されました'); //実際のマウスクリックでフォーカスがボタンに移動していた場合に //リターンキーでボタンのOnClickイベントが発生するのを回避するために //PageControl1のTabSheet1にフォーカスを移す if TButton(Sender).Focused then TabSheet1.SetFocus; end; procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); var sNo:String; btn:TButton; begin if Key=VK_RETURN then begin ButtonE.Click; end else begin //キーボードからの'1'〜'9'までの数字入力に対応 //テンキーからの数字入力には別途対応が必要 sNo:=Chr(key); try if StrToInt(sNo)<10 then begin btn:=FindComponent('Button'+sNo) as TButton; btn.Click; end; except end; end; end;
←解決時は質問者本人がここをチェックしてください。
更新する
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.