ESCキーが押されて何かを実行したかどうかをプログラムで検出したいのですが、検出されません。別のコンポーネントにフォーカスが設定されている場合でも、実行中にエスケープキーが押されていることを検出したい!このコードを試しました
if key=#27 then
begin
//do something
end;
何か提案をお願いします?
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;
どのイベント ハンドラーを使用していますか? コントロールに接続されている場合、キーが押されてコントロールにフォーカスがあると、イベントが発生します。
アプリケーションにフォーカスがあるときにキーが押されたときにイベントを発生させたい場合は、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;