fb:porticula NoPaste
Grafische Buttons und Maussteuerung
Uploader: | Sebastian |
Datum/Zeit: | 15.03.2008 12:52:37 |
'Grafische Buttons in FreeBASIC benutzen
'Beispiel von Sebastian Steiner (15.03.2008)
'http://www.freebasic-portal.de
'Getestet mit FreeBasic 0.18.3
TYPE tButton
ButtonID As Integer
SizeX As Integer
SizeY As Integer
PosX As Integer
PosY As Integer
Filename As String
Grafik As Any Ptr
END TYPE
DECLARE SUB LoadButtons
DECLARE SUB ShowButtons
DECLARE SUB DestroyButtons
DECLARE FUNCTION CheckButtonClick As Integer
DIM SHARED Buttons(1 TO 2) As tButton
DIM BtnID AS INTEGER
With Buttons(1)
.ButtonID = 123
.PosX = 100
.PosY = 100
.Filename = "button1.bmp"
End WIth
With Buttons(2)
.ButtonID = 456
.PosX = 300
.PosY = 300
.Filename = "button2.bmp"
End With
'Die oben manuell festgelegten Dateien könnte man auch aus einer
'externen Datei auslesen. Das würde das Programm modularer machen.
ScreenRes 640,480,32
LoadButtons
ShowButtons
DO
SLEEP 1
BtnID = CheckButtonClick
If BtnID = 0 THEN
END
ELSE
LOCATE 1,1: PRINT "Es wurde Btn #" & BtnID & " angeklickt."
END IF
LOOP
DestroyButtons
END
SUB LoadButtons
'Buttons in den Speicher laden
Dim As Integer breit, hoch
Dim As Integer ff, i
FOR i = LBOUND(Buttons) TO UBOUND(Buttons)
'Ermitteln der Bildabmessungen:
'Details siehe http://www.freebasic-portal.de/index.php?s=tutorials&id=16
ff=FREEFILE
Open Buttons(i).Filename For Input As #ff 'öffne die Datei zum lesen
Get #ff, 19, breit 'Breite aus der BMP-Datei auslesen
Get #ff, 23, hoch 'Höhe aus der BMP-Datei auslesen
Close #ff
hoch=ABS(hoch)
With Buttons(i)
.SizeX = breit
.SizeY = hoch
.Grafik = ImageCreate(breit,hoch)
BLOAD .Filename, .Grafik 'Laden
End With
NEXT i
END SUB
SUB ShowButtons
'Buttons auf den Bilschirm ausgeben
DIM AS INTEGER i
SCREENLOCK
FOR i = LBOUND(Buttons) TO UBOUND(Buttons)
With Buttons(i)
PUT (.PosX,.PosY), .Grafik, PSET
END WITH
NEXT i
SCREENUNLOCK
END SUB
FUNCTION CheckButtonClick As Integer
DIM AS INTEGER i, x, y, t
DO
SLEEP 1
GetMouse x, y, , t
If t And 1 Then 'Linke Maustaste gedrückt!
FOR i = LBOUND(Buttons) TO UBOUND(Buttons)
With Buttons(i)
'Abfrage, ob sich die Maus auf einem Button befindet:
IF (x >= .PosX) AND (x <= .PosX+.SizeX) AND (y >= .PosY) AND (y <= .PosY+.SizeY) Then
RETURN .ButtonID 'ButtonID zurückliefern
EXIT FUNCTION
END IF
END WITH
NEXT i
END IF
LOOP UNTIL INKEY = CHR(27) 'Bei ESC abbrechen
RETURN 0
END FUNCTION
SUB DestroyButtons
'Speicher freigeben
DIM AS INTEGER i
FOR i = LBOUND(Buttons) TO UBOUND(Buttons)
If Buttons(i).Grafik <> 0 Then ImageDestroy Buttons(i).Grafik
NEXT i
END SUB