purebasic.info

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

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




Начать новую тему Ответить на тему  [ Сообщений: 18 ]  На страницу 1, 2  След.
Автор Сообщение
 Заголовок сообщения: Callback для Гаджетов
СообщениеДобавлено: Чт сен 05, 2013 10:44 am 
Не в сети
профессор

Зарегистрирован: Вт мар 24, 2009 11:54 am
Сообщений: 357
Благодарил (а): 14 раз.
Поблагодарили: 18 раз.
Пункты репутации: 19
Всем привет.
Подскажите как реализовать Callback для Гаджетов.


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт сен 05, 2013 10:57 am 
Не в сети
PureBasic Coder
Аватар пользователя

Зарегистрирован: Чт ноя 10, 2011 10:50 am
Сообщений: 4049
Откуда: Ростов-на-Дону
Благодарил (а): 70 раз.
Поблагодарили: 81 раз.
Пункты репутации: 24
Код:
1
SetWindowLong_(GadgetID (0), #GWL_WNDPROC, @Callback ())



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

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


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт сен 05, 2013 11:27 am 
Не в сети
профессор

Зарегистрирован: Ср янв 14, 2009 4:12 pm
Сообщений: 2002
Благодарил (а): 12 раз.
Поблагодарили: 101 раз.
Пункты репутации: 43
Еще, как вариант, проверять 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
 
 


_________________
Всё должно быть просто, настолько просто, насколько возможно, но не проще. (c) Альберт Эйнштейн
Изображение


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт сен 05, 2013 1:45 pm 
Не в сети
профессор
Аватар пользователя

Зарегистрирован: Вс дек 09, 2012 9:02 pm
Сообщений: 777
Откуда: Дагестан
Благодарил (а): 0 раз.
Поблагодарили: 12 раз.
Пункты репутации: 0
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



Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт сен 05, 2013 1:54 pm 
Не в сети
профессор

Зарегистрирован: Вт мар 24, 2009 11:54 am
Сообщений: 357
Благодарил (а): 14 раз.
Поблагодарили: 18 раз.
Пункты репутации: 19
Чёт не катит
Для простых гаджетов типа кнопачки работает на ура, а вот с канвасом такой фокус не проходит...
может я не прав


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

Зарегистрирован: Пн апр 09, 2007 4:53 pm
Сообщений: 11325
Благодарил (а): 4 раз.
Поблагодарили: 440 раз.
mestnyi писал(а):
почему не работает
Потому что это не системный контрол.

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


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Callback для Гаджетов
СообщениеДобавлено: Чт сен 05, 2013 4:16 pm 
Не в сети
профессор
Аватар пользователя

Зарегистрирован: Чт дек 17, 2009 4:49 pm
Сообщений: 1230
Откуда: г. Ангарск
Благодарил (а): 2 раз.
Поблагодарили: 16 раз.
Пункты репутации: 10
cherri123 писал(а):
Всем привет.
Подскажите как реализовать Callback для Гаджетов.

Код:
1
BindGadgetEvent()


_________________
.


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт сен 05, 2013 4:18 pm 
Не в сети
профессор

Зарегистрирован: Ср янв 14, 2009 4:12 pm
Сообщений: 2002
Благодарил (а): 12 раз.
Поблагодарили: 101 раз.
Пункты репутации: 43
mestnyi писал(а):
pablov

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

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

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

_________________
Всё должно быть просто, настолько просто, насколько возможно, но не проще. (c) Альберт Эйнштейн
Изображение


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт сен 05, 2013 4:34 pm 
Не в сети
профессор
Аватар пользователя

Зарегистрирован: Чт дек 17, 2009 4:49 pm
Сообщений: 1230
Откуда: г. Ангарск
Благодарил (а): 2 раз.
Поблагодарили: 16 раз.
Пункты репутации: 10
pablov писал(а):
Это на каком языке?

На 5.20

_________________
.


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт сен 05, 2013 4:51 pm 
Не в сети
профессор

Зарегистрирован: Ср янв 14, 2009 4:12 pm
Сообщений: 2002
Благодарил (а): 12 раз.
Поблагодарили: 101 раз.
Пункты репутации: 43
lakomet писал(а):
На 5.20

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

_________________
Всё должно быть просто, настолько просто, насколько возможно, но не проще. (c) Альберт Эйнштейн
Изображение


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт сен 06, 2013 7:30 am 
Не в сети
профессор

Зарегистрирован: Вт мар 24, 2009 11:54 am
Сообщений: 357
Благодарил (а): 14 раз.
Поблагодарили: 18 раз.
Пункты репутации: 19
Все ясно ждем выхода 8)


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт сен 06, 2013 2:31 pm 
Не в сети
профессор
Аватар пользователя

Зарегистрирован: Вс дек 09, 2012 9:02 pm
Сообщений: 777
Откуда: Дагестан
Благодарил (а): 0 раз.
Поблагодарили: 12 раз.
Пункты репутации: 0
Цитата:
Подскажите как реализовать 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



Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re:
СообщениеДобавлено: Пн сен 16, 2013 2:02 pm 
Не в сети
профессор
Аватар пользователя

Зарегистрирован: Вс дек 09, 2012 9:02 pm
Сообщений: 777
Откуда: Дагестан
Благодарил (а): 0 раз.
Поблагодарили: 12 раз.
Пункты репутации: 0
Никита Однороб писал(а):
Код:
1
SetWindowLong_(GadgetID (0), #GWL_WNDPROC, @Callback ())



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


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Callback для Гаджетов
СообщениеДобавлено: Пн сен 16, 2013 2:11 pm 
Не в сети
профессор
Аватар пользователя

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


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Callback для Гаджетов
СообщениеДобавлено: Пн сен 16, 2013 2:24 pm 
Не в сети
PureBasic Coder
Аватар пользователя

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

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


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


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

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


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

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


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

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