Differenze tra le versioni di "Attivare un Componente dinamicamente da codice"
(25 versioni intermedie di uno stesso utente non sono mostrate) | |||
Riga 4: | Riga 4: | ||
− | E' possibile, però, attivare un Componente anche ''successivamente'', in modo ''dinamico'', da codice. Per poter fare ciò, si dovrà fare uso del metodo ''.Load()'' della | + | E' possibile, però, attivare un Componente anche ''successivamente'', in modo ''dinamico'', da codice. Per poter fare ciò, si dovrà fare uso del metodo ''.Load()'' della Classe statica "Component": |
− | Component.Load("''gb.nome_del_componente''") | + | Component.Load("''gb.<FONT color=gray>nome_del_componente''</font>") |
− | + | ====Esempio==== | |
− | Si faccia, infatti, questo esempio, nel quale si dovrà far aprire un file con il suo programma di default mediante il | + | Si faccia, infatti, questo esempio, nel quale si dovrà far aprire un file con il suo programma di default mediante il Metodo ".Open()" della Classe ''Desktop''. L'applicativo nell'esempio non ha attivato il componente ''gb.desktop'', indispensabile per poter utilizzare il predetto comando: |
− | + | Desktop.Open("<FONT color=darkgreen>''/percorso/del/file/da/aprire''</font>") | |
− | Si proverà a verificare cosa succede cliccando prima sul tasto ''Button1'', e successivamente sul tasto ''Button2'': | + | previsto dall'applicativo medesimo. |
− | + | <BR>Si proverà a verificare cosa succede cliccando prima sul tasto ''Button1'', e successivamente sul tasto ''Button2'': | |
− | + | Public Sub Button1_Click() | |
− | |||
+ | <FONT color=gray>' ''Si effettua il tentativo di apertura di un file qualsiasi senza alcun tipo di attivazione del Componente "gb.desktop":''</font> | ||
+ | Desktop.Open("<FONT color=darkgreen>''/percorso/del/file/da/aprire''</font>") | ||
− | + | End | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | + | Public Sub Button2_Click() | |
− | <FONT color=gray>' ''Si procede ad attivare il | + | <FONT color=gray>' ''Si procede ad attivare il Componente Gambas "gb.desktop", per poter utilizzare la funzione "Desktop.Open()".'' |
' ''Inoltre si verificherà il suo nome, e se esso è stato effettivamente caricato:''</font> | ' ''Inoltre si verificherà il suo nome, e se esso è stato effettivamente caricato:''</font> | ||
− | + | Print "Componente \""; <FONT color=red>Component.Load</font>("gb.desktop").Name; "\" caricato: "; Component.IsLoaded("gb.desktop") | |
<FONT color=gray>' ''Quindi si effettua il tentativo di apertura di un file qualsiasi:''</font> | <FONT color=gray>' ''Quindi si effettua il tentativo di apertura di un file qualsiasi:''</font> | ||
− | + | Desktop.Open("<FONT color=darkgreen>''/percorso/del/file/da/aprire''</font>") | |
− | '''End''' | + | End |
+ | |||
+ | |||
+ | =Gestione dei Metodi e delle Proprietà posseduti da una Classe di un Componente attivato da codice= | ||
+ | ==Gestione ''diretta'' delle Proprietà e dei Metodi== | ||
+ | I Metodi e le Proprietà di una Classe appartenente ad un Componente, attivato da codice, possono essere gestiti direttamente attraverso le stesse predette risorse native della Classe. | ||
+ | <BR>Vediamo appresso un esempio (è necessario attivare dall'IDE un Componente grafico e "gb.image"): | ||
+ | Public Sub Main() | ||
+ | |||
+ | <FONT Color=gray>' ''Le Classi, appartenenti a Componenti attivati da codice, essendo "creabili", devono essere "istanziate" come tipo "Object":''</font> | ||
+ | Dim fin, mappa, mp As Object | ||
+ | |||
+ | <FONT Color=gray>' ''Attiva alcuni Componenti necessari al progetto:''</font> | ||
+ | Component.Load("gb.net") | ||
+ | Component.Load("gb.net.curl") | ||
+ | Component.Load("gb.map") | ||
+ | |||
+ | <FONT Color=gray>' ''Crea una superficie grafica di tipo della Classe "Window" (è possibile direttamente, perché essa appartiene al Componente grafico attivato dall'IDE:''</font> | ||
+ | With fin = New Window | ||
+ | .Center | ||
+ | .Y = 100 | ||
+ | .W = 500 | ||
+ | .H = 500 | ||
+ | .Show() | ||
+ | End With | ||
+ | |||
+ | <FONT Color=gray>' ''Carica una Classe appartenente al Componente "gb.map" attivato sopra dal codice:''</font> | ||
+ | mp = Class.Load("MapPoint").New([41.89018, 12.49230]) | ||
+ | |||
+ | <FONT Color=gray>' ''Carica un'altra Classe, appartenente al Componente "gb.map" attivato sopra dal codice, e imposta direttamente alcune sue Proprietà e Metodi nativi:''</font> | ||
+ | With mappa = Class.Load("MapView").New([fin]) | ||
+ | .<FONT Color=#B22222>X</font> = 0 | ||
+ | .<FONT Color=#B22222>Y</font> = 0 | ||
+ | .<FONT Color=#B22222>W</font> = fin.W | ||
+ | .<FONT Color=#B22222>H</font> = fin.H | ||
+ | .<FONT Color=#B22222>Map.AddTile</font>("GoogleMap", "https://mt0.google.com/vt/lyrs=s&hl=&x={x}&y={y}&z={z}") | ||
+ | .<FONT Color=#B22222>Map.Zoom</font> = 15 | ||
+ | .<FONT Color=#B22222>Map.Center</font> = mp | ||
+ | End With | ||
+ | |||
+ | End | ||
+ | |||
+ | ==Gestione ''indiretta'' delle Proprietà e dei Metodi== | ||
+ | Le risorse di una Classe, appartenente a un Componente attivato da codice, potranno essere pure richiamati mediante alcuni Metodi della Classe "Object". | ||
+ | ===Gestione dei Metodi di una Classe mediante il Metodo "Object.Call()"=== | ||
+ | Come detto, la gestione dei Metodi di una Classe di un Componente, attivato da codice, può avvenire utilizzando il Metodo "Object.Call()". | ||
− | + | Mostriamo un esempio, nel quale, dopo aver attivato un Componente, sarà richiamata una sua specifica Classe, della quale vengono utilizzati due Metodi: | |
− | + | Public Sub Main() | |
− | + | Dim cl As Class | |
− | + | Dim symb As String | |
− | + | Dim ob As Object | |
<FONT Color=gray>' ''Viene attivato, ad esempio, il Componente "gb.sdl2.audio":''</font> | <FONT Color=gray>' ''Viene attivato, ad esempio, il Componente "gb.sdl2.audio":''</font> | ||
Riga 56: | Riga 97: | ||
<FONT Color=gray>' ''Viene richiamato il metodo ".Load()" della Classe "Sound" per caricare un file audio di formato WAV:''</font> | <FONT Color=gray>' ''Viene richiamato il metodo ".Load()" della Classe "Sound" per caricare un file audio di formato WAV:''</font> | ||
− | ob = Object.Call(cl, cl.Symbols[0], ["<FONT Color= | + | ob = Object.<FONT Color=red>Call</font>(cl, cl.Symbols[0], ["<FONT Color=darkgreen>''/percorso/del/file.wav''</font>"]) |
<FONT Color=gray>' ''Si usa la varibile di tipo "Oggetto", restituita dal precedente metodo "Object.Call()",'' | <FONT Color=gray>' ''Si usa la varibile di tipo "Oggetto", restituita dal precedente metodo "Object.Call()",'' | ||
Riga 62: | Riga 103: | ||
ob.play() | ob.play() | ||
− | + | End | |
− | |||
oppure anche così (in questo caso usiamo la Classe "''Music''" del Componente "''gb.sdl2.audio''"): | oppure anche così (in questo caso usiamo la Classe "''Music''" del Componente "''gb.sdl2.audio''"): | ||
− | + | Public Sub Main() | |
Dim cl As Class | Dim cl As Class | ||
− | Dim symb As String | + | Dim symb, s As String |
<FONT Color=gray>' ''Viene attivato, ad esempio, il Componente "gb.sdl2.audio":''</font> | <FONT Color=gray>' ''Viene attivato, ad esempio, il Componente "gb.sdl2.audio":''</font> | ||
− | + | Component.Load("gb.sdl2.audio") | |
<FONT Color=gray>' ''Viene presa in considerazione la Classe "Music" del Componente "gb.sdl2.audio":''</font> | <FONT Color=gray>' ''Viene presa in considerazione la Classe "Music" del Componente "gb.sdl2.audio":''</font> | ||
− | + | cl = Class.Load("Music") | |
<FONT Color=gray>' ''Pro memoria vengono mostrate tutte le risorse appartenenti alla Classe "Music" del Componente "gb.sdl2.audio":''</font> | <FONT Color=gray>' ''Pro memoria vengono mostrate tutte le risorse appartenenti alla Classe "Music" del Componente "gb.sdl2.audio":''</font> | ||
− | + | For Each symb In cl.Symbols | |
− | + | Print symb | |
− | + | Next | |
<FONT Color=gray>' ''Viene richiamato il metodo ".Load()" della Classe "Music" per caricare un file audio di formato WAV:''</font> | <FONT Color=gray>' ''Viene richiamato il metodo ".Load()" della Classe "Music" per caricare un file audio di formato WAV:''</font> | ||
− | + | Object.<FONT Color=red>Call</font>(cl, cl.Symbols[1], ["<FONT Color=darkgreen>''/percorso/del/file.wav''</font>"]) | |
<FONT Color=gray>' ''Viene ora invocato il Metodo ".Play()" per l'esecuzione del file audio WAV caricato:''</font> | <FONT Color=gray>' ''Viene ora invocato il Metodo ".Play()" per l'esecuzione del file audio WAV caricato:''</font> | ||
− | + | Object.<FONT Color=red>Call</font>(cl, cl.Symbols[2], Null) | |
− | |||
− | |||
− | |||
− | |||
+ | <FONT Color = gray>' ''Esegue il file multimediale, fino a che non si premi il tasto "Invio" della tastiera all'interno della Console/Terminale:''</font> | ||
+ | Input s | ||
+ | |||
+ | <FONT Color = gray>' ''Viene invocato ora "espressamente" il Metodo ".Stop()":''</font> | ||
+ | Object.<FONT color=#B22222>Call</font>(cl, "Stop", Null) | ||
+ | |||
'''End''' | '''End''' | ||
− | ==Gestione delle Proprietà possedute da una Classe di Componente== | + | ===Gestione delle Proprietà possedute da una Classe di un Componente attivato da codice=== |
− | + | La gestione delle ''Proprietà'' può avvenire utilizzando i Metodi "<B>.GetProperty()</b>" e "<B>.SetProperty()</b>" della Classe "Object", assegnando al primo argomento di tale Metodo la variabile che si riferisce alla Classe prescelta del Componente richiamato. | |
− | < | ||
− | Mostriamo un | + | ====Caso in cui la Classe è ''Statica''==== |
− | + | Qualora la ''Classe'' della Proprietà da richiamare sia ''Statica'', allora l'assegnazione a una variabile di tipo ''Class'' di quanto ritornato dal Metodo ".Load" della medesima Classe ''Class'' può avvenire senza l'uso del Metodo ".New()". | |
− | + | ||
+ | Mostriamo un esempio: | ||
+ | Public Sub Main() | ||
+ | |||
+ | Dim cl As Class | ||
+ | |||
<FONT Color=gray>' ''Viene attivato il Componente "gb.sdl2.audio":''</font> | <FONT Color=gray>' ''Viene attivato il Componente "gb.sdl2.audio":''</font> | ||
Component.Load("gb.sdl2.audio") | Component.Load("gb.sdl2.audio") | ||
− | + | ||
<FONT Color=gray>' ''Viene presa in considerazione la Classe "Music" del Componente "gb.sdl2.audio":''</font> | <FONT Color=gray>' ''Viene presa in considerazione la Classe "Music" del Componente "gb.sdl2.audio":''</font> | ||
− | cl = Class.Load("Music") | + | <FONT color=red>cl = Class.Load</font>("Music") |
<FONT Color=gray>' ''Viene richiamato il metodo ".Load()" della Classe "Music" per caricare un file audio o Midi:''</font> | <FONT Color=gray>' ''Viene richiamato il metodo ".Load()" della Classe "Music" per caricare un file audio o Midi:''</font> | ||
− | Object.Call(cl, cl.Symbols[1], ["<FONT Color= | + | Object.Call(cl, cl.Symbols[1], ["<FONT Color=darkgreen>''/percorso/del/file''</font>"]) |
<FONT Color=gray>' ''Viene ora invocato il Metodo ".Play()" per l'esecuzione del file audio o Midi caricato''</font> | <FONT Color=gray>' ''Viene ora invocato il Metodo ".Play()" per l'esecuzione del file audio o Midi caricato''</font> | ||
Riga 115: | Riga 161: | ||
<FONT Color=gray>' ''Per utilizzare alcune "Proprietà" della Classe "Music", viene usato il Metodo "Object.GetProperty()",'' | <FONT Color=gray>' ''Per utilizzare alcune "Proprietà" della Classe "Music", viene usato il Metodo "Object.GetProperty()",'' | ||
' ''assegnando al suo primo argomento direttamente la variabile che si riferisce alla Classe "Music":''</font> | ' ''assegnando al suo primo argomento direttamente la variabile che si riferisce alla Classe "Music":''</font> | ||
− | While Object.GetProperty(cl, "State") == Object.GetProperty(cl, "Playing") | + | While Object.<FONT color=red>GetProperty</font>(cl, "State") == Object.<FONT color=red>GetProperty</font>(cl, "Playing") |
<FONT Color=gray>' ''Mostra il tempo trascorso dall'inizio dell'esecuzione:''</font> | <FONT Color=gray>' ''Mostra il tempo trascorso dall'inizio dell'esecuzione:''</font> | ||
− | Write CStr(Time(0, 0, 0, Object.GetProperty(cl, "Pos") * 1000)) & "\r" | + | Write CStr(Time(0, 0, 0, Object.<FONT color=red>GetProperty</font>(cl, "Pos") * 1000)) & "\r" |
Wend | Wend | ||
Print "Esecuzione terminata !" | Print "Esecuzione terminata !" | ||
− | + | End | |
+ | =Differenza fra l'uso di Classi "Statiche" e l'uso di Classi "Creabili" di un Componente attivato da codice= | ||
+ | Negli esempi precedenti abbiamo visto come operare attivando da codice un Componente e utilizzando una o più sue Classi "Statiche". | ||
+ | <BR>Nel presente paragrafo, invece, vedremo come operare volendo utilizzare anche Classi "Creabili" di un Componente attivato da codice. | ||
− | = | + | Va detto che nel <SPAN Style="text-decoration:underline">caso di uso di Classi "Creabili", sarà necessario creare appunto una "Istanza", un "Oggetto" di tali Classi</span>, altrimenti verrà sollevato un errore proprio attinente all'impossibilità di utilizzare una risorsa della Classe "Creabile", direttamente passando come argomento la correlata variabile di tipo "Class". |
− | |||
− | |||
− | |||
− | |||
<BR>Tali Istanze delle Classi "creabili" vanno create, come variabili di tipo "Object", mediante il Metodo ".New()" della Classe "Class". | <BR>Tali Istanze delle Classi "creabili" vanno create, come variabili di tipo "Object", mediante il Metodo ".New()" della Classe "Class". | ||
− | Mostriamo un esempio, nel quale verranno richiamate | + | Mostriamo un esempio, nel quale verranno richiamate una Classe "Creabile" e una Classe "Statica" del Componente "gb.media": |
− | ''' | + | Public Sub Main() |
+ | |||
+ | Dim cl As Class | ||
+ | Dim ob As Object | ||
+ | |||
+ | <FONT Color = gray>' ''Carica il Componente che contiene la "Classe" che dovrà essere utilizzata:''</font> | ||
+ | Component.Load("gb.media") | ||
+ | |||
+ | <FONT Color = gray>' ''Carica la Classe «Creabile», di cui si utilizzeranno "Proprietà" e "Metodi":''</font> | ||
+ | cl = Class.Load("MediaPlayer") | ||
+ | |||
+ | <FONT Color = gray>' ''Crea un'Istanza della Classe caricata, affinché possa essere utilizzata concretamente nel codice:''</font> | ||
+ | ob = cl.New() | ||
+ | |||
+ | <FONT Color = gray>' ''Per assegnare alla Proprietà ".Url" quanto restituito dal Metodo ".URL()" della Classe «Statica» "Media", utilizza il Metodo ".SetProperty()" della Classe "Object":''</font> | ||
+ | Object<FONT Color=red>.SetProperty</font>(ob, "Url", Object.Call(Class.Load("Media"), "URL", ["<FONT Color=darkgreen>''/percorso/del/file/audio''</font>"])) | ||
+ | |||
+ | Object.Call(ob, "Play", Null) | ||
+ | |||
+ | <FONT Color = gray>' ''Con il Metodo "Object.Getproperty()" ottiene il valore della durata del brano audio:''</font> | ||
+ | Wait Object.GetProperty(ob, "Duration") | ||
+ | |||
+ | Object.Call(ob, "Close", Null) | ||
+ | |||
+ | End | ||
+ | In quest'altro codice verranno richiamate alcune Classi "creabili" e una Classe "statica" ancora del Componente "gb.media": | ||
+ | Public Sub Main() | ||
Dim clMP, clMD, clMC As Class | Dim clMP, clMD, clMC As Class | ||
Riga 141: | Riga 212: | ||
Component.Load("gb.media") | Component.Load("gb.media") | ||
− | + | creabileMP = Class.Load("MediaPipeline") <FONT Color=gray>' ''Classe "Creabile"''</font> | |
− | + | creabileMC = Class.Load("MediaControl") <FONT Color=gray>' ''Classe "Creabile"''</font> | |
− | + | staticaMD = Class.Load("Media") <FONT Color=gray>' ''Classe "Statica"''</font> | |
<FONT Color=gray>' ''Poiché la Classe "MediaPipeline" è creabile, non può essere utilizzata in modalità "Statica"; e pertanto dovrà essere creata una sua istanza. In tale caso si dovrà usare il Metodo ".New()" della Classe "Class" e non il Metodo "Object.New()", altrimenti non sarà possibile.''</font> | <FONT Color=gray>' ''Poiché la Classe "MediaPipeline" è creabile, non può essere utilizzata in modalità "Statica"; e pertanto dovrà essere creata una sua istanza. In tale caso si dovrà usare il Metodo ".New()" della Classe "Class" e non il Metodo "Object.New()", altrimenti non sarà possibile.''</font> | ||
− | obPL = | + | obPL = creabileMP<FONT color=red>.New</font>(Null) |
<FONT Color=gray>' ''Identico discorso anche per la Classe "MediaControl". In questo caso si dovranno impostare il "Genitore" e il "Tipo".''</font> | <FONT Color=gray>' ''Identico discorso anche per la Classe "MediaControl". In questo caso si dovranno impostare il "Genitore" e il "Tipo".''</font> | ||
− | obMC = | + | obMC = creabileMC<FONT color=red>.New</font>([obPL, "playbin"]) |
<FONT Color=gray>' ''Richiama il Metodo "Url()" della Classe "Media". Qui è possibile usare direttamente la variabile di tipo "Class", poiché la Classe "Media" è "Statica".''</font> | <FONT Color=gray>' ''Richiama il Metodo "Url()" della Classe "Media". Qui è possibile usare direttamente la variabile di tipo "Class", poiché la Classe "Media" è "Statica".''</font> | ||
− | obmc["uri"] = Object.Call( | + | obmc["uri"] = Object.Call(staticaMD, "Url", ["<FONT Color=darkgreen>''/percorso/del/file/multimediale''</font>"]) |
Object.Call(obPL, "Play", Null) | Object.Call(obPL, "Play", Null) | ||
Riga 161: | Riga 232: | ||
Object.Call(obPL, "Close", Null) | Object.Call(obPL, "Close", Null) | ||
− | + | End |
Versione attuale delle 01:47, 7 lug 2024
Come è noto, un Componente di Gambas viene di norma attivato dall'IDE seguendo la seguente procedura:
Progetto-->Proprietà-->Componenti
e quindi nell'apposita finestra si attiva il Componente prescelto cliccando sul suo riferimento.
E' possibile, però, attivare un Componente anche successivamente, in modo dinamico, da codice. Per poter fare ciò, si dovrà fare uso del metodo .Load() della Classe statica "Component":
Component.Load("gb.nome_del_componente")
Indice
- 1 Esempio
- 2 Gestione dei Metodi e delle Proprietà posseduti da una Classe di un Componente attivato da codice
- 3 Differenza fra l'uso di Classi "Statiche" e l'uso di Classi "Creabili" di un Componente attivato da codice
Esempio
Si faccia, infatti, questo esempio, nel quale si dovrà far aprire un file con il suo programma di default mediante il Metodo ".Open()" della Classe Desktop. L'applicativo nell'esempio non ha attivato il componente gb.desktop, indispensabile per poter utilizzare il predetto comando:
Desktop.Open("/percorso/del/file/da/aprire")
previsto dall'applicativo medesimo.
Si proverà a verificare cosa succede cliccando prima sul tasto Button1, e successivamente sul tasto Button2:
Public Sub Button1_Click() ' Si effettua il tentativo di apertura di un file qualsiasi senza alcun tipo di attivazione del Componente "gb.desktop": Desktop.Open("/percorso/del/file/da/aprire") End Public Sub Button2_Click() ' Si procede ad attivare il Componente Gambas "gb.desktop", per poter utilizzare la funzione "Desktop.Open()". ' Inoltre si verificherà il suo nome, e se esso è stato effettivamente caricato: Print "Componente \""; Component.Load("gb.desktop").Name; "\" caricato: "; Component.IsLoaded("gb.desktop") ' Quindi si effettua il tentativo di apertura di un file qualsiasi: Desktop.Open("/percorso/del/file/da/aprire") End
Gestione dei Metodi e delle Proprietà posseduti da una Classe di un Componente attivato da codice
Gestione diretta delle Proprietà e dei Metodi
I Metodi e le Proprietà di una Classe appartenente ad un Componente, attivato da codice, possono essere gestiti direttamente attraverso le stesse predette risorse native della Classe.
Vediamo appresso un esempio (è necessario attivare dall'IDE un Componente grafico e "gb.image"):
Public Sub Main() ' Le Classi, appartenenti a Componenti attivati da codice, essendo "creabili", devono essere "istanziate" come tipo "Object": Dim fin, mappa, mp As Object ' Attiva alcuni Componenti necessari al progetto: Component.Load("gb.net") Component.Load("gb.net.curl") Component.Load("gb.map") ' Crea una superficie grafica di tipo della Classe "Window" (è possibile direttamente, perché essa appartiene al Componente grafico attivato dall'IDE: With fin = New Window .Center .Y = 100 .W = 500 .H = 500 .Show() End With ' Carica una Classe appartenente al Componente "gb.map" attivato sopra dal codice: mp = Class.Load("MapPoint").New([41.89018, 12.49230]) ' Carica un'altra Classe, appartenente al Componente "gb.map" attivato sopra dal codice, e imposta direttamente alcune sue Proprietà e Metodi nativi: With mappa = Class.Load("MapView").New([fin]) .X = 0 .Y = 0 .W = fin.W .H = fin.H .Map.AddTile("GoogleMap", "https://mt0.google.com/vt/lyrs=s&hl=&x={x}&y={y}&z={z}") .Map.Zoom = 15 .Map.Center = mp End With End
Gestione indiretta delle Proprietà e dei Metodi
Le risorse di una Classe, appartenente a un Componente attivato da codice, potranno essere pure richiamati mediante alcuni Metodi della Classe "Object".
Gestione dei Metodi di una Classe mediante il Metodo "Object.Call()"
Come detto, la gestione dei Metodi di una Classe di un Componente, attivato da codice, può avvenire utilizzando il Metodo "Object.Call()".
Mostriamo un esempio, nel quale, dopo aver attivato un Componente, sarà richiamata una sua specifica Classe, della quale vengono utilizzati due Metodi:
Public Sub Main() Dim cl As Class Dim symb As String Dim ob As Object ' Viene attivato, ad esempio, il Componente "gb.sdl2.audio": Component.Load("gb.sdl2.audio") ' Viene presa in considerazione la Classe "Sound" del Componente "gb.sdl2.audio": cl = Class.Load("Sound") ' Pro memoria vengono mostrate tutte le risorse appartenenti alla Classe "Sound" del Componente "gb.sdl2.audio": For Each symb In cl.Symbols Print symb Next ' Viene richiamato il metodo ".Load()" della Classe "Sound" per caricare un file audio di formato WAV: ob = Object.Call(cl, cl.Symbols[0], ["/percorso/del/file.wav"]) ' Si usa la varibile di tipo "Oggetto", restituita dal precedente metodo "Object.Call()", ' per richiamare il metodo ".Play()" della Classe "Sound", al fine di eseguire il file audio WAV caricato: ob.play() End
oppure anche così (in questo caso usiamo la Classe "Music" del Componente "gb.sdl2.audio"):
Public Sub Main() Dim cl As Class Dim symb, s As String ' Viene attivato, ad esempio, il Componente "gb.sdl2.audio": Component.Load("gb.sdl2.audio") ' Viene presa in considerazione la Classe "Music" del Componente "gb.sdl2.audio": cl = Class.Load("Music") ' Pro memoria vengono mostrate tutte le risorse appartenenti alla Classe "Music" del Componente "gb.sdl2.audio": For Each symb In cl.Symbols Print symb Next ' Viene richiamato il metodo ".Load()" della Classe "Music" per caricare un file audio di formato WAV: Object.Call(cl, cl.Symbols[1], ["/percorso/del/file.wav"]) ' Viene ora invocato il Metodo ".Play()" per l'esecuzione del file audio WAV caricato: Object.Call(cl, cl.Symbols[2], Null) ' Esegue il file multimediale, fino a che non si premi il tasto "Invio" della tastiera all'interno della Console/Terminale: Input s ' Viene invocato ora "espressamente" il Metodo ".Stop()": Object.Call(cl, "Stop", Null) End
Gestione delle Proprietà possedute da una Classe di un Componente attivato da codice
La gestione delle Proprietà può avvenire utilizzando i Metodi ".GetProperty()" e ".SetProperty()" della Classe "Object", assegnando al primo argomento di tale Metodo la variabile che si riferisce alla Classe prescelta del Componente richiamato.
Caso in cui la Classe è Statica
Qualora la Classe della Proprietà da richiamare sia Statica, allora l'assegnazione a una variabile di tipo Class di quanto ritornato dal Metodo ".Load" della medesima Classe Class può avvenire senza l'uso del Metodo ".New()".
Mostriamo un esempio:
Public Sub Main() Dim cl As Class ' Viene attivato il Componente "gb.sdl2.audio": Component.Load("gb.sdl2.audio") ' Viene presa in considerazione la Classe "Music" del Componente "gb.sdl2.audio": cl = Class.Load("Music") ' Viene richiamato il metodo ".Load()" della Classe "Music" per caricare un file audio o Midi: Object.Call(cl, cl.Symbols[1], ["/percorso/del/file"]) ' Viene ora invocato il Metodo ".Play()" per l'esecuzione del file audio o Midi caricato Object.Call(cl, cl.Symbols[2], Null) ' Per utilizzare alcune "Proprietà" della Classe "Music", viene usato il Metodo "Object.GetProperty()", ' assegnando al suo primo argomento direttamente la variabile che si riferisce alla Classe "Music": While Object.GetProperty(cl, "State") == Object.GetProperty(cl, "Playing") ' Mostra il tempo trascorso dall'inizio dell'esecuzione: Write CStr(Time(0, 0, 0, Object.GetProperty(cl, "Pos") * 1000)) & "\r" Wend Print "Esecuzione terminata !" End
Differenza fra l'uso di Classi "Statiche" e l'uso di Classi "Creabili" di un Componente attivato da codice
Negli esempi precedenti abbiamo visto come operare attivando da codice un Componente e utilizzando una o più sue Classi "Statiche".
Nel presente paragrafo, invece, vedremo come operare volendo utilizzare anche Classi "Creabili" di un Componente attivato da codice.
Va detto che nel caso di uso di Classi "Creabili", sarà necessario creare appunto una "Istanza", un "Oggetto" di tali Classi, altrimenti verrà sollevato un errore proprio attinente all'impossibilità di utilizzare una risorsa della Classe "Creabile", direttamente passando come argomento la correlata variabile di tipo "Class".
Tali Istanze delle Classi "creabili" vanno create, come variabili di tipo "Object", mediante il Metodo ".New()" della Classe "Class".
Mostriamo un esempio, nel quale verranno richiamate una Classe "Creabile" e una Classe "Statica" del Componente "gb.media":
Public Sub Main() Dim cl As Class Dim ob As Object ' Carica il Componente che contiene la "Classe" che dovrà essere utilizzata: Component.Load("gb.media") ' Carica la Classe «Creabile», di cui si utilizzeranno "Proprietà" e "Metodi": cl = Class.Load("MediaPlayer") ' Crea un'Istanza della Classe caricata, affinché possa essere utilizzata concretamente nel codice: ob = cl.New() ' Per assegnare alla Proprietà ".Url" quanto restituito dal Metodo ".URL()" della Classe «Statica» "Media", utilizza il Metodo ".SetProperty()" della Classe "Object": Object.SetProperty(ob, "Url", Object.Call(Class.Load("Media"), "URL", ["/percorso/del/file/audio"])) Object.Call(ob, "Play", Null) ' Con il Metodo "Object.Getproperty()" ottiene il valore della durata del brano audio: Wait Object.GetProperty(ob, "Duration") Object.Call(ob, "Close", Null) End
In quest'altro codice verranno richiamate alcune Classi "creabili" e una Classe "statica" ancora del Componente "gb.media":
Public Sub Main() Dim clMP, clMD, clMC As Class Dim obPL, obMC As Object Dim s As String Component.Load("gb.media") creabileMP = Class.Load("MediaPipeline") ' Classe "Creabile" creabileMC = Class.Load("MediaControl") ' Classe "Creabile" staticaMD = Class.Load("Media") ' Classe "Statica" ' Poiché la Classe "MediaPipeline" è creabile, non può essere utilizzata in modalità "Statica"; e pertanto dovrà essere creata una sua istanza. In tale caso si dovrà usare il Metodo ".New()" della Classe "Class" e non il Metodo "Object.New()", altrimenti non sarà possibile. obPL = creabileMP.New(Null) ' Identico discorso anche per la Classe "MediaControl". In questo caso si dovranno impostare il "Genitore" e il "Tipo". obMC = creabileMC.New([obPL, "playbin"]) ' Richiama il Metodo "Url()" della Classe "Media". Qui è possibile usare direttamente la variabile di tipo "Class", poiché la Classe "Media" è "Statica". obmc["uri"] = Object.Call(staticaMD, "Url", ["/percorso/del/file/multimediale"]) Object.Call(obPL, "Play", Null) ' Consente l'esecuzione del file audio sino a quando, aprendo la Console/terminale, si premerà il tasto "Invio" sulla tastiera: Input s Object.Call(obPL, "Stop", Null) Object.Call(obPL, "Close", Null) End