Gambas: Maus
zurück zu Gambas
Wie man MouseDown, MouseMove und MouseUp benutzt
[Bearbeiten]Wenn die linke Maustaste gedrückt wird, dann wird ein mousemove-Ereignis in regelmäßigen Abständen gestartet .
Das Programm
Holen Sie sich eine neue Form und benennen Sie diese als Fmaus. Deklarieren Sie diese als Startform.
Holen Sie sich aus der Werkzeugkiste 3 Malfelder ( Drawingarea ) und benennen Sie diese in den Eigenschaften ( = Properties) in da1, da2 und da3 um. Kopieren Sie sich den unten angegebenen Code und Compilieren Sie das Programm. Läuft es ? Falls ja experimentieren Sie etwas mit der Maus und den Farben herum.
Klicken Sie in die schwarzen Felder !
Im zweiten Feld muß man die Mausetaste gedrückt halten. Im dritten Feld muss man die Mausloslassen.
Der Code:
STATIC PUBLIC SUB Main() hForm AS Fmaus hForm = NEW Fmaus hForm.show END PUBLIC SUB da1_MouseDown() Draw.Begin(da1) Draw.Ellipse(Mouse.X,Mouse.Y, 9, 9) Draw.End END PUBLIC SUB da2_MouseMove() Draw.Begin(da2) Draw.Ellipse(Mouse.X,Mouse.Y, 9, 9) Draw.End END PUBLIC SUB da3_MouseUp() Draw.Begin(da3) Draw.Ellipse(Mouse.X,Mouse.Y, 9, 9) Draw.End END
Die Koordinaten der Maus
[Bearbeiten]Folgendes Programm funktioniert nur in einem Grafikfeld ( = DrawingArea ).
Das Programm liefert fortlaufend die Koordinaten der Maus, wenn man sie auf dem Grafikfeld bewegt und die linke Maustaste gedrückt hält.
Machen Sie ein neues Projekt. Öffnen Sie eine neue Form: Mit der rechten Maus auf Form klicken. Geben Sie ihr irgendeinen Namen. Holen Sie sich eine DrawingArea = Zeichenfeld aus der Werkzeugkiste.
Holen Sie sich 2 Textboxen aus der Werkzeugkiste.
Die Form schaut dann so aus:
Kopieren Sie den Code von unten ins Programm. Starten Sie das Programm mit F5. Achten Sie auf die Farbgebung bei den Eigenschaften, sonst sehen Sie nichts. Achten Sie auch auf die Farbgebung der Form. Die Farbeigenschaften der Form werden auf die Eigenschaften der Formkomponenten übertragen.
Fahren Sie mit der Maus im Zeichenfeld umher und drücken Sie die linke Maustaste. Dann werden die Koordinaten der Maus in den Textboxen angezeigt.
Beachten Sie folgendes : die linke obere Ecke ist (0,0) , die rechte untere Ecke ist (DrawingArea1.Width, DrawingArea1.Height )
Der neue Code:
PUBLIC SUB DrawingArea1_MouseMove() Textbox1.text = Mouse.X Textbox2.text = Mouse.Y END
Wie erhält man Absolute Koordinaten ?
Der alte Code: Gambas älter als 0.65
PUBLIC SUB DrawingArea1_MouseMove(X AS Integer, Y AS Integer, Button AS Integer) Textbox1.text = X Textbox2.text = Y END
Drag and Drop , Nehmen und Ziehen mit der Maus.
[Bearbeiten]Das Programm zeigt die Drag und Drop eigenschaft. Man zieht ein Bild mit der Maus auf der Form hin- und her solange man die linke Maustaste betätigt.
Das Programm funktioniert mit einem Bildfeld ( = Image ). Man kann aber auch andere Objekte auf diesselbe Art verschieben.
Machen Sie ein neues Projekt. Öffnen Sie eine neue Form: Mit der rechten Maus auf Form klicken. Geben Sie ihr irgendeinen Namen. Holen Sie sich mit F6 ein Image = Bild aus der Werkzeugkiste und belassen Sie den Namen als Image1 .
Die Form schaut dann so aus:
Kopieren Sie den Code von unten ins Programm. Starten Sie das Programm mit F5. Achten Sie auf die Farbgebung bei den Eigenschaften, sonst sehen Sie nichts. Achten Sie auch auf die Farbgebung der Form. Die Farbeigenschaften der Form werden auf die Eigenschaften der Formkomponenten übertragen.
Fahren Sie mit der Maus im Zeichenfeld umher und drücken Sie die linke Maustaste. Dann wird das Bildfeld entsprechend den Koordinaten der Maus verschoben.
Der Code:
PUBLIC SUB Form_MouseMove() Image1.X = Mouse.X Image1.Y = Mouse.Y END
Wenn Sie wollen , dass das Bild bereits beim ersten Mouseklick zur Maus springt, dann fügen Sie noch folgenden Code ein:
PUBLIC SUB Form_MouseDown() Image1.X = Mouse.X Image1.Y = Mouse.Y END
alter Code
PUBLIC SUB Form_MouseMove(X AS Integer, Y AS Integer, Button AS Integer) Image1.X = X Image1.Y = Y END
Maustasten abfragen
[Bearbeiten]Im folgenden Programm wird die linke Maustaste abgefragt. Wird sie gedrückt , dann malt die Maus eine runde Form. Wird die rechte Taste gedrückt, wird eine rechteckige Form zum Malen benutzt.
Sie brauchen ein Zeichenfeld ( Drawingarea) auf Ihrer Form, um das Programm in Gang zu bringen.
PUBLIC SUB Form_Open() DrawingArea1.Cached = FALSE DrawingArea1.BackColor = &HFFFFFF& 'weisser Hintergrund END PUBLIC SUB DrawingArea1_MouseMove() IF Mouse.Button = 1 THEN Draw.Begin(DrawingArea1) Draw.Ellipse(Mouse.X, Mouse.Y, 9, 9) Draw.End ELSE Draw.Begin(DrawingArea1) Draw.Rect(Mouse.X, Mouse.Y, 9, 9) Draw.End ENDIF END
Eine andere Cursorform über die Eigenschaften festlegen
[Bearbeiten]Man kann die Form des Mauszeigers ( Cursor) bei den Eigenschaften einiger Steuerelemente festlegen. Nimmt man eine leere Form und schaut sich deren Eigenschaften mit der F4 Taste an, dann findet sich dort in der Mitte der Eigenschaftstabelle eine Zeile mit der Bezeichnung Mouse. Clickt man diese Zeile im rechten Teil an , dann erhält man eine Auswahl von verschiedenen Mouseformen:
- Arrow
- Blank
- Cross
- Custom
- Default
- Horizontal
- Pointing
- SizeAll
- SizeE
- SizeH
- SizeN
- SizeNE
- SizeNESW
- SizeNW
- SizeNWSE
- SizeS
- SizeSE
- SizeSW
- SizeV
- SizeW
- SplitH
- SplitV
- Text
- Vertical
- Wait
Probieren Sie verschiedene Mouseformen aus und starten Sie Ihr Programm einfach mit F5, dann sehen Sie die gewählte Mauszeigerform.
Über einigen Steuerelementen läßt sich die Zeigerform wieder neu wählen oder sie ist bereits voreingestellt.
Sie können den Mauszeiger auch in ihrem Programmablauf ändern. Wie das geht zeigt folgendes Programm: Sie brauchen eine Form und 2 Befehlsknöpfe, um es in Gang zu bringen.
PUBLIC SUB Button1_Click() Form1.Mouse = Mouse.Wait END PUBLIC SUB Button2_Click() Form1.Mouse = Mouse.Pointing END
Die Zufallsmaus
[Bearbeiten]Sie können die ganzen Mauszeigerformen anschauen , wenn Sie einmal folgendes Programm ausprobieren.
Um es in Gang zu bringen brauchen Sie nur einen Timer ( Taktgeber) auf Ihrer Form.
PUBLIC SUB Form_Open() timer1.Enabled = TRUE timer1.Delay = 300 END PUBLIC SUB Timer1_Timer() x AS Integer Mouse AS Integer Randomize x = Int(Rnd(1,15)) form1.Mouse = x - 2 END
Bereits beim starten des Programmes wird der Timer angeschaltet und seine Zeitverzögerung ( Delay ) auf einen mittleren Wert von 300 eingestellt. Im Unterprogramm des Timers werden Zufallszahlen zwischen 1 und 15 erzeugt. Diese Zufallszahlen werden der Eigenschaft des Mauszeigers zugeordnet. Deswegen variiert die Mausform alle möglichen Formen per Zufall durch. Die Eigenschaften der Maus finden Sie unter der Gambas Komponente Gb.QT .
Stört Sie der Zufall im obigen Programm. Dann probieren Sie einmal folgende Variante:
PUBLIC SUB Button1_Click() x AS Integer Mouse AS Integer FOR x = -1 TO 13 form1.Mouse = x WAIT 0.5 Button1.Text = "Maus" & Str(x) NEXT END
In diesem Programm werden alle Mausformen mit einer Verzögerung von einer halben Sekunde ( Wait 0.5) durchprobiert. Um das Programm in Gang zu bringen brauchen Sie eine Form und einen Befehlsbutton.
Die Zeigerform der Maus kann über folgende konstanten Werte festgelegt werden, wenn man die Mauseigenschaft mit
Mouse AS Integer
definiert.
- Default = -1
- Arrow = 0
- Cross = 2
- Wait = 3
- Text = 4
- SizeS = 5
- SizeE = 6
- SizeNESW = 7
- SizeNWSE = 8
- SizeAll = 9
- Blank = 10
- SplitV = 11
- SplitH = 12
- Pointing = 13
Ein anderes Cursorbild mit dem Cursorbefehl
[Bearbeiten]Man kann mit dem Befehl Cursor dem Cursor ein neues Symbol zuordnen. Wie das geht soll das folgende Beispielprogramm zeigen.
PUBLIC SUB Form_Open() hPict AS Picture hCursor AS Cursor hPict = Picture["neuerpfeil.png"] hCursor = NEW Cursor(hPict) ME.Cursor=hCursor END
Die Bilddatei neuerpfeil.png müssen sie mit einem Malprogramm neu erstellen und im Verzeichnis abspeichern, in dem auch ihr Gambasprogramm steht. Fehlt die Bilddatei, dann ergibt das eine Fehlermeldung Null objekt , da das zu ladenden Bildobjekt für die Klasse Cursor fehlt.
Theorie
[Bearbeiten]Hinter dem Befehl Cursor steht eine Klasse , in die ein beliebiges Bild als Mauszeiger geladen werden kann. Die Klasse ist zur Laufzeit erzeugbar. Dies wird auch im obigen Beispielprogramm so gehandhabt. Mit dem Befehl wird ein neuer Cursor aus einem Picture Objekt erzeugt. Die Mausspitze kann man genauer definieren, im allgemeinen wird die linke obere Ecke des Mausbildes herangezogen.
Die Syntax für den Cursor lautet dann:
hCursor = NEW Cursor ( Picture AS Picture [ , X AS Integer, Y AS Integer ] )
X und Y sind die Koordinaten der Mausspitze ( Hot spot)
Frage
[Bearbeiten]Wie kann man den Mauszeiger zur Uhrform ( busy or wait = Warten ) und zurück verändern ?
Lösung:
ME.Mouse = Mouse.Wait ... ME.Mouse = Mouse.Normal