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

解決


あろ〜ん  2004-04-03 22:12:48  No: 8196  IP: 192.*.*.*

キーボードの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 09:56:03  No: 8197  IP: 192.*.*.*

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

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

編集 削除
るるとん@K  2004-04-04 10:05:51  No: 8198  IP: 192.*.*.*

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

編集 削除
jok  2004-04-04 21:12:11  No: 8199  IP: 192.*.*.*

> キーボードの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-09 22:34:00  No: 8200  IP: 192.*.*.*

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

編集 削除