purebasic.info
http://purebasic.info/phpBB3ex/

Callback для Гаджетов
http://purebasic.info/phpBB3ex/viewtopic.php?f=1&t=3439
Страница 1 из 2

Автор:  cherri123 [ Чт сен 05, 2013 10:44 am ]
Заголовок сообщения:  Callback для Гаджетов

Всем привет.
Подскажите как реализовать Callback для Гаджетов.

Автор:  Никита Однороб [ Чт сен 05, 2013 10:57 am ]
Заголовок сообщения: 

Код:
1
SetWindowLong_(GadgetID (0), #GWL_WNDPROC, @Callback ())



И правильно построить процедуру

Автор:  pablov [ Чт сен 05, 2013 11:27 am ]
Заголовок сообщения: 

Еще, как вариант, проверять LParam в Callback'е главного окна Это чтобы не плодить для каждого гаджета Callback
Код:
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
#but = 1
#but2 = 2
Procedure WinCallback(hWnd, uMsg, WParam, LParam)
    If uMsg = #WM_COMMAND
      If LParam = GadgetID(#but)
        MessageRequester("", "Ой, меня нажали")
      ElseIf LParam = GadgetID(#but2)
        MessageRequester("", "И меня тоже нажали :)")
      EndIf  
    EndIf
    ProcedureReturn #PB_ProcessPureBasicEvents
EndProcedure
 
  If OpenWindow(0, 0, 0, 200, 100, "Messages", #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget)
    ButtonGadget(#but, 70, 30, 50, 20, "button")
    ButtonGadget(#but2, 130, 30, 50, 20, "button2")
    SetWindowCallback(@WinCallback())    ; activate the callback
    Repeat
      Select WaitWindowEvent()
        Case #PB_Event_CloseWindow
          End
      EndSelect
    ForEver
  EndIf
 
 


Автор:  mestnyi [ Чт сен 05, 2013 1:45 pm ]
Заголовок сообщения: 

pablov
вот так почему не работает?
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#CanvasGadget =3
Procedure WinCallback(hWnd, uMsg, WParam, LParam)
    Select uMsg
      Case  #WM_COMMAND
        Debug 1
     
    EndSelect
    ProcedureReturn #PB_ProcessPureBasicEvents
EndProcedure
 
  If OpenWindow(0, 0, 0, 200, 100, "Messages", #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget)
    CanvasGadget(#CanvasGadget, 0, 0, 600, 600)
SetWindowCallback(@WinCallback())    ; activate the callback
    Repeat
      Select WaitWindowEvent()
        Case #PB_Event_CloseWindow
          End
      EndSelect
    ForEver
  EndIf


Автор:  cherri123 [ Чт сен 05, 2013 1:54 pm ]
Заголовок сообщения: 

Чёт не катит
Для простых гаджетов типа кнопачки работает на ура, а вот с канвасом такой фокус не проходит...
может я не прав

Автор:  Пётр [ Чт сен 05, 2013 3:03 pm ]
Заголовок сообщения: 

mestnyi писал(а):
почему не работает
Потому что это не системный контрол.

Автор:  lakomet [ Чт сен 05, 2013 4:16 pm ]
Заголовок сообщения:  Re: Callback для Гаджетов

cherri123 писал(а):
Всем привет.
Подскажите как реализовать Callback для Гаджетов.

Код:
1
BindGadgetEvent()


Автор:  pablov [ Чт сен 05, 2013 4:18 pm ]
Заголовок сообщения: 

mestnyi писал(а):
pablov

вот так почему не работает?

Местный, вы так задаете вопросы как будто я придумал PB, MS Windows и иже с ними. Попробуйте разобраться сами
lakomet писал(а):
Код: BindGadgetEvent()

Это на каком языке?

Автор:  lakomet [ Чт сен 05, 2013 4:34 pm ]
Заголовок сообщения: 

pablov писал(а):
Это на каком языке?

На 5.20

Автор:  pablov [ Чт сен 05, 2013 4:51 pm ]
Заголовок сообщения: 

lakomet писал(а):
На 5.20

У меня пока такого нет :?

Автор:  cherri123 [ Пт сен 06, 2013 7:30 am ]
Заголовок сообщения: 

Все ясно ждем выхода 8)

Автор:  mestnyi [ Пт сен 06, 2013 2:31 pm ]
Заголовок сообщения: 

Цитата:
Подскажите как реализовать Callback для Гаджетов.

Вот нашёл
Код:
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
EnableExplicit
 
Global ETCallback
 
Procedure EventTypeCallback(Window, Message, wParam, lParam)
  If Message = #WM_LBUTTONDOWN
    StatusBarText(1,0,"Linke Maustaste wird gedrьckt.",0)
  ElseIf Message = #WM_LBUTTONUP
    StatusBarText(1,0,"Linke Maustaste wurde losgelassen.",0)
  ElseIf Message = #WM_RBUTTONDOWN
    StatusBarText(1,0,"Rechte Maustaste wird gedrьckt.",0)
  ElseIf Message = #WM_RBUTTONUP
    StatusBarText(1,0,"Rechte Maustaste wurde losgelassen.",0)
  ElseIf Message = #WM_MBUTTONDOWN
    StatusBarText(1,0,"Mittlere Maustaste wird gedrьckt.",0)
  ElseIf Message = #WM_MBUTTONUP
    StatusBarText(1,0,"Mittlere Maustaste wurde losgelassen.",0)
  EndIf
  ProcedureReturn CallWindowProc_(ETCallback, Window, Message, wParam, lParam)
EndProcedure
 
If OpenWindow(0,0,0,500,250,"Window",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
  ;ButtonGadget(1,10,10,100,20,"Button",0)
  CanvasGadget(1,10,10,100,20)
  ;CheckBoxGadget(1,10,10,100,20,"CheckBox",0)
  ;ProgressBarGadget(1,10,10,100,20,0,100,0)
  ;OptionGadget(1,10,10,100,20,"Option")
 
  If CreateStatusBar(1,WindowID(0))
    AddStatusBarField(#PB_Ignore)
  EndIf
 
  ETCallback = SetWindowLongPtr_(GadgetID(1), #GWL_WNDPROC, @EventTypeCallback())
Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
EndIf


Автор:  mestnyi [ Пн сен 16, 2013 2:02 pm ]
Заголовок сообщения:  Re:

Никита Однороб писал(а):
Код:
1
SetWindowLong_(GadgetID (0), #GWL_WNDPROC, @Callback ())



И правильно построить процедуру
и как это будет?

Автор:  mestnyi [ Пн сен 16, 2013 2:11 pm ]
Заголовок сообщения:  Re: Callback для Гаджетов

Как можно узнать по номеру константу или наоборот по константе номер, неужели нет такой информации?

Автор:  Никита Однороб [ Пн сен 16, 2013 2:24 pm ]
Заголовок сообщения:  Re: Callback для Гаджетов

Если под словом номер имеется в виду "хендл", то можно. Только недавно на форуме такая информация проскакивала. Поищи. Если я найду, дам ссыль.

Во, нашел. Из хендла окна или гаджета можно получить номер (значение константы)
Код:
1
Debug GetProp_(hwnd, "PB_ID")


Страница 1 из 2 Часовой пояс: UTC + 3 часа
Powered by phpBB® Forum Software © phpBB Group
http://www.phpbb.com/