В коде, который я разработал несколько лет назад, я часто использовал это, чтобы закрыть текущую форму при нажатии клавиши Escape в любой момент:
procedure TSomeForm.FormKeyPress(Sender: TObject; var Key: Char);
begin
if key = #27 then close;
end;
Это поведение определено для TForm. Для свойства KeyPreview
формы установлено значение True
, чтобы форма реагировала на нажатия клавиш раньше любых других компонентов. Все это работает отлично в большей части программы, однако, когда клавиша Escape нажата, когда компонент TEdit сфокусирован, раздается звук (звук ding, используемый Windows для обозначения недопустимой операции). . Он по-прежнему работает нормально, но мне так и не удалось полностью избавиться от звука.
Что с этим не так?
Шаги по воссозданию:
- новое приложение VCL Forms, установите для KeyPreview формы значение true
на вкладке «События» дважды щелкните событие onKeyPress и введите фиктивный код:
если ключ = # 27, то;
добавить в форму TListBox, TCheckBox, TEdit и запустить приложение
- в приложении попробуйте нажать Esc, и НИЧЕГО не произойдет, как указано в фиктивном коде
- сфокусируйте TEdit и нажмите Esc. Ничего не происходит, но звук воспроизводится.