fb:porticula NoPaste
DeGUI V1.21
Uploader: | DonStevone |
Datum/Zeit: | 28.12.2011 15:22:47 |
' =======================================================================
' = =
' = DeGUI - Damn easy - Graphical user interface =
' = =
' = Autor : Steven Mahnke alias DonStevone =
' = Datum : 31.10.2011 =
' = Lizens : FreeBASIC-Portal-Standartlizenz(FBPSL) =
' = Version: 1.21 =
' = =
' =======================================================================
' =======================================================================
' = GUI =
' =======================================================================
'
' Function NewLabel (X as Integer, Y as Integer, Text as String) as Integer
' Function NewCheckbox (X as Integer, Y as Integer, ID as String, Event as Sub(ID as String)) as Integer
' Function NewTextField (X as Integer, Y as Integer, Laenge as Integer) as Integer
' Function NewTextField (X as Integer, Y as Integer, Laenge as Integer, Text as String) as Integer
' Function NewRollTextField (X as Integer, Y as Integer, Laenge as Integer) as Integer
' Function NewRollTextField (X as Integer, Y as Integer, Laenge as Integer, Text as String) as Integer
' Function NewPWTextField (X as Integer, Y as Integer, Laenge as Integer) as Integer
' Function NewButton (X as Integer, Y as Integer, File as String, File2 as String, ID as String, Event as Sub(ID as String)) as Integer
' Function NewButton (X as Integer, Y as Integer, File as String, ID as String, Event as Sub(ID as String)) as Integer
' Function NewButton (BText as String, X as Integer, Y as Integer, ID as String, Event as Sub(ID as String)) as Integer
'
' Die Funktionen geben einen Integer zurück, welcher repräsentativ für das
' jeweilige Element steht. Diesen Integer kann man an nachfolgende Funktionen
' übergeben.
' Für Informationen über die Parameter siehe weiter unten.
'
' Function GetLabelPTR (Nr as Integer) as Label PTR
' Function GetCheckBoxPTR (Nr as Integer) as Checkbox PTR
' Function GetTextFieldPTR (Nr as Integer) as TextField PTR
' Function GetRollTextFieldPTR (Nr as Integer) as RollTextField PTR
' Function GetPWTextFieldPTR (Nr as Integer) as PWTextField PTR
' Function GetButtonPTR (Nr as Integer) as Button PTR
'
' Diese Funktionen liefern den Pointer auf ein einzelnes Element zurück.
' Wurde ein ungültiger Wert übergeben, wird eine 0 zurückgegeben.
' Mit diesem Pointer hat man die möglichkeit einzelne Elemente zu Steuern.
'
' Sub GUIStart()
'
' Startet die graphische darstellung der Elemente und die Kontrollfunktionen
' in einem Thread
'
' Sub GUIStop()
'
' Stoppt den Thread
'
' !!!Alternativ zu GUIStart() um flimmern zu verhindern!!!
'
' G()
' Alle Elemente Graphisch darstellen.
'
' GClear()
' Alle Elemente auf dem Bildschirm löschen.
'
' Control()
' Alle Elemente steuern.
'
' =======================================================================
' = 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), ButtText as String, ButtX as Integer, ButtY as Integer)
'
' -Hier wird ein 'Standart Button verwendet (Ohne Bild)
' -ButtText ist ein Text welcher auf dem Button stehen soll
'
' 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
'
'
'
' ========================================================================
' = RollTextField =
' ========================================================================
'
' Siehe TextField
'
' Unterschied: Der Text im Textfeld wird gerollt(Nur die letzten 'Laenge'
' Zeichen werden im Textfeld angezeigt). Dadurch kann man das
' Textfeld mit beliebig vielen Zeichen füllen.
'
'
' ========================================================================
' = PWTextField =
' ========================================================================
'
' Declare Constructor(XPos as Integer, YPos as Integer, Laenge as Integer)
'
' Siehe TextField
'
' Unterschied: Jedes Zeichen im PWTextField wird nur durch ein '*' dargestellt.
'
'
'
' ========================================================================
' = 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 = &hA0A0FF
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), &hFFFFFF, BF
Line(X, Y) - (X + L * 8, Y + 8), &hBBBBBB, B
Draw String(X + 1, Y + 1), Text, &h000000
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)
ElseIf ASC(Mid(T, 1, 1)) >= 32 And ASC(Mid(T, 1, 1)) <= 126 then
If Len(Text) < L then Text += T
ElseIf ASC(Mid(T, 1, 1)) = 13 then
Auswahl = 0
'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 RollTextField
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 RollTextField(XPos as Integer, YPos as Integer, Laenge as Integer)
X = XPos
Y = YPos
L = Laenge
End Constructor
'###############################################################################
Constructor RollTextField(XPos as Integer, YPos as Integer, Laenge as Integer, SText as String)
X = XPos
Y = YPos
L = Laenge
Text = SText
End Constructor
'###############################################################################
Sub RollTextField.G()
If H = 0 then
Line(X, Y) - (X + L * 8, Y + 8), &hFFFFFF, BF
Line(X, Y) - (X + L * 8, Y + 8), &hBBBBBB, B
If LEN(Text) > L then
Draw String(X + 1, Y + 1), Mid(Text, LEN(Text) - L + 1, L + 1), &h000000
Else
Draw String(X + 1, Y + 1), Mid(Text, 1, L), &h000000
Endif
Endif
End Sub
'###############################################################################
Sub RollTextField.Hide()
H = 1
End Sub
'###############################################################################
Sub RollTextField.Show()
H = 0
End Sub
'###############################################################################
Sub RollTextField.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)
ElseIf ASC(Mid(T, 1, 1)) >= 32 And ASC(Mid(T, 1, 1)) <= 126 then
Text += T
ElseIf ASC(Mid(T, 1, 1)) = 13 then
Auswahl = 0
Endif
Endif
End Sub
'###############################################################################
Sub RollTextField.GClear()
If H = 0 then
Line (X, Y) - (X + L * 8, Y + 8), 0, BF
Endif
End Sub
'###############################################################################
'###############################################################################
'###############################################################################
Type PWTextField
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 Sub Hide()
Declare Sub Show()
Declare Sub Control()
Declare Sub GClear()
Declare Sub G()
End Type
'###############################################################################
Constructor PWTextField(XPos as Integer, YPos as Integer, Laenge as Integer)
X = XPos
Y = YPos
L = Laenge
End Constructor
'###############################################################################
Sub PWTextField.G()
If H = 0 then
Line(X, Y) - (X + L * 8, Y + 8), &hFFFFFF, BF
Line(X, Y) - (X + L * 8, Y + 8), &hBBBBBB, B
Draw String(X + 1, Y + 1), String(LEN(Text), "*"), &h000000
Endif
End Sub
'###############################################################################
Sub PWTextField.Hide()
H = 1
End Sub
'###############################################################################
Sub PWTextField.Show()
H = 0
End Sub
'###############################################################################
Sub PWTextField.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)
ElseIf ASC(Mid(T, 1, 1)) >= 32 And ASC(Mid(T, 1, 1)) <= 126 then
If Len(Text) < L then Text += T
ElseIf ASC(Mid(T, 1, 1)) = 13 then
Auswahl = 0
Endif
Endif
End Sub
'###############################################################################
Sub PWTextField.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), &h808080, 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(15, 15, &hFFFFFF, 32)
Line ButtIMG, (1, 1) - (13, 13), &h000000, BF
ButtIMG2 = Imagecreate(15, 15, &hFFFFFF, 32)
Line ButtIMG2, (1, 1) - (13, 13), &h000000, BF
Line ButtIMG2, (1, 1) - (15, 15), &hFFFFFF
Line ButtIMG2, (13, 1) - (1, 13), &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 + 15 and MY > Y and MY < Y + 15 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 Constructor()
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 NewRollTextField(X as Integer, Y as Integer, Laenge as Integer) as Integer
Declare Function NewRollTextField(X as Integer, Y as Integer, Laenge as Integer, Text as String) as Integer
Declare Function NewPWTextField(X as Integer, Y as Integer, Laenge as Integer) as Integer
Declare Function NewButton(X as Integer, Y as Integer, File as String, File2 as String, ID as String, Event as Sub(ID as String)) as Integer
Declare Function NewButton(X as Integer, Y as Integer, File as String, ID as String, Event as Sub(ID as String)) as Integer
Declare Function NewButton(BText as String, X as Integer, Y as Integer, ID as String, Event as Sub(ID as String)) 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 GetRollTextFieldPTR(Nr as Integer) as RollTextField PTR
Declare Function GetPWTextFieldPTR(Nr as Integer) as PWTextField PTR
Declare Function GetButtonPTR(Nr as Integer) as Button PTR
Declare Sub G()
Declare Sub Control()
Declare Sub GClear()
Declare Sub GUIStart()
Declare Sub GUIStop()
Private:
Declare Static Sub GUIUpdate(ByRef GUIPTR as GUI)
As Label PTR PTR LabelArr
As Integer LabelSize
As Checkbox PTR PTR CheckArr
As Integer CheckSize
As TextField PTR PTR TextFieldArr
As Integer TextFieldSize
As RollTextField PTR PTR RollTextFieldArr
As Integer RollTextFieldSize
As PWTextField PTR PTR PWTextFieldArr
As Integer PWTextFieldSize
As Button PTR PTR ButtonArr
As Integer ButtonSize
As Byte Threadstop
As TimeControlUDT FPS = TimeControlUDT(60)
End Type
'###############################################################################
Constructor GUI()
LabelArr = Allocate(SizeOf(Label PTR))
CheckArr = Allocate(SizeOf(CheckBox PTR))
TextFieldArr = Allocate(SizeOf(TextField PTR))
RollTextFieldArr = Allocate(SizeOf(RollTextField PTR))
PWTextFieldArr = Allocate(SizeOf(PWTextField PTR))
ButtonArr = Allocate(SizeOf(Button PTR))
End Constructor
'###############################################################################
Destructor GUI
End Destructor
'###############################################################################
Function GUI.NewLabel(X as Integer, Y as Integer, Text as String) as Integer
LabelArr[LabelSize] = New Label(X, Y, Text)
LabelSize += 1
LabelArr = ReAllocate(LabelArr, SizeOf(Label PTR) * (LabelSize + 1))
Return LabelSize
End Function
'###############################################################################
Function GUI.NewCheckbox(X as Integer, Y as Integer, ID as String, Event as Sub(ID as String)) as Integer
CheckArr[CheckSize] = New Checkbox(X, Y, ID, Event)
CheckSize += 1
CheckArr = ReAllocate(CheckArr, SizeOf(CheckBox PTR) * (CheckSize + 1))
Return CheckSize
End Function
'###############################################################################
Function GUI.NewTextField(X as Integer, Y as Integer, Laenge as Integer) as Integer
TextFieldArr[TextFieldSize] = New TextField(X, Y, Laenge)
TextFieldSize += 1
TextFieldArr = ReAllocate(TextFieldArr, SizeOf(TextField PTR) * (TextFieldSize + 1))
Return TextFieldSize
End Function
'###############################################################################
Function GUI.NewTextField(X as Integer, Y as Integer, Laenge as Integer, Text as String) as Integer
TextFieldArr[TextFieldSize] = New TextField(X, Y, Laenge, Text)
TextFieldSize += 1
TextFieldArr = ReAllocate(TextFieldArr, SizeOf(TextField PTR) * (TextFieldSize + 1))
Return TextFieldSize
End Function
'###############################################################################
Function GUI.NewRollTextField(X as Integer, Y as Integer, Laenge as Integer) as Integer
RollTextFieldArr[RollTextFieldSize] = New RollTextField(X, Y, Laenge)
RollTextFieldSize += 1
RollTextFieldArr = ReAllocate(RollTextFieldArr, SizeOf(RollTextField PTR) * (RollTextFieldSize + 1))
Return RollTextFieldSize
End Function
'###############################################################################
Function GUI.NewRollTextField(X as Integer, Y as Integer, Laenge as Integer, Text as String) as Integer
RollTextFieldArr[RollTextFieldSize] = New RollTextField(X, Y, Laenge, Text)
RollTextFieldSize += 1
RollTextFieldArr = ReAllocate(RollTextFieldArr, SizeOf(RollTextField PTR) * (RollTextFieldSize + 1))
Return RollTextFieldSize
End Function
'###############################################################################
Function GUI.NewPWTextField(X as Integer, Y as Integer, Laenge as Integer) as Integer
PWTextFieldArr[PWTextFieldSize] = New PWTextField(X, Y, Laenge)
PWTextFieldSize += 1
PWTextFieldArr = ReAllocate(PWTextFieldArr, SizeOf(PWTextField PTR) * (PWTextFieldSize + 1))
Return PWTextFieldSize
End Function
'###############################################################################
Function GUI.NewButton(X as Integer, Y as Integer, File as String, File2 as String, ID as String, Event as Sub(ID as String)) as Integer
ButtonArr[ButtonSize] = New Button(ID, Event, X, Y, File, File2)
ButtonSize += 1
ButtonArr = ReAllocate(ButtonArr, SizeOf(Button PTR) * (ButtonSize + 1))
Return ButtonSize
End Function
'###############################################################################
Function GUI.NewButton(X as Integer, Y as Integer, File as String, ID as String, Event as Sub(ID as String)) as Integer
ButtonArr[ButtonSize] = New Button(ID, Event, X, Y, File)
ButtonSize += 1
ButtonArr = ReAllocate(ButtonArr, SizeOf(Button PTR) * (ButtonSize + 1))
Return ButtonSize
End Function
'###############################################################################
Function GUI.NewButton(BText as String, X as Integer, Y as Integer, ID as String, Event as Sub(ID as String)) as Integer
ButtonArr[ButtonSize] = New Button(ID, Event, BText, X, Y)
ButtonSize += 1
ButtonArr = ReAllocate(ButtonArr, SizeOf(Button PTR) * (ButtonSize + 1))
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 - 1]
End Function
'###############################################################################
Function GUI.GetCheckboxPTR(Nr as Integer) as Checkbox PTR
If Nr < 1 Or Nr > CheckSize then Return 0 Else Return CheckArr[Nr - 1]
End Function
'###############################################################################
Function GUI.GetTextFieldPTR(Nr as Integer) as TextField PTR
If Nr < 1 Or Nr > TextFieldSize then Return 0 Else Return TextFieldArr[Nr - 1]
End Function
'###############################################################################
Function GUI.GetRollTextFieldPTR(Nr as Integer) as RollTextField PTR
If Nr < 1 Or Nr > RollTextFieldSize then Return 0 Else Return RollTextFieldArr[Nr - 1]
End Function
'###############################################################################
Function GUI.GetPWTextFieldPTR(Nr as Integer) as PWTextField PTR
If Nr < 1 Or Nr > PWTextFieldSize then Return 0 Else Return PWTextFieldArr[Nr - 1]
End Function
'###############################################################################
Function GUI.GetButtonPTR(Nr as Integer) as Button PTR
If Nr < 1 Or Nr > ButtonSize then Return 0 Else Return ButtonArr[Nr - 1]
End Function
'###############################################################################
Sub GUI.G()
Dim as Integer a
If LabelSize > 0 then
For a = 0 to LabelSize - 1
LabelArr[a]->G()
Next a
Endif
If CheckSize > 0 then
For a = 0 to CheckSize - 1
CheckArr[a]->G()
Next a
Endif
If TextFieldSize > 0 then
For a = 0 to TextFieldSize - 1
TextFieldArr[a]->G()
Next a
Endif
If RollTextFieldSize > 0 then
For a = 0 to RollTextFieldSize - 1
RollTextFieldArr[a]->G()
Next a
Endif
If PWTextFieldSize > 0 then
For a = 0 to PWTextFieldSize - 1
PWTextFieldArr[a]->G()
Next a
Endif
If ButtonSize > 0 then
For a = 0 to ButtonSize - 1
ButtonArr[a]->G()
Next a
Endif
End Sub
'###############################################################################
Sub GUI.Control()
Dim as Integer a
If CheckSize > 0 then
For a = 0 to CheckSize - 1
CheckArr[a]->Control()
Next a
Endif
If TextFieldSize > 0 then
For a = 0 to TextFieldSize - 1
TextFieldArr[a]->Control()
Next a
Endif
If RollTextFieldSize > 0 then
For a = 0 to RollTextFieldSize - 1
RollTextFieldArr[a]->Control()
Next a
Endif
If PWTextFieldSize > 0 then
For a = 0 to PWTextFieldSize - 1
PWTextFieldArr[a]->Control()
Next a
Endif
If ButtonSize > 0 then
For a = 0 to ButtonSize - 1
ButtonArr[a]->Control()
Next a
Endif
End Sub
'###############################################################################
Sub GUI.GClear()
Dim as Integer a
If LabelSize > 0 then
For a = 0 to LabelSize - 1
LabelArr[a]->GClear()
Next a
Endif
If CheckSize > 0 then
For a = 0 to CheckSize - 1
CheckArr[a]->GClear()
Next a
Endif
If TextFieldSize > 0 then
For a = 0 to TextFieldSize - 1
TextFieldArr[a]->GClear()
Next a
Endif
If RollTextFieldSize > 0 then
For a = 0 to RollTextFieldSize - 1
RollTextFieldArr[a]->GClear()
Next a
Endif
If PWTextFieldSize > 0 then
For a = 0 to PWTextFieldSize - 1
PWTextFieldArr[a]->GClear()
Next a
Endif
If ButtonSize > 0 then
For a = 0 to ButtonSize - 1
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(20)
Threadcreate(CAST(Any PTR, @GUIUpdate), @This)
End Sub
Sub GUI.GUIStop()
Threadstop = 1
End Sub