キーボードのEnterキーを押したときに、
アクティブコントロールのClickイベントではなく、
EnterキーのOnKeyPressイベントを発生させるにはどうすればよいでしょうか?
以下のソースで実行したのですが、キーボードから'1'を押したあと、
Enterを押すと、'1'に対応したイベントが発生してしまいます。
よろしくおねがいします。
FormのKeyPreviewはTrueで行なってます
procedure TForm1.Button1Click(Sender: TObject);
begin
Showmessage('this is 1');
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
Showmessage('this is Return');
end;
procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);
begin
if key = '1' then
begin
Button1.SetFocus;
Button1click(sender);
end;
if Key = Chr(VK_RETURN) then
begin
Button2.SetFocus;
Button2click(sender);
end;
end;
上記では「1」を押した後はButton1にFocusが移りますから
Enterでは必然的にButton1が押された事になってしまいますね。
SpeedButtonを使ったらFocusはいきませんのでうまくいくかと・・・
期待した答えと違いますよねm(__)m
Button1にFocusがきたらFocusを別のところにやるとか
> キーボードのEnterキーを押したときに、
> アクティブコントロールのClickイベントではなく、
> EnterキーのOnKeyPressイベントを発生させるにはどうすればよいでしょうか?
Application.OnMessage で処理します。ApplicationEvents1 をおいてその
OnMessage イベントハンドラを
procedure TForm1.ApplicationEvents1Message(var Msg: tagMSG;
var Handled: Boolean);
begin
if (Msg.message = WM_KEYDOWN) and (Msg.wParam = VK_RETURN) then
begin
ShowMessage('VK_RETURN');
Handled := true;
end;
end;
のようにするといいです。
しばらくPC不調にて返信できず。失礼しました。
>jokさん
Application.OnMessageとは見た事もなかったです(汗
教示ありがとうございました
ツイート | ![]() |