初心者のONEともします
Edit1〜Edit15に数字を入力しEnterキーを押す。
Edit1〜Edit15の間を繰り返し移動するにはどうしたらよいのでしょうか?
教えてください。
Edit1〜Edit15だけしかないのであれば、OnKeyPressイベントに
procedure TForm1.EditKeyPress(Sender: TObject; var Key: Char);
begin
if Key=Chr(VK_RETURN) then
begin
Key := #0; // キーをクリア
keybd_event(VK_TAB, 0, 0, 0); // タブキーを押したことにする
keybd_event(VK_TAB, 0, KEYEVENTF_KEYUP, 0); // タブキーを放したことにする
end;
end;
を割り当てればできます。
# TabStop, TabOrderの設定が必要です
もし、Edit1〜Edit15以外にコントロールが存在するなら、それらをとばす処理が必要になります。
にしのさんへ
初心者なので
『# TabStop, TabOrderの設定が必要です』とありますが、これについては、
何処ように勉強したらよいのでしょうか?
調べるところがあるのでしょうか
又、『Edit1〜Edit15以外にコントロールが存在するなら、それらをとばす処理が必要になります。』これについても教えてください。
ヘルプを見てください。
TabStopプロパティ、TabOrderプロパティに関しては、ヘルプに出ています。
コントロールと言ったのが解りづらかったかもしれませんね。
タブキーで、入力フォーカスを移動できることは知っていると思います。
# Windowsの標準動作です
タブキーで移動していることと同じことを、Enterキーにさせる場合、もし、Edit1〜Edit15の他に、例えばButton1などがあれば、そこにもフォーカスが移動してしまいます。
もし、Buttonなどのフォーカスを受け取るコンポーネントが存在しているならば、Edit1〜Edit15を、循環してフォーカス移動することはできません。
TabStop, TabOrderを設定すればできますが、その場合、Buttonにタブキーでフォーカス移動することができなくなります。
# このあたりの動作はTabStop, TabOrderを調べてください
例えば、
Edit1
Edit2
Edit3
と貼り付けて、OnKeyPressイベントを上記のものに設定しておけば、
Edit1→Edit2→Edit3→Edit1→Edit2...とフォーカス移動できます。
しかし、
Edit1
Edit2
Edit3
Button1
の場合、
Edit1→Edit2→Edit3→Button1となり、Button1でのエンターキーでButton1をクリックしたこととなり、フォーカスの循環移動にはなりません。
Button1のTabStopをFalseにしておけば、
Edit1→Edit2→Edit3→Edit1→Edit2...と移動しますが、Button1にタブキーで移動することができません。
Halbow です。
Tab キーのシミュレートでは難しそうですね。
明示的に、次の Edit を探して SetFocus したらどうでしょうか。
名前が Edit1 から Edit15 まで順序よく付いていると仮定すると、
そのすべての OnKeyPress イベントハンドラを以下の一つのハンドラに
結びつけてやると、うまくいくようです。
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
var
Edit:TEdit;
EditNo:integer;
Compo:TComponent;
begin
if Key=Chr(VK_RETURN) then
begin
Key := #0; // キーをクリア
Edit := Sender as TEdit;
EditNo := StrToInt(Copy(Edit.Name,5,2));
if EditNo = 15 then EditNo := 0;
Compo := FindComponent('Edit'+IntToStr(EditNo+1));
if Assigned(Compo) then (Compo as TEdit).SetFocus;
end;
end;
おはようございます。
ONEです。
プログラム言語を初めてつかています。
今回の質問とは、関係ないのですが
どのような勉強したら、にしのさん、Halbowさん、質問に答えてる皆さん、
みたいになれるのでしょうか?
Halbow です。
> どのような勉強したら
地道に基礎から勉強していくと、応用や発想の幅が広がると思います。
あと、プログラミング自体を楽しいと感じることが必要かもしれません。
http://kakinotane.s7.xrea.com/
ここの「Delphi 入門」はおすすめです。
ここにもたまに顔を出される Mr.XRAY さんが、別の BBS で回答を書かれている
内容に感心したことがあります。詳細は忘れましたが以下のような内容だったと
思います。
[質問]
あしたからマラソンを始めます。どうしたら、高橋尚子さんの記録を破ることが
できるでしょうか。
[回答]
健康であれば、マラソンはいつからでも始められます。優れたトレーニングをし
たり、一生懸命努力したとしても、どなたでも高橋尚子さんになれるわけでは
ありませんよ。でも、マラソンを楽しむことはできるかもしれませんね。
どんな分野でも、ある程度精通するには、基礎的な事柄を大事にし、地道に努力し、
そして楽しむことだと思っています。エラそうなことを書きましたが、
年寄りに免じてお許しください。
にしのさん、Halbowさん
有難うございます。
ツイート | ![]() |