TextButton()

Oletko tehnyt jotain, mistä muut voisivat hyötyä. Postita vinkit tänne.
Post Reply
MrMonday
Advanced Member
Posts: 378
Joined: Fri Oct 10, 2008 2:35 pm

TextButton()

Post by MrMonday »

Ehkä jo joku tällaisenkin kerinnyt täällä julkaisemaan, mutta ei näkynyt, niin laitanpa sitten tämän väsäämäni funktion..
Eli funktiolla pystyy kirjoittamaan tekstiä, josta tulee nappula, eli soveltuu hyvin esimerkiksi tekstipeleihin tai valikkoihin, jne..
Jos tällainen täältä jo löytyy, tai muuten vaikuttaa turhalta, niin saapi tämän toki poistaakkin, mutta toivottavasti jollekkin tästä olisi iloa :)

Code: Select all

    // ESIMERKKI //

Repeat
    ClsColor 100,100,100
    If TextButton(0,0,"Hello World!") = 1 Then End
    DrawScreen
Forever

    // TextButton //

    // X = Tekstin X-Sijainti.
    // Y = Tekstin Y-Sijainti.
    // Txt$ = Teksti.
    // R,G,B = Väri silloin kun hiiri EI ole tekstin päällä, oletuksena sininen.
    // R2,G2,B2 = Väri silloin kun hiiri ON tekstin päällä, oletuksena punainen.

Function TextButton(X,Y,Txt$,R=255,G=0,B=0,R2=0,G2=0,B2=255)

    Locate X, Y
    AddText Txt$
    
            If MouseX() > X And MouseX() < X+TextWidth(Txt$) And MouseY() > Y And MouseY() < Y + TextHeight(Txt$) And MouseHit(1) Then
                Return 1
            ElseIf MouseX() > X And MouseX() < X+TextWidth(Txt$) And MouseY() > Y And MouseY() < Y + TextHeight(Txt$) Then 
                Color R,G,B
            Else 
                Color R2,G2,B2
            EndIf
            
End Function
temu92
Web Developer
Web Developer
Posts: 1226
Joined: Mon Aug 27, 2007 9:56 pm
Location: Gamindustri
Contact:

Re: TextButton()

Post by temu92 »

Onhan näitä jo jos jonkinmoisia mutta suurin osa kait julkaistu vain CBKK:ssa joka siis on nyt ollut jo maassa ties kuinka pitkään :P
MaGetzUb
Guru
Posts: 1715
Joined: Sun Sep 09, 2007 12:35 pm
Location: Alavus

Re: TextButton()

Post by MaGetzUb »

Itseasiassa Locatella ja Addtextillähän tämä on loistava toteuttaa, koska napit eivät voi mennä päällekkäin. Pistäs vielä tuohon funktioon tarkistus onko x/y parametria muutettu, jos on nii käytetään Locatea. :)
Solar Eclipse
Meneillä olevat Projektit:
We're in a simulation, and God is trying to debug us.
User avatar
valscion
Moderator
Moderator
Posts: 1599
Joined: Thu Dec 06, 2007 7:46 pm
Location: Espoo
Contact:

Re: TextButton()

Post by valscion »

MaGetzUb wrote:Itseasiassa Locatella ja Addtextillähän tämä on loistava toteuttaa, koska napit eivät voi mennä päällekkäin. Pistäs vielä tuohon funktioon tarkistus onko x/y parametria muutettu, jos on nii käytetään Locatea. :)
Samaan syssyyn vois pistää jonkinmoisen tarkistuksen, ettei AddTextiä kutsuta turhaan. Eihän siitä ole muuta kuin haittaa, jos sitä käytetään joka loopin kierroksella.
cbEnchanted, uudelleenkirjoitettu runtime. Uusin versio: 0.4.1 — Nyt myös sorsat GitHubissa!
NetMatch - se kunnon nettimättö-deathmatch! Avoimella lähdekoodilla varustettu
vesalaakso.com
User avatar
Koodari
Active Member
Posts: 201
Joined: Wed Nov 18, 2009 9:01 pm
Contact:

Re: TextButton()

Post by Koodari »

Ei pahalla, mutta parempi omasta mielestäni!

Code: Select all

Repeat
    If Button(200,150,"Hello world!") = True Then End
    DrawScreen
Until EscapeKey()

Function Button(x,y,Txt$) 'x = laatikon keskipisteen x-koordinaatti  ;  y = laatikon keskipisteen y-koordinaatti  ;  Txt$ = Teksti, joka laatikkoon kirjoitetaan
    leveys=TextWidth(Txt$)+22
    korkeus=TextHeight(Txt$)+12
    Color cbWhite
    If MouseX()>x-leveys/2 And MouseY()>y-korkeus/2 And MouseX()<x+leveys/2 And MouseY()<y+korkeus/2 Then
        Color cbRed
        If MouseHit(1) Then
            Return 1
        EndIf
    EndIf
    Box x-leveys/2,y-korkeus/2,leveys,korkeus,0
    Color cbWhite
    CenterText x,y,Txt$,2
End Function
Alussa oli asiakas, projekti ja Koodari...

Code: Select all

[23:36:33] <Minixmix> jos nyt viel yhen lastin heittäis
[23:36:48] <Minixmix> Sit loput vois hoitaa kännyllä :/
[00:14:49] <Minixmix> mutta nyt tyhjennykselle ->
[/size]
Viltzu
Guru
Posts: 1132
Joined: Sun Aug 26, 2007 5:45 pm
Location: Alavieska
Contact:

Re: TextButton()

Post by Viltzu »

Tässä joskus muutama vuosi taaksepäin tekemäni funktio.

Code: Select all

Function TextButton(X, Y, T$)
    If MouseX()>X And MouseX()<X+TextWidth(T) And MouseY()>Y And MouseY()<Y+TextHeight (T) Then
        Text X,Y,T
        Return MouseHit(1)
    Else
        r = GetRGB(RED) : g = getRGB(GREEN) : b = getRGB(BLUE)
        Color r/2, g/2, b/2
        Text X,Y,T
        Color r, g, b
    EndIf
EndFunction
Kun hiiri on tekstin päällä se värjäytyy nykyisellä piirtovärillä, ja kun hiiri ei ole tekstin päällä se värjäytyy nykyisen piirtovärin puolikkailla. (Hmm..)
Esimerkki käytöstä vielä jos joku ei jaksa itse tehdä

Code: Select all

Repeat
    //Color 255,125,0
    If TextButton(20,20,"Hello World!") Then MakeError "Memory Access Violation"
    DrawScreen
Forever
MrMonday
Advanced Member
Posts: 378
Joined: Fri Oct 10, 2008 2:35 pm

Re: TextButton()

Post by MrMonday »

Koodari wrote:Ei pahalla, mutta parempi omasta mielestäni!

Code: Select all

Koodia...
Mutta tässä taitaa hieman tuo idea kadota, eli painettava nappi on nimenomaan se teksti, ei laatikko..
Saatoin ehkä ymmärtää jotain väärinkin, kun en koodia tarkemmin katsellut, kokeilin vain toiminnassa..
Viltzulla taasen on mielestäni vallan näppärä systeemi, tai ainakin tekemässään esimerkissä toimi hyvin :) (Mitä nyt heitti MAVia :lol: )
User avatar
Koodari
Active Member
Posts: 201
Joined: Wed Nov 18, 2009 9:01 pm
Contact:

Re: TextButton()

Post by Koodari »

MrMonday wrote:
Koodari wrote:Ei pahalla, mutta parempi omasta mielestäni!

Code: Select all

Koodia...
Mutta tässä taitaa hieman tuo idea kadota, eli painettava nappi on nimenomaan se teksti, ei laatikko..
Saatoin ehkä ymmärtää jotain väärinkin, kun en koodia tarkemmin katsellut, kokeilin vain toiminnassa..
Viltzulla taasen on mielestäni vallan näppärä systeemi, tai ainakin tekemässään esimerkissä toimi hyvin :) (Mitä nyt heitti MAVia :lol: )
Miksikäs ei... Ei käy kiistämään Viltsun idean hienoutta!

EDIT: Mutta huono asia on id :n puuttuminen (lisäkin itse)
Alussa oli asiakas, projekti ja Koodari...

Code: Select all

[23:36:33] <Minixmix> jos nyt viel yhen lastin heittäis
[23:36:48] <Minixmix> Sit loput vois hoitaa kännyllä :/
[00:14:49] <Minixmix> mutta nyt tyhjennykselle ->
[/size]
MaGetzUb
Guru
Posts: 1715
Joined: Sun Sep 09, 2007 12:35 pm
Location: Alavus

Re: TextButton()

Post by MaGetzUb »

Shall we take a look at my GUI Library?
Täs ois mun GUI libaryn Buttoni näin etukäteen jaossa. (Lisää osia tulossa tähän GUI:ni)

Code: Select all

Global DSG_R, DSG_G, DSG_B
Global DSG_RLit, DSG_GLit, DSG_BLit
Global DSG_RDark, DSG_GDark, DSG_BDark
Const DSG_SettingOFF = -1


font = LoadFont("Arial",15,1)
DSG_Colorize(0,150,150)
Palette = LoadImage("Media\Palette.BMP")
Repeat 
    
    Color 255,255,255
    
    ClearText 
    Locate 20,0
    AddText "Valitse väri täältä "
    AddText "hiiren vasemmalla "
    AddText "Näppäimellä. "
    
    DrawImage Palette, 20, 50
    
    If MouseX() > 20 And MouseX() < 20 + ImageWidth(Palette) And MouseY() > 50 And MouseY() < 50 + ImageHeight(Palette)
        If MouseDown(1) Then 
            PickImageColor Palette, MouseX() - 20, MouseY() - 20
            DSG_Colorize(DSG_SettingOFF)
        EndIf 
    EndIf 

    SetFont font
    Color cbblue
    If DSG_Button("Start Game!", ScreenWidth()/2, ScreenHeight()/2, 100, 50, 1) Then MakeError "There's no game available!"
    
  
    DrawScreen
Forever 


Function DSG_Colorize(R = 0, G = 128, B = 128,Bright# = 45.0, Darken# = - 20.0)
    If R < 0 Then 
        DSG_R = getRGB(1)
        DSG_G = getRGB(2)
        DSG_B = getRGB(3)     
    Else 
        DSG_R = R
        DSG_G = G
        DSG_B = B 
    EndIf
    DSG_RLit = Max(0,Min(255, DSG_R + Bright))
    DSG_GLit = Max(0,Min(255, DSG_G + Bright))
    DSG_BLit = Max(0,Min(255, DSG_B + Bright))
    DSG_RDark = Max(0,Min(255, DSG_R - Darken))
    DSG_GDark = Max(0,Min(255, DSG_G - Darken))
    DSG_BDark = Max(0,Min(255, DSG_B - Darken)) 
    Return 0
EndFunction 

Function DSG_ColorSlide(x, y, w, h, r1#, g1#, b1#, r2# = -1, g2# = -1, b2# = -1, style = 0)
    If r2 = -1 And b2 = -1 And g2 = -1 Then
        r2 = r1   
        g2 = g1
        b2 = b1
        r1 = getRGB(1)   
        g1 = getRGB(2)
        b1 = getRGB(3)
    EndIf 
    If style = 0 Then 
        For i = 0 To h
            Color r1 + (r2 - r1) / h * i, g1 + (g2 - g1) / h * i, b1 + (b2 - b1) / h * i
            Box x, y+i, w, 1
        Next i
    Else
        For i = 0 To w
             Color r1 + (r2 - r1) / w * i, g1 + (g2 - g1) / w * i, b1 + (b2 - b1) / w * i
            Box x+i, y, 1, h
        Next i    
    EndIf 
EndFunction 


Function DSG_Button(text$,x,y,w,h,centering = 0, Lightness# = 1)
    If w < TextWidth(Text$) Then w = TextWidth(Text$) + 20
    If h < TextHeight("|") Then h = TextHeight("|") + 20
    If centering Then 
        x = x - w / 2
        y = y - h / 2
    EndIf 
    
    rkerroinl# = DSG_RLit /((DSG_GLit + DSG_BLit)/2)
    gkerroinl# = DSG_GLit /((DSG_BLit + DSG_RLit)/2)
    bkerroinl# = DSG_BLit /((DSG_GLit + DSG_RLit)/2)

    rkerroind# = DSG_RDark /((DSG_GDark + DSG_BDark)/2)
    gkerroind# = DSG_GDark /((DSG_BDark + DSG_RDark)/2)
    bkerroind# = DSG_BDark /((DSG_GDark + DSG_RDark)/2)    
    
    If Not (MouseX() => x And MouseX() =< x + w And MouseY() => y And MouseY() =< y + h) Then 
    
        Color DSG_R, DSG_G, DSG_B
        DSG_ColorSlide(x, y, w, h/2, 255, 255, 255)
        
        Color 0, 0, 0
        DSG_ColorSlide(x, y+h/2, w, h/2, DSG_R, DSG_G, DSG_B)
        
        white = (DSG_R + DSG_G + DSG_B) / 3
        Color white, white, white
        CenterText x+w/2,y+h/2,Text$,2

        
    Else 
    
        Color DSG_RLit, DSG_GLit, DSG_BLit
        DSG_ColorSlide(x, y, w, h/2, 255, 255, 255)
        
        Color 0, 0, 0

        DSG_ColorSlide(x, y+h/2, w, h/2, DSG_RLit, DSG_GLit, DSG_BLit)
        white = (DSG_RLit + DSG_RLit + DSG_RLit) / 3
        
        Color white, white, white     
        CenterText x+w/2,y+h/2,Text$,2        
        
        If MouseDown(1) Then 
            Color DSG_RDark, DSG_GDark, DSG_BDark
            DSG_ColorSlide(x, y, w, h/2, 0, 0, 0)
            
            Color DSG_RDark, DSG_GDark, DSG_BDark 
            DSG_ColorSlide(x, y+h/2, w, h/2, 255, 255, 255)
            
            white = (DSG_RDark + DSG_GDark + DSG_BDark) / 3
            Color white, white, white
            CenterText x+w/2+1,y+h/2+1,Text$,2                  
        EndIf    
        If MouseUp(1) Then 
            Return True 
        EndIf 
    EndIf 
EndFunction 
Saatte vapaasti käyttää ylläolevaa koodia. :) (mainitsemalla nimeni ^^,)
Solar Eclipse
Meneillä olevat Projektit:
We're in a simulation, and God is trying to debug us.
Viltzu
Guru
Posts: 1132
Joined: Sun Aug 26, 2007 5:45 pm
Location: Alavieska
Contact:

Re: TextButton()

Post by Viltzu »

Koodari wrote:
MrMonday wrote:
Koodari wrote:Ei pahalla, mutta parempi omasta mielestäni!

Code: Select all

Koodia...
Mutta tässä taitaa hieman tuo idea kadota, eli painettava nappi on nimenomaan se teksti, ei laatikko..
Saatoin ehkä ymmärtää jotain väärinkin, kun en koodia tarkemmin katsellut, kokeilin vain toiminnassa..
Viltzulla taasen on mielestäni vallan näppärä systeemi, tai ainakin tekemässään esimerkissä toimi hyvin :) (Mitä nyt heitti MAVia :lol: )
Miksikäs ei... Ei käy kiistämään Viltsun idean hienoutta!

EDIT: Mutta huono asia on id :n puuttuminen (lisäkin itse)
Mihin sitä ID:tä tarvitsee? Ei sellaista mielestäni mihinkään tarvi.
User avatar
85 spider
Newcomer
Posts: 35
Joined: Thu Dec 10, 2009 7:01 pm
Location: Vihanti, Alpua

Re: TextButton()

Post by 85 spider »

Laitanpa tänne vielä oman version, jossa on vähän lisäherkkuja esim. Sellainen, että voiko nappia painaa vai ei yms.

Code: Select all

Function general_button(x,y,T$,onoff,comment$)

// piirretään nappi aina päälimmäiseksi
DrawGame 


'napin ulkoasu
  Color 150,150,150
     Box x,y,TextWidth(T$)+10,TextHeight(T$)+6
  Color 200,200,200
     Box x,y,TextWidth(T$)+10,TextHeight(T$)+6,0
  Color 170,170,170
     Box x-1,y-1,TextWidth(T$)+12,TextHeight(T$)+8,0


'voidaanko nappia painaa vai ei
If onoff=1 Then 
  Color 0,0,0
   Else 
     Color 205,205,205
   EndIf 
Text x+5,y+3,T$



If MouseX()>x-2 And MouseX()<x+TextWidth(T$)+11 And MouseY()>y-2 And MouseY()<y+TextHeight(T$)+8 Then 
  If onoff=1 Then
  Color 255,255,255
Box x-1,y-1,TextWidth(T$)+12,TextHeight(T$)+8,0


If MouseHit(1)
  Return 1
  EndIf 
EndIf 

 
'lisätään kommentti
'eli kun hiiri on napin päällä tuleeko näyttöön teksti
'jos on "" niin ei tekstiä
If comment$="" Then 
 Else 
  Color 180,180,180
 Box MouseX()+10,MouseY()+10,TextWidth(comment$)+8,TextHeight(comment$)+4
Color 0,0,0
  
   Box MouseX()+10,MouseY()+10,TextWidth(comment$)+8,TextHeight(comment$)+4,0
  Text MouseX()+14,MouseY()+12,comment$

EndIf 

EndIf 

EndFunction 
jaahas
Advanced Member
Posts: 307
Joined: Fri Feb 05, 2010 11:36 pm
Location: Tornio

Re: TextButton()

Post by jaahas »

täs on mun versio tämä tekee laatikon sen tekstin ympärillekkin ja vaihtaa väriä halutessasi kun hiiri menee laatikkoon ja tätä voi käyttää if lauseessa mut ei oo pakko (jos haluaa tehdä clikattavan tekstin niin if lauseeseen vain):

Code: Select all

//funktiota käytetään näin: clickbox(teksti,montako kirjainta,
//(mihin teksti asetetaan) leveyssuunnassa,pystysuunnassa,
//(väri numeroina) punainen oletuksena 0,vihreä oletuksena 0,sininen oletuksena 0,
//(hiiri laatikon sisällä niin... otetaanko käyttöön)0=off 1=on oletuksena 0

FrameLimit 40

Repeat

If boxi("play",4,220,500,255,255,255,1) Then i=10
If boxi("take",4,160,500,255,255,255,1) Then i=100

Text 300,500,i

DrawScreen

Forever

Function Boxi(teksti As String ,montako,leveys,korkeus,eka=0,toka=0,kolmas=0,clickbox=0,eka1=0,toka1=0,kolmas1=0,)

rrrrk=montako*8+5
uuuuk=leveys-2
iiiik=korkeus-3
ooook=uuuuk+rrrrk
ppppk=iiiik+20

Color eka,toka,kolmas
Text leveys,korkeus,teksti
Box uuuuk,iiiik,rrrrk,20,OFF

If clickbox=1 Then
If MouseX()>uuuuk And MouseX()<ooook And MouseY()>iiiik And MouseY()<ppppk Then
Color eka1,toka1,kolmas1
Text leveys,korkeus,teksti
Box uuuuk,iiiik,rrrrk,20,OFF
If MouseHit(1) Then Return 1
EndIf
EndIf

End Function
User avatar
Koodari
Active Member
Posts: 201
Joined: Wed Nov 18, 2009 9:01 pm
Contact:

Re: TextButton()

Post by Koodari »

jaahas wrote:täs on mun versio tämä tekee laatikon sen tekstin ympärillekkin ja vaihtaa väriä halutessasi kun hiiri menee laatikkoon ja tätä voi käyttää if lauseessa mut ei oo pakko (jos haluaa tehdä clikattavan tekstin niin if lauseeseen vain):

Code: Select all

...Koodia...
Ihan surkea koodi! Ei edes esimerkissä toimi, Tab :ia ei ole painettu kertaakaan jne...
PS. Tässä parempi nappi, laatikko -functiolla:

Code: Select all

Repeat
    If Button(10,10,"OK") Then MakeError "Painoit OK -nappia! Paina uudelleen :)"
    DrawScreen
Until EscapeKey()

Function Button(x,y,txt$)
    Text x+10,y+5,Txt$
    Box x,y,TextWidth(txt$)+20,TextHeight(txt$)+10,0
    If MouseX()>x And MouseX()<x+20+TextWidth(txt$) And MouseY()>y And MouseY()<y+10+TextHeight(txt$) Then
        Color cbRed
        Box x,y,TextWidth(txt$)+20,TextHeight(txt$)+10,0
        Color cbWhite
        Return MouseHit(1)
    EndIf
End Function
Alussa oli asiakas, projekti ja Koodari...

Code: Select all

[23:36:33] <Minixmix> jos nyt viel yhen lastin heittäis
[23:36:48] <Minixmix> Sit loput vois hoitaa kännyllä :/
[00:14:49] <Minixmix> mutta nyt tyhjennykselle ->
[/size]
jaahas
Advanced Member
Posts: 307
Joined: Fri Feb 05, 2010 11:36 pm
Location: Tornio

Re: TextButton()

Post by jaahas »

Koodari wrote:
jaahas wrote:täs on mun versio tämä tekee laatikon sen tekstin ympärillekkin ja vaihtaa väriä halutessasi kun hiiri menee laatikkoon ja tätä voi käyttää if lauseessa mut ei oo pakko (jos haluaa tehdä clikattavan tekstin niin if lauseeseen vain):

Code: Select all

...Koodia...
Ihan surkea koodi! Ei edes esimerkissä toimi, Tab :ia ei ole painettu kertaakaan jne...
PS. Tässä parempi nappi, laatikko -functiolla:

Code: Select all

Repeat
    If Button(10,10,"OK") Then MakeError "Painoit OK -nappia! Paina uudelleen :)"
    DrawScreen
Until EscapeKey()

Function Button(x,y,txt$)
    Text x+10,y+5,Txt$
    Box x,y,TextWidth(txt$)+20,TextHeight(txt$)+10,0
    If MouseX()>x And MouseX()<x+20+TextWidth(txt$) And MouseY()>y And MouseY()<y+10+TextHeight(txt$) Then
        Color cbRed
        Box x,y,TextWidth(txt$)+20,TextHeight(txt$)+10,0
        Color cbWhite
        Return MouseHit(1)
    EndIf
End Function
kokeile nyt:

Code: Select all

FrameLimit 40

Repeat

If boxi("40",2,10,10,255,255,255,1,255,255) Then i=40
If boxi("10",2,10,30,255,255,255,1,255,255) Then i=10

Color cbwhite
Text 10,50,i

DrawScreen

Forever

Function Boxi(teksti As String ,montako,leveys,korkeus,eka=0,toka=0,kolmas=0,clickbox=0,eka1=0,toka1=0,kolmas1=0)

rrrrk=montako*8+5
uuuuk=leveys-2
iiiik=korkeus-3
ooook=uuuuk+rrrrk
ppppk=iiiik+20

Color eka,toka,kolmas
Text leveys,korkeus,teksti
Box uuuuk,iiiik,rrrrk,20,OFF

If clickbox=1 Then
If MouseX()>uuuuk And MouseX()<ooook And MouseY()>iiiik And MouseY()<ppppk Then
Color eka1,toka1,kolmas1
Text leveys,korkeus,teksti
Box uuuuk,iiiik,rrrrk,20,OFF
If MouseHit(1) Then Return 1
EndIf
EndIf

End Function
Post Reply