Eseguire un file audio o Midi quando si clicca sulla MapView

Da Gambas-it.org - Wikipedia.

Cliccando sulla MapView è possibile eseguire un file audio o un file Midi.
È necessario attivare anche il Componente gb.media.

Mostriamo un esempio pratico, nel quale per avviare e successivamente per arrestare l'esecuzione del file audio o MIDI, si dovrà cliccare sulla MapView con il tasto destro del mouse:

Private MapView1 As MapView
Private mpt As New MapPoint(41.89018, 12.49230)
Private mp As MediaPlayer


Public Sub Form_Open()

 With Me
   .W = Screen.AvailableWidth
   .H = Screen.AvailableHeight
   .Arrangement = Arrange.Fill
 End With

 With MapView1 = New MapView(Me) As "MapView1"
   .Map.AddTile("GoogleMap", "https://mt0.google.com/vt/lyrs=s&hl=&x={x}&y={y}&z={z}")
   .Map.Zoom = 15
   .Map.Center = mpt
 End With

' Crea un Oggetto "MediaPlayer" per eseguire l'audio:
 With mp = New MediaPlayer
  .URL = Media.URL("/percorso/del/file/audio o Midi")
' Imposta il Controllo ove cliccare per far eseguire l'audio:
  .SetWindow(MapView1)
 End With
 
End


Public Sub MapView1_MouseUp()

' Se si clicca con il tasto destro del mouse sulla mappa, si avvia l'esecuzione o l'arresto dell'audio:
 If Not Mouse.Right Then Return

 If mp.State == Media.Playing Then
   mp.Stop
   mp.Close
' Determina la pulitura della "MapView" e pertanto la cessazione dell'esecuzione del file audio o Midi:
   MapView1.Refresh
 Else
   Dim pt As New Point(Mouse.X, Mouse.Y) 
   mpt = MapView1.Map.PixelToMapPointRel(pt) 
' Imposta il Controllo "MediaPlayer", e la posizione sulla "MapView" ove si eseguirà l'audio:
   mp.SetWindow(MapView1, MapView1.Map.MapPointToPixelRel(mpt).X, MapView1.Map.MapPointToPixelRel(mpt).Y)
' Esegue il file audio o Midi:
   mp.Play()
 Endif

End

In quest'altro codice si eseguirà il file audio o il file Midi, soltanto se si cliccherà con il puntatore del mouse all'interno del cerchio disegnato sulla mappa:

Private MapView1 As MapView
Private Const RADIUS As Float = 100.0
Private mpt As New MapPoint(41.89018, 12.49230)
Private mp As MediaPlayer
Private rc As Rect


Public Sub _new()

 With Me
   .W = Screen.AvailableWidth
   .H = Screen.AvailableHeight
   .Arrangement = Arrange.Fill
 End With

 With MapView1 = New MapView(Me) As "MapView1"
   .Map.AddTile("GoogleMap", "https://mt0.google.com/vt/lyrs=s&hl=&x={x}&y={y}&z={z}")
   .Map.Zoom = 15
   .Map.Center = mpt
' Disegna infine il cerchio:
  .Map.AddShape("colosseo").AddCircle("cerchio", mpt, RADIUS, Color.Red, 1, Line.Solid, Color.Transparent)
 End With

' Crea un Oggetto "MediaPlayer" per eseguire l'audio:
 With mp = New MediaPlayer
  .URL = Media.URL("/percorso/del/file/audio o Midi")
' Imposta il Controllo ove cliccare per far eseguire l'audio:
  .SetWindow(MapView1)
 End With
 
End


Public Sub Form_Show()

' Imposta il quadrato entro il quale, se si clicca, si eseguirà l'audio:
 rc = Rect(mapView1.Map.MapPointToPixelRel(mpt).X, MapView1.Map.MapPointToPixelRel(mpt).Y, RADIUS / 2, RADIUS / 2)

End


Public Sub MapView1_MouseUp()

' Se si clicca con il tasto destro del mouse sulla mappa, si passa all'istruzione successiva:
 If Not Mouse.Right Then Return
' Se si clicca con il tasto destro del mouse all'interno del cerchio, disegnato sulla mappa, si avvia l'esecuzione o l'arresto dell'audio:
 If Not rc.Contains(Mouse.X + RADIUS / 4, Mouse.Y + RADIUS / 4) Then Return

 If mp.State == Media.Playing Then
   mp.Stop
   mp.Close
' Determina la pulitura della "MapView" e pertanto la cessazione dell'esecuzione del file audio o Midi:
   MapView1.Refresh
 Else
   Dim pt As New Point(Mouse.X, Mouse.Y) 
   mpt = MapView1.Map.PixelToMapPointRel(pt) 
' Imposta il Controllo "MediaPlayer", e la posizione sulla "MapView" ove si eseguirà l'audio:
   mp.SetWindow(MapView1, MapView1.Map.MapPointToPixelRel(mpt).X, MapView1.Map.MapPointToPixelRel(mpt).Y)
' Esegue il file audio o Midi:
   mp.Play()
 Endif

End