Buchempfehlung
Windows-Programmierung. Das Entwicklerhandbuch zur WIN32-API
Windows-Programmierung. Das Entwicklerhandbuch zur WIN32-API
"Der" Petzold, das über 1000 Seiten starke Standardwerk zum Win32-API - besonders nützlich u. a. bei der GUI-Programmierung in FreeBASIC! [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

Grafische Buttons und Maussteuerung

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