El ratón y Small Basic

Como hemos visto en la librería GraphicsWindow tenemos unas propiedades para saber donde está el ratón en base a las coordenadas de la ventana, pero tan solo eso, no sabemos si hemos pulsado un botón, ni tenemos la opción de poder ocultar el cursor para utilizar nosotros otro en la aplicación con alguna imagen, ¿verdad? Pues por eso existe la librería Mouse en Small Basic, que nos pone a nuestro alcance nuevas propiedades y operaciones para darle un mejor uso en nuestros programas:

  • IsLeftButtonDown: Permite obtener si el botón izquierdo del ratón está pulsado (“True”) o no (“False”).
  • IsRightButtonDown: Permite obtener si el botón derecho del ratón está pulsado (“True”) o no (“False”).
  • MouseX: Permite obtener y cambiar la posición global del ratón en la coordenada X. No es lo mismo que la posición local que GraphicsWindow.MouseX nos da.
  • MouseY: Permite obtener y cambiar la posición global del ratón en la coordenada Y. No es lo mismo que la posición local que GraphicsWindow.MouseY nos da.
  • HideCursor(): Esconde el cursor del ratón.
  • ShowCursor(): Muestra el cursor del ratón.

Y aquí tenemos un ejemplo donde utilizaremos el ratón para mover un cuadrado por la ventana, haciendo click sobre este ítem cuando lo queramos arrastrar:

'----------------------------------------------------
' Prueba con el ratón
'----------------------------------------------------
GraphicsWindow.Title = "Prueba con el ratón"
GraphicsWindow.BackgroundColor = "White"
'----------------------------------------------------
isMovingBox = "False"
size = 42
sep = size / 2
'----------------------------------------------------
x = GraphicsWindow.Width / 2 - sep
y = GraphicsWindow.Height / 2 - sep
GraphicsWindow.PenColor = "Black"
GraphicsWindow.BrushColor = "SteelBlue"
square = Shapes.AddRectangle(42, 42)
Shapes.Move(square, x, y)
'----------------------------------------------------
GraphicsWindow.KeyDown = OnKeyDown
GraphicsWindow.MouseMove = OnMouseMove
GraphicsWindow.MouseDown = OnMouseDown
GraphicsWindow.MouseUp = OnMouseUp
'----------------------------------------------------
Sub OnKeyDown
  If GraphicsWindow.LastKey = "S" Then
    Mouse.ShowCursor()
  ElseIf GraphicsWindow.LastKey = "H" Then
    Mouse.HideCursor()
  ElseIf GraphicsWindow.LastKey = "Up" Then
    Mouse.MouseY = Mouse.MouseY - 10
  ElseIf GraphicsWindow.LastKey = "Down" Then
    Mouse.MouseY = Mouse.MouseY + 10
  ElseIf GraphicsWindow.LastKey = "Left" Then
    Mouse.MouseX = Mouse.MouseX - 10
  ElseIf GraphicsWindow.LastKey = "Right" Then
    Mouse.MouseX = Mouse.MouseX + 10
  EndIf
EndSub
'----------------------------------------------------
Sub OnMouseMove
  If isMovingBox Then
    x = GraphicsWindow.MouseX - distx
    y = GraphicsWindow.MouseY - disty
    Shapes.Move(square, x, y)
  EndIf
EndSub
'----------------------------------------------------
Sub OnMouseDown
  If Mouse.IsLeftButtonDown Then
    ActivateMove()
  ElseIf Mouse.IsRightButtonDown Then
    endl = Text.GetCharacter(13)
    endl = endl + Text.GetCharacter(10)
    aux = "Global mouse coords"+endl
    aux = aux+"X = "+Mouse.MouseX+endl
    aux = aux+"Y = "+Mouse.MouseY+endl
    aux = aux+"Local mouse coords" + endl
    aux = aux+"X = "+GraphicsWindow.MouseX+endl
    aux = aux+"Y = "+GraphicsWindow.MouseY
    GraphicsWindow.ShowMessage(aux, "Mouse Info")
  EndIf
EndSub
'----------------------------------------------------
Sub ActivateMove
  x1 = Shapes.GetLeft(square)
  y1 = Shapes.GetTop(square)
  x2 = x1 + size
  y2 = y1 + size
  mx = GraphicsWindow.MouseX
  my = GraphicsWindow.MouseY
  If x1<=mx And mx<=x2 And y1<=my And my<=y2 Then
    distx = mx - x1
    disty = my - y1
    isMovingBox = "True"
  EndIf
EndSub
'----------------------------------------------------
Sub OnMouseUp
  isMovingBox = "False"
EndSub

Escribe un comentario

Tienes que iniciar sesión para escribir un comentario.