purebasic.info

PureBasic forum
Текущее время: Пт фев 21, 2020 5:25 pm

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




Начать новую тему Ответить на тему  [ Сообщений: 3 ] 
Автор Сообщение
 Заголовок сообщения: Проблема создания гаджета в окне.
СообщениеДобавлено: Пт дек 06, 2019 3:30 pm 
Не в сети
доцент

Зарегистрирован: Пн апр 06, 2015 3:43 pm
Сообщений: 34
Благодарил (а): 28 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
Доброго времени суток всем!
При изначально открытом окне - и определенных условиях - нужно дорисовать ListView.
Все как-бы создается... НО! Только до момента, когда не было открыто и закрыто стороннего окна..
Иначе возникает ошибка:
[ОШИБКА] Отсутствует текущий список гаджетов (GadgetList)

Чтобы понять проблему, смоделировал поведение:

Код:
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
 
Enumeration
  #Window_0
  #Frame_0
  #ListView_0
  #Button_0
 
  #Window_1
EndEnumeration
 
 
Procedure OpenWindow_0(x = 0, y = 0, width = 680, height = 512)
  OpenWindow(#Window_0, x, y, width, height, "", #PB_Window_SystemMenu)
  FrameGadget(#Frame_0, 68, 108, 560, 380, "")
  ButtonGadget(#Button_0, 132, 8, 280, 28, "test")
EndProcedure
 
Procedure OpenWindow_1(x = 0, y = 0, width = 100, height = 100)
  OpenWindow(#Window_1, x, y, width, height, "", #PB_Window_SystemMenu)
EndProcedure
 
OpenWindow_0()
 
Repeat
  event = WaitWindowEvent()
  Select event
    Case #PB_Event_CloseWindow
      If EventWindow()=#Window_0
        End
      Else
        DisableWindow(#Window_0,0)
        CloseWindow(#Window_1)
      EndIf
     
    Case #PB_Event_Menu
      Select EventMenu()
      EndSelect
     
    Case #PB_Event_Gadget
      Select EventGadget()
        Case #Button_0
          DisableWindow(#Window_0,1)
          OpenWindow_1()        
      EndSelect
    Case #PB_Event_LeftDoubleClick
      If EventWindow()=#Window_0
        If Not IsGadget(#ListView_0)
          ListViewGadget(#ListView_0, 72, 116, 544, 368)
        EndIf
      EndIf
  EndSelect
ForEver
 


В данном коде Дважды щелкните на первом окне - прорисуется ListView.
Но, если перед этим было открытие вспомогательного окна, нажатием на кнопку "test" (соответственно, потом, и его закрытие), выпадет ошибка в отладчике:

Цитата:
[ОШИБКА] Отсутствует текущий список гаджетов (GadgetList).


если данный код скомпилировать - поведение такое же.. (но, соответственно, ошибку выводить нечему), но программа не крашится.

Как решить данную проблему? И из-за чего она возникает?


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Пт дек 06, 2019 3:41 pm 
Не в сети
профессор

Зарегистрирован: Чт сен 22, 2011 6:21 pm
Сообщений: 295
Благодарил (а): 44 раз.
Поблагодарили: 30 раз.
Пункты репутации: 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
Enumeration 
  #Window_0
  #Frame_0
  #ListView_0
  #Button_0
 
  #Window_1
EndEnumeration
 
 
Procedure OpenWindow_0(x = 0, y = 0, width = 680, height = 512)
  OpenWindow(#Window_0, x, y, width, height, "", #PB_Window_SystemMenu)
  FrameGadget(#Frame_0, 68, 108, 560, 380, "")
  ButtonGadget(#Button_0, 132, 8, 280, 28, "test")
EndProcedure
 
Procedure OpenWindow_1(x = 0, y = 0, width = 100, height = 100)
  OpenWindow(#Window_1, x, y, width, height, "", #PB_Window_SystemMenu)
EndProcedure
 
OpenWindow_0()
 
Repeat
  event = WaitWindowEvent()
  Select event
    Case #PB_Event_CloseWindow
      If EventWindow()=#Window_0
        End
      Else
        DisableWindow(#Window_0,0)
        CloseWindow(#Window_1)
      EndIf
     
    Case #PB_Event_Menu
      Select EventMenu()
      EndSelect
     
    Case #PB_Event_Gadget
      Select EventGadget()
        Case #Button_0
          DisableWindow(#Window_0,1)
          OpenWindow_1()        
      EndSelect
    Case #PB_Event_LeftDoubleClick
      If EventWindow()=#Window_0
        If Not IsGadget(#ListView_0)
          UseGadgetList(WindowID(#Window_0))
          ListViewGadget(#ListView_0, 72, 116, 544, 368)
        EndIf
      EndIf
  EndSelect
ForEver
 


зы. Теряется ссылка на текущий гаджет-лист.


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Пт дек 06, 2019 3:49 pm 
Не в сети
доцент

Зарегистрирован: Пн апр 06, 2015 3:43 pm
Сообщений: 34
Благодарил (а): 28 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
Kuzmat писал(а):
Так работает
зы. Теряется ссылка на текущий гаджет-лист.


Да! Спасибо! как-то я провтыкал про существование UseGadgetList()


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

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


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

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


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

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