<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="it">
	<id>https://www.gambas-it.org/wiki/index.php?action=history&amp;feed=atom&amp;title=Creare%2C_importare_ed_utilizzare_librerie_.gambas</id>
	<title>Creare, importare ed utilizzare librerie .gambas - Cronologia</title>
	<link rel="self" type="application/atom+xml" href="https://www.gambas-it.org/wiki/index.php?action=history&amp;feed=atom&amp;title=Creare%2C_importare_ed_utilizzare_librerie_.gambas"/>
	<link rel="alternate" type="text/html" href="https://www.gambas-it.org/wiki/index.php?title=Creare,_importare_ed_utilizzare_librerie_.gambas&amp;action=history"/>
	<updated>2026-10-23T06:31:04Z</updated>
	<subtitle>Cronologia della pagina su questo sito</subtitle>
	<generator>MediaWiki 1.39.15</generator>
	<entry>
		<id>https://www.gambas-it.org/wiki/index.php?title=Creare,_importare_ed_utilizzare_librerie_.gambas&amp;diff=40326&amp;oldid=prev</id>
		<title>Vuott: Creata pagina con &quot;In generale una ''Libreria'' è un insieme di istruzioni, comandi e risorse, esterno al codice del programma principale, che fornisce ulteriori ed addizionali funzionalità....&quot;</title>
		<link rel="alternate" type="text/html" href="https://www.gambas-it.org/wiki/index.php?title=Creare,_importare_ed_utilizzare_librerie_.gambas&amp;diff=40326&amp;oldid=prev"/>
		<updated>2024-11-22T14:46:00Z</updated>

		<summary type="html">&lt;p&gt;Creata pagina con &amp;quot;In generale una &amp;#039;&amp;#039;Libreria&amp;#039;&amp;#039; è un insieme di istruzioni, comandi e risorse, esterno al codice del programma principale, che fornisce ulteriori ed addizionali funzionalità....&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Nuova pagina&lt;/b&gt;&lt;/p&gt;&lt;div&gt;In generale una ''Libreria'' è un insieme di istruzioni, comandi e risorse, esterno al codice del programma principale, che fornisce ulteriori ed addizionali funzionalità.&lt;br /&gt;
&lt;br /&gt;
In [[Gambas|Gambas]] è possibile utilizzare, oltre alle [[Extern:_richiamare_funzioni_esterne_a_Gambas|librerie condivise esterne .so]], &amp;lt;SPAN style=&amp;quot;text-decoration:underline&amp;quot;&amp;gt;anche&amp;lt;/span&amp;gt; librerie '''.gambas''', scritte in linguaggio Gambas, contenenti proprietà e funzioni ricavabili dalle risorse fornite da Gambas.&lt;br /&gt;
&lt;br /&gt;
Potremmo definire le librerie ''.gambas'' come risorse intermedie tra un'Applicazione ed un Componente, in quanto esse possono possedere Proprietà, Metodi ed Eventi, e non necessitano di essere installate nel sistema, ma possono essere utilizzate, come supporto e integrative di risorse, da più programmi Gambas.&lt;br /&gt;
&lt;br /&gt;
Più precisamente, una ''libreria'' Gambas è un progetto scritto ''una volta soltanto'' per essere integrato ed utilizzato in altri progetti, cioè in altri programmi. Esso fornisce ''Classi'' esportate e ''Moduli''. In questo modo il codice della ''Libreria'' può essere anche riutilizzato. &amp;lt;SUP&amp;gt;&amp;amp;#091;[[#Note|nota 1]]&amp;amp;#093;&amp;lt;/sup&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Creare una libreria .gambas==&lt;br /&gt;
La realizzazione di una libreria ''.gambas'' non richiede, solitamente, che siano mostrate finestre e Form, e pertanto, all'atto della creazione del tipo di progetto va scelta l'opzione &amp;quot; ''Applicazione a riga di comando'' &amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Il progetto avrà, come struttura iniziale ovviamente un Modulo principale ''Main.module'', ma, affinché possa essere creata la libreria ''.gambas'', bisognerà aggiungere almeno un modulo secondario. Si potranno, inoltre, utilizzare anche una o &amp;lt;SPAN style=&amp;quot;text-decoration:underline&amp;quot;&amp;gt;più&amp;lt;/span&amp;gt; Classi appositamente create all'interno della libreria.&lt;br /&gt;
&lt;br /&gt;
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 ''&amp;lt;SPAN style=&amp;quot;text-decoration:underline&amp;quot;&amp;gt;Pubbliche&amp;lt;/span&amp;gt;''.&lt;br /&gt;
&lt;br /&gt;
Si inseriranno successivamente nel ''Modulo'' e/o nella ''Classe'' le funzioni e le proprietà che si intende che la libreria metta a disposizione.&lt;br /&gt;
&lt;br /&gt;
Quindi si cliccherà sulla voce di menu &amp;quot;''Progetto ---&amp;gt; Proprietà'' &amp;quot;.&lt;br /&gt;
&amp;lt;BR&amp;gt;All'apertura della finestra di dialogo nel ''ComboBox'', posto al centro, alla voce &amp;quot;''Tipo di Progetto''&amp;quot; si dovrà impostare l'opzione &amp;quot;''Libreria''&amp;quot;, e si premerà sul tasto &amp;quot;OK&amp;quot; per chiudere la finestra.&lt;br /&gt;
&lt;br /&gt;
Infine, la libreria dovrà essere salvata cliccando su- menu &amp;quot;''Progetto ---&amp;gt; Crea ---&amp;gt; Eseguibile'' &amp;quot;. Nella finestra di dialogo apparirà automaticamente il nome (che potrà essere eventualmente cambiato a piacere) della Libreria già con l'estensione ''.gambas'', ossia:&lt;br /&gt;
 nome_libreria.gambas&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Richiamare una libreria .gambas==&lt;br /&gt;
Quando viene eseguito un progetto che dipende da una libreria &amp;quot;.gambas&amp;quot;, l'eseguibile della libreria viene cercato nei percorsi secondo l'ordine indicato nella seguente pagina della wiki ufficiale:&lt;br /&gt;
 http://gambaswiki.org/wiki/doc/library?l=it#t2&lt;br /&gt;
Va precisato, altresì, che, a differenza dell'utilizzo delle [[Extern:_richiamare_funzioni_esterne_a_Gambas|librerie condivise esterne .so]], &amp;lt;SPAN style=&amp;quot;text-decoration:underline&amp;quot;&amp;gt;non&amp;lt;/span&amp;gt; è necessario dichiarare in alcun modo la libreria &amp;quot;.gambas&amp;quot; all'interno del codice della Classe principale del programma. &lt;br /&gt;
&lt;br /&gt;
La libreria &amp;quot;.gambas&amp;quot; andrà richiamata e impostata nel percorso del menu dell'IDE del progetto del programma principale &amp;quot;''Progetto--&amp;gt;Proprietà'' &amp;quot;, e poi nella finestra di dialogo, che sia apre, cliccando nella lista a sinistra su &amp;quot;''Librerie'' &amp;quot;. Quindi su &amp;quot;''Aggiungi'' &amp;quot; pertinente all'area di testo superiore delle due che appaiono. Infine si cliccherà sul nome della libreria riportata e sicliccherà sul tasto virtuale &amp;quot;OK&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Invocare una funzione o altra risorsa posta in una libreria .gambas==&lt;br /&gt;
Come già detto si potranno invocare funzioni ed altre risorse che siano poste in ''Moduli'' e ''Classi'' creati nella libreria .gambas .&lt;br /&gt;
&lt;br /&gt;
===Chiamata di funzioni poste all'interno di ''Moduli''===&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
===Chiamata di funzioni poste all'interno di ''Classi''===&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
===Chiamata da un ''Modulo'' di funzioni poste all'interno di ''Classi'' della medesima libreria===&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
===Esempio pratico===&lt;br /&gt;
Facciamo un esempio pratico, nel quale avremo una libreria, che chiameremo ad esempio &amp;quot;''lib.gambas''&amp;quot;, ed un programma Gambas che ne richiama le funzioni presenti in una ''Classe'' ed in un ''Modulo'' di quella libreria.&lt;br /&gt;
&lt;br /&gt;
Nella Classe, ''Classe1.class'', della predetta libreria &amp;quot;''lib.gambas''&amp;quot; avremo il seguente codice:&lt;br /&gt;
 &amp;lt;FONT color=#B22222&amp;gt;'''Export'''&amp;lt;/font&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;FONT color=#B22222&amp;gt;'''Public'''&amp;lt;/font&amp;gt; Function funzClasse(a As Integer) As Integer&lt;br /&gt;
  &lt;br /&gt;
   Dim b As Integer&lt;br /&gt;
  &lt;br /&gt;
   b = a * 7&lt;br /&gt;
    &lt;br /&gt;
   Return b&lt;br /&gt;
  &lt;br /&gt;
 End&lt;br /&gt;
Nel Modulo, ''Module1.module'', della libreria avremo il seguente codice analogo:&lt;br /&gt;
 &amp;lt;FONT color=#B22222&amp;gt;'''Export'''&amp;lt;/font&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;FONT color=#B22222&amp;gt;'''Public'''&amp;lt;/font&amp;gt; Function funzModulo(a As Integer) As Integer&lt;br /&gt;
  &lt;br /&gt;
   Dim b As Integer&lt;br /&gt;
  &lt;br /&gt;
   b = a + 7&lt;br /&gt;
    &lt;br /&gt;
   Return b&lt;br /&gt;
  &lt;br /&gt;
 End&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Poi, nella Classe principale del programma avremo il seguente codice:&lt;br /&gt;
 Public Sub Button1_Click()&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;FONT color=gray&amp;gt;' ''Dichiara una variabile del tipo della Classe della libreria contenente la funzione da invocare:''&amp;lt;/font&amp;gt;&lt;br /&gt;
   Dim &amp;lt;FONT color=#B22222&amp;gt;cl As New Class1&amp;lt;/font&amp;gt;&lt;br /&gt;
   Dim w, y As Integer&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;FONT color=gray&amp;gt;' ''Viene richiamata la funzione nella Classe della libreria &amp;quot;.gambas&amp;quot; :''&amp;lt;/font&amp;gt;&lt;br /&gt;
   w = cl.funzClasse(5)&lt;br /&gt;
  &lt;br /&gt;
   Print w&lt;br /&gt;
  &lt;br /&gt;
 &amp;lt;FONT color=gray&amp;gt;' ''Viene richiamata la funzione nel Modulo della libreria &amp;quot;.gambas&amp;quot; :''&amp;lt;/font&amp;gt;&lt;br /&gt;
   y = Module1.funzModulo(w)&lt;br /&gt;
  &lt;br /&gt;
   Print y&lt;br /&gt;
  &lt;br /&gt;
 End&lt;br /&gt;
&lt;br /&gt;
Ricordiamo che il programma e la predetta libreria ''.gambas'' &amp;lt;SPAN style=&amp;quot;text-decoration:underline&amp;quot;&amp;gt;devono risiedere nella medesima directory&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Sollevare un Evento==&lt;br /&gt;
Nelle Librerie ''.gambas'' è possibile sollevare eventi. Come è noto, un evento può essere sollevato soltanto all'interno di una ''Classe'', e &amp;lt;U&amp;gt;non&amp;lt;/u&amp;gt; all'interno di un ''Modulo'' !&lt;br /&gt;
&lt;br /&gt;
Si utilizzerà la parola '''''[[Gli_eventi|Event]]''''' per definire l'evento; ed esso sarà sollevato con il consueto comando '''''Raise'''''.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Facciamo un semplice esempio pratico.&lt;br /&gt;
&amp;lt;BR&amp;gt;Nella Libreria avremo in una ''Classe'', che chiameremo: ''Class1.class'', il seguente breve codice:&lt;br /&gt;
 Export&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;FONT color=#B22222&amp;gt;&amp;lt;B&amp;gt;Event&amp;lt;/b&amp;gt;&amp;lt;/font&amp;gt; eventoLibreria()&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 Public Sub prova(i as integer)&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;FONT color=gray&amp;gt;' ''Qui viene semplicemente sollevato l'evento:''&amp;lt;/font&amp;gt;&lt;br /&gt;
   &amp;lt;FONT color=#B22222&amp;gt;&amp;lt;B&amp;gt;Raise&amp;lt;/b&amp;gt;&amp;lt;/font&amp;gt; eventoLibreria()&lt;br /&gt;
 &lt;br /&gt;
 End&lt;br /&gt;
&lt;br /&gt;
Nel programma principale avremo il seguente codice:&lt;br /&gt;
 &amp;lt;FONT color=gray&amp;gt;' ''Dichiariamo una variabile del tipo della classe &amp;quot;Class1&amp;quot;, e viene assegnata al gruppo chiamato &amp;quot;classe&amp;quot;, che useremo per intercettare gli eventi sollevati dalla Libreria .gambas:''&amp;lt;/font&amp;gt;&lt;br /&gt;
 Private cl As New Class1 &amp;lt;FONT color=#B22222&amp;gt;As &amp;quot;classe&amp;quot;&amp;lt;/font&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 Public Sub Button1_Click()&lt;br /&gt;
 &lt;br /&gt;
   cl.prova()&lt;br /&gt;
 &lt;br /&gt;
 End&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;FONT color=gray&amp;gt;' ''Qui viene intercettato l'evento sollevato nella Liberia:''&amp;lt;/font&amp;gt;&lt;br /&gt;
 Public Sub &amp;lt;FONT color=#B22222&amp;gt;classe_eventoLibreria()&amp;lt;/font&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
   Print &amp;quot;E' stato intercettato l'evento sollevato dalla Liberia .Gambas !&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 End&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Intercettare dati ottenuti da file posti sotto osservazione con la parola '''Watch'''==&lt;br /&gt;
Se nella libreria è previsto che un file qualsiasi sia aperto e sottoposto ad ''osservazione'' con la parola &amp;quot;Watch&amp;quot;, affinche vengano raccolti dati all'interno del collegato Evento &amp;quot;File_Read()&amp;quot;, 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.&lt;br /&gt;
&amp;lt;BR&amp;gt;Affinché possa essere sollevato un evento (intendiamo dire quello: &amp;quot;File_Read()&amp;quot; ) in una libreria, dovrà essere creata una ''Classe'', &amp;lt;SPAN style=&amp;quot;text-decoration:underline&amp;quot;&amp;gt;non&amp;lt;/span&amp;gt; potendosi in generale sollevare eventi mediante un ''Modulo''.&lt;br /&gt;
&lt;br /&gt;
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 &amp;quot;File_Read()&amp;quot;:&lt;br /&gt;
 Private fl As File&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;FONT color=gray&amp;gt;' ''Dichiariamo l'evento specifico che sarà sollevato immediatamente dopo la sollevazione dell'evento &amp;quot;File_Read()&amp;quot;.''&lt;br /&gt;
 ' ''L'evento ritorna, in questo esempio, dei dati di tipo Integer:''&amp;lt;/font&amp;gt;&lt;br /&gt;
 &amp;lt;FONT color=#B22222&amp;gt;'''Event''' eventoSpecifico(i As Integer)&amp;lt;/font&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 Public Sub aperturaFile()&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;FONT color=gray&amp;gt;' ''Il file viene aperto in lettura e posto sotto &amp;quot;osservazione&amp;quot; in lettura: se c'è un dato da leggere nel file, viene sollevato direttamente l'evento &amp;quot;File_Read()&amp;quot;:''&amp;lt;/font&amp;gt;&lt;br /&gt;
   fl = Open &amp;quot;''file_da_aprire''&amp;quot; For Read &amp;lt;FONT color=#B22222&amp;gt;Watch&amp;lt;/font&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
 End&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 Public Sub &amp;lt;FONT color=#B22222&amp;gt;File_Read()&amp;lt;/font&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
   Dim i As Integer&lt;br /&gt;
  &lt;br /&gt;
 &amp;lt;FONT color=gay&amp;gt;' ''Legge il nuovo contenuto del file posto sotto &amp;quot;osservazione&amp;quot;:''&amp;lt;/font&amp;gt;&lt;br /&gt;
   Read #fl, i&lt;br /&gt;
    &lt;br /&gt;
 &amp;lt;FONT color=gray&amp;gt;' ''Viene sollevato lo specifico evento, affinché i dati appena letti dal file possano essere trasferiti - in questo modo - al programma principale:''&amp;lt;/font&amp;gt;&lt;br /&gt;
   &amp;lt;FONT color=#B22222&amp;gt;Raise eventoSpecifico(i)&amp;lt;/font&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
 End&lt;br /&gt;
Nel programma principale l'evento specifico sarà richiamato nelle forme e modalità consuete.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Chiamare da una libreria .gambas una funzione contenuta in un'altra libreria .gambas==&lt;br /&gt;
Può esservi il caso in cui un programma principale debba invocare una funzione contenuta in una libreria .gambas, la quale funzione - a sua volta - chiama una funzione contenuta in un'altra libreria .gambas .&lt;br /&gt;
&amp;lt;BR&amp;gt;Si avrà pertanto il programma principale e due librerie .gambas:&lt;br /&gt;
 &amp;lt;FONT Size=4&amp;gt;&amp;lt;B&amp;gt;PROGRAMMA_PRINCIPALE&amp;lt;/b&amp;gt;&amp;lt;/font&amp;gt;---chiama-una-funzione-presente-in---&amp;gt;&amp;lt;FONT Color=blue&amp;gt;PRIMA_LIBRERIA.gambas&amp;lt;/font&amp;gt;---&amp;gt;che-chiama-una-funzione-presente-in---&amp;gt;&amp;lt;FONT Color=#B22222&amp;gt;SECONDA_LIBRERIA.gambas&amp;lt;/font&amp;gt;&lt;br /&gt;
Ecco come procedere.&lt;br /&gt;
&lt;br /&gt;
1) E' opportuno cominciare dalla &amp;quot;coda&amp;quot;; pertanto si realizzerà, nelle modalità sopra descritte, innanzitutto la seconda libreria .gambas (ossia quella che sarà chiamata dalla prima libreria .gambas), e se ne creerà l'eseguibile (.gambas).&lt;br /&gt;
&lt;br /&gt;
2) Si procederà quindi a creare, nelle modalità sopra descritte, la prima libreria .gambas (ossia quella direttamente chiamata dal programma principale), nella quale - prima di creare l'eseguibile - si dovrà caricare l'eseguibile della seconda libreria .gambas.&lt;br /&gt;
&lt;br /&gt;
3) Nel programma principale sarà sufficiente caricare l'eseguibile della sola prima libreria .gambas (ossia di quella che poi invocherà la funzione presente nella seconda libreria .gambas).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Va ricordato che il programma principale e le due librerie .gambas devono coesistere nel medesimo percorso, nella medesima cartella.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Assegnare una libreria ad un progetto in modo dinamico. ==&lt;br /&gt;
Questo potrebbe rivelarsi utile per non costringere, chi riceve una nostra libreria, a doverla ricreare da zero.&lt;br /&gt;
&lt;br /&gt;
Le librerie da noi create vengono salvate in ''&amp;quot;&amp;lt;user home&amp;gt;/.local/share/gambas3/lib/&amp;lt;vendor&amp;gt;/&amp;lt;nome libreria&amp;gt;&amp;quot;'', teniamone conto e passiamo alla pratica: &amp;lt;SUP&amp;gt;&amp;amp;#091;[[#Note|nota 2]]&amp;amp;#093;&amp;lt;/sup&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Andremo a creare una libreria che somma le valute in forma di stringa ''currency'' e poi la sfrutteremo in un progetto che somma dei subtotali e mostra il risultato in una ''textbox'', il tutto sempre in forma di valuta.&lt;br /&gt;
&lt;br /&gt;
Nella IDE di Gambas creiamo un nuovo progetto a riga di comando, lo intitoliamo ''LibSommaStringhe'', diamo '''OK''' e aggiungiamo un nuovo modulo così: nel browser sulla sinistra diamo tasto destro del mouse su ''Sorgenti'', aggiungiamo il modulo, lo nominiamo '''Mat''' e inseriamo questo codice in ''Mat.module'':&lt;br /&gt;
  Export&lt;br /&gt;
  &lt;br /&gt;
  &amp;lt;FONT Color=gray&amp;gt;' ''Ritorna la somma dei numeri 'stringa' come una stringa formattata currency'' &amp;lt;/font&amp;gt;&lt;br /&gt;
  Public Function ReturnAddString(value As String[]) As String&lt;br /&gt;
  &lt;br /&gt;
   Dim sCurr As String&lt;br /&gt;
   Dim iCurr As Long&lt;br /&gt;
  &lt;br /&gt;
   For i As Integer = 0 To value.Max&lt;br /&gt;
     sCurr = ReturnStringInteger(value[i])&lt;br /&gt;
     iCurr += CLong(sCurr)&lt;br /&gt;
   Next&lt;br /&gt;
   Return Format((iCurr / 100), &amp;quot;$,0.00&amp;quot;)&lt;br /&gt;
  &lt;br /&gt;
 End&lt;br /&gt;
  &lt;br /&gt;
  Private Function ReturnStringInteger(value As String) As String&lt;br /&gt;
  &amp;lt;FONT Color=gray&amp;gt;' ''Ritorna una stringa in forma di numero intero'' &amp;lt;/font&amp;gt;&lt;br /&gt;
   value = Trim(Replace(value, &amp;quot;€&amp;quot;, &amp;quot;&amp;quot;))&lt;br /&gt;
   value = Replace(value, &amp;quot;.&amp;quot;, &amp;quot;&amp;quot;)&lt;br /&gt;
   value = Replace(value, &amp;quot; &amp;quot;, &amp;quot;&amp;quot;)&lt;br /&gt;
   value = Replace(value, &amp;quot;,&amp;quot;, &amp;quot;&amp;quot;)&lt;br /&gt;
   Return value&lt;br /&gt;
 &lt;br /&gt;
 End&lt;br /&gt;
Si tratta di un'unica funzione pubblica del modulo che a sua volta si appoggia a una funzione privata per ottenere stringhe pulite di ogni carattere ad eccezione dei numeri per poi poterli cambiare in interi, sommarli e restituirli nuovamente in forma di valore monetario (''currency'').&lt;br /&gt;
&lt;br /&gt;
Ora come già visto andiamo in ''Progetto &amp;gt; Proprietà scheda Generale &amp;gt; Tipo'' e scegliamo ''Libreria'' &amp;lt;br&amp;gt;&lt;br /&gt;
:In Venditore = ''softwarevendortest''&lt;br /&gt;
:In Versione = 0-1-0 &lt;br /&gt;
:In Titolo = ''Libreria Somma Stringhe'' &lt;br /&gt;
:In Descrizione = ''Libreria che somma le stringhe in forma di valuta''&amp;lt;br&amp;gt;Diamo '''OK'''&lt;br /&gt;
&lt;br /&gt;
Dal menu ''Progetto &amp;gt; Crea &amp;gt; Eseguibile...'' creiamo un eseguibile.&lt;br /&gt;
&amp;lt;br&amp;gt;Fatto&lt;br /&gt;
&lt;br /&gt;
Ora procediamo con un nuovo progetto grafico che sfrutta la libreria: scegliamo ''gb.gui'' (Graphical application) o ''gb.gui.qt'' (QT application) a nostra preferenza e nominiamolo ''TestLibreria'', diamo '''OK'''.&lt;br /&gt;
&amp;lt;br&amp;gt;Nel browser del progetto sulla sinistra diamo tasto destro del mouse su ''Sorgenti'' e aggiungiamo un nuovo modulo che nominiamo ''MMain''.&lt;br /&gt;
&amp;lt;br&amp;gt;Ulteriore click destro su MMain per cambiarlo in ''Classe di avvio''.&lt;br /&gt;
&amp;lt;br&amp;gt;Prima di inserire il codice nel modulo, sempre nel browser ma questa volta agendo col tasto destro del mouse su ''Dati'' scegliamo il sotto menu ''Importa...'' e navighiamo fino al progetto libreria appena fatto per importarne l'eseguibile ''LibSommaStringhe.gambas''.&lt;br /&gt;
&amp;lt;br&amp;gt;Quindi in ''MMain.module'' aggiungiamo questo codice:&lt;br /&gt;
 Property Read sPath As String&lt;br /&gt;
 Private $sPath As String&lt;br /&gt;
  &lt;br /&gt;
 Public Sub Main()&lt;br /&gt;
  &lt;br /&gt;
   Dim sMessage As String = &amp;quot;Impossibile proseguire&amp;quot;&lt;br /&gt;
   Dim sLocalPath As String&lt;br /&gt;
  &lt;br /&gt;
   sLocalPath = User.Home &amp;amp;/ &amp;quot;.local/share/gambas3&amp;quot;&lt;br /&gt;
   If Not Exist(sLocalPath) Then Try Mkdir sLocalPath&lt;br /&gt;
   If Error Then&lt;br /&gt;
     Message.Error(sMessage)&lt;br /&gt;
     Return&lt;br /&gt;
   Endif&lt;br /&gt;
   sLocalPath &amp;amp;= &amp;quot;/lib&amp;quot;&lt;br /&gt;
   If Not Exist(sLocalPath) Then Try Mkdir sLocalPath&lt;br /&gt;
   If Error Then&lt;br /&gt;
     Message.Error(sMessage)&lt;br /&gt;
     Return&lt;br /&gt;
   Endif&lt;br /&gt;
   sLocalPath &amp;amp;= &amp;quot;/softwarevendortest&amp;quot;&lt;br /&gt;
   If Not Exist(sLocalPath) Then Try Mkdir sLocalPath&lt;br /&gt;
   If Error Then&lt;br /&gt;
     Message.Error(sMessage)&lt;br /&gt;
     Return&lt;br /&gt;
   Endif&lt;br /&gt;
   sLocalPath &amp;amp;= &amp;quot;/LibSommaStringhe:0.1.gambas&amp;quot;&lt;br /&gt;
   If Not Exist(sLocalPath) Then&lt;br /&gt;
     Try Copy &amp;quot;./LibSommaStringhe.gambas&amp;quot; To sLocalPath&lt;br /&gt;
     If Error Then&lt;br /&gt;
       Message.Error(sMessage)&lt;br /&gt;
       Return&lt;br /&gt;
     Endif&lt;br /&gt;
   Endif&lt;br /&gt;
  &lt;br /&gt;
   $sPath = sLocalPath&lt;br /&gt;
  &lt;br /&gt;
   FMain.Show&lt;br /&gt;
  &lt;br /&gt;
 End&lt;br /&gt;
    &lt;br /&gt;
 Private Function sPath_Read() As String&lt;br /&gt;
  &lt;br /&gt;
   Return $sPath&lt;br /&gt;
  &lt;br /&gt;
 End&lt;br /&gt;
Vediamo cosa fa il codice:&lt;br /&gt;
&amp;lt;br&amp;gt;All'avvio del programma controlla se esiste già la cartella ''gambas3'' altrimenti la crea, fa esattamente la stessa cosa con le cartelle ''lib'' e ''softwarevendortest'' (la cartella del venditore che potremmo nominare col nostro nome, l'importante è tenerne conto nel codice) controlla con ''Try'' che non avvengano errori altrimenti avvisa e esce dal progetto.&lt;br /&gt;
&amp;lt;br&amp;gt;Se va tutto bene passa la stringa del percorso alla proprietà ''sPath'' e apre la finestra ''FMain''.&lt;br /&gt;
&lt;br /&gt;
La finestra FMain.form va disegnata con questi parametri:&lt;br /&gt;
:Arrangement = Vertical&lt;br /&gt;
:Height = 552&lt;br /&gt;
:Margin = True&lt;br /&gt;
:Spacing = True&lt;br /&gt;
:Width = 512&lt;br /&gt;
&lt;br /&gt;
Alla finestra va aggiunta in alto a sinistra una GridView con questi parametri:&lt;br /&gt;
:Name = GridView1 (di default)&lt;br /&gt;
:Expand = True&lt;br /&gt;
:Height = 200&lt;br /&gt;
:Width = 200&lt;br /&gt;
:X = 8&lt;br /&gt;
:Y = 8&lt;br /&gt;
&lt;br /&gt;
Sotto la gridview va disegnato un contenitore ''HBox'':&lt;br /&gt;
:Heigt = 32&lt;br /&gt;
:Spacing = True&lt;br /&gt;
:Width = 456&lt;br /&gt;
&lt;br /&gt;
con al suo interno da sinistra a destra:&lt;br /&gt;
:Uno ''Spring'' oppure in alternativa un pannello con la proprietà expand a ''True''.&lt;br /&gt;
:Un ''Button'':&lt;br /&gt;
:Name = btnTotal&lt;br /&gt;
:Text = TOTALE&lt;br /&gt;
:Width = 112&lt;br /&gt;
:Una ''TextBox'':&lt;br /&gt;
:Alignment = Right&lt;br /&gt;
:Width = 168&lt;br /&gt;
&lt;br /&gt;
Ecco il codice per la finestra ''FMain.class'':&lt;br /&gt;
 Private hCom As Component&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 Public Sub Form_Open()&lt;br /&gt;
  &lt;br /&gt;
   Dim iRows As Integer = 20&lt;br /&gt;
   Dim fPrice, fValue As Float&lt;br /&gt;
   Dim fCasual As Float[] = [0.02, 0.04, 0.06, 0.2, 0.4, 0.6, 1, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 1.8, 1.9]&lt;br /&gt;
  &lt;br /&gt;
 &amp;lt;FONT Color=gray&amp;gt;' ''questo carica la libreria nel progetto'' &amp;lt;/font&amp;gt;&lt;br /&gt;
   hCom = Component.Load(MMain.sPath)&lt;br /&gt;
 &amp;lt;FONT Color=gray&amp;gt;' ''questo lo verifica scrivendo sulla console'' &amp;lt;/font&amp;gt;&lt;br /&gt;
   Print hCom.Name;; hCom.Library;; hCom.Version&lt;br /&gt;
 &amp;lt;FONT Color=gray&amp;gt;' ''Crea una lista di prezzi da poter sommare, cliccando sul pulsante btnTotal'' &amp;lt;/font&amp;gt;&lt;br /&gt;
   With GridView1&lt;br /&gt;
     .Header = 3&lt;br /&gt;
     .Columns.Count = 1&lt;br /&gt;
     .Rows.Count = iRows&lt;br /&gt;
     .Columns[0].Text = &amp;quot;SUBTOTAL&amp;quot;&lt;br /&gt;
     .Columns[0].Alignment = Align.Right&lt;br /&gt;
     .Columns.Width = -1&lt;br /&gt;
   End With&lt;br /&gt;
   fPrice = CFloat(Time(Now)) * 1000&lt;br /&gt;
   For i As Integer = 0 To GridView1.Rows.Max&lt;br /&gt;
     fCasual.Shuffle()&lt;br /&gt;
     fValue = fPrice * fCasual.First&lt;br /&gt;
     GridView1[i, 0].Text = Format(fValue, &amp;quot;$,0.00&amp;quot;)&lt;br /&gt;
   Next&lt;br /&gt;
 &lt;br /&gt;
 End&lt;br /&gt;
  &lt;br /&gt;
  &lt;br /&gt;
 Public Sub btnTotal_Click()&lt;br /&gt;
  &lt;br /&gt;
   Dim hMat As Class&lt;br /&gt;
   Dim sMetod As String&lt;br /&gt;
   Dim sSubTotal As New String[]&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;FONT Color=gray&amp;gt;' ''Carica gli argomenti da passare al metodo della libreria.'' &amp;lt;/font&amp;gt;&lt;br /&gt;
   For i As Integer = 0 To GridView1.Rows.Max&lt;br /&gt;
     sSubTotal.Push(GridView1[i, 0].Text)&lt;br /&gt;
   Next&lt;br /&gt;
   If hCom.Library Then hMat = Class.Load(&amp;quot;Mat&amp;quot;)&lt;br /&gt;
   sMetod = hMat.Symbols[0]&lt;br /&gt;
 &amp;lt;FONT Color=gray&amp;gt;' ''Notare le parentesi che avvolgono il vettore degli argomenti che va passato come un elemento del vettore variant dei simboli.'' &amp;lt;/font&amp;gt;&lt;br /&gt;
   TextBox1.Text = Object.Call(hMat, sMetod, [sSubTotal])&lt;br /&gt;
  &lt;br /&gt;
 End&lt;br /&gt;
Vediamo cosa fa il codice.&lt;br /&gt;
&amp;lt;br&amp;gt;All'apertura per prima cosa carica dinamicamente la libreria come fosse un componente e lo verifica stampando i risultati in console.&lt;br /&gt;
&amp;lt;br&amp;gt;Sfruttando la data crea in modo random una serie di subtotali che scrive in forma di valuta (''currency'') nell'unica colonna della ''gridview''.&lt;br /&gt;
&amp;lt;br&amp;gt;Il codice del pulsante ''btnTotal'' carica dalla gridview in un vettore tutti i subtotali per poi passarli al metodo ''ReturnAddString'' ricevendone in cambio il totale formattato valuta.&lt;br /&gt;
&amp;lt;br&amp;gt;Come già sottolineato nel commento del codice, vanno notate le parentesi quadre indispensabili per passare un vettore (''subtotali'') al vettore (''symbol'') del metodo in ''Object.Call''.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Note= &lt;br /&gt;
[1]  Gambas fa parte dei linguaggi ''interpretati'', e quindi non ha il concetto di libreria dinamica.&lt;br /&gt;
&amp;lt;BR&amp;gt;Il concetto di ''libreria'' è solo inteso come codice riutilizzabile.&lt;br /&gt;
&lt;br /&gt;
[2] Potete anche fare riferimento a questa discussione del forum: https://www.gambas-it.org/smf/index.php?topic=7868.msg48590#msg48590&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Riferimenti=&lt;br /&gt;
* http://gambaswiki.org/wiki/doc/library?l=it&lt;/div&gt;</summary>
		<author><name>Vuott</name></author>
	</entry>
</feed>