purebasic.info

PureBasic forum
Текущее время: Чт июн 20, 2019 2:26 pm

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




Начать новую тему Ответить на тему  [ Сообщений: 9 ] 
Автор Сообщение
 Заголовок сообщения: Клавиатура
СообщениеДобавлено: Сб сен 05, 2009 8:53 am 
Не в сети
ассистент

Зарегистрирован: Сб сен 05, 2009 8:37 am
Сообщений: 10
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
нужно сделать чтобы обрабатывать клавиатуру
purebasic требует сначала openscreen()
а мне надо чтобы совсем без окна

Код:
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
29
30
31
32
33
34
35
36
37
38
39
 
If OpenWindow(0,20,20,100,50,"Трей",#PB_Window_Invisible|#PB_Window_SystemMenu)
  If CreateGadgetList(WindowID(0))
 
   Image=LoadImage(0,"SysTray.ico") ; Получаем идентификатор иконки
   AddSysTrayIcon(4, WindowID(0),Image ) ; Отображаем иконку в трее
   SysTrayIconToolTip(4, "PureBasic") ; Добавляем всплывающую подсказку к иконке
   CreatePopupMenu(1) ; Создаём всплывающее меню
   MenuItem(2,"Выход") ; Добавляем пункт к меню
   
    Result = InitKeyboard()
   
       
   
    Repeat
    ExamineKeyboard()
    Event=WaitWindowEvent() ; Получаем идентификатор текущего события в программе
    Type=EventType() ; Узнаём тип события
    Menu=EventMenu() ; Узнаём идентификатор активного пункта меню
     ; Отображаем всплывающее меню при щелчке правой кнопкой мышки по иконке в трее
     If Event=#PB_Event_SysTray And Type=#PB_EventType_RightClick
      DisplayPopupMenu(1, WindowID(0))
     EndIf
      ; Прерываем цикл при щелчке по пункту "Выход" всплывающего меню
     If Event=#PB_Event_Menu And Menu=2
      Break
     EndIf
     
     
     If KeyboardPushed(#PB_Key_LeftAlt)
       If KeyboardPushed(#PB_Key_1)
          MessageRequester("Information", "alt+1", 0)
       EndIf  
     EndIf
     
    Until Event=#PB_Event_CloseWindow
  EndIf
EndIf
End



как сделать?


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Сб сен 05, 2009 10:58 am 
Не в сети
МОДЕРАТОР
Аватар пользователя

Зарегистрирован: Пн апр 09, 2007 4:53 pm
Сообщений: 11483
Благодарил (а): 4 раз.
Поблагодарили: 468 раз.
Ынтон писал(а):
а мне надо чтобы совсем без окна
Тогда можно использовать API функцию GetAsyncKeyState

Код:
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
29
30
31
32
33
34
35
36
37
38
If OpenWindow(0,20,20,100,50,"Трей",#PB_Window_Invisible|#PB_Window_SystemMenu) 
  If CreateGadgetList(WindowID(0))
 
   Image=LoadImage(0,"C:\Program Files\PureBasic\Examples\Sources\Data\CdPlayer.ico") ; Получаем идентификатор иконки
   AddSysTrayIcon(4, WindowID(0),Image ) ; Отображаем иконку в трее
   SysTrayIconToolTip(4, "PureBasic") ; Добавляем всплывающую подсказку к иконке
   CreatePopupMenu(1) ; Создаём всплывающее меню
   MenuItem(2,"Выход") ; Добавляем пункт к меню
   
    ;Result = InitKeyboard()
   
       
   
    Repeat
    ;ExamineKeyboard()
    Event=WaitWindowEvent(100) ; Получаем идентификатор текущего события в программе
    Type=EventType() ; Узнаём тип события
    Menu=EventMenu() ; Узнаём идентификатор активного пункта меню
     ; Отображаем всплывающее меню при щелчке правой кнопкой мышки по иконке в трее
     If Event=#PB_Event_SysTray And Type=#PB_EventType_RightClick
      DisplayPopupMenu(1, WindowID(0))
     EndIf
      ; Прерываем цикл при щелчке по пункту "Выход" всплывающего меню
     If Event=#PB_Event_Menu And Menu=2
      Break
     EndIf
     
     
     If GetAsyncKeyState_(#VK_LMENU) ;KeyboardPushed(#PB_Key_LeftAlt)
       If GetAsyncKeyState_($31)<0  ;KeyboardPushed(#PB_Key_1)
          MessageRequester("Information", "alt+1", 0)
       EndIf  
     EndIf
     
    Until Event=#PB_Event_CloseWindow
  EndIf
EndIf
End


_________________
Компьютер позволяет решать все те проблемы, которые до его изобретения не существовали. :) :)


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Сб сен 05, 2009 12:56 pm 
Не в сети
ассистент

Зарегистрирован: Сб сен 05, 2009 8:37 am
Сообщений: 10
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
спасибо


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re:
СообщениеДобавлено: Пн мар 04, 2019 10:30 pm 
Не в сети
док

Зарегистрирован: Чт окт 27, 2011 7:43 pm
Сообщений: 136
Откуда: Санкт-Ленинград
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
Пётр писал(а):
Тогда можно использовать API функцию
А без API никак?

_________________
ICQ нет, и, в ближайшее время, не будет


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Клавиатура
СообщениеДобавлено: Пн мар 04, 2019 11:11 pm 
Не в сети
МОДЕРАТОР
Аватар пользователя

Зарегистрирован: Пн апр 09, 2007 4:53 pm
Сообщений: 11483
Благодарил (а): 4 раз.
Поблагодарили: 468 раз.
Смотря где. Например CanvasGadget может без API, но для этого он должен быть в фокусе и с флагом #PB_Canvas_Keyboard.

_________________
Компьютер позволяет решать все те проблемы, которые до его изобретения не существовали. :) :)


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Клавиатура
СообщениеДобавлено: Пт мар 08, 2019 11:40 pm 
Не в сети
док

Зарегистрирован: Чт окт 27, 2011 7:43 pm
Сообщений: 136
Откуда: Санкт-Ленинград
Благодарил (а): 0 раз.
Поблагодарили: 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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
Enumeration 
  #Window_1
  #Audit
  #Prsm
  #Save
EndEnumeration
 
 
Procedure Open_Window_1()
   If OpenWindow(#Window_1, 925,0,337,800,"Управление тестом LogyCom v.1.0.0.1", #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_SizeGadget | #PB_Window_TitleBar)  
     ;Гаджеты-кнопки.
     
     ButtonGadget(#Audit, 65, 235, 205, 50, "Аудит компьютера", #PB_Button_Default | #PB_Button_MultiLine | #PB_Button_Toggle)
     SetGadgetFont(#Audit, FontID4)
     GadgetToolTip(#Audit, "Сбор информации о компьютере")
     
     ButtonGadget(#Prsm, 65, 305, 205, 50, "Просмотреть отчёт", #PB_Button_Default | #PB_Button_MultiLine | #PB_Button_Toggle)
     SetGadgetFont(#Prsm, FontID4)
     GadgetToolTip(#Prsm, "Просмотреть созданный отчёт")
     
     ButtonGadget(#Save, 65, 470, 205, 50, "Сохранить отчёт", #PB_Button_Default | #PB_Button_MultiLine | #PB_Button_Toggle)
     SetGadgetFont(#Save, FontID4)
     GadgetToolTip(#Save, "Сохраняет конечный отчёт в указанную папку")
     
   EndIf
 EndProcedure
 
 Procedure Sobitie()
   Debug "твоё событие "
 EndProcedure
 
 
 
 Open_Window_1()
 
 Repeat
Event =  WaitWindowEvent()
Window = EventWindow()
Gadget = EventGadget()
 
Select Event
  ;***********************************************  
  Case  #WM_KEYDOWN
    key=EventwParam()
    Debug key
   If key= #VK_F1
      Sobitie()
   ElseIf key= #VK_ESCAPE
     
   ElseIf key= #VK_CONTROL
         
   EndIf
  ;***********************************************
  Case #PB_Event_CloseWindow
     Break
   Case #PB_Event_Gadget
    Select Gadget
     Case #Audit
         Sobitie() ; твоё событие
     Case #Prsm
 
     Case #Save
 
  EndSelect  
 EndSelect
ForEver


Вроде работает, но не могу понять две вещи:
1. Как автоповтор отключить?
2. Какие константы у клавишь типа < > ? и т.п.

_________________
ICQ нет, и, в ближайшее время, не будет


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Клавиатура
СообщениеДобавлено: Сб мар 09, 2019 12:23 am 
Не в сети
МОДЕРАТОР
Аватар пользователя

Зарегистрирован: Пн апр 09, 2007 4:53 pm
Сообщений: 11483
Благодарил (а): 4 раз.
Поблагодарили: 468 раз.
#WM_KEYDOWN это WinAPI константа.

_________________
Компьютер позволяет решать все те проблемы, которые до его изобретения не существовали. :) :)


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Клавиатура
СообщениеДобавлено: Сб мар 09, 2019 12:45 am 
Не в сети
профессор

Зарегистрирован: Чт фев 09, 2017 10:37 am
Сообщений: 479
Благодарил (а): 33 раз.
Поблагодарили: 55 раз.
Пункты репутации: 0
Gregory писал(а):
2. Какие константы у клавишь типа < > ? и т.п.


VK_OEM_PERIOD - точка, она же >
VK_OEM_COMMA - запятая, она же <
VK_OEM_2 - /?
Смотри тут
Там не очевидно с буквами, но всё просто, для D это #VK_D и т.д.
Возможно имеется ввиду верхний регистр, тогда с модификатором VK_SHIFT


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Клавиатура
СообщениеДобавлено: Пн мар 18, 2019 9:51 pm 
Не в сети
док

Зарегистрирован: Чт окт 27, 2011 7:43 pm
Сообщений: 136
Откуда: Санкт-Ленинград
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
Пётр писал(а):
#WM_KEYDOWN это WinAPI константа.
Уп-с.. Опять облом...
А кроме Canvas и Menu, есть всё-таки ещё варианты?

AZJIO писал(а):
Смотри тут
Спасибо.
А автоповтор можно как-то отключить?

_________________
ICQ нет, и, в ближайшее время, не будет


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

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


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

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 4


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

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