-3

ESCキーが押されて何かを実行したかどうかをプログラムで検出したいのですが、検出されません。別のコンポーネントにフォーカスが設定されている場合でも、実行中にエスケープキーが押されていることを検出したい!このコードを試しました

if key=#27 then
 begin
  //do something
 end;

何か提案をお願いします?

4

2 に答える 2

4

OnKeyDown の Delphi 3 ヘルプから借用して、上で書いたことを回答として形式化する

次のコードは、ユーザーが Esc キーを押した場合に印刷ジョブを中止します。Form1 の OnKeyDown イベント ハンドラが確実に呼び出されるようにするには、KeyPreview を True に設定する必要があります。

procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
  begin
    if (Key=VK_ESCAPE) and Printer.Printing then
      begin
        Printer.Abort;
        MessageDlg('Printing aborted', mtInformation, [mbOK],0);
      end;
  end;
于 2012-12-30T21:42:52.330 に答える
4

どのイベント ハンドラーを使用していますか? コントロールに接続されている場合、キーが押されてコントロールにフォーカスがあると、イベントが発生します。

アプリケーションにフォーカスがあるときにキーが押されたときにイベントを発生させたい場合は、TApplicationEvents コンポーネントをフォームにドロップし、次のような OnMessage イベント ハンドラを追加します。

procedure TfrmMain.ApplicationEvents1Message(var Msg: tagMSG;
  var Handled: Boolean);
begin
  case Msg.message of
    WM_KEYDOWN:
      if Msg.wParam = 27 then
      begin
        // Do something
      end;
  end;
end; 
于 2012-12-30T21:32:32.363 に答える