purebasic.info

PureBasic forum
Текущее время: Пн ноя 19, 2018 12:29 pm

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 29 ]  На страницу Пред.  1, 2
Автор Сообщение
 Заголовок сообщения: Re: Отловить нажатие клавиш F1-F11
СообщениеДобавлено: Вт мар 18, 2014 6:05 pm 
Не в сети
PureBasic Coder
Аватар пользователя

Зарегистрирован: Чт ноя 10, 2011 10:50 am
Сообщений: 4049
Откуда: Ростов-на-Дону
Благодарил (а): 70 раз.
Поблагодарили: 81 раз.
Пункты репутации: 24
pablov писал(а):
на win 7 x64 не ловит
Очень странно :? :?
Изображение

_________________
Пурик - лучший язык программирования


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Отловить нажатие клавиш F1-F11
СообщениеДобавлено: Вт мар 18, 2014 7:24 pm 
Не в сети
профессор
Аватар пользователя

Зарегистрирован: Вс дек 09, 2012 9:02 pm
Сообщений: 777
Откуда: Дагестан
Благодарил (а): 0 раз.
Поблагодарили: 12 раз.
Пункты репутации: 0
Цитата:
Вот так нажимается F10
на 8-ке через один нажимается


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Отловить нажатие клавиш F1-F11
СообщениеДобавлено: Ср мар 26, 2014 3:56 pm 
Не в сети
доцент

Зарегистрирован: Ср сен 12, 2012 5:04 am
Сообщений: 56
Благодарил (а): 2 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
работает, спасибо!
Использую
Код:
1
SetWindowCallback(@WinCallback())



Только теперь хочу передать туда переменную
Код:
1
string.s



Как правильно это сделать?
Через
Код:
1
SetWindowCallback(@WinCallback(string.s))

не хочет работать


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Отловить нажатие клавиш F1-F11
СообщениеДобавлено: Ср мар 26, 2014 4:01 pm 
Не в сети
PureBasic Coder
Аватар пользователя

Зарегистрирован: Чт ноя 10, 2011 10:50 am
Сообщений: 4049
Откуда: Ростов-на-Дону
Благодарил (а): 70 раз.
Поблагодарили: 81 раз.
Пункты репутации: 24
Переменную нужно сделать глобальной. Задать значение переменной в основной программе, а в калллбеке считать значение этой переменной

_________________
Пурик - лучший язык программирования


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Отловить нажатие клавиш F1-F11
СообщениеДобавлено: Пт мар 28, 2014 5:41 am 
Не в сети
доцент

Зарегистрирован: Ср сен 12, 2012 5:04 am
Сообщений: 56
Благодарил (а): 2 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
Никита Однороб писал(а):
Переменную нужно сделать глобальной. Задать значение переменной в основной программе, а в калллбеке считать значение этой переменной


Никита, не получается через глобальную переменную (ниже код и скриншот)

Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
 
Procedure WinCallback(hWnd, uMsg, WParam, LParam)
       If uMsg = #WM_KEYDOWN
      For i=1 To 12
      If GetAsyncKeyState_(#VK_F1+i-1)= -32767
        Debug "Нажата F"+Str(i)+ "<"+string.s+">"
      ;Тут выполняем нужные действия, например, прерываем основной цикл
        Break
      EndIf
    Next
    EndIf  
 
    ProcedureReturn #PB_ProcessPureBasicEvents
EndProcedure
 
  If OpenWindow(0, 0, 0, 200, 100, "Messages", #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget)
    Global string.s = "test"
    Debug string.s
    SetWindowCallback(@WinCallback())    ; activate the callback
   
    Repeat
      Select WaitWindowEvent()
        Case #PB_Event_CloseWindow
          End
      EndSelect
    ForEver
  EndIf
 



Вложения:
test.png [32.42 KiB]
Скачиваний: 0
Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Отловить нажатие клавиш F1-F11
СообщениеДобавлено: Пт мар 28, 2014 5:57 am 
Не в сети
студент

Зарегистрирован: Чт мар 27, 2014 9:10 am
Сообщений: 1
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
Цитата:
не получается через глобальную переменную (ниже код и скриншот)

Глобальную переменную нужно объявлять перед процедурой.


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Отловить нажатие клавиш F1-F11
СообщениеДобавлено: Пт мар 28, 2014 6:07 am 
Не в сети
доцент

Зарегистрирован: Ср сен 12, 2012 5:04 am
Сообщений: 56
Благодарил (а): 2 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
rales писал(а):
Цитата:
не получается через глобальную переменную (ниже код и скриншот)

Глобальную переменную нужно объявлять перед процедурой.


Заработало)

Спасибо!


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Отловить нажатие клавиш F1-F11
СообщениеДобавлено: Пн апр 21, 2014 4:55 pm 
Не в сети
доцент

Зарегистрирован: Ср сен 12, 2012 5:04 am
Сообщений: 56
Благодарил (а): 2 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
Ан нет, рано порадовался:)
Чего-то не могу понять: в коде ниже нажатие F5 не работает после нажатия кнопки.
Т.е. если сначал нажимаем F5 (даже и несколько раз) - всё ок.
А вот если нажимаем кнопку - F5 не работает..
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
 
Procedure WinCallback(hWnd, uMsg, WParam, LParam)
  If uMsg = #WM_KEYDOWN
    If GetAsyncKeyState_(#VK_F5) = -32767
      Debug "Нажата F5"
    EndIf
  EndIf
    ProcedureReturn #PB_ProcessPureBasicEvents
  EndProcedure
 
If OpenWindow(0, 0, 0, 200, 100, "Messages", #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget)
    ButtonGadget(11, 10, 10, 75, 25, "test")
    SetWindowCallback(@WinCallback())    ; activate the callback
   
    Repeat
      Select WaitWindowEvent()
        Case #PB_Event_CloseWindow
        Debug "Близок выход"
        Case #PB_Event_Gadget
        Debug "Нажата кнопка"
       EndSelect
    ForEver
   
EndIf



Вложение:
error.gif [47.66 KiB]
Скачиваний: 0


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Отловить нажатие клавиш F1-F11
СообщениеДобавлено: Чт май 15, 2014 1:42 pm 
Не в сети
ассистент

Зарегистрирован: Пн фев 17, 2014 1:06 pm
Сообщений: 18
Благодарил (а): 4 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
Procedure WinCallback(hWnd, uMsg, WParam, LParam)
  If uMsg = #WM_KEYDOWN
    If GetAsyncKeyState_(#VK_F5) = -32767
      Debug "Нажата F5"
    EndIf
  EndIf
    ProcedureReturn #PB_ProcessPureBasicEvents
  EndProcedure
 
If OpenWindow(0, 0, 0, 200, 100, "Messages", #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget)
    ButtonGadget(11, 10, 10, 75, 25, "test")
    SetWindowCallback(@WinCallback())    ; activate the callback
   
    Repeat
      Select WaitWindowEvent()
        Case #PB_Event_CloseWindow
        Debug "Близок выход"
        Case #PB_Event_Gadget
          Debug "Нажата кнопка"
          SetFocus_(WindowID(0))
          ;SetActiveGadget(0)
 
       EndSelect
    ForEver
   
EndIf



Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Отловить нажатие клавиш F1-F11
СообщениеДобавлено: Вт ноя 06, 2018 6:23 pm 
Не в сети
профессор
Аватар пользователя

Зарегистрирован: Чт июн 25, 2009 1:02 pm
Сообщений: 2291
Откуда: Russia — Belarus
Благодарил (а): 7 раз.
Поблагодарили: 72 раз.
Пункты репутации: 11
У меня почему-то на свежеустановленной Windows 7 x64 этот код не работает:
Код:
1
2
3
4
5
6
Repeat
  If GetAsyncKeyState_(#VK_Z) > 0
    Debug "Z"
  EndIf
  Delay(500)
ForEver


_________________
EnableExplicit User


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Отловить нажатие клавиш F1-F11
СообщениеДобавлено: Вт ноя 06, 2018 7:28 pm 
Не в сети
ассистент

Зарегистрирован: Ср мар 30, 2016 9:45 pm
Сообщений: 20
Благодарил (а): 0 раз.
Поблагодарили: 5 раз.
А вот так, должно работать:
Repeat
state.u=GetAsyncKeyState_(#VK_Z)
If state.u > 0
Debug "Z"
EndIf
Delay(100)
ForEver

Вообще идеологически правильнее - анализировать биты переменной State :D
http://vsokovikov.narod.ru/New_MSDN_API ... ystate.htm
p.s. проверял на Windows 7 x64


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Отловить нажатие клавиш F1-F11
СообщениеДобавлено: Вт ноя 06, 2018 7:44 pm 
Не в сети
профессор
Аватар пользователя

Зарегистрирован: Чт июн 25, 2009 1:02 pm
Сообщений: 2291
Откуда: Russia — Belarus
Благодарил (а): 7 раз.
Поблагодарили: 72 раз.
Пункты репутации: 11
Polkovnik писал(а):
А вот так, должно работать:
Repeat
state.u=GetAsyncKeyState_(#VK_Z)
If state.u > 0
Debug "Z"
EndIf
Delay(100)
ForEver

Вообще идеологически правильнее - анализировать биты переменной State :D
http://vsokovikov.narod.ru/New_MSDN_API ... ystate.htm
p.s. проверял на Windows 7 x64

Спасибо, работает!

_________________
EnableExplicit User


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Отловить нажатие клавиш F1-F11
СообщениеДобавлено: Вт ноя 06, 2018 7:49 pm 
Не в сети
ассистент

Зарегистрирован: Ср мар 30, 2016 9:45 pm
Сообщений: 20
Благодарил (а): 0 раз.
Поблагодарили: 5 раз.
На здоровье :D развлекайтесь :D


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Отловить нажатие клавиш F1-F11
СообщениеДобавлено: Вт ноя 06, 2018 8:19 pm 
Не в сети
МОДЕРАТОР

Зарегистрирован: Вт дек 05, 2006 8:46 am
Сообщений: 6398
Благодарил (а): 21 раз.
Поблагодарили: 200 раз.
Пункты репутации: 52
qpAHToMAS писал(а):
У меня почему-то на свежеустановленной Windows 7 x64 этот код не работает:
Код:
1
2
3
4
5
6
Repeat
  If GetAsyncKeyState_(#VK_Z) > 0
    Debug "Z"
  EndIf
  Delay(500)
ForEver



нормально так работает
Код:
1
2
3
4
5
6
Repeat
  If GetAsyncKeyState_(#VK_Z) = - 32767  
    Debug "Z"
  EndIf
  Delay(5 )
ForEver


_________________
read-only ¯\_(ツ)_/¯


Вернуться наверх
 Профиль  
 
Показать сообщения за:  Сортировать по:  
Начать новую тему Ответить на тему  [ Сообщений: 29 ]  На страницу Пред.  1, 2

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: Bing [Bot] и гости: 7


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Создано на основе phpBB® Forum Software © phpBB Group (блог о phpBB)
Сборка создана CMSart Studio
Русская поддержка phpBB