User Tools

Site Tools


k14:k14.2:k14.2.2:start

14.2.2 Mouse and events

Mouse events are events that refer to events of visible control elements (components) associated with the mouse. This means that you can only use the mouse object in connection with an event that refers to such mouse events:

Public Sub Form_Open()
  Print Mouse.X
End ' Form_Open()

The above instruction to display the value of Mouse.X in a console therefore produces the error message: No mouse event data. Understandable, because the procedure Form_Open() has nothing to do with the mouse.

The following section of the source code is correct:

Public Sub Form_MouseDown() ' MouseDown() is a mouse event
  Print Mouse.X
End

In this way, the system determines internally in Gambas components and complex control elements such as a drawing area and other containers which (logical) sub-element of the container was clicked on. Mouse. X is compared with the absolute position of the container plus the relative position of the sub-element to its container, and the overview of events in a class captures all events related to the mouse - even if this is not immediately apparent from the name of some events:

  • MouseDown, MouseUp, MouseMove
  • Enter, Leave
  • MouseWheel, MouseDrag, Drag, Drag, DragLeave, DragMove

The events of the last line are listed here and described in detail in other chapters (→ chapter 14.2.3 MouseWheel).

14.2.2.1 Examples 1-3

These procedures show you how to use selected events - MouseWheel, MouseDown, MouseUp and MouseMove - for 3 different components:

Public Sub dwgKS1_MouseWheel()
 
If Mouse.Delta = +1 Then ' Mouse wheel forward? Enlarge picture (free definition)
     If fZoom < 300 Then
        fZoom = fZoom + 5
        KS_RP_G_Zeichnen() ' Zeichnen von Koordinatensystem, Raster und Graph der Funktion
     Endif
  Else
     If fZoom > 20 Then
        fZoom = fZoom - 5
        KS_RP_G_Zeichnen()
     Endif
  Endif ' Mouse.Delta = +1 ?
 
End

The 'Control_MouseWheel()' event exists for selected components. This event is triggered when the mouse wheel is moved or pressed while the mouse cursor is over the component. The event returns the value Mouse.Delta of type Float. The value is +1 if the mouse wheel has been turned forwards.

As an alternative to IF Mouse.Delta = +1 THEN… you can also use IF Mouse.Forward THEN… as an alternative to IF Mouse.

PUBLIC SUB Form_MouseDown()   
  IF Mouse.Left THEN 
     iDeltaX = Mouse.X 
     iDeltaY = Mouse.Y 
  ENDIF ' Mouse.Left ?
END ' Form_MouseDown()
 
Public Sub btnGetInformation_MouseUp()
  Timer1.Stop
End ' btnGetInformation_MouseUp()
 
PUBLIC SUB Form_MouseMove() 
  IF Mouse.Left THEN 
     FMain.Move(FMain.X - iDeltaX + Mouse.X, FMain.Y - iDeltaY + Mouse.Y) 
  ENDIF ' Left mouse button pressed during mouse movement?
END ' Form_MouseMove() 

14.2.2.2 Example 4 - Use of mouse and special keys

Since the component WebView1 (gb.qt4.webkit) already uses the mouse wheel to scroll vertically through the web page, the zoom function had to be switched on or off with a switch in order to be able to work with the event MouseWheel(). The control key (Ctrl, Ctrl) is used as a switch. The event component_MouseWheel () refers to the WebView component mentioned above. The zoom factor is only changed if the CTRL key is held down at the same time as the mouse wheel is turned, otherwise the original scroll function for the content of the web page would be active:

[1] Public Sub WebView1_MouseWheel()
[2]   If Mouse.Control Then ' CTRL key (additional) pressed?
[3]      Select Case Mouse.Delta
[4]      Case -1
[5]         If WebView1.Zoom < 2.26 Then
[6]            WebView1.Zoom = Round(WebView1.Zoom - Mouse.Delta / 4, -2)
[7]         Endif
[8]      Case +1
[9]         If WebView1.Zoom > 0.61
[10]            WebView1.Zoom = Round(WebView1.Zoom - Mouse.Delta / 10, -2)
[11]         Endif
[12]      End Select
[13]   Endif ' Mouse.Control = True?
[14] End ' WebView1_MouseWheel()

You can use the Mouse.Middle property to determine whether the middle mouse button - the mouse wheel - was pressed over a component.

[1] Public Sub WebView1_MouseDown()
[2]   If Mouse.Middle Then WebView1.Zoom = 1
[3] End ' WebView1_MouseDown()

Download

14.2.2 Maus und Ereignisse

Unter Maus-Ereignissen sind jene Ereignisse (Events) aufzufassen, die sich auf Ereignisse sichtbarer Steuerelemente (Komponenten) im Zusammenhang mit der Maus beziehen. Damit können Sie das Mouse-Objekt nur im Zusammenhang mit einem Event benutzen, das sich auf solche Maus-Ereignisse bezieht:

Public Sub Form_Open() ' Open() hat nichts mit der Maus zu tun...
  Print Mouse.X
End ' Form_Open()

Die o.a. Anweisung, den Wert von Mouse.X in einer Konsole anzuzeigen, bringt daher die Fehlermeldung: No mouse event data. Verständlich, denn die Prozedur Form_Open() hat nichts mit der Maus zu tun.

Der folgende Quelltext-Ausschnitt dagegen ist korrekt:

Public Sub Form_MouseDown() ' MouseDown() ist ein Maus-Event
  Print Mouse.X
End  ' Form_Open()

Auf diese Weise wird intern in Gambas-Komponenten und komplexen Steuerelementen wie zum Beispiel einer DrawingArea und anderen Containern ermittelt, auf welches (logische) Sub-Element des Containers geklickt wurde. Mouse.X wird dabei mit der absoluten Position des Containers zuzüglich der relativen Position des Sub-Elements zu seinem Container verglichen. Die Übersicht zu den Ereignissen in einer Klasse, erfasst alle Ereignisse, die im Zusammenhang mit der Maus stehen – auch wenn das bei einigen Ereignissen aus der Bezeichnung nicht unmittelbar abzulesen ist:

  • MouseDown, MouseUp, MouseMove
  • Enter, Leave
  • MouseWheel, MouseDrag, Drag, DragLeave, DragMove

Die Ereignisse der letzten Zeile werden hier nur aufgezählt und in anderen Kapiteln (→ Kapitel 14.2.3 MouseWheel) ausführlich beschrieben.

14.2.2.1 Beispiele 1-3

Diese Prozeduren zeigen Ihnen den Einsatz ausgewählter Ereignisse – MouseWheel, MouseDown, MouseUp sowie MouseMove – für 3 unterschiedliche Komponenten:

Public Sub dwgKS1_MouseWheel()
 
If Mouse.Delta = +1 Then ' Mausrad nach vorn → Bild vergrößern (freie Festlegung)
     If fZoom < 300 Then
        fZoom = fZoom + 5
        KS_RP_G_Zeichnen() ' Zeichnen von Koordinatensystem, Raster und Graph der Funktion
     Endif
  Else
     If fZoom > 20 Then
        fZoom = fZoom - 5
        KS_RP_G_Zeichnen()
     Endif
  Endif ' Mouse.Delta = +1 ?
 
End ' dwgKS1_MouseWheel()

Für ausgewählte Komponenten existiert das Ereignis 'Control_MouseWheel()'. Dieses Ereignis wird ausgelöst, wenn das Mausrad bewegt wird oder das Mausrad gedrückt wird, solange sich der Maus-Cursor über der Komponente befindet. Das Ereignis gibt den Wert Mouse.Delta vom Typ Float zurück. Der Wert ist +1, wenn das Mausrad vorwärts gedreht wurde.

Als Alternative für IF Mouse.Delta = +1 THEN … können Sie auch IF Mouse.Forward THEN … einsetzen.

PUBLIC SUB Form_MouseDown()   
  IF Mouse.Left THEN 
     iDeltaX = Mouse.X 
     iDeltaY = Mouse.Y 
  ENDIF ' Mouse.Left ?
END ' Form_MouseDown()
 
Public Sub btnGetInformation_MouseUp()
  Timer1.Stop
End ' btnGetInformation_MouseUp()
 
PUBLIC SUB Form_MouseMove() 
  IF Mouse.Left THEN 
     FMain.Move(FMain.X - iDeltaX + Mouse.X, FMain.Y - iDeltaY + Mouse.Y) 
  ENDIF ' Bei der Maus-Bewegung zusätzlich linke Maustaste gedrückt ?
END ' Form_MouseMove() 

14.2.2.2 Beispiel 4 – Einsatz von Maus und speziellen Tasten

Da die Komponente WebView1 (gb.qt4.webkit) bereits das Mausrad nutzt, um durch die Webseite vertikal zu scrollen, musste die Zoom-Funktion mit einem Schalter zu- oder abgeschaltet werden, um mit dem Ereignis MouseWheel() arbeiten zu können. Als Schalter wird als eine Möglichkeit die Steuerungstaste (Strg, Ctrl) benutzt. Das Ereignis Komponente_MouseWheel() bezieht sich auf die o.a. WebView-Komponente. Der Zoom-Faktor wird nur dann geändert, wenn gleichzeitig beim Drehen des Mausrades die Taste CTRL gedrückt gehalten wird, weil sonst die originale Scroll-Funktion für den Inhalt der Webseite aktiv wäre:

[1] Public Sub WebView1_MouseWheel()
[2]   If Mouse.Control Then ' CTRL-Taste (zusätzlich) gedrückt?
[3]      Select Case Mouse.Delta
[4]      Case -1
[5]         If WebView1.Zoom < 2.26 Then
[6]            WebView1.Zoom = Round(WebView1.Zoom - Mouse.Delta / 4, -2)
[7]         Endif
[8]      Case +1
[9]         If WebView1.Zoom > 0.61
[10]            WebView1.Zoom = Round(WebView1.Zoom - Mouse.Delta / 10, -2)
[11]         Endif
[12]      End Select
[13]   Endif ' Mouse.Control = True?
[14] End ' WebView1_MouseWheel()

Über die Eigenschaft Mouse.Middle können Sie feststellen, ob die mittlere Maustaste – das Mausrad – über einer Komponente gedrückt worden war.

[1] Public Sub WebView1_MouseDown()
[2]   If Mouse.Middle Then WebView1.Zoom = 1
[3] End ' WebView1_MouseDown()

Download

The website uses a temporary session cookie. This technically necessary cookie is deleted when the browser is closed. You can find information on cookies in our privacy policy.
k14/k14.2/k14.2.2/start.txt · Last modified: 02.07.2018 (external edit)

Page Tools