fb:porticula NoPaste
sgButton
Uploader: | Sannaj |
Datum/Zeit: | 06.01.2011 22:18:47 |
' sgGUI Teil 3: Buttons
' Version 1.0
' von Sannaj 18.12.2010
'
' Ein Button hat folgende Eigenschaften (properties):
'
' Name Type Bedeutung
' xLocation uinteger x-Coordinate der linken oberen Labelecke.
' yLocation uinteger y-Coordinate der linken oberen Labelecke.
' sizeX uinteger Breite des Buttons in Pixel (ist dieser Wert 0 wird eine automatisch zu Inhalt optimierte Breite verwendet.)
' sizeY uinteger Höhe des Buttons in Pixel (ist der Wert 0 wird eine textoptimierte Höhe von 23 verwendet)
' value value Gibt die Beschriftung des Buttons an.
' enabled byte Gibt an ob der Butten freigegeben worden ist, (0 = Nein, -1 = Ja, andere Zuweisungen werden durch -1 ersetzt)
' visible byte Sichtbarkeitsstatus des Labels (0 = Unsichtbar, -1 = Sichtbar, andere Zuweisungen werden durch -1 ersetzt)
'
' Hinweise:
' Eine Check box wird mit "dim boxname as sgTextBox" definiert.
' Nach der Initiialisierung liegt ist die auf (0/0) veränderbar, unsichtbar, unabgeharkt und mit der Beschriftung: "New Check box" versehen.
' Bitte zuerst lokalisieren und dann erst sichtbar machen.
' Bitte nicht über andere Objekte legen wenn beide sichtbar sind.
' Buttonprozeduren
declare sub sgButtonDraw(text as string, xol as uinteger, yol as uinteger, _
xlen as uinteger = 0, ylen as uinteger = 0, isenabled as byte = -1, isclicked as byte = 0)
declare sub sgButtonUndraw(text as string, xol as uinteger, yol as uinteger, xlen as uinteger = 0, ylen as uinteger = 0)
' Declariere Button UDT
type sgButton
declare property xLocation(new_x as uinteger)
declare property xLocation() as uinteger
declare property yLocation(new_y as uinteger)
declare property yLocation() as uinteger
declare property sizeX(new_x as uinteger)
declare property sizeX() as uinteger
declare property sizeY(new_y as uinteger)
declare property sizeY() as uinteger
declare property value(new_value as string)
declare property value() as string
declare property enabled(new_value as byte)
declare property enabled() as byte
declare property visible(new_value as byte)
declare property visible() as byte
declare function isclicked() as byte
declare sub fixsize()
declare sub setup(new_value as string, new_xol as uinteger, new_yol as uinteger, _
new_xlen as uinteger = 0, new_ylen as uinteger = 0, new_enabled as byte = -1, sizefixed as byte = -1, new_visible as byte = -1)
private:
locxol as uinteger
locyol as uinteger
locxlen as uinteger
locylen as uinteger = 23
locvalue as string = "New Button"
locenabled as byte = -1
locvis as byte
MouseX as integer
MouseY as integer
MouseButtons as integer
MouseOldButt as integer
end type
' Testing sector
screen 12
dim test as sgButton
test.xLocation = 10
test.xLocation += 10
print test.xLocation
sleep
/'testing sector
screen 12
paint (1,1),7
dim testbutton as sgButton
testbutton.setup("Klick micht", 100, 100)
do
if testbutton.isclicked then
testbutton.value = "Hallo!"
testbutton.enabled = 0
sleep
end
end if
loop
'end testing sector'/
property sgButton.xLocation(new_x as uinteger)
if this.locvis <> 0 then ' Nur bei Sichtbarkeit Neuzeichnen
sgButtonUndraw(this.locvalue, this.locxol, this.locyol, _
this.locxlen, this.locylen) ' Altes Object löschen.
sgButtonDraw(this.locvalue, new_x, this.locyol, _
this.locxlen, this.locylen, this.locenabled) ' Neues Object zeichnen.
end if
this.locxol = new_x ' xol aktualisieren
end property
property sgButton.xLocation() as uinteger ' Auf Anfrage kann xol auch ausgegeben werden
return this.locxol
end property
property sgButton.yLocation(new_y as uinteger)
if this.locvis <> 0 then ' Nur bei Sichtbarkeit Neuzeichnen
sgButtonUndraw(this.locvalue, this.locxol, this.locyol, _
this.locxlen, this.locylen) ' Altes Object löschen.
sgButtonDraw(this.locvalue, this.locxol, new_y, _
this.locxlen, this.locylen, this.locenabled) ' Neues Object zeichnen.
end if
this.locyol = new_y ' yol aktualisieren
end property
property sgButton.yLocation() as uinteger ' Auf Anfrage kann yol auch ausgegeben werden
return this.locyol
end property
property sgButton.sizeX(new_x as uinteger)
if this.locvis <> 0 then ' Nur bei Sichtbarkeit Neuzeichnen
sgButtonUndraw(this.locvalue, this.locxol, this.locyol, _
this.locxlen, this.locylen) ' Altes Object löschen.
sgButtonDraw(this.locvalue, this.locxol, this.locyol, _
new_x, this.locylen, this.locenabled) ' Neues Object zeichnen.
end if
this.locxlen = new_x ' xlen aktualisieren
end property
property sgButton.sizeX() as uinteger ' Auf Anfrage kann xlen auch ausgegeben werden
return this.locxlen
end property
property sgButton.sizeY(new_y as uinteger)
if this.locvis <> 0 then ' Nur bei Sichtbarkeit Neuzeichnen
sgButtonUndraw(this.locvalue, this.locxol, this.locyol, _
this.locxlen, this.locylen) ' Altes Object löschen.
sgButtonDraw(this.locvalue, this.locxol, this.locyol, _
this.locxlen, new_y, this.locenabled) ' Neues Object zeichnen.
end if
this.locylen = new_y ' ylen aktualisieren
end property
property sgButton.sizeY() as uinteger ' Auf Anfrage kann ylen auch ausgegeben werden
return this.locylen
end property
property sgButton.value(new_value as string)
if this.locvis <> 0 then ' Nur bei Sichtbarkeit Neuzeichnen
sgButtonUndraw(this.locvalue, this.locxol, this.locyol, _
this.locxlen, this.locylen) ' Altes Object löschen.
sgButtonDraw(new_value, this.locxol, this.locyol, _
this.locxlen, this.locylen, this.locenabled) ' Neues Object zeichnen.
end if
this.locvalue = new_value ' Beschriftung aktualisieren
end property
property sgButton.value() as string ' Auf Anfrage kann die Beschriftung auch ausgegeben werden
return this.locvalue
end property
property sgButton.enabled(new_value as byte)
if this.locvis <> 0 then ' Nur bei Sichtbarkeit Neuzeichnen
sgButtonUndraw(this.locvalue, this.locxol, this.locyol, _
this.locxlen, this.locylen) ' Altes Object löschen.
sgButtonDraw(this.locvalue, this.locxol, this.locyol, _
this.locxlen, this.locylen, new_value) ' Neues Object zeichnen.
end if
if new_value = 0 then
this.locenabled = 0 ' Änderbarkeit aktualisieren
else
this.locenabled = -1
end if
end property
property sgButton.enabled() as byte ' Auf Anfrage kann die Änderbarkeit auch ausgegeben werden
return this.locenabled
end property
property sgButton.visible(new_value as byte)
if new_value = 0 and this.locvis = -1 then ' Unsichtbar:
sgButtonUndraw(this.locvalue, this.locxol, this.locyol, _
this.locxlen, this.locylen) ' Altes Object löschen.
this.locvis = 0 ' Sichtbarkeit aktualisieren (unsichtbar = false = 0)
elseif new_value = -1 and this.locvis = 0 then
sgButtonDraw(this.locvalue, this.locxol, this.locyol, _
this.locxlen, this.locylen, this.locenabled) ' Neues Object zeichnen.
this.locvis = -1 ' Sichtbarkeit aktualisieren (sichtbar = true = -1)
end if
end property
property sgButton.visible() as byte ' Auf Anfrage kann die Sichtbarkeit auch ausgegeben werden
return this.locvis
end property
function sgButton.isclicked() as byte
dim iserror as byte
iserror = getMouse(this.MouseX, this.MouseY , , this.MouseButtons) ' Mausdaten einlesen.
with this
if (.MouseButtons and 1) <> 0 and iserror = 0 and .locvis <> 0 then ' Fehlerhafigkeit und Buttons prüfen
if .MouseX > .locxol and .MouseX < (.locxol + .locxlen) and _
(.MouseY > .locyol) and (.MouseY < (.locyol + .locylen)) then ' Testen ob auf den Button geklickt worden ist
sgButtonDraw(.value, .locxol, .locyol, _
.locxlen, .locylen, .locenabled, -1) ' Click abfeuern
do
getMouse(.MouseX, .MouseY , , .MouseButtons) ' Überprüfen
sleep 1 ' Processor entlasten.
loop until (.MouseButtons and 1) = 0
sgButtonDraw(.value, .locxol, .locyol, _
.locxlen, .locylen, .locenabled) ' Clickapierence löschen.
return -1 ' Erfogreich: Meldung machen
else
return 0 ' Klick wurde nicht durchgeführt.
end if
else
return 0 ' Klick wurde nicht durchgeführt.
end if
end with
end function
sub sgButton.setup(new_value as string, new_xol as uinteger, new_yol as uinteger, _
new_xlen as uinteger = 0, new_ylen as uinteger = 0, new_enabled as byte = -1, sizefixed as byte = -1, new_visible as byte = -1)
with this
.visible = 0
.locvalue = new_value
.locxol = new_xol
.locyol = new_yol
.locxlen = new_xlen
.locylen = new_ylen
.enabled = new_enabled
.visible = new_visible
end with
if sizefixed <> 0 then
this.fixsize()
end if
end sub
sub sgButton.fixsize() ' Fixes the size of the Button
with this
if .locxlen = 0 then
.locxlen = len(.locvalue)*8 + 10 'optimierte Länge
end if
if .locylen = 0 then
.locylen = 23
end if
end with
end sub
' Drawing Subs
sub sgButtonDraw(text as string, xol as uinteger, yol as uinteger, _
xlen as uinteger = 0, ylen as uinteger = 0, isenabled as byte = -1, isclicked as byte = 0)
' Paletten Setup
palette 6, 64,64,64 'Dunkelgelb mit Schwarzgrau (hier dunkelgrau genannt) überschreiben
' Standart xlen und ylen Optimierung
if xlen = 0 then
xlen = len(text)*8 + 10 'optimierte Länge
end if
if ylen = 0 then
ylen = 23
end if
' Buttonrahmen und Fläche zeichnen
dim as integer schwarz, dunkelgrau, mittelgrau, hellgrau, weiss
' Farben zuordnen
schwarz = 0
dunkelgrau = 6
mittelgrau = 8
hellgrau = 7
weiss = 15
' Buttonrahmen
if isclicked = 0 then
line (xol,yol)-((xol + xlen - 1),yol), weiss
line (xol,yol)-(xol,(yol + ylen - 1)), weiss
pset (xol,yol + ylen), mittelgrau
pset (xol + xlen,yol), mittelgrau
line ((xol + 1), yol + ylen)-(xol + xlen, yol + ylen), dunkelgrau
line (xol + xlen, (yol + 1))-(xol + xlen, yol + ylen), dunkelgrau
' Button ausmalen und Text eintragen.
line (xol + 1, yol + 1)-(xol + xlen -1, yol + ylen - 1), hellgrau, bf
if isenabled <> 0 then
draw string (xol + 5, yol + 5), text, schwarz
else
draw string (xol + 5, yol + 5), text, mittelgrau
end if
else
line (xol,yol)-((xol + xlen - 1),yol), dunkelgrau
line (xol,yol)-(xol,(yol + ylen - 1)), dunkelgrau
pset (xol,yol + ylen), mittelgrau
pset (xol + xlen,yol), mittelgrau
line ((xol + 1), yol + ylen)-(xol + xlen, yol + ylen), weiss
line (xol + xlen, (yol + 1))-(xol + xlen, yol + ylen), weiss
' Button ausmalen und Text eintragen.
line (xol + 1, yol + 1)-(xol + xlen -1, yol + ylen - 1), hellgrau, bf
if isenabled <> 0 then
draw string (xol + 6, yol + 6), text, schwarz
else
draw string (xol + 6, yol + 6), text, mittelgrau
end if
end if
end sub
sub sgButtonUndraw(text as string, xol as uinteger, yol as uinteger, xlen as uinteger = 0, ylen as uinteger = 0)
'Standart xlen Extention
if xlen = 0 then
xlen = len(text)*8 + 10 'optimierte Länge
end if
if ylen = 0 then
ylen = 23
end if
line (xol,yol)-(xol + xlen, yol + ylen), 7, bf ' Button hellgrau überzeichnen
end sub