purebasic.info

PureBasic forum
Текущее время: Чт янв 18, 2018 2:52 am

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




Начать новую тему Ответить на тему  [ Сообщений: 5 ] 
Автор Сообщение
 Заголовок сообщения: Обработка состояния SpinGadget (PB 5.21LTS)
СообщениеДобавлено: Чт мар 06, 2014 1:27 pm 
Не в сети
профессор

Зарегистрирован: Пт янв 25, 2008 5:13 pm
Сообщений: 362
Благодарил (а): 0 раз.
Поблагодарили: 14 раз.
Пункты репутации: 5
Привет всем.

Обнаружил, что обработка состояния SpinGadget через BindGadgetEvent "опаздывает" на одно нажатие по сравнению с тем же самым через обычный способ
WaitWindowEvent() -> EventGadget() -> EventType()

Это я чего то не понимаю, или это косяк в PB?

Код:
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
Procedure SpinHandler()
  Debug "Binded SpinHandler: spinValue="+Str(GetGadgetState(1))
EndProcedure
 
If OpenWindow(0, #PB_Ignore, #PB_Ignore, 300, 100, "SpinGadget Test", #PB_Window_SystemMenu | #PB_Window_TitleBar)
  SpinGadget(1,80,20,100,20,1,100,#PB_Spin_Numeric)    
  TextGadget(#PB_Any,20,60,280,40,"Try spin Up/Down button - see result in Debug window")
  BindGadgetEvent(1, @SpinHandler())
 
  SetGadgetState(1, 1)
 
  Repeat
    Select WaitWindowEvent()
      Case #PB_Event_Gadget      
        Select EventGadget()
          Case 1
            Select EventType()
              Case #PB_EventType_Up
                Debug "EventHandler: SpinUp, spinValue=" + Str(GetGadgetState(1))
              Case #PB_EventType_Down
                Debug "EventHandler: SpinDown, spinValue=" + Str(GetGadgetState(1))
              EndSelect                  
        EndSelect
      Case #PB_Event_CloseWindow
        Quit = #True  
    EndSelect  
  Until Quit
EndIf
End



Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Чт мар 06, 2014 2:04 pm 
Не в сети
профессор

Зарегистрирован: Пт янв 25, 2008 5:13 pm
Сообщений: 362
Благодарил (а): 0 раз.
Поблагодарили: 14 раз.
Пункты репутации: 5
Сам себе и отвечаю: похоже косяк, надо писать на офф.сайте в ошибки.

Скачал 5.22b1, там генерится еще #PB_EventType_Change, т.е. на 1 нажатие Up/Down получаем 2 события:
#PB_EventType_Change + #PB_EventType_Up (#PB_EventType_Down)

При обработке в цикле WaitWindowEvent() значения из SpinGadget, получаемые по GetGadgetState(), равны,
а при обработке по BindGadgetEvent() значение, получаемое по
#PB_EventType_Change - совпадает с полученным в цикле WaitWindowEvent(), а по
#PB_EventType_Up (#PB_EventType_Down) - по-прежнему отстает на 1 нажатие.

Код:
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
Procedure SpinHandler()
;  Debug "Binded SpinHandler: spinValue="+Str(GetGadgetState(1))
  Select EventType()
    Case #PB_EventType_Change
      Debug "Binded SpinHandler: SpinEditArea has changed, spinValue=" + Str(GetGadgetState(1))
    Case #PB_EventType_Up
      Debug "Binded SpinHandler: SpinUp, spinValue=" + Str(GetGadgetState(1))
    Case #PB_EventType_Down
      Debug "Binded SpinHandler: SpinDown, spinValue=" + Str(GetGadgetState(1))
    EndSelect  
EndProcedure
 
If OpenWindow(0, #PB_Ignore, #PB_Ignore, 300, 100, "SpinGadget Test", #PB_Window_SystemMenu | #PB_Window_TitleBar)
  SpinGadget(1,80,20,100,20,1,100,#PB_Spin_Numeric)    
  TextGadget(#PB_Any,20,60,280,40,"Try spin Up/Down button - see result in Debug window")
  BindGadgetEvent(1, @SpinHandler())
 
  SetGadgetState(1, 1)
 
  Repeat
    Select WaitWindowEvent()
      Case #PB_Event_Gadget      
        Select EventGadget()
          Case 1
            Select EventType()
              Case #PB_EventType_Change                  
                Debug "EventHandler: SpinEditArea has changed, spinValue=" + Str(GetGadgetState(1))                
              Case #PB_EventType_Up
                Debug "EventHandler: SpinUp, spinValue=" + Str(GetGadgetState(1))
              Case #PB_EventType_Down
                Debug "EventHandler: SpinDown, spinValue=" + Str(GetGadgetState(1))
              EndSelect                  
        EndSelect
      Case #PB_Event_CloseWindow
        Quit = #True  
    EndSelect  
  Until Quit
EndIf
End



Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Чт мар 13, 2014 2:41 pm 
Не в сети
профессор

Зарегистрирован: Пт янв 25, 2008 5:13 pm
Сообщений: 362
Благодарил (а): 0 раз.
Поблагодарили: 14 раз.
Пункты репутации: 5
Фред поставил пометку: Done.
Это уже в текущей выложенной b1 версии исправление доступно или ждать b2?


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Чт мар 13, 2014 2:43 pm 
Не в сети
МОДЕРАТОР
Аватар пользователя

Зарегистрирован: Пн апр 09, 2007 4:53 pm
Сообщений: 11077
Благодарил (а): 4 раз.
Поблагодарили: 384 раз.
Бета 2 пару дней как вышла. http://www.purebasic.fr/english/viewtop ... 48#p440048

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


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Пт мар 14, 2014 1:24 pm 
Не в сети
профессор

Зарегистрирован: Пт янв 25, 2008 5:13 pm
Сообщений: 362
Благодарил (а): 0 раз.
Поблагодарили: 14 раз.
Пункты репутации: 5
Просмотрел :oops: , хотя и не особенно следил :)
Попробовал: в b2 ошибку уже пофиксили. Ждем релиз.


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

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


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

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


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

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