0

これはバグですか、それとも何か不足していますか?

これは Delphi XE2 で書かれたコードですが、XE3 では動作しません...

procedure TForm1.Edit1KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin

  if Key = VK_ESCAPE then //works when I press ESC!
    ShowMessage('escape');

  if Key = VK_RETURN then
    ShowMessage('enter'); //doesn't work when I press ENTER!
end;
4

1 に答える 1

6

ENTER キーは「ダイアログ キー」と見なされます。たとえば、フォームのデフォルトのボタンをアクティブにすることができます。これはバグではありません。TEditキーを受け取りたい場合は、WM_GETDLGCODEを処理してキーを受け取りたいと言うENTERためにサブクラス化する必要があります。次のようにする必要があります。ENTER

procedure TYourEditSubclass.WMGetDlgCode(var Message: TWMGetDlgCode);
begin
  Message.Result := DLGC_WANTALLKEYS;
end;

または、FORM でKeyPreviewを有効にして、そのキーボード イベントを使用することもできます。Enter キーを受け取ったら、Edit にフォーカスがあるかどうかをテストします。次のようなものが機能します。

procedure TForm6.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  if (Key = VK_RETURN) and (Edit1.Focused) then
    ShowMessage('enter');
end;
于 2013-02-16T15:18:28.813 に答える