Gambas: Maus

Aus Wikibooks


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