Kleine Buttonroutine ohne BB+
Übersicht

gehoersturzBetreff: Kleine Buttonroutine ohne BB+ |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hi, hab mal eine kleine Buttonroutine geschrieben. Könnte sich dass mal einer anschauen und sagen ob das so taugt und ob man da noch was optimieren kann.
Habs mal wieder ein wenig verändert. Beispielaufruf: Code: [AUSKLAPPEN] Global fontNorm = LoadFont ("Arial", 15) ClsColor 100,100,100 Cls Repeat If button("Weiter",20,20,100,15,204,204,204,2)=True Then ende=1 Until ende=1 Code: [AUSKLAPPEN] Function button(txt$,x,y,b,h,ro,ge,bl,s) ;text,x,y,breite,höhe,rot,gelb,grün,schrift(0=s/1=w) If h < FontHeight() Then h = FontHeight() If b < StringWidth(txt$) Then b = StringWidth(txt$) + 2 If MouseX() >= x And MouseX() <= x+b And MouseY() >= y And MouseY() <= y+h And MouseDown(1) Then Color 255,255,255 Rect x,y,b,h,False Color 0,0,0 Rect x,y,b-1,h-1,False Color ro,ge,bl Rect x+1,y+1,b-2,h-2 ,False Color ro/2,ge/2,bl/2 Rect x+1,y+1,b-3,h-3,True Color ro,ge,bl Rect x+2,y+2,b-4,h-4,True Color 255*(1*s),255*(1*s),255*(1*s) Text x+(b/2)+1,y+(h/2)+1,txt$,1,1 Repeat If MouseX() >= x And MouseX() <= x+b And MouseY() >= y And MouseY() <= y+h Then but = True Else but = False Exit EndIf Until MouseDown(1)=0 Else Color 0,0,0 Rect x,y,b,h,False Color 255,255,255 Rect x,y,b-1,h-1 Color ro/2,ge/2,bl/2 Rect x+1,y+1,b-2,h-2,False Color ro,ge,bl Rect x+1,y+1,b-3,h-3,True Color 255*(1*s),255*(1*s),255*(1*s) Text x+(b/2),y+(h/2),txt$,1,1 but = False EndIf Flip Return but End Function |
||
- Zuletzt bearbeitet von gehoersturz am Do, Apr 01, 2004 23:52, insgesamt 3-mal bearbeitet
![]() |
Triton |
![]() Antworten mit Zitat ![]() |
---|---|---|
VERSCHOBEN nach 2D. | ||
![]() |
Michi1988 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Es gibt besseres. Lies dir mal das Forum unter 2d GFX durch. Da stehen richtig coole Routinen. | ||
gehoersturz |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hab mal gesucht, aber nix gefunden. Nur komplette GUI und das soll ja nur einfache Buttons zu verfügung stellen. Aber wenn ich was übersehn habe bitte sagen, denn das Rad ist glaub ich schon erfunden !? | ||
![]() |
Michi1988 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Jo aber ich finde es cool seine eigene Routine zu proggen. Würde nie eine andere benutzen. OBWOHL: im Mom geht meine net wirklich. | ||
![]() |
Travis |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich habe mich auch mal versucht.
EDIT: @ gehoersturz Bei dir fehlt noch eine Anpassung, wenn man eine Buttongröße angibt, die kleiner ist als der Buttontext. Dann sollte der Button entsprechend vergrößert werden. Code: [AUSKLAPPEN] Graphics 400,350,16,2 SetBuffer BackBuffer() AppTitle "Buttons" Repeat ClsColor 0,0,100 Cls Text 0,00, "BUTTON A GEDRÜCKT: " + Button(100,100,100,20,"OK") Text 0,10, "BUTTON B GEDRÜCKT: " + Button(100,130,100,20,"ABBRUCH") Text 0,20, "BUTTON C GEDRÜCKT: " + Button(100,160,100,20,"IGNORIEREN") Flip Until KeyHit(1) End Function Button(x,y,w,h,Text$) If h < FontHeight() Then h = FontHeight() If w < StringWidth(Text$) Then w = StringWidth(Text$) Color 255,255,255 If MouseOver(x,y,w,h) And MouseDown(1) Then Color 100,100,100 Rect x,y,w,h,1 Color 100,100,100 If MouseOver(x,y,w,h) And MouseDown(1) Then Color 255,255,255 Rect x+1, y+1, w-1, h-1,1 Color 198,198,198 If MouseOver(x,y,w,h) Then ;Color 100,150,150 ; MouseOver Highlight ;If MouseDown(1) Then Color 150,150,100 ; PushDown Highlight EndIf Rect x+1, y+1, w-2, h-2,1 Color 0,0,0 Text x + w/2 - (StringWidth(Text$)/2), y + h/2 - (FontHeight()/2), Text$ If MouseOver(x,y,w,h) And MouseDown(1) Then Return 1 End Function Function MouseOver(x,y,w,h) If MouseX() > x And MouseX() < x+w And MouseY() > y And MouseY() < y+h Then Return 1 End Function |
||
www.funforge.org
Ich hasse WASD-Steuerung. Man kann alles sagen, man muss es nur vernünftig begründen können. |
x.Force |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
ist es möglich das MouseOver gleich in die Button routine einzubauen? ist doch viel nützlicher | ||
AMD Athlon XP 2000+ | 1024mb DDR-Ram | Asus Radeon 9600XT | BENQ FP757 17°Zoll TFT Was kümmert mich mein Geschwätz von gestern? (Konrad Adenauer) -.- |
gehoersturz |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Stimmt eigentlich, wird sowieso nicht oft abgefragt. Habs mal geändert. | ||
![]() |
Jan_Ehemaliger Admin |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ähm, es gibt da einen Spruch, ich weiß nicht mehr denerfinder:
"Alles wurde schon mal gesagt, aber da niemand zuhört, muss man alles wieder und wieder erzählen!" Schaut euch mal das Tut zum RPG editor an, ist doe nicht eine Sehr gute Button Routine dabei, in der DAtei Gui.bb ?! |
||
between angels and insects |
gehoersturz |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ja, die ist echt gut, hab die für mich ein bisschen verändert. Das mit den Types ist echt praktisch, hab die bis jetzt noch nie benutzt. | ||
Ensign Joe |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
@Travis: Die ist cool ich hab sie noch etwas "verbessert":
Code: [AUSKLAPPEN] Graphics 400,350,16,2
SetBuffer BackBuffer() AppTitle "Buttons" Repeat ClsColor 0,200,150 Cls Schrift = LoadFont("ms sans serif", 8) SetFont schrift Text 0,00, "BUTTON A GEDRÜCKT: " + Button(100,100,100,20,37,"OK") Text 0,10, "BUTTON B GEDRÜCKT: " + Button(100,130,100,20,46,"ABBRUCH") Text 0,20, "BUTTON C GEDRÜCKT: " + Button(100,160,100,20,23,"IGNORIEREN") Text 0,30, "BUTTON D GEDRÜCKT: " + Button(10,190,380,20,16,"DRÜCK MAL Q") Flip Until KeyHit(1) FreeFont Schrift End Function Button(x,y,w,h,k,Text$) If h < FontHeight() Then h = FontHeight() If w < StringWidth(Text$) Then w = StringWidth(Text$) Color 255,255,255 If (MouseOver(x,y,w,h) And MouseDown(1)) Or KeyDown(k) Then Color 100,100,100 Rect x,y,w,h,1 Color 100,100,100 If (MouseOver(x,y,w,h) And MouseDown(1)) Or KeyDown(k) Then Color 255,255,255 Rect x+1, y+1, w-1, h-1,1 Color 198,198,198 If MouseOver(x,y,w,h) Then Color 100,150,150 If MouseDown(1) Then Color 150,150,100 EndIf Rect x+1, y+1, w-2, h-2,1 Color 0,0,0 If k = 0 Then textin$ = Text$ Else textin$ = "(" + k + ") :: " + Text$ End If Text x + w/2 - (StringWidth(Textin$)/2), y + h/2 - (FontHeight()/2), Textin$ If MouseOver(x,y,w,h) And MouseDown(1) Then Return 1 End Function Function MouseOver(x,y,w,h) If MouseX() > x And MouseX() < x+w And MouseY() > y And MouseY() < y+h Then Return 1 End Function Neuerungen: Auswahl nun per Taste möglich (Variable k setzt die Taste mit Hilfe des Scancodes :: anstatt Abbrechen kommt (46) Abbrechen, das heißt C ist der Button Abbrechen. Dann wurde der Rem (;) vor der Light-Over routine entfernt. Es wird jetzt folgender Parameter für die Schrift verwendet: Code: [AUSKLAPPEN] Schrift = LoadFont("Ms Sans Serif", 8)
SetFont Schrift Der Hintergrund wurde etwas heller, damit man die Texte mit Button A gedrückt 1 besser sieht. |
||
gehoersturz |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hab mal die Routine von Jan genommen und etwas abgeändert. Ist bestimmt noch einiges zu verbessern, aber sie funzt zumindest schon mal.
Die Buttons verhalten sich jetzt wie die von Windows, d.h. wird ein Button angeklickt, die maustaste nicht losgelassen und den Mauszeiger vom Button runtergezogen, wird keine wert zurückgegeben. Hoffentlich versteht ihr was ich meine ![]() Aufruf: Code: [AUSKLAPPEN] Include "GUI.bb" Graphics 640,480,16,2 fontArial15 = LoadFont("Arial",15) SetFont fontArial15 test1 = Create_gsButton("hallo",10,10,0,0,255,0,0) test2 = Create_gsButton("Unnötig viel Text in einem Button",10,50,0,0) ende = Create_gsButton("Ende",10,90,100,20) Color 255,255,255 SetBuffer BackBuffer() ClsColor 100,100,100 Repeat Cls Draw_gsGUI() Select Check_gsButton() Case test1 Text 200,10,"test1" Case test2 Text 200,50,"test2" Case ende End Case False Text 200,90,"False" End Select Flip Forever GUI.bb Code: [AUSKLAPPEN] Type gsButton Field image Field x Field y Field state End Type Function Check_gsButton() button = False For but.gsButton = Each gsButton but\state = 0 If MouseOver(but\x,but\y,ImageWidth(but\image),ImageHeight(but\image)) And MouseDown(1) Then SetBuffer FrontBuffer() Repeat If MouseOver(but\x,but\y,ImageWidth(but\image),ImageHeight(but\image)) Then but\state = 1 button = but\image DrawBlock but\image,but\x,but\y,but\state Else button = False but\state = 0 DrawBlock but\image,but\x,but\y,but\state EndIf Until MouseDown(1)=0 SetBuffer BackBuffer() Else but\state = 0 EndIf Next Return button End Function Function MouseOver(x,y,w,h) If MouseX() => x And MouseX() <= x+w And MouseY() => y And MouseY() <= y+h Then Return 1 End Function Function Draw_gsGUI() For but.gsButton = Each gsButton DrawBlock but\image,but\x,but\y,but\state Next End Function Function Create_gsButton(txt$,x=0,y=0,b=100,h=20,ro=204,ge=204,bl=204,s=0) ;text,x,y,breite,höhe,rot,gelb,grün,schrift(0=s/1=w) red = ColorRed() green = ColorGreen() blue = ColorBlue() If h < StringHeight(txt$) Then h = StringHeight(txt$) If b < StringWidth(txt$) Then b = StringWidth(txt$)+6 but.gsButton = New gsButton but\image = CreateImage(b,h,2) but\x = x but\y = y but\state = 0 SetBuffer ImageBuffer(but\image,0) Color 0,0,0 Rect 0,0,b,h,False Color 255,255,255 Rect 0,0,b-1,h-1 Color ro/2,ge/2,bl/2 Rect 1,1,b-2,h-2,False Color ro,ge,bl Rect 1,1,b-3,h-3,True Color 255*(1*s),255*(1*s),255*(1*s) Text (b/2),(h/2),txt$,1,1 SetBuffer ImageBuffer(but\image,1) Color 255,255,255 Rect 0,0,b,h,False Color 0,0,0 Rect 0,0,b-1,h-1,False Color ro,ge,bl Rect 1,1,b-2,h-2 ,False Color ro/2,ge/2,bl/2 Rect 1,1,b-3,h-3,True Color ro,ge,bl Rect 2,2,b-4,h-4,True Color 255*(1*s),255*(1*s),255*(1*s) Text (b/2)+1,(h/2)+1,txt$,1,1 Color red,green,blue Return but\image End Function |
||
![]() |
Jan_Ehemaliger Admin |
![]() Antworten mit Zitat ![]() |
---|---|---|
sehr schön, werde ich mal testen! | ||
between angels and insects |
gehoersturz |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Die Buttons funktionieren nicht ganz so wie sie eigentlich sollten. Vorallem im Fullscreenmodus passt das noch nicht so ganz. Ist vielleicht was mit den Buffern, aber ganz sicher bin ich mir nicht vom Stil her ist das bestimmt auch nicht ganz sauber. | ||
gehoersturz |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
hat noch irgendjemand eine kleine Routine die vorallem vom Ansatz her anders ist? | ||
Ensign Joe |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Was meinst du mit anders ??? | ||
gehoersturz |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Es gibt immer eine ganze Möglichkeiten ein Problem zu lösen. Bin halt gerade am lernen und wenn ich sehe wie es andere machen, kann ich daraus lernen wie man es noch machen könnte. | ||
Ensign Joe |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
aha...
Ich progge gerade nebenher, wenn mir gerade langweilig ist, eine GUI-Routine, die Buttons, windows etc. unterstützt ohne BB+ |
||
![]() |
TheProgrammer |
![]() Antworten mit Zitat ![]() |
---|---|---|
Da hab ich was:
Code: [AUSKLAPPEN] Graphics 140,70,32,2 SetBuffer BackBuffer() AppTitle "Buttons" ClsColor 192,192,192 font = LoadFont("Tahoma",16,0,0,0) SetFont font Repeat Cls but1 = DrawButton(20,10,"gesperrt",100,20,1) but2 = DrawButton(20,40,"Ende",100,20,0) but2_press = PressButton(but2,but2_press) If but2_press = True Then End Flip Forever Function DrawButton(X,Y,txt$,breite,hohe,modus) If MouseX() > X And MouseX() < X+breite And MouseY() > Y And MouseY() < Y+hohe And MouseDown(1) Then Color 192,192,192 Rect X,Y,breite,hohe If modus = 0 Then Color 0,0,0 Text X+(breite/2)+1,Y+(hohe/2)+1,txt,1,1 EndIf Color 110,110,110 Line X,Y,breite+X,Y Line X,Y,X,Y+hohe Color 230,230,230 Line X,Y+hohe,X+breite,Y+hohe Line X+breite,Y,X+breite,Y+hohe Color 150,150,150 Line X+1,Y+1,breite+X-1,Y+1 Line X+1,Y+1,X+1,Y+hohe-1 Color 210,210,210 Line X+1,Y+hohe-1,X+breite-1,Y+hohe-1 Line X+breite-1,Y+1,X+breite-1,Y+hohe-1 If modus = 0 Return 1 Else Color 150,150,150 Text X+(breite/2),Y+(hohe/2),txt,1,1 Color 230,230,230 Line X,Y,breite+X,Y Line X,Y,X,Y+hohe Color 110,110,110 Line X,Y+hohe,X+breite,Y+hohe Line X+breite,Y,X+breite,Y+hohe Color 210,210,210 Line X+1,Y+1,breite+X-1,Y+1 Line X+1,Y+1,X+1,Y+hohe-1 Color 150,150,150 Line X+1,Y+hohe-1,X+breite-1,Y+hohe-1 Line X+breite-1,Y+1,X+breite-1,Y+hohe-1 EndIf Else Color 192,192,192 Rect X,Y,breite,hohe Color 0,0,0 If modus = 1 Then Color 150,150,150 Text X+(breite/2),Y+(hohe/2),txt,1,1 Color 230,230,230 Line X,Y,breite+X,Y Line X,Y,X,Y+hohe Color 110,110,110 Line X,Y+hohe,X+breite,Y+hohe Line X+breite,Y,X+breite,Y+hohe Color 210,210,210 Line X+1,Y+1,breite+X-1,Y+1 Line X+1,Y+1,X+1,Y+hohe-1 Color 150,150,150 Line X+1,Y+hohe-1,X+breite-1,Y+hohe-1 Line X+breite-1,Y+1,X+breite-1,Y+hohe-1 EndIf End Function Function PressButton(but,press_but) If but = 1 Then press_but = 2 EndIf If press_but = 2 Then If Not MouseDown(1) Then Return 1 EndIf If but = 0 Then press_but = 0 Return press_but End Function |
||
aktuelles Projekt: The last day of human being |
Ensign Joe |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
@TheProgramme: ![]() (Dann hätt ich weniger Arbeit) ![]() |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group