fb:porticula NoPaste
DeGUI V1.1 (Nicht vollständig dokumentiert)
Uploader: | DonStevone |
Datum/Zeit: | 06.11.2011 19:45:59 |
' =======================================================================
' = =
' = DeGUI - Damn easy - Graphical user interface =
' = =
' = Autor : Steven Mahnke alias DonStevone =
' = Datum : 31.10.2011 =
' = Lizens : FreeBASIC-Portal-Standartlizenz(FBPSL) =
' = Version: 1.1 =
' = =
' =======================================================================
' =======================================================================
' = Button =
' =======================================================================
'
' Declare Constructor(ButtID as String, Event as Sub(ID as String), _
' ButtX as Integer, ButtY as Integer, _
' FileName as String, FileName2 as String)
'
' -ButtID ist die ID die an das Event übergeben wird sobalt der Button geklickt wurde
' -Event ist ein Handle auf eine Sub
' -ButtX und ButtY sind die Koordinaten der linken oberen Ecke
' -FileName ist der Name einer BMP welche als Button verwendet werden soll
' -FileName2 ist der Name einer BMP welche als Button verwendet werde soll, aber nur
' dann angezeigt wird wenn sich der Mauszeiger über dem Button befindet
'
'
' Declare Constructor(ButtID as String, Event as Sub(ID as String), _
' ButtX as Integer, ButtY as Integer, _
' FileName as String)
'
' -Siehe ersten Constructor - Unterschied: Hier wird kein alternativer Button angezeigt,
' wenn man mit der Maus über diesen geht
'
'
' Declare Constructor(ButtID as String, Event as Sub(ID as String), _
' ButtX as Integer, ButtY as Integer, _
' TextX as Integer, TextY as Integer, _
' ButtText as String, BWidth as Integer, BHeight as Integer)
'
' -Hier wird ein 'Standart Button verwendet (Ohne Bild)
' -TextX ist die XKoordinate innerhalb des Buttons an der der Text stehen soll
' -TextY ist die YKoordinate innerhalb des Buttons an der der Text stehen soll
' -ButtText ist ein Text welcher auf dem Button stehen soll
' -BWidth ist die Breite die der Button haben soll
' -BHeight ist die Höhe die der Button haben soll
'
'
' Declare Constructor(ButtID as String, Event as Sub(ID as String), _
' ButtX as Integer, ButtY as Integer, _
' TextX as Integer, TextY as Integer, _
' ButtText as String, BWidth as Integer, BHeight as Integer, _
' BackgroundColor as UInteger, TextColor as UInteger)
'
' -Siehe Constructor 3 - Unterschied: Mit Backgroundcolor und TextColor können noch die
' Farben des Buttons und des Textes bestimmt werden
'
'
'
' Methoden:
'
' Hide()
' Versteckt den Button
'
' Show()
' Zeigt den Button
'
' Control() !Wichtig!
' Steuerung des Buttons
'
' GClear()
' Überzeichnet den Button mit einer schwarzen Box
'
' G() !Wichtig!
' Zeichnet den Button
'
'
'
' ========================================================================
' = TextField =
' ========================================================================
'
' Declare Constructor(XPos as Integer, YPos as Integer, Laenge as Integer)
'
' XPos ist die XKoordinate der linken oberen Ecke
' YPos ist die YKoordinate der linken oberen Ecke
' Laenge ist die maximale Anzahl an Zeichen innerhalb der Textbox
'
' Declare Constructor(XPos as Integer, YPos as Integer, Laenge as Integer, SText as String)
'
' Siehe Constructor 1 - Unterschied: Mit SText kann ein String vordefiniert werden,
' der in der Textbox angezeigt werden soll
'
'
'
' Methoden:
'
' Hide()
' Versteckt die Textbox
'
' Show()
' Zeigt die Textbox
'
' Control() !Wichtig!
' Steuerung der Textbox
'
' GClear()
' Überzeichnet die Textbox mit einer schwarzen Box
'
' G() !Wichtig!
' Zeichnet die Textbox
'
'
'
' Public Attribute:
' Text as String - Das ist die Stringvariable in der der Text innerhalb der Textbox steht
'
'
'
' ========================================================================
' = Label =
' ========================================================================
'
' Declare Constructor(XPos as Integer, YPos as Integer, SText as String)
'
' XPos ist die XKoordinate der linken oberen Ecke des Labels
' YPos ist die YKoordinate der linken oberen Ecke des Labels
' SText ist der Text welcher auf dem Label steht
'
' Methoden:
'
' Hide()
' Versteckt das Label
'
' Show()
' Zeigt das Label
'
' GClear()
' Überzeichnet das Label mit einer schwarzen Box
'
' G()
' Zeichnet das Label
'
'
'
' ========================================================================
' = Checkbox =
' ========================================================================
'
' Declare Constructor(XPos as Integer, YPos as Integer, CheckID as String, Event as Sub(ID as String))
'
' XPos ist die XKoordinate der linken oberen Ecke der Checkbox
' YPos ist die YKoordinate der linken oberen Ecke der Checkbox
' CheckID ist die ID die an das Event übergeben wird sobalt sich der Status der Checkbox geändert hat
' Event ist ein Handle auf eine Sub
'
' Methoden:
'
' Hide()
' Versteckt die Checkbox
'
' Show()
' Zeigt die Checkbox
'
' Control() !Wichtig!
' Steuerung der Checkbox
'
' GClear()
' Überzeichnet die Checkbock mit einer schwarzen Box
'
' G()
' Zeichnet die Checkbox
'
' Public Attribute:
'
' Checked as Byte - Aktueller Status der Checkbox
Type Button
Private:
X as Integer
Y as Integer
ButtWidth as Integer
ButtHeight as Integer
BColor as UInteger
TColor as UInteger
Text as String
ButtIMG as Any PTR
ButtIMG2 as Any PTR
Thread as Any PTR
ID as String
ExtEvent as Sub(ID as String)
ButtType as Byte
H as Byte
MOver as Byte
Declare Sub GetSize(ByVal Dateiname as String, ByRef Breite as UInteger, ByRef Hoehe as UInteger)
Public:
Declare Constructor(ButtID as String, Event as Sub(ID as String), _
ButtX as Integer, ButtY as Integer, _
FileName as String, FileName2 as String)
Declare Constructor(ButtID as String, Event as Sub(ID as String), _
ButtX as Integer, ButtY as Integer, _
FileName as String)
Declare Constructor(ButtID as String, Event as Sub(ID as String), ButtText as String, ButtX as Integer, ButtY as Integer)
Declare Destructor
Declare Sub Hide()
Declare Sub Show()
Declare Sub Control()
Declare Sub GClear(BgColor as UByte)
Declare Sub G()
End Type
'###############################################################################
Constructor Button(ButtID as String, Event as Sub(ID as String), _
ButtX as Integer, ButtY as Integer, _
FileName as String, FileName2 as String)
ID = ButtID
ExtEvent = Event
X = ButtX
Y = ButtY
ButtType = 1
GetSize(FileName, ButtWidth, ButtHeight)
ButtIMG = Imagecreate(ButtWidth, ButtHeight)
BLoad FileName, ButtIMG
GetSize(FileName2, ButtWidth, ButtHeight)
ButtIMG2 = Imagecreate(ButtWidth, ButtHeight)
BLoad FileName2, ButtIMG2
If ButtIMG = 0 then ?!"Something went wrong while loading File in: Constructor Button(ButtID as String, Event as Sub(ID as String), ButtX as Integer, ButtY as Integer, FileName as String)\nAre you sure this was the correct filename?"
If ButtIMG2 = 0 then ?!"Something went wrong while loading File in: Constructor Button(ButtID as String, Event as Sub(ID as String), ButtX as Integer, ButtY as Integer, FileName as String)\nAre you sure this was the correct filename?"
End Constructor
'###############################################################################
Constructor Button(ButtID as String, Event as Sub(ID as String), _
ButtX as Integer, ButtY as Integer, _
FileName as String)
ID = ButtID
ExtEvent = Event
X = ButtX
Y = ButtY
ButtType = 1
GetSize(FileName, ButtWidth, ButtHeight)
ButtIMG = Imagecreate(ButtWidth, ButtHeight)
BLoad FileName, ButtIMG
If ButtIMG = 0 then ?!"Something went wrong while loading File in: Constructor Button(ButtID as String, Event as Sub(ID as String), ButtX as Integer, ButtY as Integer, FileName as String)\nAre you sure this was the correct filename?"
End Constructor
'###############################################################################
Constructor Button(ButtID as String, Event as Sub(ID as String), ButtText as String, ButtX as Integer, ButtY as Integer)
ID = ButtID
ExtEvent = Event
X = ButtX
Y = ButtY
ButtWidth = LEN(ButtText) * 8 + 2
ButtHeight = 10
BColor = &h0000FF
TColor = &h000000
Text = ButtText
ButtIMG = Imagecreate(ButtWidth, ButtHeight, BColor, 32)
ButtIMG2 = Imagecreate(ButtWidth, ButtHeight, TColor, 32)
Draw String ButtIMG, (1, 1), Text, TColor
Draw String ButtIMG2, (1, 1), Text, BColor
End Constructor
'###############################################################################
Destructor Button
Deallocate ButtIMG
End Destructor
'###############################################################################
Sub Button.G()
If H = 0 then
If MOver = 1 and ButtIMG2 <> 0 then Put (X, Y), ButtIMG2, ALPHA, 255
If MOver = 0 then Put (X, Y), ButtIMG, ALPHA, 255
Endif
End Sub
'###############################################################################
Sub Button.GetSize(ByVal Dateiname as String, ByRef Breite as UInteger, ByRef Hoehe as UInteger)
Dim as UByte B1, B2
Dim as Integer File = Freefile
Dim as UInteger B, H
Open Dateiname for Input as File
Get #File,, B1
Get #File,, B2
If B1 <> 66 and B2 <> 77 then
Hoehe = 0
Breite = 0
Else
Seek File, 19
Get #File,, B
Seek File, 23
Get #File,, H
Breite = B
Hoehe = H
Endif
End Sub
'###############################################################################
Sub Button.Hide()
H = 1
End Sub
'###############################################################################
Sub Button.Show()
H = 0
End Sub
'###############################################################################
Sub Button.Control()
Dim as Integer MX, MY, MB
If H = 0 then
GetMouse(MX, MY,, MB)
If MX > X and MX < X + ButtWidth and MY > Y and MY < Y + ButtHeight then
MOver = 1
IF MB = 1 then ExtEvent(ID)
Else
MOver = 0
Endif
Endif
End Sub
'###############################################################################
Sub Button.GClear(BgColor as UByte)
Line (X, Y) - (X + ButtWidth, Y + ButtHeight), BgColor, BF
End Sub
'###############################################################################
'###############################################################################
'###############################################################################
Type TextField
Text as String
Private:
X as Integer
Y as Integer
H as Byte
MOver as Byte
Auswahl as Byte
L as Integer
Public:
Declare Constructor(XPos as Integer, YPos as Integer, Laenge as Integer)
Declare Constructor(XPos as Integer, YPos as Integer, Laenge as Integer, SText as String)
Declare Sub Hide()
Declare Sub Show()
Declare Sub Control()
Declare Sub GClear()
Declare Sub G()
End Type
'###############################################################################
Constructor TextField(XPos as Integer, YPos as Integer, Laenge as Integer)
X = XPos
Y = YPos
L = Laenge
End Constructor
'###############################################################################
Constructor TextField(XPos as Integer, YPos as Integer, Laenge as Integer, SText as String)
X = XPos
Y = YPos
L = Laenge
Text = SText
End Constructor
'###############################################################################
Sub TextField.G()
If H = 0 then
Line(X, Y) - (X + L * 8, Y + 8), &hBBBBBB00, BF
Draw String(X + 1, Y + 1), Text, &h000000FF
Endif
End Sub
'###############################################################################
Sub TextField.Hide()
H = 1
End Sub
'###############################################################################
Sub TextField.Show()
H = 0
End Sub
'###############################################################################
Sub TextField.Control()
Dim as Integer MX, MY, MB
Dim as String T
If H = 0 then
GetMouse(MX, MY,, MB)
If MX > X and MX < X + L * 8 and MY > Y and MY < Y + 8 then
IF MB = 1 then
Auswahl = 1
T = "a"
Do While(Len(T) = 1)
T = Inkey()
Sleep 10
Loop
Endif
Else
If MB = 1 then Auswahl = 0
Endif
Endif
If Auswahl = 1 then
T = Inkey()
If ASC(Mid(T, 1, 1)) = 8 then
Text = Mid(Text, 1, Len(Text) - 1)
Else
If Len(Text) < L then Text += T
Endif
Endif
End Sub
'###############################################################################
Sub TextField.GClear()
If H = 0 then
Line (X, Y) - (X + L * 8, Y + 8), 0, BF
Endif
End Sub
'###############################################################################
'###############################################################################
'###############################################################################
Type Label
'Private:
X as Integer
Y as Integer
H as Byte
MOver as Byte
L as Integer
Text as String
Public:
Declare Constructor(XPos as Integer, YPos as Integer, SText as String)
Declare Sub Hide()
Declare Sub Show()
Declare Sub GClear()
Declare Sub G()
End Type
'###############################################################################
Constructor Label(XPos as Integer, YPos as Integer, SText as String)
X = XPos
Y = YPos
L = Len(SText)
Text = SText
End Constructor
'###############################################################################
Sub Label.G()
If H = 0 then
Line(X, Y) - (X + L * 8, Y + 8), &hFFFFFF, BF
Draw String(X + 1, Y + 1), Text, &h000000
Endif
End Sub
'###############################################################################
Sub Label.Hide()
H = 1
End Sub
'###############################################################################
Sub Label.Show()
H = 0
End Sub
'###############################################################################
Sub Label.GClear()
If H = 0 then
Line (X, Y) - (X + L * 8, Y + 8), 0, BF
Endif
End Sub
'###############################################################################
'###############################################################################
'###############################################################################
Type Checkbox
Checked as Byte
Private:
X as Integer
Y as Integer
ButtIMG as Byte PTR
ButtIMG2 as Byte PTR
ID as String
ExtEvent as Sub(ID as String)
H as Byte
MOver as Byte
MLock as Byte
Public:
Declare Constructor(XPos as Integer, YPos as Integer, CheckID as String, Event as Sub(ID as String))
Declare Destructor
Declare Sub Hide()
Declare Sub Show()
Declare Sub Control()
Declare Sub GClear()
Declare Sub G()
End Type
'###############################################################################
Constructor Checkbox(XPos as Integer, YPos as Integer, CheckID as String, Event as Sub(ID as String))
X = XPos
Y = YPos
ID = CheckID
ExtEvent = Event
Checked = 0
ButtIMG = Imagecreate(25, 25, &hFFFFFF, 32)
Line ButtIMG, (1, 1) - (23, 23), &h000000, BF
ButtIMG2 = Imagecreate(25, 25, &hFFFFFF, 32)
Line ButtIMG2, (1, 1) - (23, 23), &h000000, BF
Line ButtIMG2, (1, 1) - (25, 25), &hFFFFFF
Line ButtIMG2, (23, 1) - (1, 23), &hFFFFFF
End Constructor
'###############################################################################
Destructor Checkbox
If ButtIMG <> 0 then ImageDestroy ButtIMG
If ButtIMG2 <> 0 then ImageDestroy ButtIMG2
End Destructor
'###############################################################################
Sub Checkbox.G()
If H = 0 then
If Checked = 1 then Put (X, Y), ButtIMG2, ALPHA, 255
If Checked = 0 then Put (X, Y), ButtIMG, ALPHA, 255
Endif
End Sub
'###############################################################################
Sub Checkbox.Hide()
H = 1
End Sub
'###############################################################################
Sub Checkbox.Show()
H = 0
End Sub
'###############################################################################
Sub Checkbox.Control()
Dim as Integer MX, MY, MB
If H = 0 then
GetMouse(MX, MY,, MB)
If MX > X and MX < X + 25 and MY > Y and MY < Y + 25 and MLock = 0 then
IF MB = 1 then
Checked += 1
If Checked > 1 then Checked = 0
ExtEvent(ID)
Endif
Endif
If MB = 1 then MLock = 1 else MLock = 0
Endif
End Sub
'###############################################################################
Sub Checkbox.GClear()
If H = 0 then
Line (X, Y) - (X + 25, Y + 25), 0, BF
Endif
End Sub
'###############################################################################
'###############################################################################
'###############################################################################
Type TimeControlUDT
Declare Constructor(FPS as Integer)
Declare Sub ControlTime()
Declare Sub SetFPS(FPS as Integer)
Private:
Temp1 as Double
StartTime as Double
DurchlaeufeS as Integer
End Type
Constructor TimeControlUDT(FPS as Integer)
DurchlaeufeS = FPS
End Constructor
Sub TimeControlUDT.ControlTime()
If StartTime > 0 then
Temp1 = INT(1000 - (Timer - StartTime) * DurchlaeufeS)
Temp1 = Temp1 \ DurchlaeufeS
If Temp1 > 0 then Sleep Temp1, 1
Endif
StartTime = Timer
End Sub
Sub TimeControlUDT.SetFPS(FPS as Integer)
DurchlaeufeS = FPS
End Sub
'###############################################################################
'###############################################################################
'###############################################################################
Type GUI
Public:
Declare Destructor
Declare Function NewLabel(X as Integer, Y as Integer, Text as String) as Integer
Declare Function NewCheckbox(X as Integer, Y as Integer, ID as String, Event as Sub(ID as String)) as Integer
Declare Function NewTextField(X as Integer, Y as Integer, Laenge as Integer) as Integer
Declare Function NewTextField(X as Integer, Y as Integer, Laenge as Integer, Text as String) as Integer
Declare Function NewButton(ID as String, Event as Sub(ID as String), X as Integer, Y as Integer, File as String, File2 as String) as Integer
Declare Function NewButton(ID as String, Event as Sub(ID as String), X as Integer, Y as Integer, File as String) as Integer
Declare Function NewButton(ID as String, Event as Sub(ID as String), BText as String, X as Integer, Y as Integer) as Integer
Declare Function GetLabelPTR(Nr as Integer) as Label PTR
Declare Function GetCheckBoxPTR(Nr as Integer) as Checkbox PTR
Declare Function GetTextFieldPTR(Nr as Integer) as TextField PTR
Declare Function GetButtonPTR(Nr as Integer) as Button PTR
Declare Sub G()
Declare Sub Control()
Declare Sub GClear()
Declare Sub GUIStart()
Declare Static Sub GUIUpdate(ByRef GUIPTR as GUI)
As Label PTR LabelArr(1 to 10)
As Integer LabelSize
As Checkbox PTR CheckArr(1 to 10)
As Integer CheckSize
As TextField PTR TextFieldArr(1 to 10)
As Integer TextFieldSize
As Button PTR ButtonArr(1 to 10)
As Integer ButtonSize
As Byte Threadstop
As TimeControlUDT FPS = TimeControlUDT(60)
End Type
'###############################################################################
Destructor GUI
End Destructor
'###############################################################################
Function GUI.NewLabel(X as Integer, Y as Integer, Text as String) as Integer
LabelSize += 1
If LabelArr(LabelSize) = 0 then LabelArr(LabelSize) = New Label(X, Y, Text)
Return LabelSize
End Function
'###############################################################################
Function GUI.NewCheckbox(X as Integer, Y as Integer, ID as String, Event as Sub(ID as String)) as Integer
CheckSize += 1
If CheckArr(CheckSize) = 0 then CheckArr(CheckSize) = New Checkbox(X, Y, ID, Event)
Return CheckSize
End Function
'###############################################################################
Function GUI.NewTextField(X as Integer, Y as Integer, Laenge as Integer) as Integer
TextFieldSize += 1
If TextFieldArr(TextFieldSize) = 0 then TextFieldArr(TextFieldSize) = New TextField(X, Y, Laenge)
Return TextFieldSize
End Function
'###############################################################################
Function GUI.NewTextField(X as Integer, Y as Integer, Laenge as Integer, Text as String) as Integer
TextFieldSize += 1
If TextFieldArr(TextFieldSize) = 0 then TextFieldArr(TextFieldSize) = New TextField(X, Y, Laenge, Text)
Return TextFieldSize
End Function
'###############################################################################
Function GUI.NewButton(ID as String, Event as Sub(ID as String), X as Integer, Y as Integer, File as String, File2 as String) as Integer
ButtonSize += 1
If ButtonArr(ButtonSize) = 0 then ButtonArr(ButtonSize) = New Button(ID, Event, X, Y, File, File2)
Return ButtonSize
End Function
'###############################################################################
Function GUI.NewButton(ID as String, Event as Sub(ID as String), X as Integer, Y as Integer, File as String) as Integer
ButtonSize += 1
If ButtonArr(ButtonSize) = 0 then ButtonArr(ButtonSize) = New Button(ID, Event, X, Y, File)
Return ButtonSize
End Function
'###############################################################################
Function GUI.NewButton(ID as String, Event as Sub(ID as String), BText as String, X as Integer, Y as Integer) as Integer
ButtonSize += 1
If ButtonArr(ButtonSize) = 0 then ButtonArr(ButtonSize) = New Button(ID, Event, BText, X, Y)
Return ButtonSize
End Function
'###############################################################################
Function GUI.GetLabelPTR(Nr as Integer) as Label PTR
If Nr < 1 Or Nr > LabelSize then Return 0 Else Return LabelArr(Nr)
End Function
'###############################################################################
Function GUI.GetCheckboxPTR(Nr as Integer) as Checkbox PTR
If Nr < 1 Or Nr > CheckSize then Return 0 Else Return CheckArr(Nr)
End Function
'###############################################################################
Function GUI.GetTextFieldPTR(Nr as Integer) as TextField PTR
If Nr < 1 Or Nr > TextFieldSize then Return 0 Else Return TextFieldArr(Nr)
End Function
'###############################################################################
Function GUI.GetButtonPTR(Nr as Integer) as Button PTR
If Nr < 1 Or Nr > ButtonSize then Return 0 Else Return ButtonArr(Nr)
End Function
'###############################################################################
Sub GUI.G()
Dim as Integer a
If LabelSize > 0 then
For a = 1 to LabelSize
LabelArr(a)->G()
Next a
Endif
If CheckSize > 0 then
For a = 1 to CheckSize
CheckArr(a)->G()
Next a
Endif
If TextFieldSize > 0 then
For a = 1 to TextFieldSize
TextFieldArr(a)->G()
Next a
Endif
If ButtonSize > 0 then
For a = 1 to ButtonSize
ButtonArr(a)->G()
Next a
Endif
End Sub
'###############################################################################
Sub GUI.Control()
Dim as Integer a
If CheckSize > 0 then
For a = 1 to CheckSize
CheckArr(a)->Control()
Next a
Endif
If TextFieldSize > 0 then
For a = 1 to TextFieldSize
TextFieldArr(a)->Control()
Next a
Endif
If ButtonSize > 0 then
For a = 1 to ButtonSize
ButtonArr(a)->Control()
Next a
Endif
End Sub
'###############################################################################
Sub GUI.GClear()
Dim as Integer a
If LabelSize > 0 then
For a = 1 to LabelSize
LabelArr(a)->GClear()
Next a
Endif
If CheckSize > 0 then
For a = 1 to CheckSize
CheckArr(a)->GClear()
Next a
Endif
If TextFieldSize > 0 then
For a = 1 to TextFieldSize
TextFieldArr(a)->GClear()
Next a
Endif
If ButtonSize > 0 then
For a = 1 to ButtonSize
ButtonArr(a)->GClear(&h000000)
Next a
Endif
End Sub
'###############################################################################
Static Sub GUI.GUIUpdate(ByRef GUIPTR as GUI)
While(GUIPTR.Threadstop = 0)
GUIPTR.Control()
GUIPTR.GClear()
GUIPTR.G()
GUIPTR.FPS.ControlTime()
Wend
End Sub
'###############################################################################
Sub GUI.GUIStart()
FPS.SetFPS(60)
Threadcreate(CAST(Any PTR, @GUIUpdate), @This)
End Sub