Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 09.03.2008, 12:49   #1
-=<[Evklidd]>=-
Форумчанин Подтвердите свой е-майл
 
Аватар для -=<[Evklidd]>=-
 
Регистрация: 22.01.2008
Сообщений: 161
По умолчанию Hot Key для проги

Написал прогу осуществляющую скриншот рабочего стола.
Терь хочу сделать так, чтобы юзер вместо того чтобы жать по баттонам проги, мог нажать определенные клавиши или сочетании клавиш на
клавиатуре и получить тож самое, то есть сделать горячие клавиши. Для этого я сделал обработчик события form1.keypress и в нем прописал, например: if KEY = #8 THEN
SHOT(); здесь shot - процедура выполняющая сам скриншот. В итоге все компилируется,
но при нажатии Backspace ни чего не происходит! что я сделал не так?! подскажите уважаемые программисты, заранее большое спасибо.
-=<[Evklidd]>=- вне форума Ответить с цитированием
Старый 09.03.2008, 13:04   #2
alexBlack
Участник клуба
 
Регистрация: 12.10.2007
Сообщений: 1,204
По умолчанию

Поставь свойство form1.KeyPreview := true;
alexBlack вне форума Ответить с цитированием
Старый 09.03.2008, 15:21   #3
lamonana
программист
Пользователь
 
Регистрация: 08.03.2008
Сообщений: 19
По умолчанию

У формы есть событие OnKeyPress, которое возникает при нажатии (и отпускании(!)) любой клавиши, когда форма активна.
Есть, правда, еше OnKeyDown и OnKeyUp, которые возникают только при нажатии или отпускании люб. клавиши(соотв). Но первая процедура может определять язык и регистр букв, чего остальные не могут, однако не может определить Enter, Escape и т. д., что могут сделать остальные.

Ну вот, в нутри процедуры KeyPress есть переменная Key типа Char, (что очень удобно(я имею ввиду что клавиша ввиде символа, а не кода, напр Key = '%') ), которая определяет нажатую клавишу.

Напр:

Код:
procedure TFControl.FormKeyPress(Sender: TObject; var Key: Char);
begin
if Fey = 'D'
  then
  begin
  ...
  end;
end;
KeyDown и KeyUp имеют переменные: Key типа Word, где записан код клавиши (абсолютно любой) и Shift типа TShiftState (ssAlt, ssCtrl,etc.) куда заносятся все альтернативные клавиши.

Например, вам нужно, чтоб сделался скриншот при нажатии Alt+S:

Код:
procedure TFControl.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
if ((Key = 83) and (Shift = aaAlt))
  then SHOT(...);
end;
Программист-Антиламер со стажем
lamonana вне форума Ответить с цитированием
Старый 09.03.2008, 15:21   #4
lamonana
программист
Пользователь
 
Регистрация: 08.03.2008
Сообщений: 19
По умолчанию

У формы есть событие OnKeyPress, которое возникает при нажатии (и отпускании(!)) любой клавиши, когда форма активна.
Есть, правда, еше OnKeyDown и OnKeyUp, которые возникают только при нажатии или отпускании люб. клавиши(соотв). Но первая процедура может определять язык и регистр букв, чего остальные не могут, однако не может определить Enter, Escape и т. д., что могут сделать остальные.

Ну вот, в нутри процедуры KeyPress есть переменная Key типа Char, (что очень удобно(я имею ввиду что клавиша ввиде символа, а не кода, напр Key = '%') ), которая определяет нажатую клавишу.

Напр:

Код:
procedure TFControl.FormKeyPress(Sender: TObject; var Key: Char);
begin
if Fey = 'D'
  then
  begin
  ...
  end;
end;
KeyDown и KeyUp имеют переменные: Key типа Word, где записан код клавиши (абсолютно любой) и Shift типа TShiftState (ssAlt, ssCtrl,etc.) куда заносятся все альтернативные клавиши.

Например, вам нужно, чтоб сделался скриншот при нажатии Alt+S:

Код:
procedure TFControl.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
if ((Key = 83) and (Shift = aaAlt))
  then SHOT(...);
end;
Программист-Антиламер со стажем
lamonana вне форума Ответить с цитированием
Старый 09.03.2008, 15:38   #5
lamonana
программист
Пользователь
 
Регистрация: 08.03.2008
Сообщений: 19
По умолчанию

У формы есть событие OnKeyPress, которое возникает при нажатии (и отпускании(!)) любой клавиши, когда форма активна.
Есть, правда, еше OnKeyDown и OnKeyUp, которые возникают только при нажатии или отпускании люб. клавиши(соотв). Но первая процедура может определять язык и регистр букв, чего остальные не могут, однако не может определить Enter, Escape и т. д., что могут сделать остальные.

Ну вот, в нутри процедуры KeyPress есть переменная Key типа Char, (что очень удобно(я имею ввиду что клавиша ввиде символа, а не кода, напр Key = '%') ), которая определяет нажатую клавишу.

Напр:

Код:
procedure TFControl.FormKeyPress(Sender: TObject; var Key: Char);
begin
if Fey = 'D'
  then
  begin
  ...
  end;
end;
KeyDown и KeyUp имеют переменные: Key типа Word, где записан код клавиши (абсолютно любой) и Shift типа TShiftState (ssAlt, ssCtrl,etc.) куда заносятся все альтернативные клавиши.

Например, вам нужно, чтоб сделался скриншот при нажатии Alt+S:

Код:
procedure TFControl.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
if ((Key = 83) and (Shift = aaAlt))
  then SHOT(...);
end;
Программист-Антиламер со стажем
lamonana вне форума Ответить с цитированием
Старый 09.03.2008, 15:53   #6
GAGARIN-NEW
Познаю мир
Форумчанин Подтвердите свой е-майл
 
Аватар для GAGARIN-NEW
 
Регистрация: 05.10.2007
Сообщений: 387
По умолчанию

Вопрос по теме как сделать чтобы например SHOT(); выаполнялся по нажатию только Ctrl?

if (Shift = aaAlt) then SHOT(...); неработает.
if (Shift = ssAlt) then SHOT(...); неработает.

ЗЫ: "Горячяя клавиша" не должна быть глобальной те вне моей программы она не должна срабатывать ... темболее если "перехватить" контроль за CTRL то многое перестанет работать /в моём понимании/
---

Последний раз редактировалось GAGARIN-NEW; 09.03.2008 в 16:08.
GAGARIN-NEW вне форума Ответить с цитированием
Старый 09.03.2008, 15:59   #7
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

То lamonana:
Это для пущей доходчивости вы отправили 3 одинаковых сообщения?
Не приветствуется...

Теперь по вопросу. Все то, что предлагалось - не есть "горячие клавиши" в их обычном понимании.
По правилам - ставьте хук на свое сочетание клавиш. А еще, если мне память не изменяет, как-то рассматривался вопрос регистрации в системе своих горячих клавиш. Поищите, скорее всего это именно то, что нужно.
mihali4 вне форума Ответить с цитированием
Старый 09.03.2008, 17:21   #8
lamonana
программист
Пользователь
 
Регистрация: 08.03.2008
Сообщений: 19
По умолчанию

Цитата:
Вопрос по теме как сделать чтобы например SHOT(); выаполнялся по нажатию только Ctrl?

if (Shift = aaAlt) then SHOT(...); неработает.
if (Shift = ssAlt) then SHOT(...); неработает.

ЗЫ: "Горячяя клавиша" не должна быть глобальной те вне моей программы она не должна срабатывать ... темболее если "перехватить" контроль за CTRL то многое перестанет работать /в моём понимании/
Попробуйте:

Код:
if (Key = 17) then SHOT(...);
Цитата:
Это для пущей доходчивости вы отправили 3 одинаковых сообщения?
Не приветствуется...
Прошу прощения, я не специально. У меня нет завис: я нажимаю - не работает, нажимаю - на работает, НАЖИМАЮ - НЕРАБОТАЕТ!
А потом БАЦ!.. И все три сообщения отправились. Надеюсь, больше не повторится.
Программист-Антиламер со стажем
lamonana вне форума Ответить с цитированием
Старый 09.03.2008, 17:35   #9
GAGARIN-NEW
Познаю мир
Форумчанин Подтвердите свой е-майл
 
Аватар для GAGARIN-NEW
 
Регистрация: 05.10.2007
Сообщений: 387
Смех

if (Key = 17) then SHOT(...);

Спасибо.Работает .
Ещё вопрос где вы узнаёте виртуальный код клавиш ??? тут например Ctrl - 17 .. итд ???
---
GAGARIN-NEW вне форума Ответить с цитированием
Старый 09.03.2008, 17:43   #10
B_N
Новичок
Джуниор
 
Регистрация: 18.01.2008
Сообщений: 1,720
По умолчанию

Цитата:
Сообщение от GAGARIN-NEW Посмотреть сообщение
if (Key = 17) then SHOT(...);

Спасибо.Работает .
Ещё вопрос где вы узнаёте виртуальный код клавиш ??? тут например Ctrl - 17 .. итд ???
http://msdn2.microsoft.com/en-us/library/ms927178.aspx
B_N вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
интересные проги kipish Софт 85 18.12.2022 01:03
Прокси-проги Spooter Софт 3 20.08.2008 10:55
Заморозка проги wwww Общие вопросы Delphi 3 09.10.2007 09:36
мои проги bill Помощь студентам 2 17.07.2007 21:33