TEIL 6: Die MAUS, Aufgaben 32 bis 38


Aufgabe 32


VBasic ist nicht nur eine objektorientierte Programmiersprache, sie ist auch ereignisorientiert. Anklicken von Schaltknöpfen oder Mausbewegungen löst Ereignisse aus.
Drückt man eine der Maustasten innerhalb des Arbeitsbereiches, so löst VBasic automatisch die Prozedur (Unterprogramm) Form_MouseDown() aus, während die Taste noch nicht losgelassen wurde.

In dieser Prozedur werden 4 Parameter benutzt:
Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)


Nun erst mal die Abbildung zur Aufgabe:



Ein kleines in eine ImageBox eingefügtes Bild soll sich immer dorthin bewegen, wo eine Maustaste gedrückt wurde. Dies geschieht mit der Move-Methode:

Private Sub form_mouseDown(button As Integer,
                           shift As Integer,
                           x As Single,
                           y As Single)
   Image1.Move x, y
End Sub


Stelle nun das Programm maus_a fertig.

Aufgabe 33


Mit Hilfe der Move-Methode kann nun auch ein einfaches Puzzle-Spiel programmiert werden:





Aufgabe 34



Dazu sind Vorbereitungen nötig:


Nun kannst du das Formular für das Programm puzzle gestalten und Projekt und Formular speichern.

Beim Anklicken des Start-Knopfes sollen die 4 Bilder an vorbestimmte Koordinaten des Formulars gerückt werden:

Image1.Left = 3600
Image1.Top = 4080
... usw.

Über if-Abfragen in der form_mouseDown-Prozedur werden dann die mit Optionsknopf angewählten Bildausschnitte zur Position des Mauszeigers hingeschoben:

Private Sub form_mouseDown(button As Integer,
              shift As Integer,
              x As Single,
              y As Single)
   If Option1.Value = True Then

        Image4.Move x, y
    End If  ... usw.

End Sub


Nun steht dir eigentlich nichts mehr im Weg, um PUZZLE fertigzustellen. Viel Erfolg!.

Aufgabe 35




In der Prozedur form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) dienen die Parameter Button und Shift dazu, um festzustellen, welche Maustaste in evtl. Kombination mit Shift, Strl oder Alt gedrückt wurde. Dies kann dazu benutzt werden, um ein Testprogramm für die Maus zu schreiben:


Mit

Select Case Button
   Case 0:
        Label6.Caption = "nichts"  ... usw.

   End Select


kann dieser Parameter in Label-Steuerelementen ausgegeben werden, ebenso der Parameter Shift. Mit Label2.Caption = X und Label4.Caption = Y werden die aktuellen Koordinaten des Mauszeigers ausgegeben.
Setzt man beim Formularentwurf den Skalierungsmodus auf benutzerdefiniert, dann kann mit geeigneten Schaltknöpfen die jeweilige Maßeinheit umgestellt werden:

Private Sub Command2_Click()
  Form1.ScaleMode = 6 'Millimeter
End Sub


Die zugehörigen Werte kannst du dem Eigenschaftsfenster für das Formular entnehmen. Stelle nun das Programm Maus_b fertig. Denke auch an die Kompilierung (EXE-Datei erstellen) und an den Ausdruck des zugehörigen Formulars.

Aufgabe 36

Die Prozedur form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) wird vom Rechner nicht andauernd ausgeführt, da sonst keine Zeit mehr für andere Aktivitäten bliebe. Um dies zu demonstrieren, sollst du das Programm maus_c schreiben:



Bewegt man die Maus schnell über das Formular, dann werden Kreise in größerem Abstand als bei langsamer Mausbewegung gezeichnet. Den circle-Befehl kennst du ja schon, also los geht´s!

Aufgabe 37




Ein kleines Zeichenprogramm für´s Freihandzeichnen soll den Namen maus_d erhalten.

Dazu brauchst du einige Informationen:
Zunächst mal müssen in der Prozedur Form_MouseDown die aktuellen Koordinaten CurrentX und CurrentY den aktuellen Mauskoordinaten X und Y beim Drücken der linken Maustaste angeglichen werden:

Private Sub form_Mousedown(Button As Integer, Shift As Integer, X As Single, Y As Single)
   Form1.CurrentX = X
   Form1.CurrentY = Y
End Sub


Den Line-Befehl kennst du schon: line(a,b)-(c,d),farbe zeichnet eine Linie von P(a/b) zu Q(c/d) in der gewählten Farbe. Dieser Befehl wird in die Prozedur MouseMove eingebaut:

Line (CurrentX, CurrentY)-(X, Y), RGB(255, 0, 255)

Das Linienzeichnen startet also immer, sobald man die linke Maustaste drückt. Das Linienende befindet sich bei der aktuellen Mausposition. Hält man also die linke Taste gedrückt, so entsteht eine Linie analog zur Bewegung des Mauszeigers.
Die Farbwahl kannst du mit der Funktion RGB, die den Rot-, Grün- und Blauanteil festlegt wählen, aber auch mit vBcolor oder QBcolor.



Aufgabe 38


Ein kleines bißchen komfortabler soll das nächste "Zeichenprogramm" sein: Es soll eine Auswahl aus drei verschiedenen Linienstärken und drei verschiedenen Zeichenfarben ermöglichen.



Auch hier brauchst du wieder neue Informationen:

  1. Das Rahmensteuerelement (frame) dient dazu - nicht nur optisch - mehrere Optionen zusammenzufassen: wenn man Optionsschalter auf ein Formular bringt, so kann immer nur einer davon den Wert wahr haben, hier jedoch müssen zwei "eingeschaltet" sein.
    Mit einem Doppelklick ziehst du die Rahmenelement auf das Formular. Danach klickst du einfach auf das Symbol für Optionsschalter in der Werkzeugleiste und setzt so jeweils einen Optionsschalter auf den Rahmen im Formular.

    Stelle nun zunächst mal das ganze Formular fertig und speichere Projekt und Formular unter dem Namen zeiche ab.

  2. Die Prozeduren MouseDown und MouseMove kennst du aus dem letzten Programm. Übernimmst du MouseMove jedoch unverändert, dann funktioniert die Farbeinstellung nicht. Dies liegt daran, dass die Variable farbe global deklariert werden muss: Schreibe direkt unter option explicit die Zeile dim farbe as long in den allgemeinen Teil des Programms. Beim Line-Befehl schreibst du dann statt beispielsweise RGB (100,60,25) einfach .... , farbe.

    Erklärung: Wenn farbe nur innerhalb der Prozedur MouseMove deklariert wird, dann ist ihr Wert dem Rest des Programms unbekannt.

  3. Beim Programmcode für die Optionsschalter kannst du nun die Variable farbe benutzen:

Private Sub Option4_Click()

   If Option4.Value = True Then
    Form1.ScaleMode = 6
    farbe = RGB(255, 0, 0)
   End If
End Sub

Dasselbe Vorgehen gilt für die Einstellung der Linienstärke:

Private Sub Option3_Click()
  If Option3.Value = True Then
    Form1.ScaleMode = 6
    drawwidth = 3
  End If
End Sub


So, nun fehlt keine Information mehr für's ganze Programm. Viel Erfolg!





© 2010 Asti PoVRay-Site Mathematische Streiflichter