VB -30: Static

Knoten ins Ohr...

Jetzt fehlt uns noch der Menüpnukt "Über...", in dem wir unserem Anwender kurze Auskunft über das Programm geben wollen. Ich mache es mir hier einfach und nutze unsere Splashscreen, aber natürlich kann man hier auch jede beliebige andere Form nehmen.

Wir zeigen sie mit der Show-Methode an:

     Private Sub mnuUeber_Click()
        frmSplashscreen.Show
     End Sub
 

Das wär jetzt eigentlich schon alles, doch wenn wir es ausprobieren, erleben wir ein kleines Durcheinander. Warum?

Wir haben in unser Activate-Ereignis einige Befehle gepackt, die beim Starten des Programms ablaufen sollen. Das Activate-Ereignis tritt jedoch immer ein, wenn die Form den Fokus erhält, also auch, beim Wegklicken der Splashscreen nach Anzeigen über das Menü. Um dies zu verhindern, müssen wir dem Programm beibringen, daß es die Aktion nur beim ersten Start ausführen soll, danach nicht mehr.

Damit das Programm sich erinnert, daß es die Befehlsfolge schonmal ausgeführt hat, müssen wir ihm eine Gedächtnisstütze geben, eine Variable "gestartet", die wir abfragen:

     Private Sub Form_Activate()
     Dim gestartet as Boolean

        If gestartet = True Then Exit Sub          'Abfrage ob schonmal ausgeführt

        AutoRedraw = True
        Me.PaintPicture picTafel.Image, (Me.ScaleWidth - picTafel.Width) \ 2, _
         (Me.ScaleHeight - picTafel.Height) \ 2
        AutoRedraw = False

        CurrentX = 1500      'positioniert den nachfolgenden Printbefehl X-Achse
        CurrentY = 2000      'positioniert den nachfolgenden Printbefehl Y-Achse
        Print "Viel Spaß mit Mathe-Max!"  'druckt Text direkt auf die Form

        Verzoegerung 2
        MsgBox "Bitte suche eine Übung aus!", vbExclamation
        Cls

        gestartet = True      'Flagge setzen
     End Sub
 

Hinweis: Die Abfrage einer logischen Variablen auf True oder False kann man auch einfacher schreiben:

        If gestartet Then Exit Sub          'Abfrage ob schonmal ausgeführt
 

oder die Umkehrung:

        If Not gestartet Then               'Abfrage ob noch nicht ausgeführt
 

Wenn jetzt die Form erneut aktiviert wird, ist gestartet schon "True" und es wird nicht mehr ausgeführt. Dabei müssen wir jedoch noch eine Besonderheit beachten: Normalerweise vergißt VB den Wert einer Variablen sofort, wenn es eine Prozedur verläßt. Wir hätten "gestartet" also umsonst gesetzt, wenn wir nicht dafür sorgen, daß unser Programm sich das auch wirklich bis zum Ende merkt. Eine Möglichkeit dazu haben wir bereits kennengelernt: Wir könnten die Variable modul- oder projektweit bekannt machen, dann wird der Wert erst gar nicht vergessen.

Da wir die Vriable aber sonst nirgends brauchen als in dieser Prozedur, nehmen wir einen anderen Weg. Wir machen die Variable "statisch":

     Static gestartet As Boolean
 

Wir können dazu das "Dim"-Statement durch den etwas spezifischeren "Static"-Befehl ersetzen. Die Variable ist auch dadurch deklariert (und genügt unserer Forderung "Options Explicit"), jetzt aber mit "dauerhaftem Wert" für die Ausführung des Programms. Außerhalb der Prozedur ist "gestartet" unbekannt und wir könnten die Variable in einer anderen Prozedur mit einer anderen Bedeutung belegen, innerhalb der Prozedur "Form_Activate()" behält sie jedoch den Wert, den wir ihr jeweils geben.

Beispielprojekt laden

zurück Index weiter


© Copyright 1998-2000 J.Behling EMail schreiben ABC-Ware's Homepage
Weitergabe und Druck (auch in Teilen, mit Ausnahme von Privatgebrauch) ohne ausdrückliche Genehmigung der Autorin untersagt.