Buchempfehlung
Mikrocomputertechnik mit Controllern der Atmel AVR-RISC-Familie
Mikrocomputertechnik mit Controllern der Atmel AVR-RISC-Familie
Umfassend, aber leicht verständlich führt dieses Buch in die Programmierung von ATMEL AVR Mikrocontrollern ein. [Mehr Infos...]
FreeBASIC-Chat
Es sind Benutzer im FreeBASIC-Chat online.
(Stand:  )
FreeBASIC bei Twitter
Twitter FreeBASIC-Nachrichten jetzt auch über Twitter erhalten. Follow us!

fb:porticula NoPaste

Info
Info / Hilfe
Liste
Übersicht / Liste
Neu
Datei hochladen
Suche
Quellcode suchen
Download
Dateidownload

sgButton

Uploader:MitgliedSannaj
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