Buchempfehlung
Windows System Programming
Windows System Programming
Das Kompendium liefert viele interessante Informationen zur Windows-Programmierung auf Englisch. [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

Bildschirmschoner Erweiterungen

von RedakteurVoltaSeite 3 von 4

1. Testmodus
2. Abbruch bei Mausbewegung
_ 2.1. Mausabfrage
_ 2.2. ScreenEvent ab FB 0.17b
3. Kleine bunte Animation

2.2. ScreenEvent ab FB 0.17b

Mit der FreeBASIC-Version 0.17b hat sich das FreeBASIC development team eine neue Möglichkeit ausgedacht Ereignisse (z.B. Mausbewegung) festzustellen , den Externer Link!ScreenEvent.
Fast so wie in der WinAPI kann man viele Ereignisse wie Taste gedrückt, Maus im Fenster, Fenster hat den Focus etc. abfragen.
Wichtig dabei ist das Einbinden (includen) der 'fbgfx.bi' und 'Using fb' damit sind alle Definitionen für den ScreenEvent erledigt.
Auf die 'Getmouse'- Anweisungen können wir ganz verzichten.

In der Prozedur ShowScreensaver geben wir unserem Event einen Namen 'Dim evt As EVENT'.
Tritt jetzt ein Ereignis auf, jemand rüttelt an der Maus oder drückt eine Taste, so wird der Aufruf 'ScreenEvent(@evt)' einen Rückgabewert 1 (statt 0 = kein Ereignis) geben.
Jetzt könnte man ganz genau auswerten welcher Art dieses Ereignis war, 'evt.type' gibt dazu eine Kennzahl an. Da uns hier nur die Ereignisse interessieren die mit der Tastatur und Maus zusammen hängen (das sind die Ereignisse 1 - 8 ) frage ich nur diese hier ab.
Das war für mich erstaunlich einfach zu programmieren und ich hoffe es hier verständlich erklärt zu haben.

#include "windows.bi"
#include "fbgfx.bi"
Using fb 'Namespace fb

...

Sub ShowScreensaver
  Dim evt As EVENT
  ' Vollbild, kein weiterer Moduswechsel
  Screen 18, 32,, 1 Or 4
  ' Maussymbol nicht anzeigen
  Setmouse ,,0

  ...

  Do

  ...

    'wurde die Maus bewegt oder Taste gedrückt
    If (ScreenEvent(@evt)) Then
      If evt.type >0 And evt.type <9 Then
        Exit Sub
      End If
    End If
    ' Zur Senkung der Prozessorlast immer ein bisschen warten
    Sleep 1
  Loop
End Sub

Hier einmal ein Listing für eine Grundgerüst als Screensaver (ohne Animation):

#include "windows.bi"
#include "fbgfx.bi"
Using fb 'Namespace fb

Declare Sub ConfigureScreensaver
Declare Sub ShowScreensaver
Dim As String Param

' Kein Parameter?
If Command(1) = "" Then
'  If MessageBox(0, "Sreensaver testen?", __FB_SIGNATURE__, MB_ICONQUESTION Or MB_YESNO) = IDYES Then
'    ShowScreensaver
'  End If
  End
End If

' Gewünschtes Kommando isolieren
Param = Mid(Command(1), 2, 1)

Select Case Param
Case "s","s"
  ShowScreensaver
Case "c"
  ConfigureScreensaver
End Select

End' Programmende


Sub ConfigureScreensaver
  MessageBox(0, "Es gibt nichts zu konfigurieren! ;)", __FB_SIGNATURE__, MB_ICONINFORMATION)
End Sub

Sub ShowScreensaver
  Dim evt As EVENT
  ' Vollbild, kein weiterer Moduswechsel
  Screen 18, 32,, 1 Or 4
  ' Maussymbol nicht anzeigen
  Setmouse ,,0

  '... zeichnen vorbereiten (dimensionieren, initialisieren etc.)

  Do

  '... zeichnen

    'wurde die Maus bewegt oder Taste gedrückt
    If (screenevent(@evt)) Then
      If evt.type>0 And evt.type<9 Then
        Exit Sub
      End If
    End If

    ' Zur Senkung der Prozessorlast immer ein bisschen warten
    Sleep 1
  Loop
End Sub

 

Gehe zu Seite Gehe zu Seite  1  2  3  4  
Zusätzliche Informationen und Funktionen
  • Das Tutorial wurde am 20.06.2007 von RedakteurVolta angelegt.
  • Die aktuellste Version wurde am 15.08.2007 von RedakteurVolta gespeichert.
  Bearbeiten Bearbeiten  

  Versionen Versionen