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)
- Button:
der Wert von Button gibt an, ob die linke, mittlere oder die rechte Maustaste gedrückt wurde (button=1-- links, button=2---rechts, button=4---mittlere Taste, button=0---keine Taste,auch Kombinationen sind möglich, die Werte 0 bis 7 sind erlaubt.)
- Shift:
dieser Wert gibt an, ob die Maustaste zusammen mit Shift, Control oder Alt gedrückt wurde
- X und Y:
X und Y sind die Koordinaten des Mauszeigers zu dem Zeitpunkt, als eine Maustaste gedrückt wurde.
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:
- Öffne mit einem Pixelgrafik-Bildbearbeitungsprogramm eine neue Datei in der Größe 200x200 Pixel (Bildpunkte).
- Mit "Einfügen aus" positioniere nun einen geeigneten Bildausschnitt in diese Datei
- Speichere unter dem Namen puzzganz.gif in dein Arbeitsverzeichnis
- Speichere nun nur das obere linke Bildviertel (achte dabei auf die Mauskoordinaten !!! ) unter dem Namen puzz1.gif
- Verfahre genauso mit den drei übrigen Vierteln.
- Beschrifte die 4 Bilder puzz1.gif bis puzz4.gif mit den Buchstaben A bis D. Alle vier sollten die Größe 100x100 Pixel haben!
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:
- Button=0: keine Taste
- Button=1: linke Taste
- Button=2: rechte Taste
- Button=4: mittlere Taste
- Shift=0: keine Zusatz-Taste
- Shift=1: Maustaste mit Shift-Taste
- Shift=2: Maustaste mitCtrl-Taste
- Shift=4: Maustaste mit Alt-Taste
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:
- 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.
- 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.
- 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!