Enterキーを押したときに、OnKeyPressイベントを優先して発生させるには?

解決


あろ〜ん  2004-04-04 07:12:48  No: 8196

キーボードの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;


Syake  2004-04-04 18:56:03  No: 8197

上記では「1」を押した後はButton1にFocusが移りますから
Enterでは必然的にButton1が押された事になってしまいますね。
SpeedButtonを使ったらFocusはいきませんのでうまくいくかと・・・

期待した答えと違いますよねm(__)m


るるとん@K  2004-04-04 19:05:51  No: 8198

Button1にFocusがきたらFocusを別のところにやるとか


jok  2004-04-05 06:12:11  No: 8199

> キーボードの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;

のようにするといいです。


あろ〜ん  2004-04-10 07:34:00  No: 8200

しばらくPC不調にて返信できず。失礼しました。
>jokさん
Application.OnMessageとは見た事もなかったです(汗
教示ありがとうございました


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加