Differenze tra le versioni di "Inserire un Oggetto grafico su una MapView"

Da Gambas-it.org - Wikipedia.
(Creata pagina con "E' possibile mostrare su una ''MapView'' un Oggetto grafico da utilizzare eventualmente durante la visione della mappa. Il predetto ''Controllo'' grafico deve in realtà esse...")
 
Riga 4: Riga 4:
 
<BR>Come si sa, la ''MapView'' possiede un proprio "Figlio", che è un Oggetto ''Panel'', il quale a sua volta possiede un Oggetto "Figlio", che è appunto una ''DrawingArea'', utilizzata per mostrare la mappa prescelta.
 
<BR>Come si sa, la ''MapView'' possiede un proprio "Figlio", che è un Oggetto ''Panel'', il quale a sua volta possiede un Oggetto "Figlio", che è appunto una ''DrawingArea'', utilizzata per mostrare la mappa prescelta.
  
Se il ''Controllo'' grafico da far mostrare fosse attribuito, come ulteriore "Figlio" alla ''MapView'' o al ''Panel'', la sua dimensione assumerebbe interamente quella della ''MapView'', evidentemente sottoposto all'effetto ".Fill" della Proprietà ".Arrangement" del ''Panel''.
+
Se il ''Controllo'' grafico, da far mostrare, fosse attribuito, come ulteriore "Figlio" alla ''MapView'' o al ''Panel'', la sua dimensione assumerebbe interamente quella della ''MapView'', evidentemente sottoposto all'effetto ".Fill" della Proprietà ".Arrangement" del ''Panel''.
 
<BR>Pertanto il "Parent" dell'Oggetto grafico da far mostrare sulla ''MapView'' dovrà essere la ''DrawingArea'' meglio sopra specificata.
 
<BR>Pertanto il "Parent" dell'Oggetto grafico da far mostrare sulla ''MapView'' dovrà essere la ''DrawingArea'' meglio sopra specificata.
  
Riga 64: Riga 64:
 
  '''End'''
 
  '''End'''
 
   
 
   
  '''Public''' Sub DrawingArea1_MouseWheel()
+
  '''Public''' Sub MapView1_MouseWheel()
 
   
 
   
   Dim rs As Byte = (LATO * MapView1.Map.Zoom) / 18
+
   Dim rs As Byte = (LATO * MapView1.Map.Zoom) / 15
 
   
 
   
 
   tb.Resize(rs, rs)
 
   tb.Resize(rs, rs)

Versione delle 20:39, 7 gen 2022

E' possibile mostrare su una MapView un Oggetto grafico da utilizzare eventualmente durante la visione della mappa.

Il predetto Controllo grafico deve in realtà essere posto sulla DrawingArea, "Figlia" indiretta della MapView.
Come si sa, la MapView possiede un proprio "Figlio", che è un Oggetto Panel, il quale a sua volta possiede un Oggetto "Figlio", che è appunto una DrawingArea, utilizzata per mostrare la mappa prescelta.

Se il Controllo grafico, da far mostrare, fosse attribuito, come ulteriore "Figlio" alla MapView o al Panel, la sua dimensione assumerebbe interamente quella della MapView, evidentemente sottoposto all'effetto ".Fill" della Proprietà ".Arrangement" del Panel.
Pertanto il "Parent" dell'Oggetto grafico da far mostrare sulla MapView dovrà essere la DrawingArea meglio sopra specificata.

Mostriamo un possibile codice, commentato, con il quale si imposterà un ToggleButton in prossimità del "Colosseo" in Roma, premendo sul quale verrà riprodotto un file audio, il percorso del quale si dovrà avere cura di impostare nella Costante "PERCORSO_FILE_AUDIO".

Private tb As ToggleButton
Private Const LATO As Byte = 25
Private Const PERCORSO_FILE_AUDIO As String = "/percorso/del/file/audio"
Private mptb As MapPoint
Private ob As Object


Public Sub Form_Open()

 Dim mp As New MapPoint(41.89018, 12.49230)
 Dim pn As Panel
 Dim pt As Point
 
 With MapView1.Map
  .AddTile("GoogleMap", "https://mt0.google.com/vt/lyrs=s&hl=&x={x}&y={y}&z={z}")
  .Zoom = 15
' Imposta il centro della mappa visibile all'apertura iniziale:
  .Center = mp
  pt = New Point(.MapPointToPixelRel(mp).X, .MapPointToPixelRel(mp).Y)
End With 
 
' Attribuisce il Controllo grafico "ToggleButton" al "Panel" ("Figlio" della "MapView"), per impedire che si espanda alla dimensione della "MapView":
 pn = MapView1.Children[0]
 With tb = New ToggleButton(pn.Children[0]) As "Audio"
' Posiziona il "ToggleButton" nei pressi di determinate coordinate geografiche, trasformate adeguatamente in coordinate dell'Oggetto "DrawingArea" (ossia: "pn.Children[0]"), della quale il "ToggleButton" è "Figlio":
   .X = pt.X
   .Y = pt.Y
   .W = LATO
   .H = LATO
   .Text = "Mus"
   .Tooltip = "Ascolta la musica"
 End With

 mptb = MapView1.Map.PixelToMapPointRel(pt)

End

Public Sub MapView1_MouseDown()

 Dim mp As MapPoint = MapView1.Map.PixelToMapPointRel(Point(Mouse.X, Mouse.Y))

' Mostra le coordinate geografiche correnti del puntatore del Mouse sul bordo superiore della "MapView":
 Me.Text = Format(mp.Lat, "#.000000") & "    " & Format(mp.Lon, "#.000000")

End

' Fa sì che, anche se si sposta la Mappa con il mouse, il "Button" si mostri solo alle sue coordinate geografiche prestabilite.
' Se l'istruzione viene posta invece all'interno di un Evento del "Form", l'Oggetto "Rect" non acquisirà le predette coordinate.
Public Sub MapView1_Draw()

 With MapView1.Map
   tb.Move(.MapPointToPixelRel(mptb).X, .MapPointToPixelRel(mptb).Y)
 End With 

End

Public Sub MapView1_MouseWheel()

 Dim rs As Byte = (LATO * MapView1.Map.Zoom) / 15

 tb.Resize(rs, rs)

End

Public Sub Audio_Click()

 If Not tb.Value Then 
' Se, dopo aver avviato l'esecuzione audio, si preme nuovamente il "ToggleButton", l'esecuzione viene terminata:
   Object.Call(ob, "Close", Null)
   ob = Null
   Return 
 Endif

 Dim cl As Class

' Si è deciso di non caricare preliminarmente dall'IDE di Gambas il Componente "gb.media", bensì ora da codice:
 Component.Load("gb.media")
 cl = Class.Load("MediaPlayer")

 ob = cl.New()

' Carica il file audio:
 Object.SetProperty(ob, "Url", Object.Call(Class.Load("Media"), "URL", [PERCORSO_FILE_AUDIO]))

 Object.Call(ob, "Play", Null)

 Wait Object.GetProperty(ob, "Duration")

 Object.Call(ob, "Close", Null)

End