<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="it">
	<id>https://www.gambas-it.org/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Orionis</id>
	<title>Gambas-it.org - Wikipedia - Contributi dell&amp;#039;utente [it]</title>
	<link rel="self" type="application/atom+xml" href="https://www.gambas-it.org/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Orionis"/>
	<link rel="alternate" type="text/html" href="https://www.gambas-it.org/wiki/index.php/Speciale:Contributi/Orionis"/>
	<updated>2026-10-23T11:06:57Z</updated>
	<subtitle>Contributi dell&amp;#039;utente</subtitle>
	<generator>MediaWiki 1.39.15</generator>
	<entry>
		<id>https://www.gambas-it.org/wiki/index.php?title=Guide_della_comunit%C3%A0&amp;diff=15703</id>
		<title>Guide della comunità</title>
		<link rel="alternate" type="text/html" href="https://www.gambas-it.org/wiki/index.php?title=Guide_della_comunit%C3%A0&amp;diff=15703"/>
		<updated>2014-07-01T13:11:29Z</updated>

		<summary type="html">&lt;p&gt;Orionis: /* Collection */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Raccolta di guide sui componenti, sui metodi e sugli algoritmi del linguaggio Gambas, nonché su ogni altro argomento utile, scritti e mantenuti dalla comunità italiana Gambas-it&lt;br /&gt;
&lt;br /&gt;
== Balloon ==&lt;br /&gt;
&lt;br /&gt;
* [[Individuare l'ID di un Balloon]]&lt;br /&gt;
&lt;br /&gt;
* [[Spostare un Ballon]]&lt;br /&gt;
&lt;br /&gt;
== Cairo ==&lt;br /&gt;
&lt;br /&gt;
* [[Spostare il testo con il mouse all'interno dell'area grafica]]&lt;br /&gt;
&lt;br /&gt;
== Clipboard ==&lt;br /&gt;
&lt;br /&gt;
* [[Uso della classe Clipboard]]&lt;br /&gt;
&lt;br /&gt;
== Collection ==&lt;br /&gt;
&lt;br /&gt;
* [[Richiamare un campo di una Collection in un'altra Collection]]&lt;br /&gt;
&lt;br /&gt;
* [[Richiamare un'intera Collection nel campo di un'altra Collection]]&lt;br /&gt;
&lt;br /&gt;
* [[Richiamare un metodo della Classe di un oggetto inserito in una Collection]]&lt;br /&gt;
&lt;br /&gt;
* [[Confronto Array di Strutture verso Collezione di Classi]]&lt;br /&gt;
&lt;br /&gt;
== ComboBox ==&lt;br /&gt;
&lt;br /&gt;
* [[ComboBox: creare una lista da codice]]&lt;br /&gt;
&lt;br /&gt;
== Componenti ==&lt;br /&gt;
&lt;br /&gt;
* [[Attivare un Componente dinamicamente da codice]]&lt;br /&gt;
&lt;br /&gt;
==== Realizzazione dei Componenti ====&lt;br /&gt;
&lt;br /&gt;
* [[Come creare un componente]]&lt;br /&gt;
&lt;br /&gt;
* [[Tutorial - creare un componente: il frame]]&lt;br /&gt;
&lt;br /&gt;
==== Componenti della Comunità Gambas-it.org ====&lt;br /&gt;
&lt;br /&gt;
* [[GridBox]]&lt;br /&gt;
&lt;br /&gt;
* [[gb.strLib]]&lt;br /&gt;
&lt;br /&gt;
== DBus ==&lt;br /&gt;
&lt;br /&gt;
* [[Introduzione a DBus]]&lt;br /&gt;
&lt;br /&gt;
== DialogBox ==&lt;br /&gt;
&lt;br /&gt;
* [[Far mostrare una particolare estensione di file]]&lt;br /&gt;
&lt;br /&gt;
* [[Far mostrare l&amp;amp;acute;estensione dell&amp;amp;acute;ultimo file precedentemente aperto]]&lt;br /&gt;
&lt;br /&gt;
* [[Filtrare contemporaneamente con il Dialog.Filter più estensioni di file]]&lt;br /&gt;
&lt;br /&gt;
* [[Caricare più file da aprire in sequenza]]&lt;br /&gt;
&lt;br /&gt;
== Drag - Drop ==&lt;br /&gt;
&lt;br /&gt;
* [[Codice essenziale per effettuare il Drag-Drop di un'immagine]]&lt;br /&gt;
&lt;br /&gt;
* [[Codice essenziale per effettuare il Drag-Drop di un testo]]&lt;br /&gt;
&lt;br /&gt;
* [[Mostrare il contenuto di un file di testo con il solo drop del file in un oggetto di testo]]&lt;br /&gt;
&lt;br /&gt;
* [[Mostrare un'immagine con il Drop del suo file in una PictureBox]]&lt;br /&gt;
&lt;br /&gt;
== DrawingArea ==&lt;br /&gt;
&lt;br /&gt;
* [[Drag-Drop di un testo in una DrawingArea]]&lt;br /&gt;
&lt;br /&gt;
* [[Generare un file immagine da una DrawingArea]]&lt;br /&gt;
&lt;br /&gt;
* [[Mostrare tutte le sfumature di un colore]]&lt;br /&gt;
&lt;br /&gt;
* [[Ruotare il testo in una DrawingArea]]&lt;br /&gt;
&lt;br /&gt;
* [[Scrivere del testo in una DrawingArea]]&lt;br /&gt;
&lt;br /&gt;
* [[Spostare con il mouse il testo in una DrawingArea]]&lt;br /&gt;
&lt;br /&gt;
* [[Stampare il contenuto di una DrawingArea]]&lt;br /&gt;
&lt;br /&gt;
== Editor ==&lt;br /&gt;
&lt;br /&gt;
* [[Cercare una parola nel testo di un Editor]]&lt;br /&gt;
&lt;br /&gt;
== File immagine particolari ==&lt;br /&gt;
&lt;br /&gt;
* [[Struttura del formato BMP]]&lt;br /&gt;
&lt;br /&gt;
* [[Struttura del formato XPM]]&lt;br /&gt;
&lt;br /&gt;
* [[Struttura e gestione del file di tipo PNM]]&lt;br /&gt;
&lt;br /&gt;
== Font ==&lt;br /&gt;
&lt;br /&gt;
* [[Utilizzare Font senza installarli nel sistema]]&lt;br /&gt;
&lt;br /&gt;
== Form e finestre ==&lt;br /&gt;
&lt;br /&gt;
* [[Chiudere tutte le finestre aperte da un applicativo]]&lt;br /&gt;
&lt;br /&gt;
* [[Creare un Form mediante la Classe Window]]&lt;br /&gt;
&lt;br /&gt;
* [[Creare una finestra ed inserirvi del testo con le funzioni esterne di Libcaca]]&lt;br /&gt;
&lt;br /&gt;
* [[Creare una finestra mediante le funzioni del API di OpenCV]]&lt;br /&gt;
&lt;br /&gt;
* [[Creare una finestra mediante le funzioni del API di SDL]]&lt;br /&gt;
&lt;br /&gt;
* [[Creare una finestra mediante le funzioni del API di X11]]&lt;br /&gt;
&lt;br /&gt;
* [[Passare ad un Form un valore diverso da un Intero alla chiusura di un Form secondario]]&lt;br /&gt;
&lt;br /&gt;
* [[Passare ad un Form un valore Integer alla chiusura di un Form secondario]]&lt;br /&gt;
&lt;br /&gt;
* [[Semitrasparenza di un Form]]&lt;br /&gt;
&lt;br /&gt;
* [[Sollevare l'evento _Resize al ridimensionamento di un Form secondario]]&lt;br /&gt;
&lt;br /&gt;
== Funzioni ==&lt;br /&gt;
&lt;br /&gt;
* [[Gestire Funzioni presenti in Moduli e Classi come oggetti]]&lt;br /&gt;
&lt;br /&gt;
* [[Scrivere una Funzione]]&lt;br /&gt;
&lt;br /&gt;
== Gambas con HTML e JavaScript ==&lt;br /&gt;
&lt;br /&gt;
* [[Introduzione - uso necessario dell&amp;amp;acute;oggetto WebView]]&lt;br /&gt;
&lt;br /&gt;
==== Applicazioni specifiche ====&lt;br /&gt;
&lt;br /&gt;
* [[Controllare i link all&amp;amp;acute;interno di una pagina WEB]]&lt;br /&gt;
&lt;br /&gt;
* [[Creare un ComboBox in una tabella e passare i suoi valori selezionati al codice Gambas]]&lt;br /&gt;
&lt;br /&gt;
* [[Inserire dati con un InputBox senza bloccare il programma]]&lt;br /&gt;
&lt;br /&gt;
* [[Mostrare una finestra tipo MessageBox senza bloccare il programma]]&lt;br /&gt;
&lt;br /&gt;
* [[Passare un valore di tipo stringa dall&amp;amp;acute;Html a Gambas e viceversa]]&lt;br /&gt;
&lt;br /&gt;
* [[Testo scorrevole dall'alto verso il basso e viceversa]]&lt;br /&gt;
&lt;br /&gt;
== Gambas3 &amp;amp; SubVersion ==&lt;br /&gt;
&lt;br /&gt;
* [[Gambas3 &amp;amp; SubVersion]]&lt;br /&gt;
&lt;br /&gt;
== Gestione dei dati audio e dei file audio ==&lt;br /&gt;
&lt;br /&gt;
* [[Calcolare a priori la durata di un file audio]]&lt;br /&gt;
&lt;br /&gt;
* [[Creare il blocco d'intestazione di un file WAV]]&lt;br /&gt;
&lt;br /&gt;
* [[Creare un file WAV da un file .orc e un file .sco di Csound con le funzioni esterne del API di libcsound64]]&lt;br /&gt;
&lt;br /&gt;
* [[Convertire un file audio mpeg in .wav con le funzioni esterne del API di mpg123]]&lt;br /&gt;
&lt;br /&gt;
* [[Convertire un file OggVorbis in WAV con le funzioni esterne del API di Libvorbisidec]]&lt;br /&gt;
&lt;br /&gt;
* [[Convertire un file OggVorbis in WAV ed estrarne anche informazioni con le funzioni esterne del API di VorbisFile]]&lt;br /&gt;
&lt;br /&gt;
* [[Convertire un file WAV in formato AAC con l'API di Libvo-aacenc]]&lt;br /&gt;
&lt;br /&gt;
* [[Convertire un file WAV in formato AAC con le funzioni esterne del API di Faac]]&lt;br /&gt;
&lt;br /&gt;
* [[Creare un semplice Client di Jack]]&lt;br /&gt;
&lt;br /&gt;
* [[Decomprimere e docodificare un file mp3 con le funzioni esterne del API di AVbin]]&lt;br /&gt;
&lt;br /&gt;
* [[Eseguire un file audio ed estrarne informazioni mediante le funzioni esterne del API di libcsfml]]&lt;br /&gt;
&lt;br /&gt;
* [[Eseguire un file audio mediante il codice html e mediante il codice javascript]]&lt;br /&gt;
&lt;br /&gt;
* [[Eseguire un file audio mediante la proprietà Webview.Url]]&lt;br /&gt;
&lt;br /&gt;
* [[Eseguire un file mp3 usando le API di mpg123 e di Alsa]]&lt;br /&gt;
&lt;br /&gt;
* [[Eseguire un file mp3 usando l'API di Smpeg]]&lt;br /&gt;
&lt;br /&gt;
* [[Eseguire un file WAV mediante le funzioni esterne del API di libaudiofile e di Alsa]]&lt;br /&gt;
&lt;br /&gt;
* [[Eseguire un file WAV usando l'API di SndFile e di Alsa]]&lt;br /&gt;
&lt;br /&gt;
* [[Estrarre da un file MP3 i soli dati audio grezzi mediante la libreria Libmad]]&lt;br /&gt;
&lt;br /&gt;
* [[Estrarre da un file WAV i soli dati audio grezzi]]&lt;br /&gt;
&lt;br /&gt;
* [[Estrarre i TAG da un file SPC con le funzioni esterne del API di Libspctag]]&lt;br /&gt;
&lt;br /&gt;
* [[Estrarre informazioni da un file .wav]]&lt;br /&gt;
&lt;br /&gt;
* [[Estrarre informazioni da un file MP3 con le funzioni esterne del API di Id3tag]]&lt;br /&gt;
&lt;br /&gt;
* [[Estrarre informazioni da un file MP3 con le funzioni esterne del API di Smpeg]]&lt;br /&gt;
&lt;br /&gt;
* [[Estrarre informazioni da un file OggVorbis con le funzioni esterne del API di Vorbisfile]]&lt;br /&gt;
&lt;br /&gt;
* [[Estrarre informazioni e TAG da file audio con le funzioni esterne del API di LibTagC]]&lt;br /&gt;
&lt;br /&gt;
* [[Estrarre informazioni e TAG da un file MP3 con le funzioni esterne del API di Avbin]]&lt;br /&gt;
&lt;br /&gt;
* [[Estrarre informazioni e TAG da un file MP3 con le sole funzioni di Gambas]]&lt;br /&gt;
&lt;br /&gt;
* [[Estrarre informazioni e TAG da un file OggVorbis con le sole funzioni di Gambas]]&lt;br /&gt;
&lt;br /&gt;
* [[Estrarre informazioni generali da un file audio con le funzioni esterne del API di Sox]]&lt;br /&gt;
&lt;br /&gt;
* [[Fondere insieme due file WAV]]&lt;br /&gt;
&lt;br /&gt;
* [[La struttura di un file MPEG]]&lt;br /&gt;
&lt;br /&gt;
* [[La gestione mediante il componente gb.media]]&lt;br /&gt;
&lt;br /&gt;
* [[La gestione mediante il componente gb.openal]]&lt;br /&gt;
&lt;br /&gt;
* [[La gestione mediante il componente gb.sdl.sound]]&lt;br /&gt;
&lt;br /&gt;
* [[La gestione mediante le funzioni esterne delle API di Alsa]]&lt;br /&gt;
&lt;br /&gt;
* [[La gestione mediante le funzioni esterne del API di Canberra]]&lt;br /&gt;
&lt;br /&gt;
* [[La gestione mediante le funzioni esterne delle API di GStreamer]]&lt;br /&gt;
&lt;br /&gt;
* [[La gestione mediante le funzioni esterne dell'API di Lame]]&lt;br /&gt;
&lt;br /&gt;
* [[La gestione mediante le funzioni esterne delle API di LibAo]]&lt;br /&gt;
&lt;br /&gt;
* [[La gestione mediante le funzioni esterne dell'API di OpenAL]]&lt;br /&gt;
&lt;br /&gt;
* [[La gestione mediante le funzioni esterne del API di PortAudio e SndFile]]&lt;br /&gt;
&lt;br /&gt;
* [[La gestione mediante le funzioni esterne dell'API di PulseAudio]]&lt;br /&gt;
&lt;br /&gt;
* [[La gestione mediante le funzioni esterne dell'API di SDL]]&lt;br /&gt;
&lt;br /&gt;
* [[La gestione mediante le funzioni esterne del API di Sox]]&lt;br /&gt;
&lt;br /&gt;
* [[La gestione mediante le funzioni esterne del API di VLC]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere un file di dati audio grezzi da un file .pat]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere un file WAV da un file Midi]]&lt;br /&gt;
&lt;br /&gt;
* [[Unire due file WAV]]&lt;br /&gt;
&lt;br /&gt;
* [[Visualizzare la forma d'onda di un file WAV]]&lt;br /&gt;
&lt;br /&gt;
==== Ascolto radio da flusso web ====&lt;br /&gt;
&lt;br /&gt;
* [[Riproduzione dell'audio di radio WEB con le funzioni esterne del API di GStreamer]]&lt;br /&gt;
&lt;br /&gt;
* [[Riproduzione dell'audio di radio WEB con le funzioni esterne del API di VLC]]&lt;br /&gt;
&lt;br /&gt;
* [[Riproduzione dell'audio di radio WEB con l'oggetto WebView e con il codice HTML]]&lt;br /&gt;
&lt;br /&gt;
==== Codifica del parlato e decodifica dei dati codificati ====&lt;br /&gt;
&lt;br /&gt;
* [[Codifica del parlato mediante le funzioni esterne del API di Speex]]&lt;br /&gt;
&lt;br /&gt;
* [[Decodifica dei dati precedentemente codificati mediante le funzioni esterne del API di Speex]]&lt;br /&gt;
&lt;br /&gt;
==== Dal testo al parlato (Text-To-Speech) ====&lt;br /&gt;
&lt;br /&gt;
* [[&amp;quot;Dal testo al parlato&amp;quot; mediante le funzioni esterne del API di eSpeack]]&lt;br /&gt;
&lt;br /&gt;
* [[&amp;quot;Dal testo al parlato&amp;quot; mediante le funzioni esterne del API di Pico TTS]]&lt;br /&gt;
&lt;br /&gt;
* [[&amp;quot;Dal testo al parlato&amp;quot; mediante le funzioni esterne del API di Speech-Dispatcher]]&lt;br /&gt;
&lt;br /&gt;
==== I/O audio ====&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere con le funzioni esterne di ALSA i dispositivi audio presenti nel sistema]]&lt;br /&gt;
&lt;br /&gt;
* [[Rilevare se la scheda audio sta processando dati audio]]&lt;br /&gt;
&lt;br /&gt;
* [[Sapere con le funzioni esterne di ALSA quali schede audio sono installate nel computer]]&lt;br /&gt;
&lt;br /&gt;
== Gestione dei dati MIDI e dei file ''.mid''==&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere la durata di un file Midi mediante le funzioni esterne del API di Allegro]]&lt;br /&gt;
&lt;br /&gt;
* [[Creare un semplice Client Midi di Jack]]&lt;br /&gt;
&lt;br /&gt;
* [[Eliminare una traccia da un file MIDI]]&lt;br /&gt;
&lt;br /&gt;
* [[Eseguire un file MIDI mediante il codice html e mediante il codice javascript]]&lt;br /&gt;
&lt;br /&gt;
* [[Eseguire un file MIDI mediante il componente gb.media]]&lt;br /&gt;
&lt;br /&gt;
* [[Eseguire un file MIDI mediante il componente gb.openal]]&lt;br /&gt;
&lt;br /&gt;
* [[Eseguire un file MIDI mediante il componente gb.sdl.sound]]&lt;br /&gt;
&lt;br /&gt;
* [[Fondere insieme due file MIDI]]&lt;br /&gt;
&lt;br /&gt;
* [[Intercettare dati Midi grezzi con le funzioni esterne del API di PortMidi]]&lt;br /&gt;
&lt;br /&gt;
* [[La gestione dei file MIDI mediante le funzioni esterne del API di GStreamer]]&lt;br /&gt;
&lt;br /&gt;
* [[La gestione dei file MIDI mediante le funzioni esterne del API di Fluidsynth]]&lt;br /&gt;
&lt;br /&gt;
* [[La gestione dei file MIDI mediante le funzioni esterne del API di OpenAl]]&lt;br /&gt;
&lt;br /&gt;
* [[La gestione dei file MIDI mediante le funzioni esterne del API di SDL]]&lt;br /&gt;
&lt;br /&gt;
* [[La gestione dei file MIDI mediante le funzioni esterne del API di VLC]]&lt;br /&gt;
&lt;br /&gt;
* [[La gestione dei file MIDI mediante le funzioni esterne del API di WildMidi]]&lt;br /&gt;
&lt;br /&gt;
* [[Gestione del MIDI con ALSA]]&lt;br /&gt;
&lt;br /&gt;
* [[Gestione del MIDI con O.S.S.]] (&amp;lt;FONT color=darkred&amp;gt;obsoleto&amp;lt;/font&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
==== I/O Midi ====&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere con le funzioni esterne di ALSA i dispositivi Midi presenti nel sistema]]&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere con le funzioni esterne di PortMidi le porte Midi disponibili nel sistema]]&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere con le funzioni esterne di TSE3 le porte Midi disponibili nel sistema]]&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere i Client Midi di ALSA correnti attivi nel sistema ]]&lt;br /&gt;
&lt;br /&gt;
== Gestione dei File ==&lt;br /&gt;
&lt;br /&gt;
* [[Arrestare temporaneamente l'intercettazione del flusso di dati da un file-device]]&lt;br /&gt;
&lt;br /&gt;
* [[Azzerare un gruppo di byte in un file]]&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere a quale applicazione è associato un tipo di file]]&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere ed impostare i permessi di un file]]&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere la dimensione di un file]]&lt;br /&gt;
&lt;br /&gt;
* [[Eliminare un byte all'interno di un file binario]]&lt;br /&gt;
&lt;br /&gt;
* [[Estrarre da una cartella uno o più file nascosti]]&lt;br /&gt;
&lt;br /&gt;
* [[Estrarre il percorso di un file]]&lt;br /&gt;
&lt;br /&gt;
* [[Estrarre l'icona di un tipo di file]]&lt;br /&gt;
&lt;br /&gt;
* [[Identificare un tipo di file dal suo mimetype]]&lt;br /&gt;
&lt;br /&gt;
* [[Identificare un tipo di file dalla sua estensione]]&lt;br /&gt;
&lt;br /&gt;
* [[Leggere dati dai &amp;quot;File Descriptor&amp;quot; passati da funzioni esterne]]&lt;br /&gt;
&lt;br /&gt;
* [[Leggere un file con READ]]&lt;br /&gt;
&lt;br /&gt;
* [[Leggere un file di testo]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere un file coerente da dati di tipo stringa]]&lt;br /&gt;
&lt;br /&gt;
* [[Percorso assoluto e percorso relativo dei file]]&lt;br /&gt;
&lt;br /&gt;
* [[Reindirizzare lo standard output con Output To]]&lt;br /&gt;
&lt;br /&gt;
* [[Riempire un vettore di tipo Byte senza Read]]&lt;br /&gt;
&lt;br /&gt;
* [[Salvare in un file le stringhe contenute in un vettore di tipo Stringa]]&lt;br /&gt;
&lt;br /&gt;
* [[Sapere se un file di nome sconosciuto è stato creato]]&lt;br /&gt;
&lt;br /&gt;
* [[Scaricare un file da internet]]&lt;br /&gt;
&lt;br /&gt;
* [[Scrivere all'interno di un file di testo]]&lt;br /&gt;
&lt;br /&gt;
* [[Scrivere in un file i dati presenti in un vettore di tipo Byte]]&lt;br /&gt;
&lt;br /&gt;
* [[Scrivere in un file solo alcuni dati presenti in un'area riservata di memoria]]&lt;br /&gt;
&lt;br /&gt;
* [[Scrivere in un vettore i dati di un file]]&lt;br /&gt;
&lt;br /&gt;
* [[Scrivere un file di testo]]&lt;br /&gt;
&lt;br /&gt;
== Gestione dei file PDF ==&lt;br /&gt;
&lt;br /&gt;
* [[Codice essenziale per mostrare un file PDF]]&lt;br /&gt;
&lt;br /&gt;
* [[Creare un file PDF]]&lt;br /&gt;
&lt;br /&gt;
* [[Stampare un file PDF]]&lt;br /&gt;
&lt;br /&gt;
== Gestione dei processi mediante &amp;quot;Process&amp;quot; ==&lt;br /&gt;
&lt;br /&gt;
* [[Apertura e chiusura di un processo mediante Process]]&lt;br /&gt;
&lt;br /&gt;
* [[Attendere e verificare la chiusura di un programma gestito da Process]]&lt;br /&gt;
&lt;br /&gt;
* [[Lettura dati da un Processo e scrittura dati in un Processo]]&lt;br /&gt;
&lt;br /&gt;
== Gestione del CD-ROM ==&lt;br /&gt;
&lt;br /&gt;
* [[Individuare con le funzioni dell'API di SDL i drive CD-ROM connessi al sistema]]&lt;br /&gt;
&lt;br /&gt;
== Gestione delle immagini ==&lt;br /&gt;
&lt;br /&gt;
* [[Cancellare una immagine in una PictureBox]]&lt;br /&gt;
&lt;br /&gt;
* [[Creare da codice un'immagine trasparente]]&lt;br /&gt;
&lt;br /&gt;
* [[Fondere due immagini in una sola]]&lt;br /&gt;
&lt;br /&gt;
* [[Immagine di sfondo al testo in una TextEdit ed in una TextLabel]]&lt;br /&gt;
&lt;br /&gt;
* [[Immagine scorrevole]]&lt;br /&gt;
&lt;br /&gt;
* [[Immagine tratta dal WEB resa lampeggiante]]&lt;br /&gt;
&lt;br /&gt;
* [[Imporre un colore uniforme semitrasparente su una immagine]]&lt;br /&gt;
&lt;br /&gt;
* [[Individuare il colore di un determinato pixel]]&lt;br /&gt;
&lt;br /&gt;
* [[Inserire del testo in una Image ed in una Picture]]&lt;br /&gt;
&lt;br /&gt;
* [[Modi di caricare un'immagine di tipo ''Picture'']]&lt;br /&gt;
&lt;br /&gt;
* [[Mostrare un'immagine in una finestra con le funzioni dell'API di OpenCV]]&lt;br /&gt;
&lt;br /&gt;
* [[Mostrare un'immagine BMP in una finestra con le funzioni del API di SDL]]&lt;br /&gt;
&lt;br /&gt;
* [[Mostrare una parte di un'immagine]]&lt;br /&gt;
&lt;br /&gt;
* [[Rendere semitrasparente una immagine]]&lt;br /&gt;
&lt;br /&gt;
* [[Rendere trasparente una immagine in base ad un colore specifico]]&lt;br /&gt;
&lt;br /&gt;
* [[Ruotare specularmente una immagine ed un carattere]]&lt;br /&gt;
&lt;br /&gt;
* [[Ruotare una immagine sul proprio asse centrale]]&lt;br /&gt;
&lt;br /&gt;
* [[Scaricare una immagine da un sito internet]]&lt;br /&gt;
&lt;br /&gt;
* [[Utilizzare una GIF animata]]&lt;br /&gt;
&lt;br /&gt;
== GridView ==&lt;br /&gt;
&lt;br /&gt;
* [[Aggiungere righe mediante un tasto]]&lt;br /&gt;
&lt;br /&gt;
* [[Cambiare il colore di fondo di una riga cliccata e far tornare quello di un'altra al colore iniziale]]&lt;br /&gt;
&lt;br /&gt;
* [[Centrare il testo nell'header]]&lt;br /&gt;
&lt;br /&gt;
* [[Drag-Drop di un'immagine in una cella di una GridView]]&lt;br /&gt;
&lt;br /&gt;
* [[Drag-Drop di un testo da una cella di una GridView ad una cella di un'altra GridView]]&lt;br /&gt;
&lt;br /&gt;
* [[Effettuare una ricerca nelle celle]]&lt;br /&gt;
&lt;br /&gt;
* [[Header contenente due o più righe]]&lt;br /&gt;
&lt;br /&gt;
* [[Impostare due parole ciascuna all'estremità opposta di una cella]]&lt;br /&gt;
&lt;br /&gt;
* [[Impostare le righe e le colonne ed assegnare a ciascuna cella un valore di un array bidimensionale]]&lt;br /&gt;
&lt;br /&gt;
* [[Impostare font, colore dei caratteri e colore di sfondo diversi per ogni cella]]&lt;br /&gt;
&lt;br /&gt;
* [[Individuare la cella nella quale si è cliccato]]&lt;br /&gt;
&lt;br /&gt;
* [[Inserire un'immagine adattandola alle dimensioni della cella]]&lt;br /&gt;
&lt;br /&gt;
* [[Ordinare i valori all'interno di una colonna]]&lt;br /&gt;
&lt;br /&gt;
* [[Ordinare i valori di più righe in base ad una colonna]]&lt;br /&gt;
&lt;br /&gt;
* [[Unire in una GridView le celle in un'unica grande cella]]&lt;br /&gt;
&lt;br /&gt;
== InputBox ==&lt;br /&gt;
&lt;br /&gt;
* [[Impostare le dimensioni di un InputBox]]&lt;br /&gt;
&lt;br /&gt;
== Interagire con la tastiera ==&lt;br /&gt;
&lt;br /&gt;
* [[Individuare i tasti della tastiera intercettando i dati grezzi dal suo file-device]]&lt;br /&gt;
&lt;br /&gt;
* [[Keypress - Keyrelease - Key]]&lt;br /&gt;
&lt;br /&gt;
== Interfaccia a linea di comando ==&lt;br /&gt;
&lt;br /&gt;
* [[CLI]]&lt;br /&gt;
&lt;br /&gt;
== Interfacciare Gambas con librerie esterne .so==&lt;br /&gt;
&lt;br /&gt;
* [[Documento originale (Inglese)]] &lt;br /&gt;
&lt;br /&gt;
* [[Traduzione della comunità di Gambas-it]]&lt;br /&gt;
&lt;br /&gt;
==== Ulteriori contributi sulle librerie e sulle funzioni esterne ====&lt;br /&gt;
&lt;br /&gt;
* [[Extern: richiamare funzioni esterne a Gambas]]&lt;br /&gt;
&lt;br /&gt;
* [[Avviare con l'appoggio di una libreria esterna un semplice sorgente C senza compilarlo]]&lt;br /&gt;
&lt;br /&gt;
* [[Creare una Libreria condivisa (Shared Library) .so]]&lt;br /&gt;
&lt;br /&gt;
* [[Dereferenziare senza Memory-Stream un pointer ad una Struttura, passato da una funzione esterna]]&lt;br /&gt;
&lt;br /&gt;
* [[Gestire con sicurezza le Strutture esterne]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere l'indirizzo ed il valore di una variabile globale situata in una libreria condivisa]]&lt;br /&gt;
&lt;br /&gt;
* [[Passare un&amp;amp;#96;area riservata di memoria ad una funzione esterna]]&lt;br /&gt;
&lt;br /&gt;
* [[Richiamare con l'appoggio di una libreria esterna una funzione presente in un sorgente C]]&lt;br /&gt;
&lt;br /&gt;
* [[Verificare quali dati Gambas passa ad una funzione esterna]]&lt;br /&gt;
&lt;br /&gt;
==== Richiamo ed uso di particolari funzioni esterne ====&lt;br /&gt;
&lt;br /&gt;
* [[atoi()]]&lt;br /&gt;
* [[Creare una mappatura della memoria mediante mmap()]]&lt;br /&gt;
* [[FcStrPlus ()]]&lt;br /&gt;
* [[fopen ()]]&lt;br /&gt;
* [[isalnum()]]&lt;br /&gt;
* [[iscntrl()]]&lt;br /&gt;
* [[isprint()]]&lt;br /&gt;
* [[memcpy ()]]&lt;br /&gt;
* [[memset ()]]&lt;br /&gt;
* [[printf ()]]&lt;br /&gt;
* [[scanf()]]&lt;br /&gt;
* [[strcat()]]&lt;br /&gt;
&lt;br /&gt;
==== Scrivendo particolari librerie esterne in C ====&lt;br /&gt;
&lt;br /&gt;
* [[Scrivere una libreria esterna alla quale viene passata una stringa e che ritorna una stringa]]&lt;br /&gt;
&lt;br /&gt;
* [[Scrivere una libreria esterna che chiama funzioni esterne puntate contenute in un Vettore]]&lt;br /&gt;
&lt;br /&gt;
* [[Scrivere una libreria esterna che chiama funzioni esterne puntate contenute in una Struttura]]&lt;br /&gt;
&lt;br /&gt;
* [[Scrivere una libreria esterna che chiama una funzione esterna puntata]]&lt;br /&gt;
&lt;br /&gt;
* [[Scrivere una libreria esterna che chiama una funzione puntata membro di una Struttura ed un'altra indipendente]]&lt;br /&gt;
&lt;br /&gt;
* [[Scrivere una libreria esterna che ritorna un valore attraverso un parametro di una sua funzione]]&lt;br /&gt;
&lt;br /&gt;
* [[Scrivere una libreria esterna che ritorna un puntatore ad un buffer di tipo char]]&lt;br /&gt;
&lt;br /&gt;
* [[Scrivere una libreria esterna che ritorna un Vettore di tipo char]]&lt;br /&gt;
&lt;br /&gt;
* [[Scrivere una libreria esterna che ritorna una Struttura]]&lt;br /&gt;
&lt;br /&gt;
* [[Scrivere una libreria esterna contenente una Funzione di Callback che chiama una Funzione Callback in Gambas]]&lt;br /&gt;
&lt;br /&gt;
== Librerie .gambas ==&lt;br /&gt;
&lt;br /&gt;
* [[Importare ed utilizzare librerie .gambas]]&lt;br /&gt;
&lt;br /&gt;
==== Librerie della Comunità Gambas-it.org ====&lt;br /&gt;
&lt;br /&gt;
* [[datiMidigrezzi.gambas]]&lt;br /&gt;
&lt;br /&gt;
* [[lib.Alsa.Seq.Midi.gambas]]&lt;br /&gt;
&lt;br /&gt;
* [[libAlureMidi.gambas]]&lt;br /&gt;
&lt;br /&gt;
* [[Libfluidmidi.gambas]]&lt;br /&gt;
&lt;br /&gt;
* [[RTFLib.gambas]]&lt;br /&gt;
&lt;br /&gt;
* [[strLib.gambas]]&lt;br /&gt;
&lt;br /&gt;
* [[trasparente.gambas]]&lt;br /&gt;
&lt;br /&gt;
====Classi della Comunità Gambas-it.org====&lt;br /&gt;
&lt;br /&gt;
* [[Fifo]]&lt;br /&gt;
&lt;br /&gt;
* [[TrasfImpLett]]&lt;br /&gt;
&lt;br /&gt;
== ListBox ==&lt;br /&gt;
&lt;br /&gt;
* [[Assegnare ad un oggetto di testo il contenuto di un elemento cliccandovi sopra]]&lt;br /&gt;
* [[Inserire un array di dati di tipo stringa]]&lt;br /&gt;
&lt;br /&gt;
== Matrici e Vettori ==&lt;br /&gt;
&lt;br /&gt;
* [[Array di Array]]&lt;br /&gt;
&lt;br /&gt;
* [[Array dinamici – creazione e riempimento]]&lt;br /&gt;
&lt;br /&gt;
* [[Convertire i valori di tipo Byte di un vettore in valori di tipo Stringa]]&lt;br /&gt;
&lt;br /&gt;
* [[Gestione di una coda mediante array in modo circolare]]&lt;br /&gt;
&lt;br /&gt;
* [[Matrici (Vettori multidimensionali) definite]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere un vettore di tipo Byte da una Stringa]]&lt;br /&gt;
&lt;br /&gt;
* [[Utilizzare un Vettore al posto di una Matrice]]&lt;br /&gt;
&lt;br /&gt;
* [[Variare successivamente il numero degli elementi di un vettore]]&lt;br /&gt;
&lt;br /&gt;
== Menu ==&lt;br /&gt;
&lt;br /&gt;
* [[Creare Menu a finestra]]&lt;br /&gt;
&lt;br /&gt;
* [[Creare Menu da codice e non con l&amp;amp;acute;Editor-Menu]]&lt;br /&gt;
&lt;br /&gt;
* [[Far apparire un Balloon, quando si passa con il mouse su un menu]]&lt;br /&gt;
&lt;br /&gt;
* [[Modifiche delle proprietà dei Menu]]&lt;br /&gt;
&lt;br /&gt;
== MessageBox ==&lt;br /&gt;
&lt;br /&gt;
* [[Impostare le dimensioni del MessageBox]]&lt;br /&gt;
&lt;br /&gt;
* [[Individuare l'ID della finestra di un MessageBox generato da un programma]]&lt;br /&gt;
&lt;br /&gt;
* [[Interruzione di riga con ritorno a capo]]&lt;br /&gt;
&lt;br /&gt;
* [[Spostare o ridimensionare una finestra di un MessageBox]]&lt;br /&gt;
&lt;br /&gt;
== Miscellanea ==&lt;br /&gt;
&lt;br /&gt;
* [[Cliccare in un oggetto qualsiasi o in una immagine suddivisi in rettangoli]]&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere il fuso orario (TimeZone) impostato nel proprio sistema]]&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere la versione di Gambas]]&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere l'hostname impostato nel proprio sistema]]&lt;br /&gt;
&lt;br /&gt;
* [[Controllare la temperatura dell'hardware mediante le funzioni del API di libsensors]]&lt;br /&gt;
&lt;br /&gt;
* [[Conversione di un angolo]]&lt;br /&gt;
&lt;br /&gt;
* [[Disegnare &amp;quot;a mano&amp;quot; su un contenitore diverso da una DrawingArea]]&lt;br /&gt;
&lt;br /&gt;
* [[Estrarre il valore di una costante definita in un file d'intestazione in C]]&lt;br /&gt;
&lt;br /&gt;
* [[Individuare con precisione il percorso ed il nome della Scrivania]]&lt;br /&gt;
&lt;br /&gt;
* [[Leggere in una cartella]]&lt;br /&gt;
&lt;br /&gt;
* [[Modificare il &amp;quot;passo&amp;quot; del ciclo For]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere informazioni sugli schermi disponibili mediante le funzioni del API di X11]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere la lista di tutti i dispositivi USB attivi nel sistema]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere una schermata (&amp;quot;screenshot&amp;quot;) con Gambas]]&lt;br /&gt;
&lt;br /&gt;
* [[Visualizzare il tempo trascorso dall'ultimo avvio del sistema]]&lt;br /&gt;
&lt;br /&gt;
== Mouse ==&lt;br /&gt;
&lt;br /&gt;
* [[Evento rotellina]]&lt;br /&gt;
&lt;br /&gt;
* [[Intercettare i dati del mouse dal suo file-device]]&lt;br /&gt;
&lt;br /&gt;
* [[Intercettare il tasto premuto del mouse]]&lt;br /&gt;
&lt;br /&gt;
* [[Modificare l&amp;amp;#180;aspetto del cursore]]&lt;br /&gt;
&lt;br /&gt;
* [[Spostare da codice il mouse sullo schermo]]&lt;br /&gt;
&lt;br /&gt;
== Oggetti in generale ==&lt;br /&gt;
&lt;br /&gt;
* [[Assegnare da codice più oggetti ad un Gruppo]]&lt;br /&gt;
&lt;br /&gt;
* [[Assegnare un valore ad una proprietà di un oggetto]]&lt;br /&gt;
&lt;br /&gt;
* [[Creare array di oggetti]]&lt;br /&gt;
&lt;br /&gt;
* [[Creare e dimensionare un oggetto con lo spostamento del mouse sul form]]&lt;br /&gt;
&lt;br /&gt;
* [[Creare più oggetti del medesimo tipo senza variabile array]]&lt;br /&gt;
&lt;br /&gt;
* [[Impedire che un oggetto sollevi qualsiasi evento]]&lt;br /&gt;
&lt;br /&gt;
* [[Incrementare e decrementare la quantità di oggetti cliccando rispettivamente sull'ultimo e sul penultimo creato]]&lt;br /&gt;
&lt;br /&gt;
* [[Individuare una Classe di oggetti fra molti]]&lt;br /&gt;
&lt;br /&gt;
* [[Istanziare un oggetto mediante la Classe &amp;quot;Object&amp;quot;]]&lt;br /&gt;
&lt;br /&gt;
* [[Metodi _New() e _Free() degli oggetti]]&lt;br /&gt;
&lt;br /&gt;
* [[Metodo di pseudo indirizzamento ad Oggetti grafici]]&lt;br /&gt;
&lt;br /&gt;
* [[Modificare il valore di una proprietà ad una parte di più oggetti conosciuti del medesimo tipo]]&lt;br /&gt;
&lt;br /&gt;
* [[Oggetti scorrevoli]]&lt;br /&gt;
&lt;br /&gt;
* [[Raggiungere e gestire gli oggetti di FMain da una classe secondaria]]&lt;br /&gt;
&lt;br /&gt;
* [[Richiamare e gestire più oggetti assegnati a variabili con medesimo identificatore]]&lt;br /&gt;
&lt;br /&gt;
* [[Richiamare un Metodo di un oggetto con la Classe Object]]&lt;br /&gt;
&lt;br /&gt;
* [[Riclassificare successivamente un oggetto]]&lt;br /&gt;
&lt;br /&gt;
* [[Riposizionare in modo circolare più oggetti posti in pila]]&lt;br /&gt;
&lt;br /&gt;
* [[Riposizionare in pila più oggetti in base ad una loro proprietà]]&lt;br /&gt;
&lt;br /&gt;
* [[Sapere l&amp;amp;acute;oggetto che ha scatenato l&amp;amp;acute;evento]]&lt;br /&gt;
&lt;br /&gt;
* [[Sapere se un oggetto è un'istanza di una determinata Classe]]&lt;br /&gt;
&lt;br /&gt;
* [[Spostare oggetti con il mouse all'interno di un contenitore senza Drag &amp;amp; Drop]]&lt;br /&gt;
&lt;br /&gt;
* [[Spostare o ridimensionare un oggetto a seconda del punto ove si clicca]]&lt;br /&gt;
&lt;br /&gt;
* [[Utilizzare la proprietà .Tag come un array di tipo Variant]]&lt;br /&gt;
&lt;br /&gt;
* [[Verificare l&amp;amp;acute;esistenza di un oggetto]]&lt;br /&gt;
&lt;br /&gt;
== Password ==&lt;br /&gt;
&lt;br /&gt;
* [[Inserire le password per lanciare comandi]]&lt;br /&gt;
&lt;br /&gt;
== Pdfwriter ==&lt;br /&gt;
&lt;br /&gt;
*[[Guida ai report]]&lt;br /&gt;
&lt;br /&gt;
== Porte ==&lt;br /&gt;
&lt;br /&gt;
* [[Accesso alle Porte Seriali]]&lt;br /&gt;
&lt;br /&gt;
* [[Approfondimento sull'accesso alle porte USB]]&lt;br /&gt;
&lt;br /&gt;
* [[Uso delle Porte Parallele]]&lt;br /&gt;
&lt;br /&gt;
== Posta elettronica ==&lt;br /&gt;
&lt;br /&gt;
* [[Invio della posta elettronica]]&lt;br /&gt;
&lt;br /&gt;
== Programmi Gambas e programmi esterni ==&lt;br /&gt;
&lt;br /&gt;
* [[Agire sulla finestra di un qualunque programma]]&lt;br /&gt;
&lt;br /&gt;
* [[Chiudere programmi esterni]]&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere in tempo reale il numero dell&amp;amp;acute;ultimo processo appena aperto]]&lt;br /&gt;
&lt;br /&gt;
* [[Contare le righe di codice di un progetto Gambas]]&lt;br /&gt;
&lt;br /&gt;
* [[Copiare in una cartella un programma.gambas contenuto in un altro programma.gambas]]&lt;br /&gt;
&lt;br /&gt;
* [[Estrarre l'icona di un programma associato ad un file]]&lt;br /&gt;
&lt;br /&gt;
* [[Impedire l'avvio di un programma.gambas già avviato]]&lt;br /&gt;
&lt;br /&gt;
* [[Indirizzare dati da un programma ad un altro e ad un Terminale]]&lt;br /&gt;
&lt;br /&gt;
* [[Individuare ed estrarre il PID di un programma]]&lt;br /&gt;
&lt;br /&gt;
* [[Individuare ed estrarre l'ID della finestra di un programma ]]&lt;br /&gt;
&lt;br /&gt;
* [[Individuare il nome della finestra di un programma]]&lt;br /&gt;
&lt;br /&gt;
* [[Individuare il nome di un programma]]&lt;br /&gt;
&lt;br /&gt;
* [[Individuare il percorso di un programma]]&lt;br /&gt;
&lt;br /&gt;
* [[Individuare il percorso ove risiede la cartella del progetto Gambas]]&lt;br /&gt;
&lt;br /&gt;
* [[Intercettare i dati inviati allo standard output da un programma C]]&lt;br /&gt;
&lt;br /&gt;
* [[Lanciare un programma Gambas da linea di comando]]&lt;br /&gt;
&lt;br /&gt;
* [[Lanciare un programma senza Shell, ma da una finestra di un Terminale]]&lt;br /&gt;
&lt;br /&gt;
* [[Porre la finestra di un programma esterno in primo piano]]&lt;br /&gt;
&lt;br /&gt;
* [[Ricevere un 'segnale' da un programma C]]&lt;br /&gt;
&lt;br /&gt;
* [[Salvare un file nella Directory di Lavoro di un programma Gambas]]&lt;br /&gt;
&lt;br /&gt;
* [[Spostare la finestra di un programma da un desktop ad un altro del video]]&lt;br /&gt;
&lt;br /&gt;
* [[Usare due programmi Gambas contemporaneamente mediante Process, lo standard Output e lo standard Input]]&lt;br /&gt;
&lt;br /&gt;
* [[Usare due o più programmi Gambas contemporaneamente mediante Alsa]]&lt;br /&gt;
&lt;br /&gt;
== Scripting ==&lt;br /&gt;
* [[Scripting con Gambas]]&lt;br /&gt;
&lt;br /&gt;
== Slider ==&lt;br /&gt;
&lt;br /&gt;
* [[Mostrare il segna-tacche lungo lo Slider]]&lt;br /&gt;
&lt;br /&gt;
* [[Variare il valore dello Slider ruotando la rotellina del mouse]]&lt;br /&gt;
&lt;br /&gt;
== SpinBox ==&lt;br /&gt;
* [[Variare il valore da codice e non con il controllo diretto del mouse]]&lt;br /&gt;
&lt;br /&gt;
== Spinner ==&lt;br /&gt;
* [[Uso dello ''Spinner'']]&lt;br /&gt;
&lt;br /&gt;
== Stampa ==&lt;br /&gt;
&lt;br /&gt;
* [[Individuare le stampanti presenti nel proprio sistema]]&lt;br /&gt;
&lt;br /&gt;
* [[Stampare elementi diversi da testo, da Image e da Picture]]&lt;br /&gt;
&lt;br /&gt;
* [[Stampare il testo presente in oggetti di testo]]&lt;br /&gt;
&lt;br /&gt;
* [[Stampare un file con le funzioni del API di cups]]&lt;br /&gt;
&lt;br /&gt;
== Stringhe, caratteri e testo ==&lt;br /&gt;
&lt;br /&gt;
* [[&amp;quot;Andare a capo&amp;quot; in un oggetto di testo]]&lt;br /&gt;
&lt;br /&gt;
* [[Cercare una parola in una stringa]]&lt;br /&gt;
&lt;br /&gt;
* [[Confrontare i caratteri di due stringhe]]&lt;br /&gt;
&lt;br /&gt;
* [[Convertire in stringa senza funzioni il contenuto di una variabile non di tipo Stringa]]&lt;br /&gt;
&lt;br /&gt;
* [[Inserire in una stringa caratteri ASCII non stampabili]]&lt;br /&gt;
&lt;br /&gt;
* [[Modificare in maiuscolo il primo carattere di una stringa]]&lt;br /&gt;
&lt;br /&gt;
* [[Mostrare del testo al di sopra di una immagine avendo una PictureBox ed un oggetto di testo]]&lt;br /&gt;
&lt;br /&gt;
* [[Mostrare il simbolo dell'Euro]]&lt;br /&gt;
&lt;br /&gt;
* [[Porre a &amp;quot;Null&amp;quot; tutti gli elementi di un vettore di tipo Stringa]]&lt;br /&gt;
&lt;br /&gt;
* [[Scomporre una stringa e caricare ogni parola in una variabile array]]&lt;br /&gt;
&lt;br /&gt;
* [[Scritta lampeggiante]]&lt;br /&gt;
&lt;br /&gt;
* [[Scritta scorrevole]]&lt;br /&gt;
&lt;br /&gt;
* [[Simulazione di un collegamento ipertestuale]]&lt;br /&gt;
&lt;br /&gt;
* [[Testo verticale]]&lt;br /&gt;
&lt;br /&gt;
* [[Verifica &amp;quot;passo-passo&amp;quot; di ciascun carattere in una data stringa]]&lt;br /&gt;
&lt;br /&gt;
== SwitchButton ==&lt;br /&gt;
&lt;br /&gt;
* [[Uso dello &amp;quot;SwitchButton&amp;quot;]]&lt;br /&gt;
&lt;br /&gt;
== TabPanel ==&lt;br /&gt;
&lt;br /&gt;
* [[Impostare l'immagine ed il colore del titolo delle tabelle]]&lt;br /&gt;
&lt;br /&gt;
* [[Inserire tabelle ed oggetti al loro interno]]&lt;br /&gt;
&lt;br /&gt;
== TabStrip ==&lt;br /&gt;
&lt;br /&gt;
* [[Aggiungere successivamente linguette via codice]]&lt;br /&gt;
&lt;br /&gt;
* [[Aggiungere oggetti in una determinata linguetta]]&lt;br /&gt;
&lt;br /&gt;
* [[Inserire più linguette ed oggetti via codice]]&lt;br /&gt;
&lt;br /&gt;
== Tavoletta grafica e Gambas ==&lt;br /&gt;
&lt;br /&gt;
* [[Leggere l&amp;amp;acute;azione di una penna su una Tavoletta grafica]]&lt;br /&gt;
&lt;br /&gt;
== Tempo, Date e Temporizzazioni ==&lt;br /&gt;
&lt;br /&gt;
* [[Convertire i millisecondi in formato minuti:secondi.millisecondi]]&lt;br /&gt;
&lt;br /&gt;
* [[Convertire i secondi in formato ore:minuti:secondi]]&lt;br /&gt;
&lt;br /&gt;
* [[Creare un Cronometro]]&lt;br /&gt;
&lt;br /&gt;
* [[Formattare &amp;quot;hh:nn:ss&amp;quot; dai soli secondi]]&lt;br /&gt;
&lt;br /&gt;
* [[Gestione del tempo mediante le funzioni esterne del API di Libcsfml]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere una data e-o l'orario comprensivo dei millisecondi]]&lt;br /&gt;
&lt;br /&gt;
* [[Temporizzare una funzione o un evento]]&lt;br /&gt;
&lt;br /&gt;
== Terminale - Console IDE Gambas==&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere la riga e la colonna nelle quali è posizionato il cursore in un Terminale]]&lt;br /&gt;
&lt;br /&gt;
* [[Intercettare dati inviati al programma dal sistema o da altri programmi utilizzati]]&lt;br /&gt;
&lt;br /&gt;
* [[Intercettare quanto viene scritto manualmente nella console o in un Terminale]]&lt;br /&gt;
&lt;br /&gt;
* [[Inviare il testo, colorato e ruotato, in un Terminale con l'API di libcaca]]&lt;br /&gt;
&lt;br /&gt;
* [[Modalità di scrittura nella console dell'IDE di Gambas]]&lt;br /&gt;
&lt;br /&gt;
* [[Modificare il prompt bash]]&lt;br /&gt;
&lt;br /&gt;
* [[Pulire il Terminale via codice]]&lt;br /&gt;
&lt;br /&gt;
* [[Pulire la console via codice con la Classe &amp;quot;Desktop&amp;quot;]]&lt;br /&gt;
&lt;br /&gt;
* [[Raccogliere quanto mostrato nella finestra di un Terminale]]&lt;br /&gt;
&lt;br /&gt;
* [[Reindirizzare dati stringa dalla console ad un file]]&lt;br /&gt;
&lt;br /&gt;
* [[Rendere la console dell'IDE funzionale come un Terminale]]&lt;br /&gt;
&lt;br /&gt;
* [[Scrivere nella finestra del Terminale]]&lt;br /&gt;
&lt;br /&gt;
* [[Spostare da codice il cursore all'interno del Terminale]]&lt;br /&gt;
&lt;br /&gt;
* [[Spostare il cursore in un Terminale lungo una riga di caratteri]]&lt;br /&gt;
&lt;br /&gt;
== ToolTip ==&lt;br /&gt;
&lt;br /&gt;
* [[Chiudere un ToolTip anticipatamente]]&lt;br /&gt;
&lt;br /&gt;
== Valori numerici e bit==&lt;br /&gt;
&lt;br /&gt;
* [[Arrotondamento di un numero con virgola mobile]]&lt;br /&gt;
&lt;br /&gt;
* [[Azzerare tutti gli elementi di un vettore di tipo numerico]]&lt;br /&gt;
&lt;br /&gt;
* [[Conversione in Base64]]&lt;br /&gt;
&lt;br /&gt;
* [[Conversione Big-Endian/Little-Endian]]&lt;br /&gt;
&lt;br /&gt;
* [[Convertire un numero da rappresentazione binaria in decimale]]&lt;br /&gt;
&lt;br /&gt;
* [[Convertire un numero da rappresentazione Decimale a Carattere ASCII]]&lt;br /&gt;
&lt;br /&gt;
* [[Convertire un numero da rappresentazione Decimale ad Esadecimale]]&lt;br /&gt;
&lt;br /&gt;
* [[Convertire un numero da rappresentazione Esadecimale a Decimale]]&lt;br /&gt;
&lt;br /&gt;
* [[Convertire un numero da rappresentazione ottale in decimale]]&lt;br /&gt;
&lt;br /&gt;
* [[Convertire un numero decimale in numerazione romana]]&lt;br /&gt;
&lt;br /&gt;
* [[Distinguere ogni byte della rappresentazione esadecimale di un valore decimale]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere i &amp;quot;reali&amp;quot; valori numerici da una lettura di tipo Stringa di un flusso di dati]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere il ''nibble'' alto ed il ''nibble'' basso di un numero]]&lt;br /&gt;
&lt;br /&gt;
* [[Rappresentazione esadecimale di un dato in formato &amp;quot;a lunghezza variabile&amp;quot;]]&lt;br /&gt;
&lt;br /&gt;
* [[Sapere se un numero è pari o dispari]]&lt;br /&gt;
&lt;br /&gt;
* [[Sostituire gli operatori logici di spostamento dei bit con semplici operazioni]]&lt;br /&gt;
&lt;br /&gt;
* [[Troncare alcune cifre decimali in un valore Float]]&lt;br /&gt;
&lt;br /&gt;
== Video ==&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere il numero di titoli e di capitoli presenti in un DVD con l'API di libdvdread4]]&lt;br /&gt;
&lt;br /&gt;
* [[Gestione dei file video con il componente gb.media]]&lt;br /&gt;
&lt;br /&gt;
* [[Gestione dei file video con le funzioni esterne delle API di GStreamer]]&lt;br /&gt;
&lt;br /&gt;
* [[Gestione dei file video con le funzioni esterne del API di LibVLC]]&lt;br /&gt;
&lt;br /&gt;
* [[Gestione dei file video con WebView e gestione con il codice HTML]]&lt;br /&gt;
&lt;br /&gt;
== Web ==&lt;br /&gt;
&lt;br /&gt;
* [[Acquisire il codice HTML di una pagina web]]&lt;/div&gt;</summary>
		<author><name>Orionis</name></author>
	</entry>
	<entry>
		<id>https://www.gambas-it.org/wiki/index.php?title=Confronto_Array_di_Strutture_verso_Collezione_di_Classi&amp;diff=15702</id>
		<title>Confronto Array di Strutture verso Collezione di Classi</title>
		<link rel="alternate" type="text/html" href="https://www.gambas-it.org/wiki/index.php?title=Confronto_Array_di_Strutture_verso_Collezione_di_Classi&amp;diff=15702"/>
		<updated>2014-07-01T13:08:08Z</updated>

		<summary type="html">&lt;p&gt;Orionis: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;h2&amp;gt;Confronto Array di Strutture verso Collezione di Classi&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Per chi proviene in Gambas da MS VB la definizione e la gestione di strutture dati personalizzate può essere fonte di&lt;br /&gt;
confusione.&lt;br /&gt;
In genere, l'utente medio VB è abituato ad utilizzare array di  strutture ('&amp;lt;i&amp;gt;custom types&amp;lt;/i&amp;gt;').&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Altri preferiscono utilizzare le Classi, con relative proprietà e metodi, e le Collection; in questo caso l'approccio a&lt;br /&gt;
Gambas non comporta variazioni sostanziali.&lt;br /&gt;
&amp;lt;BR&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
La differenza sostanziale tra Array e Collection è data dalla differente metodologia di accesso agli elementi.&amp;lt;br&amp;gt;&lt;br /&gt;
Gli Array sono per loro natura 'posizionali', ovvero la posizione in memoria è sequenziale e stabilita dalla dimensione e&lt;br /&gt;
dall'indice progressivo del singolo elemento.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Le Collection sono gestite autonomamente dal compilatore e la posizione degli elementi non è determinata; l'accesso avviene&lt;br /&gt;
tramite un indice chiave ('&amp;lt;i&amp;gt;Key&amp;lt;/i&amp;gt;').&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Lo scopo di questo documento è di fornire alcune informazioni sulle differenze tra i due approcci, con vantaggi e svantaggi,&lt;br /&gt;
e una sintetica valutazione prestazionale.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Per ciascun approccio saranno presentate le 3 operazioni fondamentali di gestione liste, ovvero &amp;lt;b&amp;gt;Accesso, Aggiunta,&lt;br /&gt;
Eliminazione&amp;lt;/b&amp;gt;.&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3&amp;gt;Definizione di STRUTTURE&amp;lt;/h3&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Per gli esempi che seguino consideremo una semplicissima struttura dati composta da due proprietà, definita in Gambas con:&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
PUBLIC STRUCT Contatto&amp;lt;br&amp;gt;&lt;br /&gt;
ID As Integer&lt;br /&gt;
nome As String&amp;lt;br&amp;gt;&lt;br /&gt;
telefono As String&amp;lt;br&amp;gt;&lt;br /&gt;
END STRUCT&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
&amp;lt;h3&amp;gt;Definizione di CLASSI&amp;lt;/h3&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
	L'uso di classi comporta la consueta creazione di un documento di classe (es. &amp;lt;b&amp;gt;clsContatto&amp;lt;/b&amp;gt;) che esponga le stesse&lt;br /&gt;
proprietà viste sopra e dei metodi per la gestione delle stesse.&lt;br /&gt;
	Si crea dunque il nuovo documento 'clsContatto' (&amp;lt;b&amp;gt;Attenzione&amp;lt;/b&amp;gt;: deve avere la definizione all'inizio &amp;lt;code&amp;gt;CREATE&lt;br /&gt;
STATIC&amp;lt;/code&amp;gt;).&lt;br /&gt;
	&amp;lt;br&amp;gt;&lt;br /&gt;
	&amp;lt;code&amp;gt;&lt;br /&gt;
	'Class clsContatto&amp;lt;br&amp;gt;&lt;br /&gt;
	CREATE STATIC&amp;lt;br&amp;gt;&lt;br /&gt;
	PROPERTY Nome As String&amp;lt;br&amp;gt;&lt;br /&gt;
	PROPERTY Telefono As String&amp;lt;br&amp;gt;&lt;br /&gt;
	&amp;lt;br&amp;gt;&lt;br /&gt;
	PRIVATE $iID As Integer 'proprietà utilizzata internamente per generare una nuova chiave&amp;lt;br&amp;gt;&lt;br /&gt;
	PRIVATE $sNome As String&amp;lt;br&amp;gt;&lt;br /&gt;
	PRIVATE $iTelefono As String	&amp;lt;br&amp;gt;&lt;br /&gt;
	&amp;lt;/code&amp;gt;&lt;br /&gt;
	&amp;lt;br&amp;gt;&lt;br /&gt;
	E' consigliabile usare questo approccio che prevede di 'nascondere' le proprietà interne della classe ed accedere ad esse&lt;br /&gt;
solo tramite chiamate ai metodi pubblici esposti.&lt;br /&gt;
	In questo modo, oltre alla maggiore flessibilità di modifica della classa, si delega alla classe il compiti di validazione&lt;br /&gt;
dei parametri.&lt;br /&gt;
	&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3&amp;gt;ARRAY&amp;lt;/h3&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
	&lt;br /&gt;
	In Gambas gli array di strutture possono essere statici o dinamici, ovvero a dimensioni prestabilite oppure variabili.&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Array statici&amp;lt;/H4&amp;gt;&lt;br /&gt;
	&amp;lt;P&amp;gt;&lt;br /&gt;
	Gli Array statici sono di scarso interesse in quanto la loro dimensione è '&amp;lt;i&amp;gt;hard coded&amp;lt;/i&amp;gt;' nel sorgente, quindi sono per&lt;br /&gt;
niente flessibili. Ciò che segue è quindi sono allo scopo di completezza d'informazione e non sarà utilizzato negli esempi.&lt;br /&gt;
	&amp;lt;BR&amp;gt;&lt;br /&gt;
	&amp;lt;B&amp;gt;NOTA&amp;lt;/B&amp;gt;: in VB non esiste il concetto di Array statico in quanto può essere in qualsiasi momento ridimensionato con le&lt;br /&gt;
istruzioni REDIM [PRESERVE}&lt;br /&gt;
	&amp;lt;BR&amp;gt;&lt;br /&gt;
	La dichiarazione di un array statico di 10 strutture Contatto si scrive:&amp;lt;br&amp;gt;&lt;br /&gt;
	&amp;lt;code&amp;gt;PUBLIC miaAgenda[10] as STRUCT Contatto&amp;lt;/code&amp;gt;&lt;br /&gt;
	&lt;br /&gt;
&amp;lt;/P&amp;gt;&lt;br /&gt;
&amp;lt;h4&amp;gt;Array dinamici&amp;lt;/H4&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	La dichiarazione di Array dinamici è sottilmente, ma sostanzialmente, diversa:&lt;br /&gt;
	&amp;lt;br&amp;gt;&lt;br /&gt;
	&amp;lt;code&amp;gt;PUBLIC miaAgenda as NEW Contatto[]&amp;lt;/code&amp;gt;&lt;br /&gt;
	&amp;lt;BR&amp;gt;&lt;br /&gt;
	Si noti l'ovvia assenza del numero di elementi, l'uso di NEW e la diversa posizione delle parentesi quadre.&lt;br /&gt;
	&amp;lt;br&amp;gt;&lt;br /&gt;
	&amp;lt;B&amp;gt;NOTA 1&amp;lt;/B&amp;gt;: per Gambas gli Array dinamici non sono altro che degli oggetti (classi), per cui valgono proprietà e metodi&lt;br /&gt;
ereditati dalla classe madre 'Object'.&lt;br /&gt;
	&amp;lt;br&amp;gt;&lt;br /&gt;
	Ne consegue che l'utilizzo come Array piuttosto che come classi è più una scelta dell'utilizzatore che pratica, tranne&lt;br /&gt;
nell'enumerazione degli elementi.&lt;br /&gt;
	&amp;lt;br&amp;gt;&lt;br /&gt;
	&amp;lt;B&amp;gt;NOTA 2&amp;lt;/B&amp;gt;: se si vuole utilizzare un Modulo esterno al Form principale (per pulizia del codice) per la gestione dei&lt;br /&gt;
dati, è &amp;lt;b&amp;gt;obbligatorio&amp;lt;/b&amp;gt; copiare esattamente la dichiarazione della struttura ANCHE nel Form.&amp;lt;br&amp;gt;&lt;br /&gt;
	&amp;lt;br&amp;gt;&lt;br /&gt;
	Per ridimensionate l'array (in VB si scriverebbe &amp;lt;code&amp;gt;Redim Preserve miaAgenda(11)&amp;lt;/code&amp;gt;); in Gambas occorre procedere in&lt;br /&gt;
3 fasi:&lt;br /&gt;
	&amp;lt;br&amp;gt;&lt;br /&gt;
	1. si aumenta la dimensione dell'array con: &amp;lt;code&amp;gt;miaAgenda.Resize(11)&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
	2. si istanzia un nuovo elemento 'Contatto' con: &amp;lt;code&amp;gt;nuovoContatto as New Contatto&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
	3. si aggiunge il nuovo elemento vuoto con: &amp;lt;code&amp;gt;miaAgenda.Add(nuovoContatto)&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
	&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Enumerazione e accesso agli elementi&amp;lt;/H4&amp;gt;&lt;br /&gt;
	&amp;lt;p&amp;gt;&lt;br /&gt;
		Accedere a tutti (enumerazione) o ad un elemento dell'Array è identico al metodo usato in VB, con l'unica avvertenza di&lt;br /&gt;
usare le parentesi quadre invece che tonde, per cui:&lt;br /&gt;
		&amp;lt;br&amp;gt;&lt;br /&gt;
		&amp;lt;code&amp;gt;&lt;br /&gt;
			Dim cliente AS Contatto&amp;lt;br&amp;gt;&lt;br /&gt;
			Dim numero AS String&amp;lt;br&amp;gt;&lt;br /&gt;
			Dim k as Integer&amp;lt;br&amp;gt;&lt;br /&gt;
			&amp;lt;br&amp;gt;&lt;br /&gt;
			'per recuperare il valore di un campo dal record n°5:&amp;lt;br&amp;gt;&lt;br /&gt;
			numero = miaAgenda[5].telefono&amp;lt;br&amp;gt;&lt;br /&gt;
			&amp;lt;br&amp;gt;&lt;br /&gt;
			'per recuperare l'intero record dall'agenda:&amp;lt;br&amp;gt;&lt;br /&gt;
			For k=1 To miaAgenda.Count&amp;lt;br&amp;gt;&lt;br /&gt;
				cliente = miaAgenda[k]&amp;lt;br&amp;gt;&lt;br /&gt;
				....&amp;lt;br&amp;gt;&lt;br /&gt;
			Next&amp;lt;br&amp;gt;&lt;br /&gt;
		&amp;lt;/code&amp;gt;&lt;br /&gt;
	&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Inserimento di elementi&amp;lt;/H4&amp;gt;&lt;br /&gt;
	&amp;lt;p&amp;gt;&lt;br /&gt;
		Si incrementa come prima cosa la dimensione dell'array, come già visto, e poi si procede ad aggiungere i nuovi valori:&lt;br /&gt;
		&amp;lt;br&amp;gt;&lt;br /&gt;
		&amp;lt;code&amp;gt;&lt;br /&gt;
		Static IdCount As Integer&amp;lt;br&amp;gt;&lt;br /&gt;
		Dim nuovoContatto As Contatto&amp;lt;br&amp;gt;&lt;br /&gt;
		&amp;lt;br&amp;gt;&lt;br /&gt;
		IdCount = IdCount + 1&amp;lt;br&amp;gt;&lt;br /&gt;
		miaAgenda.Resize(miaAgenda.Count+1)&amp;lt;br&amp;gt;&lt;br /&gt;
		nuovoContatto as New Contatto&amp;lt;br&amp;gt;&lt;br /&gt;
		nuovoContatto.ID = IdCount&lt;br /&gt;
		nuovoContatto.Nome = &amp;quot;Pippo&amp;quot;&amp;lt;br&amp;gt;&lt;br /&gt;
		nuovoContatto.Telefono = 333-123456&amp;lt;br&amp;gt;&lt;br /&gt;
		miaAgenda.Add(nuovoContatto)&amp;lt;br&amp;gt;&lt;br /&gt;
		&amp;lt;/code&amp;gt;&lt;br /&gt;
	&amp;lt;/p&amp;gt;	&lt;br /&gt;
	&lt;br /&gt;
	&lt;br /&gt;
&amp;lt;h4&amp;gt;Cancellazione elementi&amp;lt;/H4&amp;gt;&lt;br /&gt;
	&amp;lt;p&amp;gt;&lt;br /&gt;
		In VB l'eliminazione di un elemento richiede lo spostamento di tutti gli elementi superiori a quello voluto e&lt;br /&gt;
successivamente il ridimensionamento dell'array. Gambas mette invece a disposizione il metodo &amp;lt;b&amp;gt;Remove&amp;lt;/b&amp;gt; che elimina &lt;br /&gt;
l'elemento e sposta automaticamente gli elementi superiori se esistono.&lt;br /&gt;
		&amp;lt;br&amp;gt;&lt;br /&gt;
		&amp;lt;code&amp;gt;&lt;br /&gt;
		'nota: Indice è il numero dell'elemento da cancellare, passato alla funzione come parametro&amp;lt;br&amp;gt;&lt;br /&gt;
		miaAgenda[Indice].Remove&lt;br /&gt;
		&amp;lt;/code&amp;gt;&lt;br /&gt;
	&amp;lt;/p&amp;gt;	&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
	&amp;lt;h3&amp;gt;COLLECTION&amp;lt;/h3&amp;gt;&lt;br /&gt;
	&amp;lt;p&amp;gt;&lt;br /&gt;
	La Collection è una rappresentazione dei dati estremamente potente, versatile e semplice in quanto si compone &lt;br /&gt;
	di solo una coppia di informazioni:&lt;br /&gt;
	&amp;lt;br&amp;gt;&lt;br /&gt;
	- la &amp;lt;b&amp;gt;KEY&amp;lt;/b&amp;gt; (chiave) di accesso: una stringa che deve avere un valore univoco e non nullo (se Null, l'elemento&lt;br /&gt;
'sparisce', ovvero viene eliminato).&lt;br /&gt;
	&amp;lt;br&amp;gt;&lt;br /&gt;
	- il &amp;lt;b&amp;gt;VALUE&amp;lt;/B&amp;gt; (valore): può essere qualsiasi cosa (variabile semplice, array, oggetti e &amp;lt;b&amp;gt;anche altre&lt;br /&gt;
Collection&amp;lt;/B&amp;gt;).&lt;br /&gt;
	&amp;lt;br&amp;gt;&lt;br /&gt;
	La Key può essere semplicemente un numero indice convertito in stringa per cui spesso l'uso delle Collection è&lt;br /&gt;
concettualmente simile all'uso degli Array.&lt;br /&gt;
	&amp;lt;br&amp;gt;&lt;br /&gt;
	La definizione e l'instanziamento di una Collection, che è un Oggetto, è del tutto uguale a quelle degli tipi di variabile,&lt;br /&gt;
per cui:&lt;br /&gt;
	&amp;lt;br&amp;gt;&lt;br /&gt;
	&amp;lt;code&amp;gt;&lt;br /&gt;
		Pubblic miaAgenda as Collection&amp;lt;br&amp;gt;&lt;br /&gt;
		...&amp;lt;br&amp;gt;&lt;br /&gt;
		miaAgenda = New Collection&amp;lt;br&amp;gt;&lt;br /&gt;
	&amp;lt;/code&amp;gt;&lt;br /&gt;
	&amp;lt;/p&amp;gt;&lt;br /&gt;
	&lt;br /&gt;
	&lt;br /&gt;
&amp;lt;h4&amp;gt;Enumerazione ed accessi agli elementi&amp;lt;/H4&amp;gt;&lt;br /&gt;
	&amp;lt;p&amp;gt;&lt;br /&gt;
		&amp;lt;code&amp;gt;&lt;br /&gt;
			Dim cliente AS clsContatto&amp;lt;br&amp;gt;&lt;br /&gt;
			Dim tel as String&amp;lt;br&amp;gt;&lt;br /&gt;
			&amp;lt;br&amp;gt;&lt;br /&gt;
			'Utilizzando il campio chiave (es. Codice Fiscale), si accede direttamente al singolo elemento:&amp;lt;br&amp;gt;&lt;br /&gt;
			tel = miaAgenda[CodiceFiscale].Telefono 'Attenzione: la chiave deve essere una stringa!&amp;lt;br&amp;gt;&lt;br /&gt;
			&amp;lt;br&amp;gt;&lt;br /&gt;
			L'enumerazione degli elementi utilizza la notazione &amp;lt;b&amp;gt;For Each&amp;lt;/b&amp;gt; come per tutti gli altri oggetti.&lt;br /&gt;
			&amp;lt;br&amp;gt;&lt;br /&gt;
			&lt;br /&gt;
			For Each cliente In miaAgenda&amp;lt;br&amp;gt;&lt;br /&gt;
				Print cliente.Nome &amp;lt;br&amp;gt;&lt;br /&gt;
				....&amp;lt;br&amp;gt;&lt;br /&gt;
			Next&amp;lt;br&amp;gt;		&lt;br /&gt;
		&amp;lt;/code&amp;gt;					&lt;br /&gt;
	&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Inserimento di elementi&amp;lt;/H4&amp;gt;&lt;br /&gt;
	&amp;lt;p&amp;gt;&lt;br /&gt;
		Occorre innanzitutto definire una nuova chiave; supponiamo di usare per questo il campo Telefono (certamente univoco).&lt;br /&gt;
		&amp;lt;br&amp;gt;&lt;br /&gt;
		Potrebbe però essere anche un valore esterno alla classe clsContatto, come un numero progressivo.&lt;br /&gt;
		&amp;lt;br&amp;gt;&lt;br /&gt;
		&amp;lt;code&amp;gt;&lt;br /&gt;
		Static IdCount As Integer&amp;lt;br&amp;gt;&lt;br /&gt;
		Dim nuovoContatto As clsContatto&amp;lt;br&amp;gt;&lt;br /&gt;
		&amp;lt;br&amp;gt;&lt;br /&gt;
		IdCount = IdCount + 1&amp;lt;br&amp;gt;&lt;br /&gt;
			&lt;br /&gt;
		nuovoContatto as New clsContatto&amp;lt;br&amp;gt;&lt;br /&gt;
		nuovoContatto.Nome = &amp;quot;Pippo&amp;quot;&amp;lt;br&amp;gt;&lt;br /&gt;
		nuovoContatto.Telefono = 345-987654&amp;lt;br&amp;gt;&lt;br /&gt;
		miaAgenda.Add(nuovoContatto, CStr(IdCount)) 'notare l'uso di IdCount come chiave&amp;lt;br&amp;gt;&lt;br /&gt;
		&amp;lt;/code&amp;gt;&lt;br /&gt;
	&amp;lt;/p&amp;gt;	&lt;br /&gt;
	&lt;br /&gt;
	&lt;br /&gt;
&amp;lt;h4&amp;gt;Cancellazione elementi&amp;lt;/H4&amp;gt;&lt;br /&gt;
	&amp;lt;p&amp;gt;&lt;br /&gt;
	Come anticipato, per cancellare un elemento è sufficiente porre a Null la chiave, oppure utilizzare anche qui il metodo 'Remove':&lt;br /&gt;
	&amp;lt;br&amp;gt;&lt;br /&gt;
		&amp;lt;code&amp;gt;&lt;br /&gt;
		miaAgenda[IdCount]=Null&amp;lt;br&amp;gt;&lt;br /&gt;
		'oppure:&amp;lt;br&amp;gt;&lt;br /&gt;
		miaAgenda[IdCount].Remove&amp;lt;br&amp;gt;&lt;br /&gt;
		&amp;lt;/code&amp;gt;&lt;br /&gt;
		In realtà, è altamente consigliabile verificare prima che la chiave esista, per esempio:&lt;br /&gt;
		&amp;lt;code&amp;gt;&lt;br /&gt;
		If miaAgenda[IdCount].Exist Then miaAgenda[IdCount].Remove&amp;lt;br&amp;gt;&lt;br /&gt;
		&amp;lt;/code&amp;gt;&lt;br /&gt;
		E' importante notare come nel caso delle Collection non sia necessario ridimensionare la struttura in quanto si adegua da&lt;br /&gt;
sè.&lt;br /&gt;
	&amp;lt;/p&amp;gt;	&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
&amp;lt;H3&amp;gt;SCHEMA DI IMPLEMENTAZIONE DI CLASSI E COLLECTION&amp;lt;/H3&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
	Per riassumere quanto vito nel caso di utilizzo di classi e collection (strategia suggerita), viene di seguito riportato&lt;br /&gt;
	uno schema sintetico dei documenti e delle dichiarazioni necessarie.&lt;br /&gt;
	&amp;lt;/p&amp;gt;&lt;br /&gt;
	&amp;lt;table border=1&amp;gt;&lt;br /&gt;
		&amp;lt;tr&amp;gt;&lt;br /&gt;
			&amp;lt;th&amp;gt;Documento&amp;lt;/th&amp;gt;&lt;br /&gt;
			&amp;lt;th&amp;gt;Dichiarazioni&amp;lt;/th&amp;gt;&lt;br /&gt;
		&amp;lt;/tr&amp;gt;&lt;br /&gt;
		&amp;lt;tr&amp;gt;&lt;br /&gt;
			&amp;lt;td&amp;gt;Form Main&amp;lt;/td&amp;gt;&lt;br /&gt;
			&amp;lt;td&amp;gt;Chiamate ai metodi clsAgenda.miaAgenda[chiave]...&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;tr&amp;gt;&lt;br /&gt;
			&amp;lt;td&amp;gt;Classe 'clsAgenda'&amp;lt;/td&amp;gt;&lt;br /&gt;
			&amp;lt;td&amp;gt;&lt;br /&gt;
				PUBLIC miaAgenda As Collection&amp;lt;br&amp;gt;&lt;br /&gt;
				...&amp;lt;br&amp;gt;&lt;br /&gt;
				PUBLIC Sub _New()&amp;lt;br&amp;gt;&lt;br /&gt;
					miaAgenda = New Collection&amp;lt;br&amp;gt;&lt;br /&gt;
				End&amp;lt;br&amp;gt;&lt;br /&gt;
				&amp;lt;br&amp;gt;&lt;br /&gt;
				PUBLIC Sub AddContatto(nome As String,telefono As String)&amp;lt;br&amp;gt;&lt;br /&gt;
				...&amp;lt;br&amp;gt;&lt;br /&gt;
				End&amp;lt;br&amp;gt;&lt;br /&gt;
				&amp;lt;br&amp;gt;&lt;br /&gt;
				PUBLIC Sub RemoveContatto(ID as integer)&amp;lt;br&amp;gt;&lt;br /&gt;
					...&amp;lt;br&amp;gt;&lt;br /&gt;
				End&amp;lt;br&amp;gt;&lt;br /&gt;
				&amp;lt;br&amp;gt;&lt;br /&gt;
				PUBLIC Sub GetContatto(ID as integer)&amp;lt;br&amp;gt;&lt;br /&gt;
					...&amp;lt;br&amp;gt;&lt;br /&gt;
				End&amp;lt;br&amp;gt;&lt;br /&gt;
				&lt;br /&gt;
			&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;/tr&amp;gt;&lt;br /&gt;
		&amp;lt;tr&amp;gt;&lt;br /&gt;
			&amp;lt;td&amp;gt;Classe 'clsContatto'&amp;lt;/td&amp;gt;&lt;br /&gt;
			&lt;br /&gt;
			&amp;lt;td&amp;gt;&lt;br /&gt;
				PROPERTY Nome As String&amp;lt;br&amp;gt;&lt;br /&gt;
				PROPERTY Telefono As String&amp;lt;br&amp;gt;&lt;br /&gt;
				&amp;lt;br&amp;gt;&lt;br /&gt;
				PRIVATE $iID As Integer 'proprietà utilizzata internamente per generare una nuova chiave&amp;lt;br&amp;gt;&lt;br /&gt;
				PRIVATE $sNome As String&amp;lt;br&amp;gt;&lt;br /&gt;
				PRIVATE $iTelefono As String	&amp;lt;br&amp;gt;&lt;br /&gt;
			&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;tr&amp;gt;&lt;br /&gt;
	&amp;lt;/table&amp;gt;	&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;H3&amp;gt;CONFRONTO&amp;lt;/H3&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
	Sia gli array di strutture che le collection di classi sono per Gambas degli oggetti, per cui l'approccio è sotto molti&lt;br /&gt;
punti di vista simile.&lt;br /&gt;
	&amp;lt;br&amp;gt;&lt;br /&gt;
	Per chi proviene da VB le Strutture sono forse più familiari e forse più semplici da utilizzare dalle Classi.&lt;br /&gt;
	Occorre però anche considerare la diversa modalità di creazione e aggiunta di elementi in Gambas rispetto a VB, che&lt;br /&gt;
'appesantisce' in una certa misura la gestione.&lt;br /&gt;
	&amp;lt;br&amp;gt;&lt;br /&gt;
	Le Classi da parte loro hanno numerosi vantaggi in termini di leggibilità e di manutenzione del codice, nonchè offrono&lt;br /&gt;
capacità di estensione d'uso sconosciute alle Strutture.&lt;br /&gt;
	Basti pensare all'ereditarietà delle Classi per cui si può avere una classe base e numerose classi figlie, senza dovere&lt;br /&gt;
ripetere tutto il codice, e racchiudere il tutto in una Collection.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Inoltre, e questo è fondamentale per la sicurezza verso bachi e modifiche del codice nella Main, le classi consentono &lt;br /&gt;
l'incapsulamento del codice, delegando tutte le procedure di accesso e verifica di congruità dei dati alla classe stessa.&lt;br /&gt;
Questo permette tra l'altro di riutilizzare la stessa classe in altri progetti.&lt;br /&gt;
 &amp;lt;br&amp;gt;&lt;br /&gt;
 Dal punto di vista prestazionale, la valutazione sui tempi di esecuzione è delegata ad una seconda parte di questo&lt;br /&gt;
documento che sarà rilasciata al più presto,&lt;br /&gt;
 insieme ad un programma di esempio e di test.&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--[[Utente:Orionis|Orionis]] ([[Discussioni utente:Orionis|discussioni]]) 08:11, 30 giu 2014 (MDT)&lt;/div&gt;</summary>
		<author><name>Orionis</name></author>
	</entry>
	<entry>
		<id>https://www.gambas-it.org/wiki/index.php?title=Confronto_Array_di_Strutture_verso_Collezione_di_Classi&amp;diff=15698</id>
		<title>Confronto Array di Strutture verso Collezione di Classi</title>
		<link rel="alternate" type="text/html" href="https://www.gambas-it.org/wiki/index.php?title=Confronto_Array_di_Strutture_verso_Collezione_di_Classi&amp;diff=15698"/>
		<updated>2014-06-30T14:21:05Z</updated>

		<summary type="html">&lt;p&gt;Orionis: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;h2&amp;gt;Confronto Array di Strutture verso Collezione di Classi&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Per chi proviene in Gambas da MS VB la definizione e la gestione di strutture dati personalizzate può essere fonte di&lt;br /&gt;
confusione.&lt;br /&gt;
In genere, l'utente medio VB è abituato ad utilizzare array di  strutture ('&amp;lt;i&amp;gt;custom types&amp;lt;/i&amp;gt;').&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Altri preferiscono utilizzare le Classi, con relative proprietà e metodi, e le Collection; in questo caso l'approccio a&lt;br /&gt;
Gambas non comporta variazioni sostanziali.&lt;br /&gt;
&amp;lt;BR&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
La differenza sostanziale tra Array e Collection è data dalla differente metodologia di accesso agli elementi.&amp;lt;br&amp;gt;&lt;br /&gt;
Gli Array sono per loro natura 'posizionali', ovvero la posizione in memoria è sequenziale e stabilita dalla dimensione e&lt;br /&gt;
dall'indice progressivo del singolo elemento.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Le Collection sono gestite autonomamente dal compilatore e la posizione degli elementi non è determinata; l'accesso avviene&lt;br /&gt;
tramite un indice chiave ('&amp;lt;i&amp;gt;Key&amp;lt;/i&amp;gt;').&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Lo scopo di questo documento è di fornire alcune informazioni sulle differenze tra i due approcci, con vantaggi e svantaggi,&lt;br /&gt;
e una sintetica valutazione prestazionale.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Per ciascun approccio saranno presentate le 3 operazioni fondamentali di gestione liste, ovvero &amp;lt;b&amp;gt;Accesso, Aggiunta,&lt;br /&gt;
Eliminazione&amp;lt;/b&amp;gt;.&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3&amp;gt;Definizione di STRUTTURE&amp;lt;/h3&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Per gli esempi che seguino consideremo una semplicissima struttura dati composta da due proprietà, definita in Gambas con:&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
PUBLIC STRUCT Contatto&amp;lt;br&amp;gt;&lt;br /&gt;
ID As Integer&lt;br /&gt;
nome As String&amp;lt;br&amp;gt;&lt;br /&gt;
telefono As String&amp;lt;br&amp;gt;&lt;br /&gt;
END STRUCT&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
&amp;lt;h3&amp;gt;Definizione di CLASSI&amp;lt;/h3&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
	L'uso di classi comporta la consueta creazione di un documento di classe (es. &amp;lt;b&amp;gt;clsContatto&amp;lt;/b&amp;gt;) che esponga le stesse&lt;br /&gt;
proprietà viste sopra e dei metodi per la gestione delle stesse.&lt;br /&gt;
	Si crea dunque il nuovo documento 'clsContatto' (&amp;lt;b&amp;gt;Attenzione&amp;lt;/b&amp;gt;: deve avere la definizione all'inizio &amp;lt;code&amp;gt;CREATE&lt;br /&gt;
STATIC&amp;lt;/code&amp;gt;).&lt;br /&gt;
	&amp;lt;br&amp;gt;&lt;br /&gt;
	&amp;lt;code&amp;gt;&lt;br /&gt;
	'Class clsContatto&amp;lt;br&amp;gt;&lt;br /&gt;
	CREATE STATIC&amp;lt;br&amp;gt;&lt;br /&gt;
	PROPERTY Nome As String&amp;lt;br&amp;gt;&lt;br /&gt;
	PROPERTY Telefono As String&amp;lt;br&amp;gt;&lt;br /&gt;
	&amp;lt;br&amp;gt;&lt;br /&gt;
	PRIVATE $iID As Integer 'proprietà utilizzata internamente per generare una nuova chiave&amp;lt;br&amp;gt;&lt;br /&gt;
	PRIVATE $sNome As String&amp;lt;br&amp;gt;&lt;br /&gt;
	PRIVATE $iTelefono As String	&amp;lt;br&amp;gt;&lt;br /&gt;
	&amp;lt;/code&amp;gt;&lt;br /&gt;
	&amp;lt;br&amp;gt;&lt;br /&gt;
	E' consigliabile usare questo approccio che prevede di 'nascondere' le proprietà interne della classe ed accedere ad esse&lt;br /&gt;
solo tramite chiamate ai metodi pubblici esposti.&lt;br /&gt;
	In questo modo, oltre alla maggiore flessibilità di modifica della classa, si delega alla classe il compiti di validazione&lt;br /&gt;
dei parametri.&lt;br /&gt;
	&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3&amp;gt;ARRAY&amp;lt;/h3&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
	&lt;br /&gt;
	In Gambas gli array di strutture possono essere statici o dinamici, ovvero a dimensioni prestabilite oppure variabili.&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Array statici&amp;lt;/H4&amp;gt;&lt;br /&gt;
	&amp;lt;P&amp;gt;&lt;br /&gt;
	Gli Array statici sono di scarso interesse in quanto la loro dimensione è '&amp;lt;i&amp;gt;hard coded&amp;lt;/i&amp;gt;' nel sorgente, quindi sono per&lt;br /&gt;
niente flessibili. Ciò che segue è quindi sono allo scopo di completezza d'informazione e non sarà utilizzato negli esempi.&lt;br /&gt;
	&amp;lt;BR&amp;gt;&lt;br /&gt;
	&amp;lt;B&amp;gt;NOTA&amp;lt;/B&amp;gt;: in VB non esiste il concetto di Array statico in quanto può essere in qualsiasi momento ridimensionato con le&lt;br /&gt;
istruzioni REDIM [PRESERVE}&lt;br /&gt;
	&amp;lt;BR&amp;gt;&lt;br /&gt;
	La dichiarazione di un array statico di 10 strutture Contatto si scrive:&amp;lt;br&amp;gt;&lt;br /&gt;
	&amp;lt;code&amp;gt;PUBLIC miaAgenda[10] as STRUCT Contatto&amp;lt;/code&amp;gt;&lt;br /&gt;
	&lt;br /&gt;
&amp;lt;/P&amp;gt;&lt;br /&gt;
&amp;lt;h4&amp;gt;Array dinamici&amp;lt;/H4&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	La dichiarazione di Array dinamici è sottilmente, ma sostanzialmente, diversa:&lt;br /&gt;
	&amp;lt;br&amp;gt;&lt;br /&gt;
	&amp;lt;code&amp;gt;PUBLIC miaAgenda as NEW Contatto[]&amp;lt;/code&amp;gt;&lt;br /&gt;
	&amp;lt;BR&amp;gt;&lt;br /&gt;
	Si noti l'ovvia assenza del numero di elementi, l'uso di NEW e la diversa posizione delle parentesi quadre.&lt;br /&gt;
	&amp;lt;br&amp;gt;&lt;br /&gt;
	&amp;lt;B&amp;gt;NOTA 1&amp;lt;/B&amp;gt;: per Gambas gli Array dinamici non sono altro che degli oggetti (classi), per cui valgono proprietà e metodi&lt;br /&gt;
ereditati dalla classe madre 'Object'.&lt;br /&gt;
	&amp;lt;br&amp;gt;&lt;br /&gt;
	Ne consegue che l'utilizzo come Array piuttosto che come classi è più una scelta dell'utilizzatore che pratica, tranne&lt;br /&gt;
nell'enumerazione degli elementi.&lt;br /&gt;
	&amp;lt;br&amp;gt;&lt;br /&gt;
	&amp;lt;B&amp;gt;NOTA 2&amp;lt;/B&amp;gt;: se si vuole utilizzare un Modulo esterno al Form principale (per pulizia del codice) per la gestione dei&lt;br /&gt;
dati, è &amp;lt;b&amp;gt;obbligatorio&amp;lt;/b&amp;gt; copiare esattamente la dichiarazione della struttura ANCHE nel Form.&amp;lt;br&amp;gt;&lt;br /&gt;
	&amp;lt;br&amp;gt;&lt;br /&gt;
	Per ridimensionate l'array (in VB si scriverebbe &amp;lt;code&amp;gt;Redim Preserve miaAgenda(11)&amp;lt;/code&amp;gt;); in Gambas occorre procedere in&lt;br /&gt;
3 fasi:&lt;br /&gt;
	&amp;lt;br&amp;gt;&lt;br /&gt;
	1. si aumenta la dimensione dell'array con: &amp;lt;code&amp;gt;miaAgenda.Resize(11)&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
	2. si istanzia un nuovo elemento 'Contatto' con: &amp;lt;code&amp;gt;nuovoContatto as New Contatto&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
	3. si aggiunge il nuovo elemento vuoto con: &amp;lt;code&amp;gt;miaAgenda.Add(nuovoContatto)&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
	&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Enumerazione e accesso agli elementi&amp;lt;/H4&amp;gt;&lt;br /&gt;
	&amp;lt;p&amp;gt;&lt;br /&gt;
		Accedere a tutti (enumerazione) o ad un elemento dell'Array è identico al metodo usato in VB, con l'unica avvertenza di&lt;br /&gt;
usare le parentesi quadre invece che tonde, per cui:&lt;br /&gt;
		&amp;lt;br&amp;gt;&lt;br /&gt;
		&amp;lt;code&amp;gt;&lt;br /&gt;
			Dim cliente AS Contatto&amp;lt;br&amp;gt;&lt;br /&gt;
			Dim numero AS String&amp;lt;br&amp;gt;&lt;br /&gt;
			Dim k as Integer&amp;lt;br&amp;gt;&lt;br /&gt;
			&amp;lt;br&amp;gt;&lt;br /&gt;
			'per recuperare il valore di un campo dal record n°5:&amp;lt;br&amp;gt;&lt;br /&gt;
			numero = miaAgenda[5].telefono&amp;lt;br&amp;gt;&lt;br /&gt;
			&amp;lt;br&amp;gt;&lt;br /&gt;
			'per recuperare l'intero record dall'agenda:&amp;lt;br&amp;gt;&lt;br /&gt;
			For k=1 To miaAgenda.Count&amp;lt;br&amp;gt;&lt;br /&gt;
				cliente = miaAgenda[k]&amp;lt;br&amp;gt;&lt;br /&gt;
				....&amp;lt;br&amp;gt;&lt;br /&gt;
			Next&amp;lt;br&amp;gt;&lt;br /&gt;
		&amp;lt;/code&amp;gt;&lt;br /&gt;
	&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Inserimento di elementi&amp;lt;/H4&amp;gt;&lt;br /&gt;
	&amp;lt;p&amp;gt;&lt;br /&gt;
		Si incrementa come prima cosa la dimensione dell'array, come già visto, e poi si procede ad aggiungere i nuovi valori:&lt;br /&gt;
		&amp;lt;br&amp;gt;&lt;br /&gt;
		&amp;lt;code&amp;gt;&lt;br /&gt;
		Static IdCount As Integer&amp;lt;br&amp;gt;&lt;br /&gt;
		Dim nuovoContatto As Contatto&amp;lt;br&amp;gt;&lt;br /&gt;
		&amp;lt;br&amp;gt;&lt;br /&gt;
		IdCount = IdCount + 1&amp;lt;br&amp;gt;&lt;br /&gt;
		miaAgenda.Resize(miaAgenda.Count+1)&amp;lt;br&amp;gt;&lt;br /&gt;
		nuovoContatto as New Contatto&amp;lt;br&amp;gt;&lt;br /&gt;
		nuovoContatto.ID = IdCount&lt;br /&gt;
		nuovoContatto.Nome = &amp;quot;Pippo&amp;quot;&amp;lt;br&amp;gt;&lt;br /&gt;
		nuovoContatto.Telefono = 333-123456&amp;lt;br&amp;gt;&lt;br /&gt;
		miaAgenda.Add(nuovoContatto)&amp;lt;br&amp;gt;&lt;br /&gt;
		&amp;lt;/code&amp;gt;&lt;br /&gt;
	&amp;lt;/p&amp;gt;	&lt;br /&gt;
	&lt;br /&gt;
	&lt;br /&gt;
&amp;lt;h4&amp;gt;Cancellazione elementi&amp;lt;/H4&amp;gt;&lt;br /&gt;
	&amp;lt;p&amp;gt;&lt;br /&gt;
		In VB l'eliminazione di un elemento richiede lo spostamento di tutti gli elementi superiori a quello voluto e&lt;br /&gt;
successivamente il ridimensionamento dell'array. Gambas mette invece a disposizione il metodo &amp;lt;b&amp;gt;Remove&amp;lt;/b&amp;gt; che elimina &lt;br /&gt;
l'elemento e sposta automaticamente gli elementi superiori se esistono.&lt;br /&gt;
		&amp;lt;br&amp;gt;&lt;br /&gt;
		&amp;lt;code&amp;gt;&lt;br /&gt;
		'nota: Indice è il numero dell'elemento da cancellare, passato alla funzione come parametro&amp;lt;br&amp;gt;&lt;br /&gt;
		miaAgenda[Indice].Remove&lt;br /&gt;
		&amp;lt;/code&amp;gt;&lt;br /&gt;
	&amp;lt;/p&amp;gt;	&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
	&amp;lt;h3&amp;gt;COLLECTION&amp;lt;/h3&amp;gt;&lt;br /&gt;
	&amp;lt;p&amp;gt;&lt;br /&gt;
	La Collection è una rappresentazione dei dati estremamente potente, versatile e semplice in quanto si compone &lt;br /&gt;
	di solo una coppia di informazioni:&lt;br /&gt;
	&amp;lt;br&amp;gt;&lt;br /&gt;
	- la &amp;lt;b&amp;gt;KEY&amp;lt;/b&amp;gt; (chiave) di accesso: una stringa che deve avere un valore univoco e non nullo (se Null, l'elemento&lt;br /&gt;
'sparisce', ovvero viene eliminato).&lt;br /&gt;
	&amp;lt;br&amp;gt;&lt;br /&gt;
	- il &amp;lt;b&amp;gt;VALUE&amp;lt;/B&amp;gt; (valore): può essere qualsiasi cosa (variabile semplice, array, oggetti e &amp;lt;b&amp;gt;anche altre&lt;br /&gt;
Collection&amp;lt;/B&amp;gt;).&lt;br /&gt;
	&amp;lt;br&amp;gt;&lt;br /&gt;
	La Key può essere semplicemente un numero indice convertito in stringa per cui spesso l'uso delle Collection è&lt;br /&gt;
concettualmente simile all'uso degli Array.&lt;br /&gt;
	&amp;lt;br&amp;gt;&lt;br /&gt;
	La definizione e l'instanziamento di una Collection, che è un Oggetto, è del tutto uguale a quelle degli tipi di variabile,&lt;br /&gt;
per cui:&lt;br /&gt;
	&amp;lt;br&amp;gt;&lt;br /&gt;
	&amp;lt;code&amp;gt;&lt;br /&gt;
		Pubblic miaAgenda as Collection&amp;lt;br&amp;gt;&lt;br /&gt;
		...&amp;lt;br&amp;gt;&lt;br /&gt;
		miaAgenda = New Collection&amp;lt;br&amp;gt;&lt;br /&gt;
	&amp;lt;/code&amp;gt;&lt;br /&gt;
	&amp;lt;/p&amp;gt;&lt;br /&gt;
	&lt;br /&gt;
	&lt;br /&gt;
&amp;lt;h4&amp;gt;Enumerazione ed accessi agli elementi&amp;lt;/H4&amp;gt;&lt;br /&gt;
	&amp;lt;p&amp;gt;&lt;br /&gt;
		&amp;lt;code&amp;gt;&lt;br /&gt;
			Dim cliente AS clsContatto&amp;lt;br&amp;gt;&lt;br /&gt;
			Dim tel as String&amp;lt;br&amp;gt;&lt;br /&gt;
			&amp;lt;br&amp;gt;&lt;br /&gt;
			'Utilizzando il campio chiave (es. Codice Fiscale), si accede direttamente al singolo elemento:&amp;lt;br&amp;gt;&lt;br /&gt;
			tel = miaAgenda[CodiceFiscale].Telefono 'Attenzione: la chiave deve essere una stringa!&amp;lt;br&amp;gt;&lt;br /&gt;
			&amp;lt;br&amp;gt;&lt;br /&gt;
			L'enumerazione degli elementi utilizza la notazione &amp;lt;b&amp;gt;For Each&amp;lt;/b&amp;gt; come per tutti gli altri oggetti.&lt;br /&gt;
			&amp;lt;br&amp;gt;&lt;br /&gt;
			&lt;br /&gt;
			For Each cliente In miaAgenda&amp;lt;br&amp;gt;&lt;br /&gt;
				Print cliente.Nome &amp;lt;br&amp;gt;&lt;br /&gt;
				....&amp;lt;br&amp;gt;&lt;br /&gt;
			Next&amp;lt;br&amp;gt;		&lt;br /&gt;
		&amp;lt;/code&amp;gt;					&lt;br /&gt;
	&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Inserimento di elementi&amp;lt;/H4&amp;gt;&lt;br /&gt;
	&amp;lt;p&amp;gt;&lt;br /&gt;
		Occorre innanzitutto definire una nuova chiave; supponiamo di usare per questo il campo Telefono (certamente univoco).&lt;br /&gt;
		&amp;lt;br&amp;gt;&lt;br /&gt;
		Potrebbe però essere anche un valore esterno alla classe clsContatto, come un numero progressivo.&lt;br /&gt;
		&amp;lt;br&amp;gt;&lt;br /&gt;
		&amp;lt;code&amp;gt;&lt;br /&gt;
		Static IdCount As Integer&amp;lt;br&amp;gt;&lt;br /&gt;
		Dim nuovoContatto As clsContatto&amp;lt;br&amp;gt;&lt;br /&gt;
		&amp;lt;br&amp;gt;&lt;br /&gt;
		IdCount = IdCount + 1&amp;lt;br&amp;gt;&lt;br /&gt;
			&lt;br /&gt;
		nuovoContatto as New clsContatto&amp;lt;br&amp;gt;&lt;br /&gt;
		nuovoContatto.Nome = &amp;quot;Pippo&amp;quot;&amp;lt;br&amp;gt;&lt;br /&gt;
		nuovoContatto.Telefono = 345-987654&amp;lt;br&amp;gt;&lt;br /&gt;
		miaAgenda.Add(nuovoContatto, CStr(IdCount)) 'notare l'uso di IdCount come chiave&amp;lt;br&amp;gt;&lt;br /&gt;
		&amp;lt;/code&amp;gt;&lt;br /&gt;
	&amp;lt;/p&amp;gt;	&lt;br /&gt;
	&lt;br /&gt;
	&lt;br /&gt;
&amp;lt;h4&amp;gt;Cancellazione elementi&amp;lt;/H4&amp;gt;&lt;br /&gt;
	&amp;lt;p&amp;gt;&lt;br /&gt;
	Come anticipato, per cancellare un elemento è sufficiente porre a Null la chiave, oppure utilizzare anche qui il metodo 'Remove':&lt;br /&gt;
	&amp;lt;br&amp;gt;&lt;br /&gt;
		&amp;lt;code&amp;gt;&lt;br /&gt;
		miaAgenda[IdCount]=Null&amp;lt;br&amp;gt;&lt;br /&gt;
		'oppure:&amp;lt;br&amp;gt;&lt;br /&gt;
		miaAgenda[IdCount].Remove&amp;lt;br&amp;gt;&lt;br /&gt;
		&amp;lt;/code&amp;gt;&lt;br /&gt;
		In realtà, è altamente consigliabile verificare prima che la chiave esista, per esempio:&lt;br /&gt;
		&amp;lt;code&amp;gt;&lt;br /&gt;
		If miaAgenda[IdCount].Exist Then miaAgenda[IdCount].Remove&amp;lt;br&amp;gt;&lt;br /&gt;
		&amp;lt;/code&amp;gt;&lt;br /&gt;
		E' importante notare come nel caso delle Collection non sia necessario ridimensionare la struttura in quanto si adegua da&lt;br /&gt;
sè.&lt;br /&gt;
	&amp;lt;/p&amp;gt;	&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
&amp;lt;H3&amp;gt;SCHEMA DI IMPLEMENTAZIONE DI CLASSI E COLLECTION&amp;lt;/H3&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
	Per riassumere quanto vito nel caso di utilizzo di classi e collection (strategia suggerita), viene di seguito riportato&lt;br /&gt;
	uno schema sintetico dei documenti e delle dichiarazioni necessarie.&lt;br /&gt;
	&amp;lt;/p&amp;gt;&lt;br /&gt;
	&amp;lt;table border=1&amp;gt;&lt;br /&gt;
		&amp;lt;tr&amp;gt;&lt;br /&gt;
			&amp;lt;th&amp;gt;Documento&amp;lt;/th&amp;gt;&lt;br /&gt;
			&amp;lt;th&amp;gt;Dichiarazioni&amp;lt;/th&amp;gt;&lt;br /&gt;
		&amp;lt;/tr&amp;gt;&lt;br /&gt;
		&amp;lt;tr&amp;gt;&lt;br /&gt;
			&amp;lt;td&amp;gt;Form Main&amp;lt;/td&amp;gt;&lt;br /&gt;
			&amp;lt;td&amp;gt;Chiamate ai metodi clsAgenda.miaAgenda[chiave]...&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;tr&amp;gt;&lt;br /&gt;
			&amp;lt;td&amp;gt;Classe 'clsAgenda'&amp;lt;/td&amp;gt;&lt;br /&gt;
			&amp;lt;td&amp;gt;&lt;br /&gt;
				PUBLIC miaAgenda As Collection&amp;lt;br&amp;gt;&lt;br /&gt;
				...&amp;lt;br&amp;gt;&lt;br /&gt;
				PUBLIC Sub _New()&amp;lt;br&amp;gt;&lt;br /&gt;
					miaAgenda = New Collection&amp;lt;br&amp;gt;&lt;br /&gt;
				End&amp;lt;br&amp;gt;&lt;br /&gt;
				&amp;lt;br&amp;gt;&lt;br /&gt;
				PUBLIC Sub AddContatto(nome As String,telefono As String)&amp;lt;br&amp;gt;&lt;br /&gt;
				...&amp;lt;br&amp;gt;&lt;br /&gt;
				End&amp;lt;br&amp;gt;&lt;br /&gt;
				&amp;lt;br&amp;gt;&lt;br /&gt;
				PUBLIC Sub RemoveContatto(ID as integer)&amp;lt;br&amp;gt;&lt;br /&gt;
					...&amp;lt;br&amp;gt;&lt;br /&gt;
				End&amp;lt;br&amp;gt;&lt;br /&gt;
				&amp;lt;br&amp;gt;&lt;br /&gt;
				PUBLIC Sub GetContatto(ID as integer)&amp;lt;br&amp;gt;&lt;br /&gt;
					...&amp;lt;br&amp;gt;&lt;br /&gt;
				End&amp;lt;br&amp;gt;&lt;br /&gt;
				&lt;br /&gt;
			&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;/tr&amp;gt;&lt;br /&gt;
		&amp;lt;tr&amp;gt;&lt;br /&gt;
			&amp;lt;td&amp;gt;Classe 'clsContatto'&amp;lt;/td&amp;gt;&lt;br /&gt;
			&lt;br /&gt;
			&amp;lt;td&amp;gt;&lt;br /&gt;
				PROPERTY Nome As String&amp;lt;br&amp;gt;&lt;br /&gt;
				PROPERTY Telefono As String&amp;lt;br&amp;gt;&lt;br /&gt;
				&amp;lt;br&amp;gt;&lt;br /&gt;
				PRIVATE $iID As Integer 'proprietà utilizzata internamente per generare una nuova chiave&amp;lt;br&amp;gt;&lt;br /&gt;
				PRIVATE $sNome As String&amp;lt;br&amp;gt;&lt;br /&gt;
				PRIVATE $iTelefono As String	&amp;lt;br&amp;gt;&lt;br /&gt;
			&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;tr&amp;gt;&lt;br /&gt;
	&amp;lt;/table&amp;gt;	&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;H3&amp;gt;CONFRONTO&amp;lt;/H3&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
	Sia gli array di strutture che le collection di classi sono per Gambas degli oggetti, per cui l'approccio è sotto molti&lt;br /&gt;
punti di vista simile.&lt;br /&gt;
	&amp;lt;br&amp;gt;&lt;br /&gt;
	Per chi proviene da VB le Strutture sono forse più familiari e forse più semplici da utilizzare dalle Classi.&lt;br /&gt;
	Occorre però anche considerare la diversa modalità di creazione e aggiunta di elementi in Gambas rispetto a VB, che&lt;br /&gt;
'appesantisce' in una certa misura la gestione.&lt;br /&gt;
	&amp;lt;br&amp;gt;&lt;br /&gt;
	Le Classi da parte loro hanno numerosi vantaggi in termini di leggibilità e di manutenzione del codice, nonchè offrono&lt;br /&gt;
capacità di estensione d'uso sconosciute alle Strutture.&lt;br /&gt;
	Basti pensare all'ereditarietà delle Classi per cui si può avere una classe base e numerose classi figlie, senza dovere&lt;br /&gt;
ripetere tutto il codice, e racchiudere il tutto in una Collection.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Inoltre, e questo è fondamentale per la sicurezza verso bachi e modifiche del codice nella Main, le classi consentono &lt;br /&gt;
l'incapsulamento del codice, delegando tutte le procedure di accesso e verifica di congruità dei dati alla classe stessa.&lt;br /&gt;
Questo permette tra l'altro di riutilizzare la stessa classe in altri progetti.&lt;br /&gt;
 &amp;lt;br&amp;gt;&lt;br /&gt;
 Dal punto di vista prestazionale, la valutazione sui tempi di esecuzione è delegata ad una seconda parte di questo&lt;br /&gt;
documento che sarà rilasciata al più presto,&lt;br /&gt;
 insieme ad un programma di esempio e di test.&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Categorie:Guide_della_comunità|4]]&lt;br /&gt;
--[[Utente:Orionis|Orionis]] ([[Discussioni utente:Orionis|discussioni]]) 08:11, 30 giu 2014 (MDT)&lt;/div&gt;</summary>
		<author><name>Orionis</name></author>
	</entry>
	<entry>
		<id>https://www.gambas-it.org/wiki/index.php?title=Confronto_Array_di_Strutture_verso_Collezione_di_Classi&amp;diff=15697</id>
		<title>Confronto Array di Strutture verso Collezione di Classi</title>
		<link rel="alternate" type="text/html" href="https://www.gambas-it.org/wiki/index.php?title=Confronto_Array_di_Strutture_verso_Collezione_di_Classi&amp;diff=15697"/>
		<updated>2014-06-30T14:11:58Z</updated>

		<summary type="html">&lt;p&gt;Orionis: Creata pagina con '&amp;lt;h2&amp;gt;Confronto Array di Strutture verso Collezione di Classi&amp;lt;/h2&amp;gt; &amp;lt;p&amp;gt; Per chi proviene in Gambas da MS VB la definizione e la gestione di strutture dati personalizzate può ess...'&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;h2&amp;gt;Confronto Array di Strutture verso Collezione di Classi&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Per chi proviene in Gambas da MS VB la definizione e la gestione di strutture dati personalizzate può essere fonte di&lt;br /&gt;
confusione.&lt;br /&gt;
In genere, l'utente medio VB è abituato ad utilizzare array di  strutture ('&amp;lt;i&amp;gt;custom types&amp;lt;/i&amp;gt;').&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Altri preferiscono utilizzare le Classi, con relative proprietà e metodi, e le Collection; in questo caso l'approccio a&lt;br /&gt;
Gambas non comporta variazioni sostanziali.&lt;br /&gt;
&amp;lt;BR&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
La differenza sostanziale tra Array e Collection è data dalla differente metodologia di accesso agli elementi.&amp;lt;br&amp;gt;&lt;br /&gt;
Gli Array sono per loro natura 'posizionali', ovvero la posizione in memoria è sequenziale e stabilita dalla dimensione e&lt;br /&gt;
dall'indice progressivo del singolo elemento.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Le Collection sono gestite autonomamente dal compilatore e la posizione degli elementi non è determinata; l'accesso avviene&lt;br /&gt;
tramite un indice chiave ('&amp;lt;i&amp;gt;Key&amp;lt;/i&amp;gt;').&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Lo scopo di questo documento è di fornire alcune informazioni sulle differenze tra i due approcci, con vantaggi e svantaggi,&lt;br /&gt;
e una sintetica valutazione prestazionale.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Per ciascun approccio saranno presentate le 3 operazioni fondamentali di gestione liste, ovvero &amp;lt;b&amp;gt;Accesso, Aggiunta,&lt;br /&gt;
Eliminazione&amp;lt;/b&amp;gt;.&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3&amp;gt;Definizione di STRUTTURE&amp;lt;/h3&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Per gli esempi che seguino consideremo una semplicissima struttura dati composta da due proprietà, definita in Gambas con:&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
PUBLIC STRUCT Contatto&amp;lt;br&amp;gt;&lt;br /&gt;
ID As Integer&lt;br /&gt;
nome As String&amp;lt;br&amp;gt;&lt;br /&gt;
telefono As String&amp;lt;br&amp;gt;&lt;br /&gt;
END STRUCT&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
&amp;lt;h3&amp;gt;Definizione di CLASSI&amp;lt;/h3&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
	L'uso di classi comporta la consueta creazione di un documento di classe (es. &amp;lt;b&amp;gt;clsContatto&amp;lt;/b&amp;gt;) che esponga le stesse&lt;br /&gt;
proprietà viste sopra e dei metodi per la gestione delle stesse.&lt;br /&gt;
	Si crea dunque il nuovo documento 'clsContatto' (&amp;lt;b&amp;gt;Attenzione&amp;lt;/b&amp;gt;: deve avere la definizione all'inizio &amp;lt;code&amp;gt;CREATE&lt;br /&gt;
STATIC&amp;lt;/code&amp;gt;).&lt;br /&gt;
	&amp;lt;br&amp;gt;&lt;br /&gt;
	&amp;lt;code&amp;gt;&lt;br /&gt;
	'Class clsContatto&amp;lt;br&amp;gt;&lt;br /&gt;
	CREATE STATIC&amp;lt;br&amp;gt;&lt;br /&gt;
	PROPERTY Nome As String&amp;lt;br&amp;gt;&lt;br /&gt;
	PROPERTY Telefono As String&amp;lt;br&amp;gt;&lt;br /&gt;
	&amp;lt;br&amp;gt;&lt;br /&gt;
	PRIVATE $iID As Integer 'proprietà utilizzata internamente per generare una nuova chiave&amp;lt;br&amp;gt;&lt;br /&gt;
	PRIVATE $sNome As String&amp;lt;br&amp;gt;&lt;br /&gt;
	PRIVATE $iTelefono As String	&amp;lt;br&amp;gt;&lt;br /&gt;
	&amp;lt;/code&amp;gt;&lt;br /&gt;
	&amp;lt;br&amp;gt;&lt;br /&gt;
	E' consigliabile usare questo approccio che prevede di 'nascondere' le proprietà interne della classe ed accedere ad esse&lt;br /&gt;
solo tramite chiamate ai metodi pubblici esposti.&lt;br /&gt;
	In questo modo, oltre alla maggiore flessibilità di modifica della classa, si delega alla classe il compiti di validazione&lt;br /&gt;
dei parametri.&lt;br /&gt;
	&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3&amp;gt;ARRAY&amp;lt;/h3&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
	&lt;br /&gt;
	In Gambas gli array di strutture possono essere statici o dinamici, ovvero a dimensioni prestabilite oppure variabili.&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Array statici&amp;lt;/H4&amp;gt;&lt;br /&gt;
	&amp;lt;P&amp;gt;&lt;br /&gt;
	Gli Array statici sono di scarso interesse in quanto la loro dimensione è '&amp;lt;i&amp;gt;hard coded&amp;lt;/i&amp;gt;' nel sorgente, quindi sono per&lt;br /&gt;
niente flessibili. Ciò che segue è quindi sono allo scopo di completezza d'informazione e non sarà utilizzato negli esempi.&lt;br /&gt;
	&amp;lt;BR&amp;gt;&lt;br /&gt;
	&amp;lt;B&amp;gt;NOTA&amp;lt;/B&amp;gt;: in VB non esiste il concetto di Array statico in quanto può essere in qualsiasi momento ridimensionato con le&lt;br /&gt;
istruzioni REDIM [PRESERVE}&lt;br /&gt;
	&amp;lt;BR&amp;gt;&lt;br /&gt;
	La dichiarazione di un array statico di 10 strutture Contatto si scrive:&amp;lt;br&amp;gt;&lt;br /&gt;
	&amp;lt;code&amp;gt;PUBLIC miaAgenda[10] as STRUCT Contatto&amp;lt;/code&amp;gt;&lt;br /&gt;
	&lt;br /&gt;
&amp;lt;/P&amp;gt;&lt;br /&gt;
&amp;lt;h4&amp;gt;Array dinamici&amp;lt;/H4&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	La dichiarazione di Array dinamici è sottilmente, ma sostanzialmente, diversa:&lt;br /&gt;
	&amp;lt;br&amp;gt;&lt;br /&gt;
	&amp;lt;code&amp;gt;PUBLIC miaAgenda as NEW Contatto[]&amp;lt;/code&amp;gt;&lt;br /&gt;
	&amp;lt;BR&amp;gt;&lt;br /&gt;
	Si noti l'ovvia assenza del numero di elementi, l'uso di NEW e la diversa posizione delle parentesi quadre.&lt;br /&gt;
	&amp;lt;br&amp;gt;&lt;br /&gt;
	&amp;lt;B&amp;gt;NOTA 1&amp;lt;/B&amp;gt;: per Gambas gli Array dinamici non sono altro che degli oggetti (classi), per cui valgono proprietà e metodi&lt;br /&gt;
ereditati dalla classe madre 'Object'.&lt;br /&gt;
	&amp;lt;br&amp;gt;&lt;br /&gt;
	Ne consegue che l'utilizzo come Array piuttosto che come classi è più una scelta dell'utilizzatore che pratica, tranne&lt;br /&gt;
nell'enumerazione degli elementi.&lt;br /&gt;
	&amp;lt;br&amp;gt;&lt;br /&gt;
	&amp;lt;B&amp;gt;NOTA 2&amp;lt;/B&amp;gt;: se si vuole utilizzare un Modulo esterno al Form principale (per pulizia del codice) per la gestione dei&lt;br /&gt;
dati, è &amp;lt;b&amp;gt;obbligatorio&amp;lt;/b&amp;gt; copiare esattamente la dichiarazione della struttura ANCHE nel Form.&amp;lt;br&amp;gt;&lt;br /&gt;
	&amp;lt;br&amp;gt;&lt;br /&gt;
	Per ridimensionate l'array (in VB si scriverebbe &amp;lt;code&amp;gt;Redim Preserve miaAgenda(11)&amp;lt;/code&amp;gt;); in Gambas occorre procedere in&lt;br /&gt;
3 fasi:&lt;br /&gt;
	&amp;lt;br&amp;gt;&lt;br /&gt;
	1. si aumenta la dimensione dell'array con: &amp;lt;code&amp;gt;miaAgenda.Resize(11)&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
	2. si istanzia un nuovo elemento 'Contatto' con: &amp;lt;code&amp;gt;nuovoContatto as New Contatto&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
	3. si aggiunge il nuovo elemento vuoto con: &amp;lt;code&amp;gt;miaAgenda.Add(nuovoContatto)&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
	&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Enumerazione e accesso agli elementi&amp;lt;/H4&amp;gt;&lt;br /&gt;
	&amp;lt;p&amp;gt;&lt;br /&gt;
		Accedere a tutti (enumerazione) o ad un elemento dell'Array è identico al metodo usato in VB, con l'unica avvertenza di&lt;br /&gt;
usare le parentesi quadre invece che tonde, per cui:&lt;br /&gt;
		&amp;lt;br&amp;gt;&lt;br /&gt;
		&amp;lt;code&amp;gt;&lt;br /&gt;
			Dim cliente AS Contatto&amp;lt;br&amp;gt;&lt;br /&gt;
			Dim numero AS String&amp;lt;br&amp;gt;&lt;br /&gt;
			Dim k as Integer&amp;lt;br&amp;gt;&lt;br /&gt;
			&amp;lt;br&amp;gt;&lt;br /&gt;
			'per recuperare il valore di un campo dal record n°5:&amp;lt;br&amp;gt;&lt;br /&gt;
			numero = miaAgenda[5].telefono&amp;lt;br&amp;gt;&lt;br /&gt;
			&amp;lt;br&amp;gt;&lt;br /&gt;
			'per recuperare l'intero record dall'agenda:&amp;lt;br&amp;gt;&lt;br /&gt;
			For k=1 To miaAgenda.Count&amp;lt;br&amp;gt;&lt;br /&gt;
				cliente = miaAgenda[k]&amp;lt;br&amp;gt;&lt;br /&gt;
				....&amp;lt;br&amp;gt;&lt;br /&gt;
			Next&amp;lt;br&amp;gt;&lt;br /&gt;
		&amp;lt;/code&amp;gt;&lt;br /&gt;
	&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Inserimento di elementi&amp;lt;/H4&amp;gt;&lt;br /&gt;
	&amp;lt;p&amp;gt;&lt;br /&gt;
		Si incrementa come prima cosa la dimensione dell'array, come già visto, e poi si procede ad aggiungere i nuovi valori:&lt;br /&gt;
		&amp;lt;br&amp;gt;&lt;br /&gt;
		&amp;lt;code&amp;gt;&lt;br /&gt;
		Static IdCount As Integer&amp;lt;br&amp;gt;&lt;br /&gt;
		Dim nuovoContatto As Contatto&amp;lt;br&amp;gt;&lt;br /&gt;
		&amp;lt;br&amp;gt;&lt;br /&gt;
		IdCount = IdCount + 1&amp;lt;br&amp;gt;&lt;br /&gt;
		miaAgenda.Resize(miaAgenda.Count+1)&amp;lt;br&amp;gt;&lt;br /&gt;
		nuovoContatto as New Contatto&amp;lt;br&amp;gt;&lt;br /&gt;
		nuovoContatto.ID = IdCount&lt;br /&gt;
		nuovoContatto.Nome = &amp;quot;Pippo&amp;quot;&amp;lt;br&amp;gt;&lt;br /&gt;
		nuovoContatto.Telefono = 333-123456&amp;lt;br&amp;gt;&lt;br /&gt;
		miaAgenda.Add(nuovoContatto)&amp;lt;br&amp;gt;&lt;br /&gt;
		&amp;lt;/code&amp;gt;&lt;br /&gt;
	&amp;lt;/p&amp;gt;	&lt;br /&gt;
	&lt;br /&gt;
	&lt;br /&gt;
&amp;lt;h4&amp;gt;Cancellazione elementi&amp;lt;/H4&amp;gt;&lt;br /&gt;
	&amp;lt;p&amp;gt;&lt;br /&gt;
		In VB l'eliminazione di un elemento richiede lo spostamento di tutti gli elementi superiori a quello voluto e&lt;br /&gt;
successivamente il ridimensionamento dell'array. Gambas mette invece a disposizione il metodo &amp;lt;b&amp;gt;Remove&amp;lt;/b&amp;gt; che elimina &lt;br /&gt;
l'elemento e sposta automaticamente gli elementi superiori se esistono.&lt;br /&gt;
		&amp;lt;br&amp;gt;&lt;br /&gt;
		&amp;lt;code&amp;gt;&lt;br /&gt;
		'nota: Indice è il numero dell'elemento da cancellare, passato alla funzione come parametro&amp;lt;br&amp;gt;&lt;br /&gt;
		miaAgenda[Indice].Remove&lt;br /&gt;
		&amp;lt;/code&amp;gt;&lt;br /&gt;
	&amp;lt;/p&amp;gt;	&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
	&amp;lt;h3&amp;gt;COLLECTION&amp;lt;/h3&amp;gt;&lt;br /&gt;
	&amp;lt;p&amp;gt;&lt;br /&gt;
	La Collection è una rappresentazione dei dati estremamente potente, versatile e semplice in quanto si compone &lt;br /&gt;
	di solo una coppia di informazioni:&lt;br /&gt;
	&amp;lt;br&amp;gt;&lt;br /&gt;
	- la &amp;lt;b&amp;gt;KEY&amp;lt;/b&amp;gt; (chiave) di accesso: una stringa che deve avere un valore univoco e non nullo (se Null, l'elemento&lt;br /&gt;
'sparisce', ovvero viene eliminato).&lt;br /&gt;
	&amp;lt;br&amp;gt;&lt;br /&gt;
	- il &amp;lt;b&amp;gt;VALUE&amp;lt;/B&amp;gt; (valore): può essere qualsiasi cosa (variabile semplice, array, oggetti e &amp;lt;b&amp;gt;anche altre&lt;br /&gt;
Collection&amp;lt;/B&amp;gt;).&lt;br /&gt;
	&amp;lt;br&amp;gt;&lt;br /&gt;
	La Key può essere semplicemente un numero indice convertito in stringa per cui spesso l'uso delle Collection è&lt;br /&gt;
concettualmente simile all'uso degli Array.&lt;br /&gt;
	&amp;lt;br&amp;gt;&lt;br /&gt;
	La definizione e l'instanziamento di una Collection, che è un Oggetto, è del tutto uguale a quelle degli tipi di variabile,&lt;br /&gt;
per cui:&lt;br /&gt;
	&amp;lt;br&amp;gt;&lt;br /&gt;
	&amp;lt;code&amp;gt;&lt;br /&gt;
		Pubblic miaAgenda as Collection&amp;lt;br&amp;gt;&lt;br /&gt;
		...&amp;lt;br&amp;gt;&lt;br /&gt;
		miaAgenda = New Collection&amp;lt;br&amp;gt;&lt;br /&gt;
	&amp;lt;/code&amp;gt;&lt;br /&gt;
	&amp;lt;/p&amp;gt;&lt;br /&gt;
	&lt;br /&gt;
	&lt;br /&gt;
&amp;lt;h4&amp;gt;Enumerazione ed accessi agli elementi&amp;lt;/H4&amp;gt;&lt;br /&gt;
	&amp;lt;p&amp;gt;&lt;br /&gt;
		&amp;lt;code&amp;gt;&lt;br /&gt;
			Dim cliente AS clsContatto&amp;lt;br&amp;gt;&lt;br /&gt;
			Dim tel as String&amp;lt;br&amp;gt;&lt;br /&gt;
			&amp;lt;br&amp;gt;&lt;br /&gt;
			'Utilizzando il campio chiave (es. Codice Fiscale), si accede direttamente al singolo elemento:&amp;lt;br&amp;gt;&lt;br /&gt;
			tel = miaAgenda[CodiceFiscale].Telefono 'Attenzione: la chiave deve essere una stringa!&amp;lt;br&amp;gt;&lt;br /&gt;
			&amp;lt;br&amp;gt;&lt;br /&gt;
			L'enumerazione degli elementi utilizza la notazione &amp;lt;b&amp;gt;For Each&amp;lt;/b&amp;gt; come per tutti gli altri oggetti.&lt;br /&gt;
			&amp;lt;br&amp;gt;&lt;br /&gt;
			&lt;br /&gt;
			For Each cliente In miaAgenda&amp;lt;br&amp;gt;&lt;br /&gt;
				Print cliente.Nome &amp;lt;br&amp;gt;&lt;br /&gt;
				....&amp;lt;br&amp;gt;&lt;br /&gt;
			Next&amp;lt;br&amp;gt;		&lt;br /&gt;
		&amp;lt;/code&amp;gt;					&lt;br /&gt;
	&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Inserimento di elementi&amp;lt;/H4&amp;gt;&lt;br /&gt;
	&amp;lt;p&amp;gt;&lt;br /&gt;
		Occorre innanzitutto definire una nuova chiave; supponiamo di usare per questo il campo Telefono (certamente univoco).&lt;br /&gt;
		&amp;lt;br&amp;gt;&lt;br /&gt;
		Potrebbe però essere anche un valore esterno alla classe clsContatto, come un numero progressivo.&lt;br /&gt;
		&amp;lt;br&amp;gt;&lt;br /&gt;
		&amp;lt;code&amp;gt;&lt;br /&gt;
		Static IdCount As Integer&amp;lt;br&amp;gt;&lt;br /&gt;
		Dim nuovoContatto As clsContatto&amp;lt;br&amp;gt;&lt;br /&gt;
		&amp;lt;br&amp;gt;&lt;br /&gt;
		IdCount = IdCount + 1&amp;lt;br&amp;gt;&lt;br /&gt;
			&lt;br /&gt;
		nuovoContatto as New clsContatto&amp;lt;br&amp;gt;&lt;br /&gt;
		nuovoContatto.Nome = &amp;quot;Pippo&amp;quot;&amp;lt;br&amp;gt;&lt;br /&gt;
		nuovoContatto.Telefono = 345-987654&amp;lt;br&amp;gt;&lt;br /&gt;
		miaAgenda.Add(nuovoContatto, CStr(IdCount)) 'notare l'uso di IdCount come chiave&amp;lt;br&amp;gt;&lt;br /&gt;
		&amp;lt;/code&amp;gt;&lt;br /&gt;
	&amp;lt;/p&amp;gt;	&lt;br /&gt;
	&lt;br /&gt;
	&lt;br /&gt;
&amp;lt;h4&amp;gt;Cancellazione elementi&amp;lt;/H4&amp;gt;&lt;br /&gt;
	&amp;lt;p&amp;gt;&lt;br /&gt;
	Come anticipato, per cancellare un elemento è sufficiente porre a Null la chiave, oppure utilizzare anche qui il metodo 'Remove':&lt;br /&gt;
	&amp;lt;br&amp;gt;&lt;br /&gt;
		&amp;lt;code&amp;gt;&lt;br /&gt;
		miaAgenda[IdCount]=Null&amp;lt;br&amp;gt;&lt;br /&gt;
		'oppure:&amp;lt;br&amp;gt;&lt;br /&gt;
		miaAgenda[IdCount].Remove&amp;lt;br&amp;gt;&lt;br /&gt;
		&amp;lt;/code&amp;gt;&lt;br /&gt;
		In realtà, è altamente consigliabile verificare prima che la chiave esista, per esempio:&lt;br /&gt;
		&amp;lt;code&amp;gt;&lt;br /&gt;
		If miaAgenda[IdCount].Exist Then miaAgenda[IdCount].Remove&amp;lt;br&amp;gt;&lt;br /&gt;
		&amp;lt;/code&amp;gt;&lt;br /&gt;
		E' importante notare come nel caso delle Collection non sia necessario ridimensionare la struttura in quanto si adegua da&lt;br /&gt;
sè.&lt;br /&gt;
	&amp;lt;/p&amp;gt;	&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
&amp;lt;H3&amp;gt;SCHEMA DI IMPLEMENTAZIONE DI CLASSI E COLLECTION&amp;lt;/H3&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
	Per riassumere quanto vito nel caso di utilizzo di classi e collection (strategia suggerita), viene di seguito riportato&lt;br /&gt;
	uno schema sintetico dei documenti e delle dichiarazioni necessarie.&lt;br /&gt;
	&amp;lt;/p&amp;gt;&lt;br /&gt;
	&amp;lt;table border=1&amp;gt;&lt;br /&gt;
		&amp;lt;tr&amp;gt;&lt;br /&gt;
			&amp;lt;th&amp;gt;Documento&amp;lt;/th&amp;gt;&lt;br /&gt;
			&amp;lt;th&amp;gt;Dichiarazioni&amp;lt;/th&amp;gt;&lt;br /&gt;
		&amp;lt;/tr&amp;gt;&lt;br /&gt;
		&amp;lt;tr&amp;gt;&lt;br /&gt;
			&amp;lt;td&amp;gt;Form Main&amp;lt;/td&amp;gt;&lt;br /&gt;
			&amp;lt;td&amp;gt;Chiamate ai metodi clsAgenda.miaAgenda[chiave]...&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;tr&amp;gt;&lt;br /&gt;
			&amp;lt;td&amp;gt;Classe 'clsAgenda'&amp;lt;/td&amp;gt;&lt;br /&gt;
			&amp;lt;td&amp;gt;&lt;br /&gt;
				PUBLIC miaAgenda As Collection&amp;lt;br&amp;gt;&lt;br /&gt;
				...&amp;lt;br&amp;gt;&lt;br /&gt;
				PUBLIC Sub _New()&amp;lt;br&amp;gt;&lt;br /&gt;
					miaAgenda = New Collection&amp;lt;br&amp;gt;&lt;br /&gt;
				End&amp;lt;br&amp;gt;&lt;br /&gt;
				&amp;lt;br&amp;gt;&lt;br /&gt;
				PUBLIC Sub AddContatto(nome As String,telefono As String)&amp;lt;br&amp;gt;&lt;br /&gt;
				...&amp;lt;br&amp;gt;&lt;br /&gt;
				End&amp;lt;br&amp;gt;&lt;br /&gt;
				&amp;lt;br&amp;gt;&lt;br /&gt;
				PUBLIC Sub RemoveContatto(ID as integer)&amp;lt;br&amp;gt;&lt;br /&gt;
					...&amp;lt;br&amp;gt;&lt;br /&gt;
				End&amp;lt;br&amp;gt;&lt;br /&gt;
				&amp;lt;br&amp;gt;&lt;br /&gt;
				PUBLIC Sub GetContatto(ID as integer)&amp;lt;br&amp;gt;&lt;br /&gt;
					...&amp;lt;br&amp;gt;&lt;br /&gt;
				End&amp;lt;br&amp;gt;&lt;br /&gt;
				&lt;br /&gt;
			&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;/tr&amp;gt;&lt;br /&gt;
		&amp;lt;tr&amp;gt;&lt;br /&gt;
			&amp;lt;td&amp;gt;Classe 'clsContatto'&amp;lt;/td&amp;gt;&lt;br /&gt;
			&lt;br /&gt;
			&amp;lt;td&amp;gt;&lt;br /&gt;
				PROPERTY Nome As String&amp;lt;br&amp;gt;&lt;br /&gt;
				PROPERTY Telefono As String&amp;lt;br&amp;gt;&lt;br /&gt;
				&amp;lt;br&amp;gt;&lt;br /&gt;
				PRIVATE $iID As Integer 'proprietà utilizzata internamente per generare una nuova chiave&amp;lt;br&amp;gt;&lt;br /&gt;
				PRIVATE $sNome As String&amp;lt;br&amp;gt;&lt;br /&gt;
				PRIVATE $iTelefono As String	&amp;lt;br&amp;gt;&lt;br /&gt;
			&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;tr&amp;gt;&lt;br /&gt;
	&amp;lt;/table&amp;gt;	&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;H3&amp;gt;CONFRONTO&amp;lt;/H3&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
	Sia gli array di strutture che le collection di classi sono per Gambas degli oggetti, per cui l'approccio è sotto molti&lt;br /&gt;
punti di vista simile.&lt;br /&gt;
	&amp;lt;br&amp;gt;&lt;br /&gt;
	Per chi proviene da VB le Strutture sono forse più familiari e forse più semplici da utilizzare dalle Classi.&lt;br /&gt;
	Occorre però anche considerare la diversa modalità di creazione e aggiunta di elementi in Gambas rispetto a VB, che&lt;br /&gt;
'appesantisce' in una certa misura la gestione.&lt;br /&gt;
	&amp;lt;br&amp;gt;&lt;br /&gt;
	Le Classi da parte loro hanno numerosi vantaggi in termini di leggibilità e di manutenzione del codice, nonchè offrono&lt;br /&gt;
capacità di estensione d'uso sconosciute alle Strutture.&lt;br /&gt;
	Basti pensare all'ereditarietà delle Classi per cui si può avere una classe base e numerose classi figlie, senza dovere&lt;br /&gt;
ripetere tutto il codice, e racchiudere il tutto in una Collection.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Inoltre, e questo è fondamentale per la sicurezza verso bachi e modifiche del codice nella Main, le classi consentono &lt;br /&gt;
l'incapsulamento del codice, delegando tutte le procedure di accesso e verifica di congruità dei dati alla classe stessa.&lt;br /&gt;
Questo permette tra l'altro di riutilizzare la stessa classe in altri progetti.&lt;br /&gt;
 &amp;lt;br&amp;gt;&lt;br /&gt;
 Dal punto di vista prestazionale, la valutazione sui tempi di esecuzione è delegata ad una seconda parte di questo&lt;br /&gt;
documento che sarà rilasciata al più presto,&lt;br /&gt;
 insieme ad un programma di esempio e di test.&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
--[[Utente:Orionis|Orionis]] ([[Discussioni utente:Orionis|discussioni]]) 08:11, 30 giu 2014 (MDT)&lt;/div&gt;</summary>
		<author><name>Orionis</name></author>
	</entry>
</feed>