Как избавиться от звуков окон при захвате CTRL + S? - PullRequest
2 голосов
/ 21 декабря 2011

В моем приложении, когда я нажимаю CTRL + S, моя форма (с включенным предварительным просмотром ключа) фиксирует это и сохраняет документ.Но когда фокус находится, например, в элементе управления редактированием, я получаю раздражающий звук "Дин" или вообще звуки окон.Как мне избежать этого звука?

Вот моя форма захвата этого ключевого события ...

procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
var
  C: String;
begin
  if not fChanging then
    Modified;
  if ssCtrl in Shift then begin
    C:= LowerCase(Char(Key));
    if C = 's' then begin
      DoSave;
      Key:= 0; //Tried this but didn't work
    end else
    if C = 'c' then begin
      //Copy selected item(s)
    end;
  end;
end;

PS - Есть ли более стандартный способ захвата этих событий?Потому что я уверен, что делаю что-то не так, и я уверен, что есть еще один способ получить эти ключевые события без звуков.

Ответы [ 3 ]

7 голосов
/ 21 декабря 2011

Пара вещей:

  • Попробуйте поместить свой код в FormKeyPress вместо FormKeyDown.Это заставит код Key := 0; работать ... Вам нужно будет вручную обработать проверку CTRL, используя что-то вроде GetKeyState() (у меня изначально здесь было GetAsyncKeyState(), но, как указывает Роб Кеннеди, GetKeyState() is a much better option).
  • Используйте вместо этого действие. Добавьте в форму TActionList, дважды щелкните по ней, добавьте действие и установите его горячую клавишу для CTRL-S. Добавьте код сохранения в обработчик событий OnExecute.Я верю, что это «правильный» способ сделать это.

Надеюсь, это поможет.

2 голосов
/ 21 декабря 2011

Почему вы не используете действия? Это лучший способ обработки ярлыков.

2 голосов
/ 21 декабря 2011
...