purebasic.info

PureBasic forum
Текущее время: Ср сен 19, 2018 5:02 am

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




Начать новую тему Ответить на тему  [ Сообщений: 26 ]  На страницу 1, 2  След.
Автор Сообщение
 Заголовок сообщения: Динамическое создание элементов
СообщениеДобавлено: Ср июн 10, 2015 7:38 pm 
Не в сети
доцент
Аватар пользователя

Зарегистрирован: Ср июн 10, 2015 7:30 pm
Сообщений: 33
Благодарил (а): 5 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
Прошу прощения! Но задача стоит следующая: надо динамически создавать эелементы - текст, кнопки, ссылки.
Чтобы было более понятно, необходимо вывести содержимое каталога: будет картинка, имя файла и кнопки. Стандартный вариант не устраивает.
И в все это мероприятие под Линем.
Заранее спасибо!


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Ср июн 10, 2015 7:42 pm 
Не в сети
МОДЕРАТОР
Аватар пользователя

Зарегистрирован: Пн апр 09, 2007 4:53 pm
Сообщений: 11255
Благодарил (а): 4 раз.
Поблагодарили: 429 раз.
sedoyded писал(а):
необходимо вывести содержимое каталога
Чем ExplorerComboGadget, ExplorerListGadget или ExplorerTreeGadget не подошли?

Если нужно создавать гаджеты динамически, необходимо вместо идентификатора использовать #PB_Any и сохранять идентификаторы возвращаемые функцией, в массиве или списке.

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


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Ср июн 10, 2015 7:46 pm 
Не в сети
доцент
Аватар пользователя

Зарегистрирован: Ср июн 10, 2015 7:30 pm
Сообщений: 33
Благодарил (а): 5 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
Я же уточнил, что стандартные варианты не годятся (стиль другой), а при создании в динамике можно "сложить" то, что надо.
Но не могу понять каким образом это сделать....
Через массив - это выход.
Но как это организовать в PureBasic? Хотя-бы от чего отталкиваться...


Последний раз редактировалось sedoyded Чт июн 11, 2015 5:37 am, всего редактировалось 1 раз.

Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Ср июн 10, 2015 8:08 pm 
Не в сети
профессор
Аватар пользователя

Зарегистрирован: Чт июн 25, 2009 1:02 pm
Сообщений: 2285
Откуда: Russia — Belarus
Благодарил (а): 6 раз.
Поблагодарили: 72 раз.
Пункты репутации: 11
Вопрос слишком расплывчатый.

Хранить можно в списке со структурой:
Код:
1
2
3
4
5
6
7
8
9
10
EnableExplicit
 
Structure item
  id.i
  image_id.i
  title.s{32}
  description.s{512}
EndStructure
 
Global NewList items.item()


_________________
EnableExplicit User


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Чт июн 11, 2015 5:02 am 
Не в сети
доцент
Аватар пользователя

Зарегистрирован: Ср июн 10, 2015 7:30 pm
Сообщений: 33
Благодарил (а): 5 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
Спасибо! Со структурой понятно. Не совсем понятно как обрабатывать эти записи в repeat. Хотя, может быть, и есть варианты...
Спасибо! Буду пробовать!

P.S.
Вдогонку! Пишу на PureBasic в первый раз, так что извините за бестолковые (может быть) вопросы.
Каким образом реализовать замену курсора и картинки в image (image over).
У меня не получилось. Или на ImageGadget это вообще не обрабатывается? Хотя каким-то образом должно...


Вложения:
Комментарий к файлу: Это то, что пытаюсь "сложить". Motion c GUI PureBasic
screen.png [502.79 KiB]
Скачиваний: 0
Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Чт июн 11, 2015 8:47 am 
Не в сети
МОДЕРАТОР
Аватар пользователя

Зарегистрирован: Пн апр 09, 2007 4:53 pm
Сообщений: 11255
Благодарил (а): 4 раз.
Поблагодарили: 429 раз.
Что в конечном итоге должно получится? Может есть программы с похожим интерфейсом? Нужен скрин их окна.

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


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Чт июн 11, 2015 9:11 am 
Не в сети
доцент
Аватар пользователя

Зарегистрирован: Ср июн 10, 2015 7:30 pm
Сообщений: 33
Благодарил (а): 5 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
Сделал скрин с окном запроса на выход (вместо стандартного).
В таком-же стиле надо вывести данные архива записей:
1. Каталоги (Дата записи)
2. Содержимое каталога - картинка - время записи - просмотр (кнопка) - удаление (кнопка)
Могу просто сделать рисунок в GIMP-е


Вложения:
screen.png [396.36 KiB]
Скачиваний: 0
Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Чт июн 11, 2015 9:53 am 
Не в сети
МОДЕРАТОР
Аватар пользователя

Зарегистрирован: Пн апр 09, 2007 4:53 pm
Сообщений: 11255
Благодарил (а): 4 раз.
Поблагодарили: 429 раз.
Нужно что-то типа этого?
Код:
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
Structure Gadgets
  Text.i
  Button1.i
  Button2.i
EndStructure
 
NewList Gadgets.Gadgets()
 
OpenWindow(0, 0, 0, 320, 140, "ScrollAreaGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
 
ScrollAreaGadget(0, 10, 10, 308,120, 280, 20*30+10, 30)
 
y=10
For i=1 To 20
  If AddElement(Gadgets())
    Gadgets()\Text = TextGadget(#PB_Any,10,y+4, 100, 20,"Строка "+Str(i))
    Gadgets()\Button1 = ButtonGadget(#PB_Any, 110, y, 70, 20,"Просмотр")
    Gadgets()\Button2 = ButtonGadget(#PB_Any, 190, y, 70, 20,"Удалить")
    y+30
  EndIf
Next i
 
CloseGadgetList()
 
Repeat
  Select WaitWindowEvent()
    Case  #PB_Event_CloseWindow
      End
    Case  #PB_Event_Gadget
     
  EndSelect
ForEver


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


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Чт июн 11, 2015 10:14 am 
Не в сети
доцент
Аватар пользователя

Зарегистрирован: Ср июн 10, 2015 7:30 pm
Сообщений: 33
Благодарил (а): 5 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
С этим, вроде бы понятно. Но! количество элементов для просмотра (пунктов списка) непредсказуемо. Я занимаюсь этими системами уже давно. Так что каталог с записями должен читаться до конца.
И не совсем понятко каким образом определять какая кнопка была нажата в repeat из созданного массива. Вот что основное и не понятно.
То-есть надо определить какая кнопка была нажата, а потом по ее индексу прочитать всю структуру строки. Что-то очень мудреное написал. Надеюсь меня поняли, что я хотел сказать.
Или я в чем-то изначально допускаю ошибку?


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Чт июн 11, 2015 10:31 am 
Не в сети
МОДЕРАТОР
Аватар пользователя

Зарегистрирован: Пн апр 09, 2007 4:53 pm
Сообщений: 11255
Благодарил (а): 4 раз.
Поблагодарили: 429 раз.
Код:
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
Structure Gadgets
  Text.i
  Button1.i
  Button2.i
EndStructure
 
NewList Gadgets.Gadgets()
 
OpenWindow(0, 0, 0, 320, 140, "ScrollAreaGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
 
ScrollAreaGadget(0, 10, 10, 308,120, 280, 20*30+10, 30)
 
y=10
For i=1 To 20
  If AddElement(Gadgets())
    Gadgets()\Text = TextGadget(#PB_Any,10,y+4, 100, 20,"Строка "+Str(i))
    Gadgets()\Button1 = ButtonGadget(#PB_Any, 110, y, 70, 20,"Просмотр")
    Gadgets()\Button2 = ButtonGadget(#PB_Any, 190, y, 70, 20,"Удалить")
    y+30
  EndIf
Next i
 
CloseGadgetList()
 
Repeat
  Select WaitWindowEvent()
    Case  #PB_Event_CloseWindow
      End
    Case  #PB_Event_Gadget
      Gadget = EventGadget()
     
      If Gadget>=10000
        ForEach Gadgets()
          If Gadgets()\Button1 = Gadget
            Debug "Кнопка 'Просмотр' из строки "+Str(ListIndex(Gadgets())+1)
            Break
          ElseIf Gadgets()\Button2 = Gadget
            Debug "Кнопка 'Удалить' из строки "+Str(ListIndex(Gadgets())+1)
            Break
          EndIf
        Next
      EndIf
         
  EndSelect
ForEver


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


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Чт июн 11, 2015 10:54 am 
Не в сети
доцент
Аватар пользователя

Зарегистрирован: Ср июн 10, 2015 7:30 pm
Сообщений: 33
Благодарил (а): 5 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
Попробовал данный пример. Похоже "То, что доктор прописал!".
Попробую уже в программе. Результат отпишу, но к вечеру.
Спасибо, Петр!!!


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Чт июн 11, 2015 7:15 pm 
Не в сети
доцент
Аватар пользователя

Зарегистрирован: Ср июн 10, 2015 7:30 pm
Сообщений: 33
Благодарил (а): 5 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
Петр! Еще раз спасибо. Все заработало!
Загрузка каталога "На ура!". После загрузки resize по количеству элементов...
Код:
1
SetGadgetAttribute(0, #PB_ScrollArea_InnerHeight, ListSize(Gadgets())*50)


Получилось как и планировал.
Но возникла другая проблема (почти). PlayMovie не хочет воспроизводить записанные авишки.
Пока запустил в режиме внешнего плеера.
Если не найду варианты - генерить html перед показом с плеером и запускать в нем (уже в окне программы).
Самое главное - понял (!!!) как создавать "динамику".
Еще раз спасибо!!!


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Чт июн 11, 2015 8:40 pm 
Не в сети
PureBasic Coder
Аватар пользователя

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

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


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Чт июн 11, 2015 8:56 pm 
Не в сети
МОДЕРАТОР
Аватар пользователя

Зарегистрирован: Пн апр 09, 2007 4:53 pm
Сообщений: 11255
Благодарил (а): 4 раз.
Поблагодарили: 429 раз.
В Linux нет DirectX....

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


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Чт июн 11, 2015 9:02 pm 
Не в сети
доцент
Аватар пользователя

Зарегистрирован: Ср июн 10, 2015 7:30 pm
Сообщений: 33
Благодарил (а): 5 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
Авишки, пока на второй план!
Чудеса в решете...
Собрал в отдельном файле динамику. Работает на УРА!
Просто скопировал Structure, NewList, код.
Запускаю... "CatDate() is not a function, array, list, map or macro."
-----------------------------------------------------------------------------
Копирую код в начало файла... закоментировав его на его месте - все работает...
Вот этого понять не могу! Кто подскажет?


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

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


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

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


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

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