Differenze tra le versioni di "Importare ed utilizzare librerie .gambas"

Da Gambas-it.org - Wikipedia.
Riga 2: Riga 2:
  
 
In [[Gambas|Gambas]] è possibile utilizzare, oltre alle [[Extern:_richiamare_funzioni_esterne_a_Gambas|librerie condivise esterne .so]], anche librerie ''.gambas'', contenenti proprietà e funzioni ricavabili dalle risorse messe a disposizione da Gambas.
 
In [[Gambas|Gambas]] è possibile utilizzare, oltre alle [[Extern:_richiamare_funzioni_esterne_a_Gambas|librerie condivise esterne .so]], anche librerie ''.gambas'', contenenti proprietà e funzioni ricavabili dalle risorse messe a disposizione da Gambas.
 +
 +
Le librerie .gambas, possiamo dire, sono intermedie tra un applicazione ed un componente, in quanto possono possedere metodi, eventi e proprietà, non necessitano di essere installate nel sistema, ma possono essere utilizzate come supporto ed integrative di risorse da più programmi.
  
  

Versione delle 03:31, 4 giu 2013

In generale una Libreria è un insieme di comandi, e più segnatamente funzioni, esterno al codice del programma principale, che fornisce appunto ulteriori ed addizionali funzionalità.

In Gambas è possibile utilizzare, oltre alle librerie condivise esterne .so, anche librerie .gambas, contenenti proprietà e funzioni ricavabili dalle risorse messe a disposizione da Gambas.

Le librerie .gambas, possiamo dire, sono intermedie tra un applicazione ed un componente, in quanto possono possedere metodi, eventi e proprietà, non necessitano di essere installate nel sistema, ma possono essere utilizzate come supporto ed integrative di risorse da più programmi.


Creare una libreria .gambas

La realizzazione di una libreria .gambas non richiede, ovviamente, che siano mostrate finestre e Form, e pertanto, all'atto della creazione del tipo di progetto va scelta l'opzione " Applicazione a riga di comando ".

Il progetto avrà, come struttura iniziale ovviamente un Modulo principale MMain.module, ma - volendo - ne potranno essere aggiunti anche altri. Si potranno, inoltre, utilizzare anche una o più Classi appositamente create all'interno della libreria.

V'è da sottolineare che, affinché le proprietà e le funzioni contenute in un Modulo o in una Classe di una libreria .gambas siano visibili, e dunque utilizzabili, in altri programmi Gambas, bisognerà avere l'accortezza di porre all'inizio del Modulo e della Classe la parola: Export, e di dichiarare dette funzioni e risorse come Pubbliche.

Si inseriranno successivamente nel Modulo e/o nella Classe le funzioni e le proprietà che si intende che la libreria metta a disposizione.

Infine, la libreria dovrà essere salvata con l'estensione .gambas :

nome_libreria.gambas


Richiamare una libreria .gambas

Va precisato che questo tipo di librerie, costituite da codice Gambas, vanno poste nella medesima directory del programma che le utilizzerà, altrimenti le librerie non saranno trovate dal programma.

Va precisato, altresì, che, a differenza dell'utilizzo delle librerie condivise esterne .so, non è necessario dichiarare in alcun modo la libreria .gambas all'interno del codice della Classe principale del programma. La libreria .gambas andrà richiamata nel percorso " Progetto-->Proprietà-->Libraries " dell'IDE del progetto.


Invocare una funzione o altra risorsa posta in una libreria .gambas

Come già detto si potranno invocare funzioni ed altre risorse che siano poste in Moduli e Classi creati nella libreria .gambas .

Chiamata di funzioni poste all'interno di Moduli

Per invocare una funzione contenuta in un Modulo della libreria, si dovrà scrivere nel programma principale il nome del Modulo che la contiene e quindi il nome della funzione desiderata, in qualità di metodo di quel Modulo. Volendo si potrà invocare la funzione o altra risorsa nel programma principale anche attraverso la dichiarazione di una variabile del tipo del Modulo, presente nella libreria, contenente la funzione o la risorsa desiderata.

Chiamata di funzioni poste all'interno di Classi

Per invocare, invece, una funzione o un'altra risorsa contenuta in una Classe della libreria, sarà assolutamente necessario dichiarare nel programma principale una variabile del tipo della Classe, presente nella libreria, contenente la funzione o la risorsa desiderata, ed invocare quindi attraverso detta variabile la funzione o altra risorsa.

Chiamata da un Modulo di funzioni poste all'interno di Classi della medesima libreria

Parimenti, se deve essere invocata all'interno di un Modulo una funzione o altra risorsa posta in una Classe, entrambi presenti nella medesima libreria, la funzione ed ogni altra risorsa, presenti nella Classe, vanno invocate attraverso l'uso di una variabile dichiarata del tipo della Classe contenente la predetta funzione o risorsa.


Esempio pratico

Facciamo un esempio pratico, nel quale avremo una libreria, che chiameremo ad esempio lib.gambas, ed un programma Gambas che ne richiama le funzioni presenti in una Classe ed in un Modulo di quella libreria.

Nella Classe, Classe1.class, della libreria avremo il seguente codice:

Export


Public Function funzClasse(a As Integer) As Integer
 
 Dim b As Integer
 
   b = a * 7
   
   Return b
 
End

Nel Modulo, Module1.module, della libreria avremo il seguente codice analogo:

Export


Public Function funzModulo(a As Integer) As Integer
 
 Dim b As Integer
 
   b = a + 7
   
   Return b
 
End


Poi, nella Classe principale del programma avremo il seguente codice:

Public Sub Button1_Click()

 Dim cl As New Class1  ' Dichiariamo una variabile del tipo della Classe della libreria contenente la funzione da invocare
 Dim w, y As Integer

' Viene richiamata la funzione nella Classe della libreria ".gambas" :
   w = cl.funzClasse(5)
 
   Print w

 
' Viene richiamata la funzione nel Modulo della libreria ".gambas" :
   y = Module1.funzModulo(w)
 
   Print y
 
End

Ricordiamo che il programma e la predetta libreria .gambas devono stare nella medesima directory.


Sollevare un Evento

Nelle Librerie .gambas è possibile sollevare eventi. Come è noto, un evento può essere sollevato soltanto all'interno di una Classe, e non all'interno di un Modulo !

Si utilizzerà la parola Event per definire l'evento; ed esso sarà sollevato con il consueto comando Raise.


Facciamo un semplice esempio pratico.
Nella Libreria avremo in una Classe, che chiameremo: Class1.class, il seguente breve codice:

Export


Event eventoLibreria()


Public Sub prova(i as integer)

' Qui viene semplicemente sollevato l'evento:
  Raise eventoLibreria()

End

Nel programma principale avremo il seguente codice:

' Dichiariamo una variabile del tipo della classe "Class1",
' e viene assegnata al gruppo chiamato "classe", che useremo per intecettare
' gli eventi sollevati dalla Libreria .gambas:
Private cl As New Class1 As "classe"

...
...

Public Sub Button1_Click()

  cl.prova()

End


' Qui viene intercettato l'evento sollevato nella Liberia:
Public Sub classe_eventoLibreria()

 Print "E' stato intercettato l'evento sollevato dalla Liberia .Gambas !"

End


Intercettare dati ottenuti da file posti sotto osservazione con la parola Watch

Se nella libreria è previsto che un file qualsiasi sia aperto e sottoposto ad osservazione con la parola Watch, affinche vengano raccolti dati all'interno del collegato evento File_Read( ), il ritorno al programma principale dei dati così raccolti non sembra funzionare ponendo la parola Return. Sarà necessario, invece, sollevare un evento specifico mediante la parola Event, da richiamare nel programma principale, che ritorni esso in tal modo i dati appena raccolti.
Affinché possa essere sollevato un evento (intendiamo dire quello: File_Read() ) in una libreria, dovrà essere creata una Classe, non potendosi in generale sollevare eventi mediante un Modulo.

Poniamo come esempio una semplice libreria che apre un file in lettura e lo pone, appunto, sotto osservazione con la parola Watch. In tal modo, come si sa, quando v'è qualcosa da leggere nel file, sarà sollevato l'evento File_Read():

Private fl As File

' Dichiariamo l'evento specifico che sarà sollevato immediatamente dopo
' la sollevazione dell'evento "File_Read()".
' L'evento ritorna, in questo esempio, dei dati di tipo Integer:
Event eventoSpecifico(i As Integer)


Public Sub aperturaFile()

' Il file viene aperto in lettura e posto sotto "osservazione" in lettura:
' se c'è un dato da leggere nel file, viene sollevato direttamente l'evento "File_Read()":
  fl = Open "file_da_aprire" For Read Watch
 
End


Public Sub File_Read()
 
 Dim i As Integer
 
' Legge il nuovo contenuto del file posto sotto "osservazione":
   Read #fl, i
   
' Viene sollevato lo specifico evento, affinché i dati appena letti dal file
' possano essere trasferiti - in questo modo - al programma principale:
   Raise eventoSpecifico(i)
 
End

Nel programma principale l'evento specifico sarà richiamato nelle forme e modalità consuete.