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

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

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

Ответы [ 4 ]

8 голосов
/ 16 октября 2008

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

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;

Изменить Button1Нажмите со своим последующим событием, которое проверяет, был ли установлен fNeedReinit. Вы также можете установить KeyPreview в своей главной форме, если у вас возникли проблемы с тем, чтобы он ловил нажатие клавиши. Я только что протестировал приведенный выше код, и он работает, но если у вас есть заставка и т. Д., То это может изменить ситуацию.

7 голосов
/ 16 октября 2008
if (GetKeyState(VK_SHIFT) < 0) and (GetKeyState(VK_CONTROL) < 0) then
  ReinitializeDatabase;
1 голос
/ 16 октября 2008

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

0 голосов
/ 16 октября 2008

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...