forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Проекты на BlitzMax (http://forum.boolean.name/forumdisplay.php?f=106)
-   -   DF_GUI v0.5 (http://forum.boolean.name/showthread.php?t=4959)

Данил 07.11.2007 00:09

DF_GUI v0.5
 
version 0.5


[ ОПИСАНИЕ ]~~~~~~~~~~~~~~~~~~~~~~
DF_GUI - это система для работы с различными элементами.
В моей GUI системы реализованы следующие элементы:

1. Окно
2. Текст
3. Изображение
4. Поле ввода.
5. Скроллер.
6. Лист


Каждый элемент может рисоватся как с помощью линий и прямоугольников, так и с помощью ваших рисунков.

[ СКРИНШОТЫ ]~~~~~~~~~~~~~~~~~~~~~~

Есть 3 типа вывода кнопок:

Так же можно и вытворять с окнами.

А можно настраивать всем элементам картинки.


[ АРХИВ ]~~~~~~~~~~~~~~~~~~~~~~

В архиве находится исходник и пример. Без ЕХЕ. ЕХЕ, если надо, могу отдельно сделать.

[ БУДУЩЕЕ ]~~~~~~~~~~~~~~~~~~~~~~

В будущем намереваюсь сделать визуальное создание кнопок. То есть как , допустим, в VB. Выбираешь кнопку. Создаешь - растягиваешь до нужных размеров.

В итоге тебе дается нужный код.

Также может добавлю элементов.
И, конечно же, исправление мелких усатых багов.

[ ВНИМАНИЕ ]~~~~~~~~~~~~~~~~~~~~~~

Не использовать гуи со Strict и SuperStrict. Если их использовать - падение гуи неизбежно.

Так как один объект эту переменную как рисунок использует, а другой - как число. Я тем самым сокращал кол-во переменных.
В следущих версия (но они будут не скоро) исправлю.

Это ведь версия 0.5 только ;)

[ ТУТОРИАЛ ]~~~~~~~~~~~~~~~~~~~~~~

И небольшой туториал по использованию моего гуи в своих проектах.

=-=-=

Для начала давай подключим гуи для своего проекта.
Код:

Include "GUI.bmx"
Теперь можно использовать все функции в вашем проекте.
Создадим окно.

Код:

DF_GUI.Create_Window (640/2-100,480/2-50,200 , 160, "Main Menu" , "Window1",0,0,0,3,4,3)

(x,y,width , height, text$ , name$, bexit , image, FocusOffDelete, DRL1=2 ,DRL2=1,DRL3=1 )

x, у - начальное положение окна.
width , height - ширина и высота окна.
text - что будет в загаловке окна.
name - имя окна. Используется для вызова некоторых функций.
bexit - будет ли кнопка выхода. [0,1-будет]
image - картинка для окна. Можно оставить равным 0, а можно загрузить картинку. Если картинка будет загружена, то она слева, и весь текст тоже смешается влево.
FocusOffDelete - если фокус проподает с окна - удалить? 1-да 0-нет
DRL1 - тип вывода линий. 1 - вверх. 2-вниз 3-ровно
DRL2,DRL3 - тип вывода прямоугольника. 1 - ровно. 2-градиент. 3-градиент. 4- сильно прозрачное. DRL2 - на само окно. DRL3 - на полосу с названием.
Самое крутое это 1,1,2 или 3,4,3.

Если надо выводить с картинкой:
Код:

DF_GUI.Create_WindowImage (x,y,image, name$, FocusOffDelete, DrapNDrop)
DrapNDrop - можно ли таскать окно. таскается всегда за верхнии 25 пикселей.

Код:

DF_GUI.Create_Text  (x,y,R,G,B, text$ , name$, wind$ )
Создаем текст.
Wind - к какому окну принадлежит объект. Определяется окно по имени.
R,G,B - цвет.

Код:

DF_GUI.Create_Bar (x,y,width,n1 , name$, wind$ )
Скроллер.
Width - ширина скроллера. Высота - 25 пкс.
n1 - сколько значений будет в скроллере.

Код:

DF_GUI.Function Create_BarImage  (x,y,image,image2,n1 , name$, wind$ )
image - картинка - полоса
image2 - ползунок.


Код:

DF_GUI.Create_Image  (x,y,image , name$, wind$ )
Простая картинка.

Код:

DF_GUI.Create_Input  (x,y,width,height,text$ , name$, wind$ )
Поле ввода.
text - что вначале будет в поле ввода.

Код:

DF_GUI .Create_InputImage (x,y,text,Image , name$, wind$ )
поле ввода, где за место прямоугольника - картинка.
Ширина и высота определяются шириной и высотой картинки.

Код:

DF_GUI.Create_List  (x,y,width,text$ , name$, wind$ )
Список. Слева и справа - кнопки.
Текст писать так:
"TEST1|TEST2|TEST3|"
В конце обяхательно |, иначе не будет последнего элемента.
Максимум 10 элементов. Потом, если потребуется, можно сделать легко и больше.

Код:

DF_GUI .Create_ListImage (x,y,image,text$ , name$, wind$ )
Список / лист. Картинкой.

Код:

DF_GUI.Create_Button  (x,y,width, height , image, text$, name$, wind$ )
Обычная кнопка.
image - тип вырисовки [1,2,3,4]

Код:

DF_GUI.Create_ButtonImage  (x,y, image,imagec,imagedown, name$, wind$ )
image - сама картинка кнопки.
imagec - если навели курсор.
imagedown - если нажали.

Вот пока и все эелементы. Функции для работы с ними:

Проверка на нажатие на кнопку.
GUI_ButtonDown (Window$, Button$)
Window - окно
Button - название вашей кнопки.

Изменить поле text:
ChangeText (Window$, obj$ , text$)
Window - окно
Obj - объект (Input,Button,Text,List,Bar)
Text - на что меняем. Для bar - число.

Получить значение поля text :
GetText (Window$, obj$)
Window - окно
Obj - объект (Input,Button,Text,List,Bar)

Есть ли фокус:
GetFocus (Window$, obj$ )
Window - окно
Obj - объект (Input,Button,List,Bar)

Закрыть окно:
ExitWindow (Window$)

Продолжаем наш проект.

Имеется :
Код:

Graphics 640,480
Include "GUI.bmx"

DF_GUI.Create_Window (640/2-100,480/2-50,200 , 160, "Main Menu" , "Window1",0,0,0,1,1,2)

While Not KeyDown (Key_Escape)
Cls
Flip
Wend

Добавим в цикл: GUI_Update()
Теперь у нас будет работать само окно.
Но так ведь не интерестно? добавим надпись:

Код:

DF_GUI.Create_Text (10,0,200,200,200, "Preved, Medved." , "Text1", "Window1" )
Это у нас создаем надпись на нашем окне. Отсчет x и y видется от начал границ окна.

DF_GUI.Create_Button (10,50,180, 20 ,3, "Exit", "Button1", "Window1" )

Создадим кнопку.

Так. Теперь есть некоторые элементы.

Добавим в цикл, после GUI_Update() :

ChangeText ("Window1", "Button1" , GetText ("Window1", "Text1"))
Это меняет у нас название кнопки на название текста.

Можно сделать два варианта завершения программы:

If GUI_ButtonDown ("Window1", "Button1") Then ExitWindow ("Window1")
Просто закрывает окно.

If GUI_ButtonDown ("Window1", "Button1") Then End
Завершает саму программу.

Я остановлюсь на втором.

Вот весь текст:

Код:

Graphics 640,480
Include "GUI.bmx"

DF_GUI.Create_Window (640/2-100,480/2-50,200 , 160, "Main Menu" , "Window1",0,0,0,1,1,2)
DF_GUI.Create_Text (10,0,200,200,200, "Preved, Medved." , "Text1", "Window1" )
DF_GUI.Create_Button (10,50,180, 20 ,3, "Exit",  "Button1", "Window1" )

While Not KeyDown (Key_Escape)
Cls
GUI_Update()
ChangeText ("Window1", "Button1" , GetText ("Window1", "Text1"))
If GUI_ButtonDown ("Window1", "Button1") Then End 
Flip
Wend

Кстати, выражаю благодарность МоКе и dimanche13 за помощь. =)
:crazy: :super: :-)

Данил 07.11.2007 00:11

Re: DF_GUI v0.5
 
Кстати, пример, к сожалению , рабоать не будет. Надо удалить первую строчку - будет норм.

magpro 07.11.2007 00:24

Re: DF_GUI v0.5
 
Всё это очень хорошо теперь для Блитс 3д сделай)

Данил 07.11.2007 00:26

Re: DF_GUI v0.5
 
magpro, все это хорошо, но для blitz3d есть МоКина система : mGUI .

Хе, слишком большой тутор. Люди просто бояццо видимо все это прочитать и понять *лол*

На самом деле все легко, посмотрите конец тутора на весь код ^_^
Кстати, на создание гуи ушло неделя...

ABTOMAT 07.11.2007 00:58

Re: DF_GUI v0.5
 
:super:
Видел в действии, молодец!
Лучше пока ещё не видел.

devolonter 07.11.2007 01:02

Re: DF_GUI v0.5
 
Молодец! Не видел в действии но скрины впечатляют!... Будет время потестирую.... А на счет Strict и SuperStrict это плохо... Надеюсь что это действительно исправится в будущем... :)

Данил 07.11.2007 03:29

Re: DF_GUI v0.5
 
Ура! Ура! Ура!
Я сделал, что терь мона использовать гуи с Strict и SuperStrict. И так же исправлено несколько мелких багов.
Вот гуи с ехе.
http://ifolder.ru/4032009

ЧТо бы вы хотели увидить в следущей версии?

dimanche13 07.11.2007 12:12

Re: DF_GUI v0.5
 
Молодец, Данил! это один из тех людей, который действительно что-то делает на этом форуме, таких мало... И все делает сам а не обращается по каждому поводу на форум, за что ему респект и уважуха. Будет ГУИ вер№1.0 -буду обязательно пользоваться.

IGR 07.11.2007 12:15

Re: DF_GUI v0.5
 
Цитата:

ЧТо бы вы хотели увидить в следущей версии?
хочу видеть следующую версия для blitz3D !! :)

Данил 07.11.2007 12:20

Re: DF_GUI v0.5
 
IGR,

Цитата:

magpro, все это хорошо, но для blitz3d есть МоКина система : mGUI .
:-)


dimanche13, спс =)
Но все таки один раз я обратился на форум =)))

moka 07.11.2007 12:30

Re: DF_GUI v0.5
 
Цитата:

Молодец, Данил! это один из тех людей, который действительно что-то делает на этом форуме, таких мало... И все делает сам а не обращается по каждому поводу на форум, за что ему респект и уважуха.
Обсолютно согласен.
Респект Данил.

Теперь немножко ещё по гуи. Как понял визуальный редактор будет выдовать код. Имхо не слишком динамично. Предлогаю варриант, сразу скажу не слишком простой, но Очень динамичный.
Xml. А именно, ты сможешь сразу окно и его эллементы хранить в 1 xml файле, и при надобности можно хоть блокнотом чтонить подправить. Для визуального редактораб дует удобно грузить, т.к. у Xml древовидная структура, а в ГУИ тоже самое =) Поэтому кто от чего и для чего зависит выдержать будет очень просто.
Хм, ну ещё работы не мало, но и сделано прилично ;)
Нужны ComboBox - это выплывающие эллементы для выбора.
Да и надеюсь ГУИ построенно на системе событий и состояний.

Только не вздумай сбивать темпы разработки. :)

Данил 07.11.2007 12:39

Re: DF_GUI v0.5
 
У меня есть идея сделать визуальный редакор. Но он будет все эти

DF_GUI.Create_Window (640/2-100,480/2-50,200 , 160, "Main Menu" , "Window1",0,0,0,1,1,2)
DF_GUI.Create_Text (10,0,200,200,200, "Preved, Medved." , "Text1", "Window1" )
DF_GUI.Create_Button (10,50,180, 20 ,3, "Exit", "Button1", "Window1" )

Давать не в виде кода, а в виде файла, но не xml. Работать с xml я не умею . =(

И так функию загрузки окон. Допустим, файл form1.form . Вначале игры мы загружаем его через функцию и пропускаем бооольшую кучу всех этих DF_GUI.Create . И так далее. Тоже самое, но пропускаем эту кучю.
Кста, спс за идею, МоКа. =)

Igorr 07.11.2007 16:22

Re: DF_GUI v0.5
 
Молодец!:super:
Могу дать модуль MaXML и справку по нему.

Igorr 07.11.2007 16:25

Re: DF_GUI v0.5
 
Как вариант ещё можно делать отступы.
DF_GUI.Create_Window (640/2-100,480/2-50,200 , 160, "Main Menu" , "Window1",0,0,0,1,1,2)
__DF_GUI.Create_Text (10,0,200,200,200, "Preved, Medved." , "Text1", "Window1" )
__DF_GUI.Create_Button (10,50,180, 20 ,3, "Exit", "Button1", "Window1" )

Данил 07.11.2007 16:37

Re: DF_GUI v0.5
 
Igorr, как вариант, я решил вообще без них обойтись =))))))))))


Часовой пояс GMT +4, время: 22:31.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot