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!

Tutorial

Eventsystem

von RedakteurMODSeite 2 von 5

Nun, ganz so leicht ist es nicht; es erfordert ein bisschen Vorarbeit. Für das Erkennen von Eingaben wie z.B. Mausklicks gibt es nämlich noch ein zweites Stichwort und das lautet Eventsystem. Also fangen wir mal damit an.

Wir brauchen also einen BefehlsreferenzeintragType, der Events erkennt und auswertet. Um es nicht unnötig zu verkomplizieren, nehmen wir an, dass wir nur Fenster mit Buttons brauchen.

Buttons - die müssen wir natürlich auch definieren und dafür eignet sich auch ein Type:

Type ButtonType
    As Integer btnsx, btnsy, btnex, btney
    As Sub onClick
End Type

Der ButtonType enthält die Start- und Endwerte der Buttongröße und eine Variable, die die Sub entgegen nimmt, die aufgerufen werden muss, wenn der Button geklickt wird.
Jetzt wo wir das haben, kümmern wir uns endlich um das BefehlsreferenzeintragUDT für unsere Events:

Type EventType
    Declare Function windowCreate(x As Integer, y As Integer, wndClick As Sub) As Integer
    Declare Function buttonCreate(startx As Integer, starty As Integer, endx As Integer, endy As Integer, onButtonClick As Sub) As Integer

    Declare Static Sub eventSub(temp As Any Ptr)

    As Sub windowClick

    As Integer wndx, wndy
    As Integer buttonZaehler
    As Integer terminate

    As ButtonType Ptr newButtonArray

    As Any Ptr mutex
    As Any Ptr eventSubThread
End Type

Wir haben also eine Function windowCreate, die das Fenster erstellen soll und eine Function buttonCreate, die den Button erstellt.
Des Weiteren finden wir die Sub eventSub. Diese ist BefehlsreferenzeintragStatic, weil wir sie als Eventhandler in einem Thread aufrufen wollen und das innerhalb eines Types nur so geht. Sie hat auch einen Übergabeparameter vom Typ Any Ptr, den wir als temporäre Übergabe der eigenen Type-Werte brauchen werden.

Die Variable windowClick nimmt beim Erstellen des Fensters die Sub (d.h. einen Pointer darauf) entgegen, die bei Anklicken des Fensters aufgerufen werden soll.
wndx und wndy speichern die Fenstergröße, aber was hat das für einen Hintergrund. Das Fenster könnte man schließlich auch mit BefehlsreferenzeintragScreen oder BefehlsreferenzeintragScreenRes erstellen. Stimmt, aber wir wollen dem User Arbeit abnehmen, denn jeder erstellte Button muss ja innerhalb des Fensters liegen und ohne diesen Umweg müsste der User nicht nur das Fenster erstellen, sondern auch die Variablen zum Prüfen füllen, wohlgemerkt mit den richtigen Werten.

buttonZaehler muss wohl nicht weiter erläutert werden.

terminate hat die Aufgabe, den Eventhandler, also den Thread, zu beenden.

Der ButtonType Ptr newButtonArray soll ein dynamisches Array sein. Da FreeBASIC (noch) keine dynamischen Arrays in Types erlaubt, muss da eine andere Lösung her. Dazu später mehr.

eventSubThread wird für den Thread gebraucht und das Mutex zur Sicherheit, da BefehlsreferenzeintragGetMouse und BefehlsreferenzeintragInKey nicht threadsafe sind.

 

Gehe zu Seite Gehe zu Seite  1  2  3  4  5  
Zusätzliche Informationen und Funktionen
  • Das Tutorial wurde am 19.03.2010 von RedakteurMOD angelegt.
  • Die aktuellste Version wurde am 25.04.2010 von RedakteurMOD gespeichert.
  Bearbeiten Bearbeiten  

  Versionen Versionen