Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Для новичков > onKeyDown


Автор: Janger 18.8.2013, 18:34
Код

procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
   If ((GetKeyState(VK_SHIFT) AND 128)=128)
     and
     ((GetKeyState(VK_F1) AND 128)=128) then
  begin
    key:=0;
    ShowMessage('All OK');
  end;
end;

Вот сделал реакцию на 2 нажатые кнопки. Далее я спрятал форму
Код

Form1.hide;

Но в этом случае, ShowMessage не работает.
Подскажите как сделать, что бы всё же сообщение появилось?)

Автор: Poseidon 18.8.2013, 20:30
Цитата(Janger @  18.8.2013,  18:34 Найти цитируемый пост)
Но в этом случае, ShowMessage не работает.
Конечно не работает, ведь у тебя FormKeyDown - это процедура, выполняющаяся пр событии, которое инициализирует форма. А раз форма спрятана, то и событие не происходит. Можешь попробовать обработать OnKeyDown у той формы, которая остается на то время, пока Form1 спрятана; можешь попробовать отсылать своему спрятаному окну windows message (вот не стану ручаться, что hide окна нормально принимают сообщения); можешь почитать гугл на тему "Глобальные хуки".

Автор: Akella 19.8.2013, 09:02
Janger, задай вопрос по другому. Что нужно в итоге получить?

Автор: Janger 19.8.2013, 09:17
Цитата(Poseidon @ 18.8.2013,  20:30)
Цитата(Janger @  18.8.2013,  18:34 Найти цитируемый пост)
Но в этом случае, ShowMessage не работает.
Конечно не работает, ведь у тебя FormKeyDown - это процедура, выполняющаяся пр событии, которое инициализирует форма. А раз форма спрятана, то и событие не происходит. Можешь попробовать обработать OnKeyDown у той формы, которая остается на то время, пока Form1 спрятана; можешь попробовать отсылать своему спрятаному окну windows message (вот не стану ручаться, что hide окна нормально принимают сообщения); можешь почитать гугл на тему "Глобальные хуки".

Я вчера весь день потратил на "ремонт" программы.
Сейчас вот нашёл очень простое решение данной проблемы:
Код

procedure TForm2.Timer1Timer(Sender: TObject);
begin
 if (GetAsyncKeyState(VK_CONTROL) and GetAsyncKeyState(VK_F7)) <> 0 then
 ShowMessage('Нажат Ctrl+F7');
end;

Этот код работает когда программа свёрнута smile

Автор: northener 19.8.2013, 19:18
Цитата(Janger @  19.8.2013,  09:17 Найти цитируемый пост)
Этот код работает когда программа свёрнута 

А зарегистрировать горячую клавишу религия не позволяет?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)