Показать сообщение отдельно
Старый 11.01.2008, 22:57   #9
FrankH
Разработчик
 
Регистрация: 09.12.2007
Сообщений: 376
Написано 83 полезных сообщений
(для 122 пользователей)
Re: Примеры элементов GUI

Цифры
Все ранее описанное является большей частью основы графического интерфейса. Эти элементы используются практически во всех играх и приложениях, и прекрасно ведут себя с небольшим количеством (от одного до десятков), как правило, заранее определенных значений. Однако этого не достаточно, когда необходимо изменить уровень чего-то (звук, гамма, цвет чего-либо..) или выбрать какое-либо числовое значение в гораздо больших пределах (количество очков, время за раунд, число респаунов или патронов). Для этого я написал простейший числовой счетчик с индикацией. Он не предоставляет возможности вводить свое значение, но зажав на нем ЛКМ, вы можете прокручивать значение. Так же такой счетчик не сложно изменить под графическое отображение "конька". Для следующих примеров я использовал еще две переменные:
Global GWeit=800
Global GHeit=600

В моем случае они хранили разрешение экрана и использовались для определения положения графических элементов, и возвращения размера вьюпорта во весь экран:
;param - текущее значение в счетчике
;value - максимальное значение счетчика, счет идет с нуля
Function CrtMenuRott(atx,aty,name$,expl$,typ,clr,param,valu e) ;rott slider 0~value
tx=atx-CheckImHalfSize ;определение координат рабочей области, картинка не используется
ty=aty-CheckImHalfSize
newparam=param
Color RIC3,GIC3,BIC3
ClsColor RIC3,GIC3,BIC3
Rect atx-20,aty-10,40,20,1 ;рисуем прямоугольник рабочей области
Color RIC1,GIC1,BIC1
;проверка наведен ли курсор
If ((Mouse_HitX>tx) And (Mouse_HitX<tx+CheckImSize) And (Mouse_HitY>ty) And (Mouse_HitY<ty+CheckImSize) And clr) Then
tempx=MouseX() ;создаем временный кеш2 для мыши
tempy=MouseY()
Viewport atx-20, aty-10, 40, 20 ;переключаемся на отображение только рабочей области
While (MouseDown(1)) ;пока нажата мышь, меняем значение счетчика на дельту кеш-кеш2
Cls
If (param>=0 And param<=value) Then
newparam=param+(MouseX()-tempx)-(MouseY()-tempy)
If newparam>value newparam=value
If newparam<0 newparam=0
EndIf
Text atx,aty,newparam,1,1

Flip
Wend
Mouse_Hit=0 ;обнуляем переменные, возвращаем вьюпорт на место, проверяем счетчик подсказки
Viewport 0, 0, GWeit, GHeit
If expl$<>0 And help_delay=maxhelp_delay Then exploration$=expl$
EndIf

SetFont fnt2 ;прописываем параметр и его имя сверху, возвращаем результат
Text atx,aty,newparam,1,1
Color 100+150*clr,100+150*clr,100+150*clr
Text atx,aty-16,name$,1,1
Return newparam
End Function
(Offline)
 
Ответить с цитированием