purebasic.info

PureBasic forum
Текущее время: Пт окт 19, 2018 8:44 am

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




Начать новую тему Ответить на тему  [ Сообщений: 42 ]  На страницу Пред.  1, 2, 3  След.
Автор Сообщение
 Заголовок сообщения: Re: PanelGadget
СообщениеДобавлено: Сб мар 01, 2014 11:25 pm 
Не в сети
доцент

Зарегистрирован: Вт фев 25, 2014 8:41 pm
Сообщений: 26
Благодарил (а): 5 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
Пример можно основанный на моем коде? А то не совсем понимаю. Я посчитал что map лучше подойдет для этих целий.


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: PanelGadget
СообщениеДобавлено: Пн мар 03, 2014 5:23 pm 
Не в сети
доцент

Зарегистрирован: Вт фев 25, 2014 8:41 pm
Сообщений: 26
Благодарил (а): 5 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
Ну так что примера со списком я так понимаю нет?
Все же поковырялся я в списке и опять пришел к выводу что лучше и стабильней использовать карты. Если я ошибаюсь, то прошу опровергнуть :)


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: PanelGadget
СообщениеДобавлено: Пн мар 03, 2014 5:26 pm 
Не в сети
МОДЕРАТОР
Аватар пользователя

Зарегистрирован: Пн апр 09, 2007 4:53 pm
Сообщений: 11299
Благодарил (а): 4 раз.
Поблагодарили: 436 раз.
LEX38RUS писал(а):
Ну так что примера со списком я так понимаю нет?
Есть. viewtopic.php?f=10&t=617

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


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: PanelGadget
СообщениеДобавлено: Пн мар 03, 2014 5:56 pm 
Не в сети
доцент

Зарегистрирован: Вт фев 25, 2014 8:41 pm
Сообщений: 26
Благодарил (а): 5 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
Это все понятно, а если я захочу добавлять гаджеты к определенной панели?
Как мне добавить гаджет уже к существующему списку и заполнить данные структуры этим гаджетом.


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: PanelGadget
СообщениеДобавлено: Пн мар 03, 2014 6:01 pm 
Не в сети
МОДЕРАТОР
Аватар пользователя

Зарегистрирован: Пн апр 09, 2007 4:53 pm
Сообщений: 11299
Благодарил (а): 4 раз.
Поблагодарили: 436 раз.
Создаешь гаджет и сохраняешь его ИД в структуре списка.
Если заранее неизвестно число гаджетов, то создаешь контейнер, его ИД сохраняешь в списке и все гаджеты вкладки располагаешь в контейнере и их ИД сохраняешь в списке структуры списка.

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


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: PanelGadget
СообщениеДобавлено: Пн мар 03, 2014 6:18 pm 
Не в сети
доцент

Зарегистрирован: Вт фев 25, 2014 8:41 pm
Сообщений: 26
Благодарил (а): 5 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
Вот смотри. Мы просто друг друга не понимаем

Создана структура

Код:
1
2
3
4
5
Structure Test
IDGadget.l
EndStructure
 
Global NewList Teest.Test()



Далее я делаю процедуру которая будет вызываться при активации Canvas гаджета (Ну это пока не важно)

Следом идет структура добавления в список гаджета, но тут одно НО
Через макро к функции ButtonGadget я добавил еще один параметр который таки и будет отвечать за то что к какому TabBar'у эту кнопку прифиндюрить
К примеру:
Код:
1
ButtonGadget(5, 10, 10, 100, 30, "", 0, tab_bar_1)


вот как то так
И именно тут у меня вопрос. При вызове сейчас функции ButtonGadget выполняется код
Код:
1
2
AddElement(Teest())
Teest()\IDGadget = Gadget


вот когда я добавляю вторую кнопку
Код:
1
ButtonGadget(10, 10, 10, 100, 30, "", 0, tab_bar_1)

к тому же TabBar'у следоВаТельно создается еще один список, а мне надо добавить к уже существующему. И проверять постоянно, если список не существует то создать его, если существует то просто добавить.


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: PanelGadget
СообщениеДобавлено: Пн мар 03, 2014 6:27 pm 
Не в сети
МОДЕРАТОР
Аватар пользователя

Зарегистрирован: Пн апр 09, 2007 4:53 pm
Сообщений: 11299
Благодарил (а): 4 раз.
Поблагодарили: 436 раз.
Выше ответил уже.
Пётр писал(а):
Если заранее неизвестно число гаджетов, то создаешь контейнер, его ИД сохраняешь в списке и все гаджеты вкладки располагаешь в контейнере и их ИД сохраняешь в списке структуры списка.
Если не понятно, объясняю кодом.
Код:
1
2
3
4
5
6
Structure TabInfo
  Container.i
  List Gadgets.i()
EndStructure
 
NewList TabInfo.TabInfo()

В Container идентификатор контейнера, а в Gadgets все идентификаторы гаджетов, находящиеся в контейнере.

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


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: PanelGadget
СообщениеДобавлено: Пн мар 03, 2014 6:42 pm 
Не в сети
PureBasic Coder
Аватар пользователя

Зарегистрирован: Чт ноя 10, 2011 10:50 am
Сообщений: 4049
Откуда: Ростов-на-Дону
Благодарил (а): 70 раз.
Поблагодарили: 81 раз.
Пункты репутации: 24
Накидал процедурки, может так будет понятней (способ чуть иной)
Код:
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
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
XIncludeFile "TabBarGadget.pbi"
 
Structure Gadget
  GadgetN.l
  Tab.b
EndStructure
 
Global NewList Gadgets.Gadget()
 
Procedure UpdateGadgets() ;Показываем все нужные гаджеты и скрываем ненужные
  Protected tab = GetTabBarGadgetState(1)
  ForEach Gadgets()
    If Gadgets()\Tab = tab
      HideGadget(Gadgets()\GadgetN, 0)
    Else
      HideGadget(Gadgets()\GadgetN, 1)
    EndIf
  Next
EndProcedure
 
Procedure AddGadgetToTab(Gadget, Tab) ;Добавляем гаджет в список
  AddElement(Gadgets())
  With Gadgets()
    \GadgetN = Gadget
    \Tab = Tab
  EndWith
  UpdateGadgets()
EndProcedure
 
Procedure DeleteGadgetFromTab(Gadget, Tab) ;Удаляем гаджет из списка
  ForEach Gadgets()
    If Gadgets()\GadgetN = Gadget And Gadgets()\Tab = Tab
      DeleteElement(Gadgets(), 1)
      Break
    EndIf
  Next
  UpdateGadgets()
EndProcedure
 
OpenWindow(1, 5, 5, 400, 300, "TabBar", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
TabBarGadget(1, 5, 5, 300, 25)
AddTabBarGadgetItem(1, -1, "Tab1")
AddTabBarGadgetItem(1, -1, "Tab2")
AddTabBarGadgetItem(1, -1, "Tab3")
SetTabBarGadgetState(1, 0)
 
;===================================
ButtonGadget(2, 5, 35, 100, 20, "Button1 Tab1")
ButtonGadget(3, 5, 65, 100, 20, "Button2 Tab1")
 
ButtonGadget(4, 5, 35, 100, 20, "Button1 Tab2")
ButtonGadget(5, 5, 65, 100, 20, "Button2 Tab2")
 
ButtonGadget(6, 5, 35, 100, 20, "Button1 Tab3")
ButtonGadget(7, 5, 65, 100, 20, "Button2 Tab3")
 
AddGadgetToTab(2, 0)
AddGadgetToTab(3, 0)
AddGadgetToTab(4, 1)
AddGadgetToTab(5, 1)
AddGadgetToTab(6, 2)
AddGadgetToTab(7, 2)
 
Repeat
  If WaitWindowEvent() = #PB_Event_CloseWindow
    Break
  EndIf
   
  If TabBarGadgetEvent(1) = #TabBarGadgetEvent_Change
    UpdateGadgets()
  EndIf
ForEver


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


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: PanelGadget
СообщениеДобавлено: Пн мар 03, 2014 11:53 pm 
Не в сети
доцент

Зарегистрирован: Вт фев 25, 2014 8:41 pm
Сообщений: 26
Благодарил (а): 5 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
Спасибо Никита. все так как хотел. Оказалось все на много проще :)


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: PanelGadget
СообщениеДобавлено: Вт мар 04, 2014 10:19 am 
Не в сети
доцент

Зарегистрирован: Вт фев 25, 2014 8:41 pm
Сообщений: 26
Благодарил (а): 5 раз.
Поблагодарили: 0 раз.
Пункты репутации: 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
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
XIncludeFile "TabBarGadget.pbi"
 
Enumeration
#TabBar
EndEnumeration
 
Structure TabGadget
  IDTabBar.l
  IDGadget.l
EndStructure
Global NewList CanvasGadgetList.TabGadget()
 
Procedure UpdateGadgets()
  Protected Tab = GetTabBarGadgetState(#TabBar)
  ForEach CanvasGadgetList()
    If CanvasGadgetList()\IDTabBar = Tab
      HideGadget(CanvasGadgetList()\IDGadget, 0)
    Else
      HideGadget(CanvasGadgetList()\IDGadget, 1)
    EndIf
  Next
EndProcedure
 
Procedure NewButtonGadget(Gadget, x, y, Width, Height, ImageID.s, Flag = 0, TabBarID = -1)
  If TabBarID >= 0
  AddElement(CanvasGadgetList())
  With CanvasGadgetList()
    \IDGadget = Gadget
    \IDTabBar = TabBarID
   
  EndWith
  ButtonGadget(Gadget, x, y, Width, Height, ImageID.s, Flag)
  UpdateGadgets()
  ElseIf TabBarID < 0
    ButtonGadget(Gadget, x, y, Width, Height, ImageID.s, Flag)
  EndIf
EndProcedure
 
Macro ButtonGadget(Gadget, x, y, Width, Height, ImageID, Flag = 0, TabBarID = -1)
  NewButtonGadget(Gadget, x, y, Width, Height, ImageID, Flag, TabBarID)
EndMacro
 
Global bar_1, bar_2
OpenWindow(0, 0, 0, 422, 520, "ButtonGadgets", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
TabBarGadget(#TabBar, 10, 100, WindowWidth(0), 25, #TabBarGadget_NoTabMoving|#TabBarGadget_BottomLine)
bar_1 = AddTabBarGadgetItem(#TabBar, #PB_Default , "End")
bar_2 = AddTabBarGadgetItem(#TabBar, #PB_Default , "EndAA")
 
 
ButtonGadget(20, 10, 30, 120, 30, "AddC", #PB_Button_Toggle, bar_1)
ButtonGadget(2, 120, 30, 120, 30, "AddN", #PB_Button_Toggle, bar_1)
ButtonGadget(35, 10, 130, 120, 30, "AddTab", #PB_Button_Toggle, bar_2)
ButtonGadget(18, 120, 130, 120, 30, "Add", #PB_Button_Toggle, bar_2)
 
Global Event
Repeat
  Event = WaitWindowEvent()
  Select Event
    Case #PB_Event_Gadget
      Select EventGadget()
        Case 19
 
        Case #TabBar
          Select TabBarGadgetEvent(#TabBar)              
            Case #TabBarGadgetEvent_Change
               UpdateGadgets()
              ;Debug TabBarGadgetItemID(#TabBar, EventTab(#TabBar))
          EndSelect
      EndSelect
  EndSelect
 
Until event = #PB_Event_CloseWindow
End



Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: PanelGadget
СообщениеДобавлено: Вт мар 04, 2014 10:27 am 
Не в сети
МОДЕРАТОР
Аватар пользователя

Зарегистрирован: Пн апр 09, 2007 4:53 pm
Сообщений: 11299
Благодарил (а): 4 раз.
Поблагодарили: 436 раз.
LEX38RUS писал(а):
Вот я хотел что то именно такое
Это сильно упрощенный вариант этого кода. viewtopic.php?p=73894#p73894 :) :)

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


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: PanelGadget
СообщениеДобавлено: Вт мар 04, 2014 10:49 am 
Не в сети
доцент

Зарегистрирован: Вт фев 25, 2014 8:41 pm
Сообщений: 26
Благодарил (а): 5 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
Пётр писал(а):
LEX38RUS писал(а):
Вот я хотел что то именно такое
Это сильно упрощенный вариант этого кода. viewtopic.php?p=73894#p73894 :) :)

Ну так зачем писать уйму кода когда можно все упростить до нельзя. Я просто честно говоря еще не совсем все же понимаю как в списках добавляется гаджет в текущий элемент и как создается новый если нет текущего. И как потом обращаться к тому или иному списку


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: PanelGadget
СообщениеДобавлено: Вт мар 04, 2014 11:18 am 
Не в сети
МОДЕРАТОР
Аватар пользователя

Зарегистрирован: Пн апр 09, 2007 4:53 pm
Сообщений: 11299
Благодарил (а): 4 раз.
Поблагодарили: 436 раз.
LEX38RUS писал(а):
Ну так зачем писать уйму кода когда можно все упростить до нельзя.
Сравните функционал вашего кода и примера, ссылку на который дал и найдите разницу.

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


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: PanelGadget
СообщениеДобавлено: Вт мар 04, 2014 11:38 am 
Не в сети
доцент

Зарегистрирован: Вт фев 25, 2014 8:41 pm
Сообщений: 26
Благодарил (а): 5 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
Смотрел и сравнивал код, разницу вижу.
Теперь другой вопрос, возможно ли в скрытом гаджете наблюдать изменения? То есть если в EditorGadget добавился текст то номер вкладки становится активным, ну или подобие. На счет активным не столь важно как просто отследить изменения в том или ином скрытом гаджете


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

Зарегистрирован: Чт ноя 10, 2011 10:50 am
Сообщений: 4049
Откуда: Ростов-на-Дону
Благодарил (а): 70 раз.
Поблагодарили: 81 раз.
Пункты репутации: 24
EventType() используй. Вот пример. Скрытый и видимые редакторы. Скрытый - 2, видимый - 1. Раз в 3 сек во второй гаджет добавляется строка. Изменения фиксируются в обоих гаджетах.
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Procedure Timer()
  AddGadgetItem(2, -1, "String")
EndProcedure
 
OpenWindow(1,5,5,400,300,"")
EditorGadget(1,5,5,390,290)
EditorGadget(2,5,5,390,290)
HideGadget(2,1)
 
SetTimer_(WindowID(1), 1, 3000, @Timer())
Repeat
  Select WaitWindowEvent()
    Case #PB_Event_CloseWindow
      End
    Case #PB_Event_Gadget
      If EventType() = #PB_EventType_Change
        Debug "Содержимое изменилось в гаджете " + Str(EventGadget()) + "!"
      EndIf
  EndSelect
ForEver


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


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

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


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

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


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

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