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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 18.01.2018, 12:17   #1
The1fEst
 
Регистрация: 18.01.2018
Сообщений: 7
Сообщение Повторение зажатой кнопки и GetAsyncKeyState

Всем привет.
Я думаю не для кого не секрет, то что при зажатии кнопки на клавиатуре начинается бесконечный повтор данного символа, а GetAsyncKeyState триггерится на каждый. В общем нужно программно "заглушить" эти повторы. Да, гугл не помог =(
Вот та самая злосчастная часть кода
Код:
procedure TForm5.skill1;
begin
  triggered:= true;
  if GetAsyncKeyState(hotkey5.hotkey)<>0 then
    while 1 = 1 do
    begin
      if GetAsyncKeyState(hotkey5.hotkey)=0 then
        begin triggered:= false; form6.Panel1.Color:=clred; break; end;
      begin
        Application.ProcessMessages;
        keydn(Form5.HotKey1.hotkey);
        keyups(Form5.HotKey1.hotkey);
        Delay(strtoint(Form5.skill1delay.Text));
      end;
    end;
end;
The1fEst вне форума Ответить с цитированием
Старый 18.01.2018, 12:56   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,695
По умолчанию

Например, заведите переменную и если кнопка не нажата ставьте тру. Нажата и флаг, то обрабатываем и фолс.
p51x вне форума Ответить с цитированием
Старый 18.01.2018, 13:09   #3
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,656
По умолчанию

Когда вижу внутри цикла вызов Application.ProcessMessages(), мне хочется орать матом.

Что я и делаю.
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 18.01.2018, 13:17   #4
The1fEst
 
Регистрация: 18.01.2018
Сообщений: 7
По умолчанию

Цитата:
Сообщение от min@y™ Посмотреть сообщение
Когда вижу внутри цикла вызов Application.ProcessMessages(), мне хочется орать матом.

Что я и делаю.
Сорри, давай хоть вместе поорём =) Исправлюсь

Последний раз редактировалось The1fEst; 18.01.2018 в 13:22.
The1fEst вне форума Ответить с цитированием
Старый 18.01.2018, 13:19   #5
The1fEst
 
Регистрация: 18.01.2018
Сообщений: 7
По умолчанию

Цитата:
Сообщение от p51x Посмотреть сообщение
Например, заведите переменную и если кнопка не нажата ставьте тру. Нажата и флаг, то обрабатываем и фолс.
Была неудачная попытка сделать так
Код:
var
hold:boolean;
begin
  CheckBox7.Checked := true;
  if GetAsyncKeyState(hotkey5.hotkey)<>0 then hold:=true;
  if GetAsyncKeyState(hotkey5.hotkey)=0 then hold:=false;
    if hold=true then
    while 1 = 1 do
    begin
      if hold=false then
        begin CheckBox7.Checked:= false; form6.Panel1.Color:=clred; break; end;
и т.д.
The1fEst вне форума Ответить с цитированием
Старый 18.01.2018, 13:22   #6
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,656
По умолчанию

Цитата:
Сообщение от The1fEst Посмотреть сообщение
Сорри, давай хоть вместе поорём =)
Давай!

А теперь колись давай, накой хер тебе понадобился GetAsyncKeyState()?
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 18.01.2018, 13:31   #7
The1fEst
 
Регистрация: 18.01.2018
Сообщений: 7
По умолчанию

Цитата:
Сообщение от min@y™ Посмотреть сообщение
А теперь колись давай, накой хер тебе понадобился GetAsyncKeyState()?
Что бы работал скрипт пока кнопка нажата, естественно когда её отпускаешь скрипт перестаёт работать и всё бы ничего, но GetAsyncKeyState() имеет такой некрасивый изъян
The1fEst вне форума Ответить с цитированием
Старый 18.01.2018, 13:32   #8
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,656
По умолчанию

Цитата:
Сообщение от The1fEst Посмотреть сообщение
Что бы работал скрипт пока кнопка нажата, естественно когда её отпускаешь скрипт перестаёт работать и всё бы ничего, но GetAsyncKeyState() имеет такой некрасивый изъян
А чо, OnKeyDown/OnKeyUp отменили штоли?
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 18.01.2018, 13:34   #9
The1fEst
 
Регистрация: 18.01.2018
Сообщений: 7
По умолчанию

Цитата:
Сообщение от min@y™ Посмотреть сообщение
А чо, OnKeyDown/OnKeyUp отменили штоли?
Нужно более глобальное решение т.к. приложение находится на фоне, а не в фокусе
The1fEst вне форума Ответить с цитированием
Старый 18.01.2018, 13:55   #10
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Цитата:
Сообщение от min@y™ Посмотреть сообщение
Когда вижу внутри цикла вызов Application.ProcessMessages(), мне хочется орать матом.
как проорётесь, мотивируйте, пожалуйста.

что в этом плохого то?

или речь о конкретном случае?
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
GetAsyncKeyState NEoMASTERR Общие вопросы Delphi 3 20.04.2016 17:20
Движение зажатой мыши по экрану NEoMASTERR Общие вопросы Delphi 5 22.02.2015 09:26
На getasynckeystate() ругаеться Касперский? Дима я Win Api 9 19.08.2012 13:44
Принцип работы функции GetAsyncKeyState wwe2012 Общие вопросы C/C++ 0 10.04.2011 09:15
Повторение действий до нажатия кнопки Tukzar Общие вопросы Delphi 4 19.07.2010 08:22