purebasic.info

PureBasic forum
Текущее время: Пт апр 27, 2018 12:07 am

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




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

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


Вложения:
1.PNG [1.54 KiB]
Скачиваний: 0
Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: PanelGadget
СообщениеДобавлено: Сб мар 01, 2014 2:42 pm 
Не в сети
МОДЕРАТОР
Аватар пользователя

Зарегистрирован: Пн апр 09, 2007 4:53 pm
Сообщений: 11108
Благодарил (а): 4 раз.
Поблагодарили: 395 раз.
Это не PanelGadget а CanvasGadget. http://www.purebasic.fr/english/viewtop ... 12&t=47588

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


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

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


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

Зарегистрирован: Вт фев 25, 2014 8:41 pm
Сообщений: 26
Благодарил (а): 5 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
Теперь уйма вопросов будет, наверное :)
Первое что интересует в данный момент это
Вот есть пример из архива
Код:
1
2
3
4
OpenWindow(#Window, 0, 0, 450, 125, "TabBarGadget", #PB_Window_ScreenCentered|#PB_Window_SystemMenu)
TabBarGadget(#Gadget, 5, 5, 340, 25, #TabBarGadget_BottomLine)
AddTabBarGadgetItem(#Gadget, #PB_Default, "OneButton")
AddTabBarGadgetItem(#Gadget, #PB_Default, "SendButton")


как мне теперь к каждому гаджету отдельную кнопку добавить к примеру при активации OneButton была одна кнопка а при активации SendButton была другая кнопка?


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

Зарегистрирован: Чт ноя 10, 2011 10:50 am
Сообщений: 4049
Откуда: Ростов-на-Дону
Благодарил (а): 70 раз.
Поблагодарили: 80 раз.
Пункты репутации: 24
Используя TabBarGetGadgetState, узнавать, какая вкладка сейчас активна, и, исходя из этого, скрывать одну кнопку и показывать вторую с помощью HideGadget

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


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

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


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

Зарегистрирован: Вт фев 25, 2014 8:41 pm
Сообщений: 26
Благодарил (а): 5 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
Поигрался не много и замутил с помощью Map'a
Кому интересно критикуем и предлагаем внести изменения как сделать лучше
Код:
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
XIncludeFile "TabBarGadget.pbi"
OpenWindow(0, 0, 0, 800, 700, "2013", #PB_Window_MaximizeGadget|#PB_Window_Maximize|#PB_Window_MinimizeGadget)  
SmartWindowRefresh(0, #True)
Declare AddTabGadget(names.s)
Structure Chat
  IDEditor.l
  Name.s
EndStructure
Global sss
Global NewMap PList.Chat()
Declare EnableTabGadget(Name.s, Map PLChat.Chat())
ButtonGadget(3, 3, 3, 80, 24,"AddGadget")
TabBarGadget(10, 10, 30, WindowWidth(0), 25, #TabBarGadget_NoTabMoving|#TabBarGadget_BottomLine)
 
 
Repeat
  Select WaitWindowEvent()
    Case #PB_Event_CloseWindow
      Break
    Case #PB_Event_Gadget
      Select EventGadget()
        Case 3
          sss = sss + 1
          AddTabGadget("ST - " + sss)
        Case 10 ;-tab
          Select TabBarGadgetEvent(10)
             
            Case #TabBarGadgetEvent_Change
              EnableTabGadget(GetTabBarGadgetItemText(10, EventTab(10)), PList.Chat())
          EndSelect
      EndSelect
  EndSelect
ForEver
 
Procedure AddTabGadget(names.s)
  Protected Editor, i
    Editor = -1
  For i=1 To 15
    If IsGadget(i) = 0
      Editor= i
      Break
    EndIf
  Next i
 If (Editor < 1 Or Editor > 15)
   ProcedureReturn 0
 EndIf
 PList(names.s)\Name = names.s
 PList()\IDEditor = Editor
 
  AddTabBarGadgetItem(10, #PB_Default, names.s)
  EditorGadget(Editor, 10, 65, 300, 200 )
  AddGadgetItem(Editor, -1, names.s)
  HideGadget(Editor,1)
EndProcedure
 
Procedure EnableTabGadget(Name.s, Map PLChat.Chat())
  Protected Sel.s, prGadget.l
  ForEach PLChat()
    HideGadget(PLChat()\IDEditor, 1)
  Next
 
  ForEach PLChat()
    If MapKey(PLChat()) = Name.s
      HideGadget(PLChat()\IDEditor, 0)
      Break
    EndIf
  Next
EndProcedure



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

Зарегистрирован: Вт янв 13, 2009 2:41 pm
Сообщений: 370
Благодарил (а): 3 раз.
Поблагодарили: 17 раз.
Пункты репутации: 8
Зачем же так с картами, это же не связный список. Так делать не нужно:
Код:
1
2
3
4
5
6
7
 ForEach PLChat()
   If MapKey(PLChat()) = Name.s
     prGadget.l = PLChat()\IDEditor
     HideGadget(prGadget, 0)
     Break
   EndIf
 Next

Нужно так:
Код:
1
HideGadget(PLChat(Name.s)\IDEditor, 0)



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

Зарегистрирован: Вт фев 25, 2014 8:41 pm
Сообщений: 26
Благодарил (а): 5 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
Fox писал(а):
Зачем же так с картами, это же не связный список. Так делать не нужно:
Код:
1
2
3
4
5
6
7
 ForEach PLChat()
   If MapKey(PLChat()) = Name.s
     prGadget.l = PLChat()\IDEditor
     HideGadget(prGadget, 0)
     Break
   EndIf
 Next

Нужно так:
Код:
1
HideGadget(PLChat(Name.s)\IDEditor, 0)


Я уже поправил код до этого сообщения. Просто накидывал быстренько вот и где то ошибки :) Ну а вообще как реализация? Удачно так будет?


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: PanelGadget
СообщениеДобавлено: Сб мар 01, 2014 7:14 pm 
Не в сети
профессор

Зарегистрирован: Вт янв 13, 2009 2:41 pm
Сообщений: 370
Благодарил (а): 3 раз.
Поблагодарили: 17 раз.
Пункты репутации: 8
Ну я бы всётаки в качестве ключа для карты (если уж использовать карты) использовал не имя вкладки, а её индекс, как предложил Никита.
Правда на вкладке то не один элемент будет, поэтому лучше сделать например список структур, первый элемент структуры - индекс вкладки, второй элемент - ID гаджета. Получаешь индекс активной вкладки и проходьшься по всему списку, показывая элементы с индексом этой вкладки, и скрывая другие. В общем по типу хранения данных в базе данных, и выборке этих данных.


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

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

Имя использую так как в своей программе при создание вкладки я задаю ей имя, ну в принципе мне так удобней в моей программе.
Ты предложил то же самое только имя заменить на индекс. Я думаю это не столь важно и не критично для работы. :)


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

Зарегистрирован: Пн апр 09, 2007 4:53 pm
Сообщений: 11108
Благодарил (а): 4 раз.
Поблагодарили: 395 раз.
Зачем использовать map, если больше подойдет список?

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


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

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


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

Зарегистрирован: Пн апр 09, 2007 4:53 pm
Сообщений: 11108
Благодарил (а): 4 раз.
Поблагодарили: 395 раз.
Потому что он лучше подходит под задачу. Номер вкладки будет соответствовать индексу элемента списка. При добавлении и удалении вкладки, нужно добавить или удалить элемент списка с тем же индексом что и у вкладки.

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


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

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


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

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


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

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


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

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