PureBasic - форум

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » PureBasic - форум » Вопросы по PureBasic » Вопрос по горячим клавишам


Вопрос по горячим клавишам

Сообщений 31 страница 41 из 41

31

Я имел в виду использовать не глобальную переменную (хотя так тоже можно), а непосредственно передавать данные через аргументы.

Код:
Procedure Hotkey_WaitWindowEvent()
  message = WaitWindowEvent()
  result = message
  If HotKeysInitDone
    If message = #WM_HOTKEY
      wparam = EventwParam()
       ;SELECTOR=wparam
      If hotkeys(wparam)\name > ""
        CallFunctionFast(hotkeys(wparam)\func, wparam)
        result = Hotkey_WaitWindowEvent()
      EndIf
    EndIf
  EndIf;initdone
  ProcedureReturn result
EndProcedure

Procedure KLAVNYA(SELECTOR1)

 EnumProcessInit() 
Repeat 
  Temp.s=EnumProcess() 
  If LCase(Temp)=GetFilePart(PUT(SELECTOR1))
    vpered=1
  EndIf 
Until Temp=""
If vpered<>1
RunProgram(PUT(SELECTOR1))
EndIf
 

EndProcedure

0

32

CallFunctionFast(hotkeys(wparam)\func, wparam)

Я честно говоря не до конца понимаю как это работает. Здесь указываются параметры, а процедура Procedure KLAVNYA () идет без параметров.
Поэтому я побоялся что то здесь корректировать, а наваял так, как мне понятно.  :)

0

33

haav написал(а):

процедура Procedure KLAVNYA () идет без параметров

В процедуре Hotkey_WaitWindowEvent(), был такой вызов

Код:
CallFunctionFast(hotkeys(wparam)\func)

а сейчас он стал таким

Код:
CallFunctionFast(hotkeys(wparam)\func, wparam)

Вот как раз переменная wparam и будет передаватся процедуре в виде одного аргумента KLAVNYA

0

34

Пётр написал(а):

Вот как раз переменная wparam и будет передаватся процедуре в виде одного аргумента KLAVNYA

Это то я как раз понял.

CallFunctionFast(hotkeys(wparam)\func)  Это в друппи (с параметрами)

Procedure KLAVNYA() моя процедура (без параметров)

Я всегда считал, что если вызываешь процедуру с параметрами, то и у самой процедуры они в скобках должны быть. И очень удивился когда, увидел код друппи, то есть сам вызов. Может я чего недопонимаю  :huh:

Отредактировано haav (19.02.2010 18:20:35)

0

35

Вот есть параметр в процедуре

Код:
Procedure KLAVNYA( SELECTOR1 )

0

36

Дружище! Я пишу про код до твоего исправления. То есть код, который изначально в друппи. Почему там стоит параметр hotkeys(wparam)\func , а в моей процедуре, не надо?

Я понимаю, что ты добавил  по параметру и в вызов и в мою процедуру.  :)

0

37

haav написал(а):

hotkeys(wparam)\func

Первый аргумент функции CallFunctionFast это адрес вызываемой процедуры!

Код:
Result = CallCFunctionFast(*FunctionPointer [,Parameter1 [, Parameter2...]])

Ведь как иначе функция будет знать какую процедуру вызывать?

Вот пример

Код:
Procedure Test(x1, x2, x3, x4)
 Debug x1
 Debug x2
 Debug x3
 Debug x4
EndProcedure

CallCFunctionFast(@Test(), 100, 20, 0, 800)

0

38

Теперь понимаю. Спасибо!

0

39

Пётр написал(а):

Это нужно делать не в главном цикле, а по таймеру, скажем, каждые 100 мс.

Петр прошу покажи на простом примере, не  связанным с моим кодом, как такое делается. Главное чтобы этот пример работал в 4.31
Все никак не могу перейти на новую версию.

0

40

haav написал(а):

Петр прошу покажи на простом примере, не  связанным с моим кодом

Нажимай на SHIFT

Код:
Procedure Timer1()
 If GetAsyncKeyState_(#VK_SHIFT)
    SetGadgetText(1, "SHIFT")
 Else 
   SetGadgetText(1, "----")
 EndIf  
EndProcedure


OpenWindow(1,0,0,200,90,"",#PB_Window_MinimizeGadget|#PB_Window_ScreenCentered)
TextGadget(1,20,20,180,16,"----")
  SetTimer_(WindowID(1),1,100,@Timer1())
Repeat
 Event=WaitWindowEvent()
   
Until Event = #PB_Event_CloseWindow
KillTimer_(WindowID(1),1)
End

0

41

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

0


Вы здесь » PureBasic - форум » Вопросы по PureBasic » Вопрос по горячим клавишам