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

Система кнопок
Чекбокс удобно использовать в опциях с двумя вариантами, например, для включения антиалайзинга, звука, спецэффектов или теней. Если же необходимо выбрать разрешение экрана, уровень деталей, сложность, мод или что-либо, имеющее более двух вариантов ответа, необходимо пользоваться другим методом. Первый из них основан на уже описанных выше элементах, и является системой кнопок, объединенных таким образом, что при нажатии на одну из них - она фиксируется во включенном положении, в то время как остальные - отключаются (RadioButtonGadget).
Сам код:

;этот радиобаттн всего на три кнопки, если хотите сделать больше, ;необходимо добавить соответствующих элементов и параметров
Function CrtMenuTracker(atx1,aty1,atx2,aty2,atx3,aty3,name1 $,name2$,name3$,typ,clr,state)
tx1=atx1-TrackerImxHalfSize ;вычисляем положение для каждой картинки отдельно
ty1=aty1-TrackerImyHalfSize ;предполагая что они могут быть разными по размеру
tx2=atx2-TrackerImxHalfSize ;в нашем случае картинка одна
ty2=aty2-TrackerImyHalfSize
tx3=atx3-TrackerImxHalfSize
ty3=aty3-TrackerImyHalfSize

;наведена ли мыщь и имеет ли место ЛКМ, соответственно рисуем картинку и меняем статус
If ((Mouse_HitX>tx1) And (Mouse_HitX<tx1+TrackerImxSize) And (Mouse_HitY>ty1) And (Mouse_HitY<ty1+TrackerImySize) And clr) Then
If Mouse_Hit Then DrawImage MenuButtonMPRESS, tx1,ty1 state=1 Mouse_Hit=0 Else DrawImage MenuButtonMON, tx1,ty1
Else DrawImage MenuButtonMPASS, tx1,ty1
EndIf
;то же для двух других кнопок
If ((Mouse_HitX>tx2) And (Mouse_HitX<tx2+TrackerImxSize) And (Mouse_HitY>ty2) And (Mouse_HitY<ty2+TrackerImySize) And clr) Then
If Mouse_Hit Then DrawImage MenuButtonMPRESS, tx2,ty2 state=2 Mouse_Hit=0 Else DrawImage MenuButtonMON, tx2,ty2
Else DrawImage MenuButtonMPASS, tx2,ty2
EndIf

If ((Mouse_HitX>tx3) And (Mouse_HitX<tx3+TrackerImxSize) And (Mouse_HitY>ty3) And (Mouse_HitY<ty3+TrackerImySize) And clr) Then
If Mouse_Hit Then DrawImage MenuButtonMPRESS, tx3,ty3 state=3 Mouse_Hit=0 Else DrawImage MenuButtonMON, tx3,ty3
Else DrawImage MenuButtonMPASS, tx3,ty3
EndIf

;если мышь вне кнопок, в зависимости от текущего состояния рисуем картинку активной кнопки
If (state=1) Then DrawImage MenuButtonMPRESS, tx1,ty1
If (state=2) Then DrawImage MenuButtonMPRESS, tx2,ty2
If (state=3) Then DrawImage MenuButtonMPRESS, tx3,ty3

;подписываем
SetFont fnt2
Color 100-100*clr,100-100*clr,100-100*clr
Text atx1,aty1,name1$,1,1
Color 100-100*clr,100-100*clr,100-100*clr
Text atx2,aty2,name2$,1,1
Color 100-100*clr,100-100*clr,100-100*clr
Text atx3,aty3,name3$,1,1

;возвращаем текущее состояние
Return state
End Function
(Offline)
 
Ответить с цитированием