DrawLehti(x,y,txt,id)

Oletko tehnyt jotain, mistä muut voisivat hyötyä. Postita vinkit tänne.
Post Reply
tuhoojabotti
Advanced Member
Posts: 485
Joined: Tue Aug 28, 2007 3:53 pm
Location: Suomi, Finland
Contact:

DrawLehti(x,y,txt,id)

Post by tuhoojabotti »

koodasin tässä tämmösen hyvin yksinkertaisen väli lehti funktion...

tässä tarvittavat muuttujat:

Code: Select all

Const maxlehdet =2 //kuinka monta nappian on ja ladataan?
Dim lehdet(maxlehdet)//itse lehdet
tässä funktio:

Code: Select all

Function DrawLehti(x,y,txt$,id)
If lehdet(id)=0 Then  
    //tekstit
    Color cbblack
    If MouseX()>x And MouseX()<x+TextWidth(txt)+10 And MouseY()>y And MouseY()<y+ TextHeight(txt)+4 Then Color cbred
    Box x+2,y+2,TextWidth(txt)+10-4,TextHeight(txt),0
    Color cbwhite 
    If MouseX()>x And MouseX()<x+TextWidth(txt)+10 And MouseY()>y And MouseY()<y+ TextHeight(txt)+4 Then Color cbpink
    Text x+5,y+2,txt
    //rajat 
    Color 150,150,0
    Box x,y,TextWidth(txt)+10,TextHeight(txt)+4,0 
    Color 80,80,80
    Box x-1,y-1,TextWidth(txt)+12,TextHeight(txt)+5,0 
    //viiva
    Color cbyellow
    Line 0,y+TextHeight(txt)+7,ScreenWidth(),y+TextHeight(txt)+7
    Color 255,255,100
    Line 0,y+TextHeight(txt)+6,ScreenWidth(),y+TextHeight(txt)+6
    Color 255,255,150  
    Line 0,y+TextHeight(txt)+5,ScreenWidth(),y+TextHeight(txt)+5
    Color 255,255,200
    Line 0,y+TextHeight(txt)+4,ScreenWidth(),y+TextHeight(txt)+4
    Color 255,255,255
    Line 0,y+TextHeight(txt)+3,ScreenWidth(),y+TextHeight(txt)+3
    Color cbyellow
    Box 0,y+TextHeight(txt)+7,ScreenWidth(),ScreenHeight()
Else 
    Color cbcyan
    Box x+2,y+2,TextWidth(txt)+10-4,TextHeight(txt),0
    Color cbLightBlue
    Text x+5,y+2,txt
    //rajat 
    //laatikko
    Color cbyellow
    Box x-1,y-1,TextWidth(txt)+12,TextHeight(txt)+5,0 
    Color 255,255,150
    Box x-2,y-2,TextWidth(txt)+14,TextHeight(txt)+6,0 
    Color 255,255,200
    Box x,y,TextWidth(txt)+10,TextHeight(txt)+4,0
    
    //viiva
    Color cbyellow
    Line 0,y+TextHeight(txt)+7,ScreenWidth(),y+TextHeight(txt)+7
    Color 255,255,100
    Line 0,y+TextHeight(txt)+6,ScreenWidth(),y+TextHeight(txt)+6
    Color 255,255,150  
    Line 0,y+TextHeight(txt)+5,ScreenWidth(),y+TextHeight(txt)+5
    Color 255,255,200
    Line 0,y+TextHeight(txt)+4,ScreenWidth(),y+TextHeight(txt)+4
    Color 255,255,255
    Line 0,y+TextHeight(txt)+3,ScreenWidth(),y+TextHeight(txt)+3
    Color cbyellow
    Box 0,y+TextHeight(txt)+7,ScreenWidth(),ScreenHeight()
EndIf 


If MouseX()>x And MouseX()<x+TextWidth(txt)+10 And MouseY()>y And MouseY()<y+ TextHeight(txt)+4 And MouseHit(1) Then
For i=0 To maxlehdet
lehdet(i)=0 
If i=id Then lehdet(id)=1 //että vain yksi voi olla valittuna
Next i
EndIf 

EndFunction 
ja tässäpä vielä pieni käyttö esimerkki:

Code: Select all

Const maxlehdet =3 //kuinka monta nappian on ja ladataan?
Dim lehdet(maxlehdet)//itse lehdet
lehdet(0)=1 //alussa eka lehti on valittuna

Repeat 




    Select lehti
        Case 0 
                drawlehti(10,20,"Buttons",0)
                drawlehti(80,20,"Graphics",1) 
                drawlehti(158,20,"Sounds",2)
                drawlehti(270,20,"config file",3)
        Case 1
                Color cbwhite 
                Text 0,37,"Graphics:"
                drawlehti(10,20,"buttons",0)
                drawlehti(80,20,"graphics",1)                 
                drawlehti(158,20,"Sounds",2)
                drawlehti(270,20,"config file",3)
                
        Case 2
                Color cbwhite 
                Text 0,37,"Sounds:"
                drawlehti(10,20,"buttons",0)
                drawlehti(80,20,"graphics",1)                 
                drawlehti(158,20,"Sounds",2)
                drawlehti(270,20,"config file",3)
    EndSelect 


DrawScreen 
Forever

Function DrawLehti(x,y,txt$,id)
If lehdet(id)=0 Then  
    //tekstit
    Color cbblack
    If MouseX()>x And MouseX()<x+TextWidth(txt)+10 And MouseY()>y And MouseY()<y+ TextHeight(txt)+4 Then Color cbred
    Box x+2,y+2,TextWidth(txt)+10-4,TextHeight(txt),0
    Color cbwhite 
    If MouseX()>x And MouseX()<x+TextWidth(txt)+10 And MouseY()>y And MouseY()<y+ TextHeight(txt)+4 Then Color cbpink
    Text x+5,y+2,txt
    //rajat 
    Color 150,150,0
    Box x,y,TextWidth(txt)+10,TextHeight(txt)+4,0 
    Color 80,80,80
    Box x-1,y-1,TextWidth(txt)+12,TextHeight(txt)+5,0 
    //viiva
    Color cbyellow
    Line 0,y+TextHeight(txt)+7,ScreenWidth(),y+TextHeight(txt)+7
    Color 255,255,100
    Line 0,y+TextHeight(txt)+6,ScreenWidth(),y+TextHeight(txt)+6
    Color 255,255,150  
    Line 0,y+TextHeight(txt)+5,ScreenWidth(),y+TextHeight(txt)+5
    Color 255,255,200
    Line 0,y+TextHeight(txt)+4,ScreenWidth(),y+TextHeight(txt)+4
    Color 255,255,255
    Line 0,y+TextHeight(txt)+3,ScreenWidth(),y+TextHeight(txt)+3
    Color cbyellow
    Box 0,y+TextHeight(txt)+7,ScreenWidth(),ScreenHeight()
Else 
    Color cbcyan
    Box x+2,y+2,TextWidth(txt)+10-4,TextHeight(txt),0
    Color cbLightBlue
    Text x+5,y+2,txt
    //rajat 
    //laatikko
    Color cbyellow
    Box x-1,y-1,TextWidth(txt)+12,TextHeight(txt)+5,0 
    Color 255,255,150
    Box x-2,y-2,TextWidth(txt)+14,TextHeight(txt)+6,0 
    Color 255,255,200
    Box x,y,TextWidth(txt)+10,TextHeight(txt)+4,0
    
    //viiva
    Color cbyellow
    Line 0,y+TextHeight(txt)+7,ScreenWidth(),y+TextHeight(txt)+7
    Color 255,255,100
    Line 0,y+TextHeight(txt)+6,ScreenWidth(),y+TextHeight(txt)+6
    Color 255,255,150  
    Line 0,y+TextHeight(txt)+5,ScreenWidth(),y+TextHeight(txt)+5
    Color 255,255,200
    Line 0,y+TextHeight(txt)+4,ScreenWidth(),y+TextHeight(txt)+4
    Color 255,255,255
    Line 0,y+TextHeight(txt)+3,ScreenWidth(),y+TextHeight(txt)+3
    Color cbyellow
    Box 0,y+TextHeight(txt)+7,ScreenWidth(),ScreenHeight()
EndIf 


If MouseX()>x And MouseX()<x+TextWidth(txt)+10 And MouseY()>y And MouseY()<y+ TextHeight(txt)+4 And MouseHit(1) Then
For i=0 To maxlehdet
lehdet(i)=0 
If i=id Then lehdet(id)=1 //että vain yksi voi olla valittuna
Next i
EndIf 

EndFunction 
ja koodasin tuon ~30 minsassa :P grafiikoita voisi parantaa mutta tuo on alku :D
Last edited by tuhoojabotti on Mon Jan 21, 2008 6:28 pm, edited 1 time in total.
Imagedev.tuhoojabotti.com — “Programmer (noun): An organism that turns caffeine into code.”
ManualIntelligence
Newcomer
Posts: 38
Joined: Tue Sep 04, 2007 3:22 pm

Re: DrawLehti(x,y,txt,id)

Post by ManualIntelligence »

Ihan toimiva täytyy myöntää, mutta siihen voisi lisätä sen, että valitun välilehden ja sen ylläolevan laatikon välinen viiva poistuisi. Niin että ne olisivat ikäänkuin yhtä sivua. Vähän niinkuin selaimissa, (ainakin tuliketussa.)

#3 -> Heh, mulla on semmonen vaikututs :D
Last edited by ManualIntelligence on Mon Jan 21, 2008 6:00 pm, edited 1 time in total.
Progress of "Target Humanity":
> Koukussa Kalastukseen 2
> Koukussa Kalastukseen
> RistiNolla 07
> Offlimits Minigolf
tuhoojabotti
Advanced Member
Posts: 485
Joined: Tue Aug 28, 2007 3:53 pm
Location: Suomi, Finland
Contact:

Re: DrawLehti(x,y,txt,id)

Post by tuhoojabotti »

ManualIntelligence wrote:Ihan toimiva täytyy myöntää, mutta siihen voisi lisätä sen, että valitun välilehden ja sen ylläolevan laatikon välinen viiva poistuisi. Niin että ne olisivat ikäänkuin yhtä sivua. Vähän niinkuin selaimissa, (ainakin tuliketussa.)
heh piti kelaa 5 kertaa toi sun viesti että käsitin ideasi joo se on ihan helppo tehä päivitänpäs kohta :D
EDIT:

eipäs ookkaan niin helppoa... se vaatisi lähes koko function uudelleen kirjotuksen ja tulis aika monimutkaseks... ainakin minulle :P

Imagedev.tuhoojabotti.com — “Programmer (noun): An organism that turns caffeine into code.”
MaGetzUb
Guru
Posts: 1715
Joined: Sun Sep 09, 2007 12:35 pm
Location: Alavus

Re: DrawLehti(x,y,txt,id)

Post by MaGetzUb »

ManualIntelligence wrote:Ihan toimiva täytyy myöntää, mutta siihen voisi lisätä sen, että valitun välilehden ja sen ylläolevan laatikon välinen viiva poistuisi. Niin että ne olisivat ikäänkuin yhtä sivua. Vähän niinkuin selaimissa, (ainakin tuliketussa.)

#3 -> Heh, mulla on semmonen vaikututs :D
Nii mitenkä?!? En nyt oikee ymmärtänyt. Ihan kiva pikku funktio.(niinkuin tapana on sanoa :))
Vähä vain tuntui yksinkertaaselta koodilta / ulko asulta :/
Solar Eclipse
Meneillä olevat Projektit:
We're in a simulation, and God is trying to debug us.
tuhoojabotti
Advanced Member
Posts: 485
Joined: Tue Aug 28, 2007 3:53 pm
Location: Suomi, Finland
Contact:

Re: DrawLehti(x,y,txt,id)

Post by tuhoojabotti »

programmer of DSG wrote: Nii mitenkä?!? En nyt oikee ymmärtänyt. Ihan kiva pikku funktio.(niinkuin tapana on sanoa :))
Vähä vain tuntui yksinkertaaselta koodilta / ulko asulta :/
Tuhoojabotti wrote:koodasin tässä tämmösen hyvin yksinkertaisen väli lehti funktion...
niin eli yksinkertainenhan sen pitikin olla :P tein tässä just varjostetun version (kivan keltanen sekin :P)
EDIT:

voihan tää opettaa taulukoiden käyttöä jollekkin ;)

Imagedev.tuhoojabotti.com — “Programmer (noun): An organism that turns caffeine into code.”
cheeshelmet.jr
Member
Posts: 75
Joined: Tue Aug 28, 2007 6:59 am

Re: DrawLehti(x,y,txt,id)

Post by cheeshelmet.jr »

Vielä jos viitsit muuttaa niin että funktio ei jätä piirtoväriksi keltaista vaan edellisen piirtovärin! Muuten hieno funktio ;)
Marcoder
Active Member
Posts: 120
Joined: Tue Aug 28, 2007 8:21 am

Re: DrawLehti(x,y,txt,id)

Post by Marcoder »

Tässä oma hätäinen viritelmäni. Kansioiden, eikä niiden välilehtien lukumäärää ei ole rajoitettu.
Kehittelemistä on vielä paljon mutta tämähän onkin vain esimerkki.

Code: Select all

SCREEN 800, 600
ClsColor 192, 192, 192
img = LoadImage("media/soldier.bmp")

tab1 = CreateTabControl(10, 50, 400, 200)
AddTabPage(tab1, "Eka")
AddTabPage(tab1, "Toka")
AddTabPage(tab1, "Kolmas")

tab2 = CreateTabControl(10, 300, 400, 200, True)
SetControlColors(tab2, RGB(255, 255, 255), RGB(0, 0, 255), RGB(255, 0, 0), RGB(0, 0, 0))
AddTabPage(tab2, "Ensimmäinen")
AddTabPage(tab2, "Toinen")
AddTabPage(tab2, "Jne jne")
AddTabPage(tab2, "Vielä yksi")

Color 0, 0, 0
Repeat
    DrawTabControls()
    
    Select GetActivePage(tab1)
        Case 1
            Text GetControlX(tab1) + 5, GetControlY(tab1) + 5, "Tämä on eka sivu"
        Case 2
            Text GetControlX(tab1) + 5, GetControlY(tab1) + 5, "Toka sivu tulee tässä"
        Case 3
            Text GetControlX(tab1) + 5, GetControlY(tab1) + 5, "Ja kolmas"
    EndSelect

    Select GetActivePage(tab2)
        Case 1
            Text GetControlX(tab2) + 5, GetControlY(tab2) + 5, "Seliseli ja jeejee"
        Case 2
            DrawImage img, GetControlX(tab2) + 5, GetControlY(tab2) + 5
        Case 3
            Text GetControlX(tab2) + 5, GetControlY(tab2) + 5, "Huuhaa!!!"
    EndSelect
    
    DrawScreen
Forever



Global gBackColor, gBorderColor, gInactiveTextColor, gActiveTextColor

Type TTabControl
    Field currentPage
    Field tabDown
    Field x
    Field y
    Field width
    Field height
    Field pages$
    Field backColor
    Field borderColor
    Field activeTextColor
    Field inactiveTextColor
EndType


Function CreateTabControl(_x, _y, _width, _height, _tabDown = 0)
    tab.TTabControl = New(TTabControl)
    tab\x           = _x
    tab\y           = _y
    tab\width       = _width
    tab\height      = _height
    tab\tabDown     = _tabDown
    SetControlColors(ConvertToInteger(tab), RGB(216, 216, 216), RGB(128, 128, 128), RGB(64, 64, 64), RGB(0, 0, 0))
    Return ConvertToInteger(tab)
EndFunction


Function SetControlColors(_tabControl, _back, _border, _active, _inactive)
    tab.TTabControl = ConvertToType(_tabControl)
    tab\backColor           = _back
    tab\borderColor         = _border
    tab\activeTextColor     = _active
    tab\inactiveTextColor   = _inactive
EndFunction


Function AddTabPage(_tabControl, _pageCaption$)
    tab.TTabControl = ConvertToType(_tabControl)
    If Len(tab\pages) > 0 Then tab\pages = tab\pages + ","
    tab\pages = tab\pages + Replace(_pageCaption, ",", " ")
    If tab\currentPage = 0 Then tab\currentPage = 1
EndFunction



Function GetActivePage(_tabControl)
    tab.TTabControl = ConvertToType(_tabControl)
    Return tab\currentPage
EndFunction


Function GetControlX(_tabControl)
    tab.TTabControl = ConvertToType(_tabControl)
    Return tab\x
EndFunction


Function GetControlY(_tabControl)
    tab.TTabControl = ConvertToType(_tabControl)
    Return tab\y
EndFunction


Function DrawTabControls()
    mHit = MouseHit(1)
    mX   = MouseX()
    mY   = MouseY()
    cRed = getRGB(RED) : cGreen = getRGB(GREEN) : cBlue = getRGB(BLUE)
    h = TextHeight("X") + 10
    For tab.TTabControl = Each TTabControl
        DrawPanel(tab\x, tab\y, tab\width, tab\height, tab\backColor, tab\borderColor)
        y = tab\y - h + 1
        x = tab\x + 3
        If tab\tabDown = 1 Then y = tab\y + tab\height - 1
        currentPage = tab\currentPage
        For i = 1 To CountWords(tab\pages, ",")
            caption$ = GetWord(tab\pages, i, ",")
            w = TextWidth(caption) + 10
            Color 0, 0, tab\inactiveTextColor
            If tab\currentPage = i Then 
                Color 0, 0, tab\activeTextColor
                h + 3
                If tab\tabDown = False Then y - 3 
            EndIf
            DrawPanel(x, y, w, h, tab\backColor, tab\borderColor, caption)
            If mHit = True And mX >= x And mX <= x + w And mY >= y And mY <= y + h Then currentPage = i
            If tab\currentPage = i Then
                Color 0, 0, tab\backColor
                If tab\tabDown Then
                    Line x + 1, y, x + w - 2, y
                Else
                    Line x + 1, y + h - 1, x + w - 2, y + h - 1
                    y + 3
                EndIf
                h - 3
            EndIf
            x = x + w - 1
        Next i
        tab\currentPage = currentPage
    Next tab
    Color cRed, cGreen, cBlue
EndFunction


Function DrawPanel(_x, _y, _width, _height, _backColor, _borderColor, _text$ = "")
    cRed = getRGB(RED) : cGreen = getRGB(GREEN) : cBlue = getRGB(BLUE)
    Color 0, 0, _backColor
    Box _x, _y, _width, _height, ON
    Color 0, 0, _borderColor
    Box _x, _y, _width, _height, OFF
    If Len(_text) > 0 Then
        Color cRed, cGreen, cBlue
        CenterText _x + _width / 2, _y + _height / 2, _text, 2
    EndIf
EndFunction


Function RGB(_r, _g, _b)
    Return (_r Shl 16) + (_g Shl 8) + _b
EndFunction
Last edited by Marcoder on Wed Jan 23, 2008 3:01 pm, edited 2 times in total.
tuhoojabotti
Advanced Member
Posts: 485
Joined: Tue Aug 28, 2007 3:53 pm
Location: Suomi, Finland
Contact:

Re: DrawLehti(x,y,txt,id)

Post by tuhoojabotti »

jotenkin arvasin tämän... no koodasin tuon peliini jossa se käy hyvin noinkin... ajattelin vain julkaista... :P
Imagedev.tuhoojabotti.com — “Programmer (noun): An organism that turns caffeine into code.”
Marcoder
Active Member
Posts: 120
Joined: Tue Aug 28, 2007 8:21 am

Re: DrawLehti(x,y,txt,id)

Post by Marcoder »

tuhoojabotti wrote:no koodasin tuon peliini jossa se käy hyvin noinkin...
Käy mainiosti. Näitähän voidaan väsäillä vaikka tuhat erilaista ja käyttötarkoitus lopulta määrää mikä on paras.

Yleensä käy niin että vaikka näitä erilaisia GUI-palikoita on valmiina niin silti jokaiseen peliin tulee koodattua ihan omat systeemit koska joku valmis palikka ei istu graafiseen ilmeeseen.

Esimerkiksi tuo minun viritykseni olisi jossain pelissä aivan liian "kliinin" näköinen ja koska se on koodattu aika "automaattiseksi" niin ulkonäön muuttaminen on hankalaa.
tuhoojabotti
Advanced Member
Posts: 485
Joined: Tue Aug 28, 2007 3:53 pm
Location: Suomi, Finland
Contact:

Re: DrawLehti(x,y,txt,id)

Post by tuhoojabotti »

Marcoder wrote:Käy mainiosti. Näitähän voidaan väsäillä vaikka tuhat erilaista ja käyttötarkoitus lopulta määrää mikä on paras.

Yleensä käy niin että vaikka näitä erilaisia GUI-palikoita on valmiina niin silti jokaiseen peliin tulee koodattua ihan omat systeemit koska joku valmis palikka ei istu graafiseen ilmeeseen.

Esimerkiksi tuo minun viritykseni olisi jossain pelissä aivan liian "kliinin" näköinen ja koska se on koodattu aika "automaattiseksi" niin ulkonäön muuttaminen on hankalaa.
hehee tekee taulukolla ne värit ja että esim r(10)g(10)b(10) ja color r(0),g(0),b(0)=reunojen väri :P sillon se on muutettava ainakin värin puolesta :P
Imagedev.tuhoojabotti.com — “Programmer (noun): An organism that turns caffeine into code.”
Marcoder
Active Member
Posts: 120
Joined: Tue Aug 28, 2007 8:21 am

Re: DrawLehti(x,y,txt,id)

Post by Marcoder »

tuhoojabotti wrote:hehee tekee taulukolla ne värit ja että esim r(10)g(10)b(10) ja color r(0),g(0),b(0)=reunojen väri :P sillon se on muutettava ainakin värin puolesta :P
Muokkasin esimerkkiä vähän ja nyt jokaiselle kansiolle voi määritellä omat värit.
Koodista kannattaa huomata erikoinen värimäärittely joka on tosin ihan CB:n syntaksin mukainen. Etuna tuossa on että väriarvo voidaan tallettaa yhteen muuttujaan normaalin kolmen sijasta.

Ja kodihan on tuolla ylempänä muokattuna kun en viitsi lähes samaa koodinpätkää pastettaa uudestaan.
tuhoojabotti
Advanced Member
Posts: 485
Joined: Tue Aug 28, 2007 3:53 pm
Location: Suomi, Finland
Contact:

Re: DrawLehti(x,y,txt,id)

Post by tuhoojabotti »

löysin muuten bugin avaappas ohjelma ja katso sitä ylempää kolmatta tabia niin se oikean puoleineset viivat |_ ovat jotenkin noin eli ne ei osu toisiinsa niinkuin pitäisi ;P
Imagedev.tuhoojabotti.com — “Programmer (noun): An organism that turns caffeine into code.”
Marcoder
Active Member
Posts: 120
Joined: Tue Aug 28, 2007 8:21 am

Re: DrawLehti(x,y,txt,id)

Post by Marcoder »

tuhoojabotti wrote:löysin muuten bugin...
No kattoppas mokomaa :|
Korjattu.
mokkeri
Member
Posts: 84
Joined: Sat Apr 05, 2008 9:22 pm

Re: DrawLehti(x,y,txt,id)

Post by mokkeri »

Hieno on! Tosi iisi käyttää :)
asd
Post Reply