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

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

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 06.12.2009, 18:27   #1
Артэс
Форумчанин
 
Регистрация: 05.06.2007
Сообщений: 529
По умолчанию

Здравствуйте. Зажав кнопку, проходит определенное время, прежде чем действие начинает вновь повторяться... а как сделать, что бы сразу при зажатии клавиши выполнялись повторы действия, пока клавиша не будет отжата?

Код:
...
case WM_KEYDOWN:
switch (wParam)
{
case 'A': ... return 0;
...
}
и куда можно всунуть проверку в оконном приложении, что пришли новые данные по сокету, типа recv(); что бы проверялось четко, когда пришли НОВЫЕ данные, и затем их вытащить через recv();

Подскажите хотя бы, имеет ли смысл по 1000 раз в 1 секунду брать данные из буфера через recv(); и сравнивать, такие же они или изменились... или существует какой то готовый способ, при котором оконная программа сама может сообщить, что пришли данные на порт?

Последний раз редактировалось Stilet; 08.12.2009 в 14:56.
Артэс вне форума Ответить с цитированием
Старый 08.12.2009, 14:27   #2
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

Цитата:
а как сделать, что бы сразу при зажатии клавиши выполнялись повторы действия, пока клавиша не будет отжата?
ставьте таймер с проверкой "флага зажатия" и пусть в нем идет повтор
Цитата:
и куда можно всунуть проверку в оконном приложении, что пришли новые данные по сокету, типа recv(); что бы проверялось четко, когда пришли НОВЫЕ данные, и затем их вытащить через recv();
собственно это событие и есть событие, что пришли данные...
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Старый 08.12.2009, 15:37   #3
Артэс
Форумчанин
 
Регистрация: 05.06.2007
Сообщений: 529
По умолчанию

Так, на счет клавиш...

Код:
...
case WM_KEYDOWN:
switch (wParam){
case 'A': a=1;
case 'B': b=1;}

case WM_KEYUP:
switch(wParam){
case 'A': a=0;
case 'B': b=0;}

...далее идет проверка, если а==1 то действие, и б==1 то действие...
Работает, но вот когда зажимаю две клавиши, что бы выполнялось два действия... выполняется одно, той клавиши, которую я зажал последней... как исправить?

....
на счет проверки данных: получается, можно просто вставить recv(); в цилк программы, и пусть даже 1000 а то и больше раз в секунду эта функция срабатывает?
Артэс вне форума Ответить с цитированием
Старый 08.12.2009, 15:54   #4
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

Цитата:
Работает, но вот когда зажимаю две клавиши, что бы выполнялось два действия... выполняется одно, той клавиши, которую я зажал последней... как исправить?
потому-что событие WM_KEYDOWN идет на одну клавишу... вы можете использовать под case WM_KEYDOWN: GetKeyState() на две клавиши, пример см. тут
зы: придерживайтесь правила 1 вопрос - 1 тема
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Старый 08.12.2009, 16:41   #5
Артэс
Форумчанин
 
Регистрация: 05.06.2007
Сообщений: 529
По умолчанию

if (GetKeyState('A') == 1)

проверяю таким образом, но оказывается, это действуйет как переключатель, подобно Caps Lock'у и т.п... и даже если вовсе не в этом приложении клавиша была нажата... немножко не понимаю...
Артэс вне форума Ответить с цитированием
Старый 08.12.2009, 16:56   #6
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

Цитата:
if (GetKeyState('A') == 1)
что это такое вы делаете?

одновременное нажатие A и B
Код:
WM_KEYDOWN: begin
 If ((GetKeyState(ord('A')) AND 128)=128) and ((GetKeyState(ord('B'))   AND 128)=128) then ;
end;
так как событие WM_KEYDOWN вызывается только в вашем окне, то тут идет фильтрация GetKeyState для вашего окна... при использовании GetKeyState отдельно от него (например по таймеру) это действует глобально... смысл ясен?

еще можно вот >>> так <<<
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation

Последний раз редактировалось raxp; 08.12.2009 в 17:01.
raxp вне форума Ответить с цитированием
Старый 08.12.2009, 17:11   #7
Артэс
Форумчанин
 
Регистрация: 05.06.2007
Сообщений: 529
По умолчанию

Я видел этот пример, просто с синтаксисом Делфи не дружу... а что за ord и 128 вообще без понятия... мне бы на С/С++

Последний раз редактировалось Артэс; 08.12.2009 в 17:26.
Артэс вне форума Ответить с цитированием
Старый 08.12.2009, 17:39   #8
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

ord() - код клавиши... остальные команды есть на api
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Старый 08.12.2009, 18:47   #9
Артэс
Форумчанин
 
Регистрация: 05.06.2007
Сообщений: 529
По умолчанию

Уже не важно, я сделал по другому) Спасибо
Артэс вне форума Ответить с цитированием
Старый 08.12.2009, 18:58   #10
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

что значит не важно... если вы знаете еще способы, поделитесь с форумчанами, уважайте чужое время и вам тоже скажут спасибо
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Кнопки в Делфи tsergey Общие вопросы Delphi 4 10.02.2009 10:42
Кнопки Принц HTML и CSS 1 29.05.2008 17:25
UCOZ: Кнопки кнопки на изображении ReDuX HTML и CSS 19 25.04.2008 02:39
Кнопки )Игнат( Компоненты Delphi 21 22.01.2008 09:35
триггерные кнопки и кнопки переключатели в DELPHI MARGO Помощь студентам 3 12.11.2007 17:35