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

Da Gambas-it.org - Wikipedia.
Riga 7: Riga 7:
 
<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.
  
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 (o anche MIDI, volendo), il percorso del quale si dovrà avere cura di impostare nella Costante "PERCORSO_FILE_AUDIO".
+
===Codice per eseguire un file audio o Midi===
 +
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 o MIDI, il percorso del quale si dovrà avere cura di impostare nella Costante "PERCORSO_FILE_AUDIO".
 
  Private MapView1 As MapView
 
  Private MapView1 As MapView
 
  Private Const ZOOM As Byte = 14
 
  Private Const ZOOM As Byte = 14
Riga 107: Riga 108:
 
   
 
   
 
   Object.Call(ob, "Close", Null)
 
   Object.Call(ob, "Close", Null)
 +
 +
'''End'''
 +
 +
 +
===Codice per eseguire un file video===
 +
Mostriamo il codice, simile al precedente, con il quale potrà eseguire un file video che sarà mostrato presso il ''ToggleButton''.
 +
Private MapView1 As MapView
 +
Private Const ZOOM As Byte = 14
 +
Private tb As ToggleButton
 +
Private Const COEFFICIENTE As Byte = 50
 +
Private Const PERCORSO_FILE_VIDEO As String = "<Font Color=gray>''/percorso/del/file/audio''</font>"
 +
Private mptb As MapPoint
 +
Private pn As Panel
 +
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 Me
 +
    .W = Screen.AvailableWidth
 +
    .H = Screen.AvailableHeight
 +
    .Arrangement = Arrange.Fill
 +
  End With
 +
  With MapView1 = New MapView(Me) As "MapView1"
 +
    .Map.AddTile("GoogleMap", "https&#058;//mt0.google.com/vt/lyrs=s&hl=&x={x}&y={y}&z={z}")
 +
    .Map.Zoom = ZOOM
 +
    .Map.Center = mp
 +
    pt = New Point(.Map.MapPointToPixelRel(mp).X, .Map.MapPointToPixelRel(mp).Y)
 +
  End With
 +
 +
  pn = MapView1.Children[0]
 +
 +
  With tb = New ToggleButton(pn.Children[0]) As "Audio"
 +
    .X = pt.X
 +
    .Y = pt.Y
 +
    .W = COEFFICIENTE <Font Color=darkgreen>* CSingle(1.2 ^ (MapView1.Map.Zoom - ZOOM))</font>
 +
    .H = .W * 0.5
 +
    .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))
 +
 +
  Me.Text = Format(mp.Lat, "#.000000") & "    " & Format(mp.Lon, "#.000000")
 +
 +
'''End'''
 +
 +
'''Public''' Sub MapView1_Draw()
 +
 +
  With MapView1.Map
 +
    tb.Move(.MapPointToPixelRel(mptb).X, .MapPointToPixelRel(mptb).Y)
 +
  End With
 +
 +
'''End'''
 +
 +
'''Public''' Sub MapView1_MouseWheel()
 +
 +
  tb.Resize(COEFFICIENTE <Font Color=darkgreen>* CSingle(1.2 ^ (MapView1.Map.Zoom - ZOOM))</font>, COEFFICIENTE * 0.5 <Font Color=darkgreen>* CSingle(1.2 ^ (MapView1.Map.Zoom - ZOOM))</font>)
 +
 +
'''End'''
 +
 +
'''Public''' Sub Audio_Click()
 +
 +
  If Not tb.Value Then
 +
    Object.Call(ob, "Close", Null)
 +
    ob = Null
 +
    Return
 +
  Endif
 +
 +
  Dim cl As Class
 +
 +
  Component.Load("gb.media")
 +
  cl = Class.Load("MediaPlayer")
 +
 +
  ob = cl.New()
 +
 +
  With Object
 +
    .Attach(ob, Me, "Oggetto")
 +
    .SetProperty(ob, "Url", Object.Call(Class.Load("Media"), "URL", [PERCORSO_FILE_VIDEO]))
 +
<Font Color=gray>' ''Imposta i "Controllo" (la "DrawingArea" 'Figlia del "Panel"), ove sarà mostrato il video:''</font>
 +
    .Call(ob, "SetWindow", [pn.Children[0], tb.X + tb.w, tb.Y + tb.H, 150, 100])
 +
    .Call(ob, "Play", Null)
 +
  End With
 +
<Font Color=gray>' ''Carica il file video:''</font>
 +
 +
'''End'''
 +
 +
'''Public''' Sub Oggetto_End()
 +
 +
  Object.Call(ob, "Close", Null)
 +
  tb.Value = False
 +
  MapView1.Refresh
 
   
 
   
 
  '''End'''
 
  '''End'''

Versione delle 14:21, 4 giu 2023

E' possibile mostrare su una MapView un Oggetto grafico (un Controllo: "Button", "Label", etc) 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.

Codice per eseguire un file audio o Midi

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 o MIDI, il percorso del quale si dovrà avere cura di impostare nella Costante "PERCORSO_FILE_AUDIO".

Private MapView1 As MapView
Private Const ZOOM As Byte = 14
Private tb As ToggleButton
Private Const COEFFICIENTE As Byte = 50
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 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 = ZOOM
' Imposta il centro della mappa visibile all'apertura iniziale:
   .Map.Center = mp
   pt = New Point(.Map.MapPointToPixelRel(mp).X, .Map.MapPointToPixelRel(mp).Y)
End With 

' Individua dapprima l'Oggetto "Figlio" della "MapView", che è un "Panel":
 pn = MapView1.Children[0]

' Attribuisce il Controllo grafico "ToggleButton" all'Oggetto "Figlio" (una "DrawingArea") del predetto "Panel", per impedire che altrimenti si espanda alla dimensione della "MapView":
 With tb = New ToggleButton(pn.Children[0]) As "Audio"
' Posiziona il "ToggleButton" nei pressi di determinate coordinate geografiche, trasformate adeguatamente in coordinate x,y dell'Oggetto "DrawingArea" (ossia: "pn.Children[0]"), del quale il "ToggleButton" è ormai "Figlio":
   .X = pt.X
   .Y = pt.Y
' Imposta la formula per proporzionare la lunghezza del "ToggleButton" rispetto al valore dello zoom corrente:
   .W = COEFFICIENTE * CSingle(1.2 ^ (MapView1.Map.Zoom - ZOOM))
   .H = .W * 0.5
   .Text = "Mus"
   .Tooltip = "Ascolta la musica"
 End With

' Converte le coordinate x,y del "Controllo" ("ToggleButton") in coordinate geografiche e le assegna a una viariabile di tipo "MapPoint":
 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

' Questo Evento garantisce che, sia all'apertura iniziale della mappa, sia in caso di spostamento la Mappa con il mouse, il "Button" si mostri solo e sempre alle sue coordinate geografiche prestabilite.
' Infatti, se l'istruzione viene posta invece all'interno di un qualsiasi 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()

' Imposta la formula per proporzionare la dimensione del "ToggleButton" rispetto al valore dello zoom corrente:
 tb.Resize(COEFFICIENTE * CSingle(1.2 ^ (MapView1.Map.Zoom - ZOOM)), COEFFICIENTE * 0.5 * CSingle(1.2 ^ (MapView1.Map.Zoom - ZOOM)))

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


Codice per eseguire un file video

Mostriamo il codice, simile al precedente, con il quale potrà eseguire un file video che sarà mostrato presso il ToggleButton.

Private MapView1 As MapView
Private Const ZOOM As Byte = 14
Private tb As ToggleButton
Private Const COEFFICIENTE As Byte = 50
Private Const PERCORSO_FILE_VIDEO As String = "/percorso/del/file/audio"
Private mptb As MapPoint
Private pn As Panel
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 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 = ZOOM
   .Map.Center = mp
   pt = New Point(.Map.MapPointToPixelRel(mp).X, .Map.MapPointToPixelRel(mp).Y)
 End With 

 pn = MapView1.Children[0]

 With tb = New ToggleButton(pn.Children[0]) As "Audio"
   .X = pt.X
   .Y = pt.Y
   .W = COEFFICIENTE * CSingle(1.2 ^ (MapView1.Map.Zoom - ZOOM))
   .H = .W * 0.5
   .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))

 Me.Text = Format(mp.Lat, "#.000000") & "    " & Format(mp.Lon, "#.000000")

End

Public Sub MapView1_Draw()

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

End

Public Sub MapView1_MouseWheel()

 tb.Resize(COEFFICIENTE * CSingle(1.2 ^ (MapView1.Map.Zoom - ZOOM)), COEFFICIENTE * 0.5 * CSingle(1.2 ^ (MapView1.Map.Zoom - ZOOM)))

End

Public Sub Audio_Click()

 If Not tb.Value Then 
   Object.Call(ob, "Close", Null)
   ob = Null
   Return 
 Endif

 Dim cl As Class

 Component.Load("gb.media")
 cl = Class.Load("MediaPlayer")

 ob = cl.New()

 With Object
   .Attach(ob, Me, "Oggetto")
   .SetProperty(ob, "Url", Object.Call(Class.Load("Media"), "URL", [PERCORSO_FILE_VIDEO]))
' Imposta i "Controllo" (la "DrawingArea" 'Figlia del "Panel"), ove sarà mostrato il video:
   .Call(ob, "SetWindow", [pn.Children[0], tb.X + tb.w, tb.Y + tb.H, 150, 100])
   .Call(ob, "Play", Null)
 End With
' Carica il file video:

End

Public Sub Oggetto_End()

 Object.Call(ob, "Close", Null)
 tb.Value = False
 MapView1.Refresh

End