Bezdepbonusu7Программирование: статьи и ответы

Вопрос

Как я могу захватить ключи-модификаторы при запуске приложения Delphi, чтобы вызвать какое-то поведение

Автор вопроса: DarrelОтветов: 3

Я пишу приложение в Delphi, которое использует базу данных SQLite3. Я хотел бы иметь возможность запускать приложение, удерживая некоторые клавиши-модификаторы, такие как CTRL + SHIFT, чтобы сигнализировать о повторной инициализации базы данных.

Как я могу зафиксировать, что приложение было запущено, пока эти клавиши удерживались?

sqlitedelphi

Ответы

Ответ 1 · рейтинг 8 · Jim McKeeth

У Тима есть правильный ответ, но вам может понадобиться немного больше фреймворка:

procedure TForm56.Button1Click(Sender: TObject);
begin
  if fNeedReinit then
    ReinitializeDatabase;
end;

procedure TForm56.FormCreate(Sender: TObject);
begin
  fNeedReinit := False;
end;

procedure TForm56.FormShow(Sender: TObject);
begin
 fNeedReinit := (GetKeyState(VK_SHIFT) < 0) and (GetKeyState(VK_CONTROL) < 0);
end;

Замените Button1Click более поздним событием, которое проверяет, установлен ли fNeedReinit. Вы также можете установить KeyPreview в своей основной форме, если у вас есть проблемы с тем, чтобы поймать нажатие клавиши. Я только что протестировал приведенный выше код, и он работает, но если у вас есть заставка и т. д., это может изменить ситуацию.

Ответ 2 · рейтинг 1 · Ates Goral

Попробуйте один из GetAsyncKeyState, GetKeyState или GetKeyboardState API-функции для чтения текущего состояния клавиш ctrl и shift при запуске программы. Добавление ловушки клавиатуры при запуске может не работать, поскольку события нажатия клавиш для клавиш Shift могли произойти до того, как ваше приложение сможет установить ловушку.

Ответ 3 · JamesSugrue

Вы должны захватить перехваты клавиатуры в своем приложении. см. здесь, а затем обработайте хуки перед отображением основной формы, например перед CreateForm и Run в файле dpr

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы