<?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=Vuott</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=Vuott"/>
	<link rel="alternate" type="text/html" href="https://www.gambas-it.org/wiki/index.php/Speciale:Contributi/Vuott"/>
	<updated>2026-10-23T05:05:42Z</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=Convertire_un_timestamp_Unix_in_una_data_Gambas&amp;diff=42766</id>
		<title>Convertire un timestamp Unix in una data Gambas</title>
		<link rel="alternate" type="text/html" href="https://www.gambas-it.org/wiki/index.php?title=Convertire_un_timestamp_Unix_in_una_data_Gambas&amp;diff=42766"/>
		<updated>2025-11-16T19:09:08Z</updated>

		<summary type="html">&lt;p&gt;Vuott: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Un timestamp Unix è un &amp;lt;U&amp;gt;numero&amp;lt;/u&amp;gt; di secondi trascorsi dal 01 gennaio 1970 all'attuale momento UTC.&lt;br /&gt;
&lt;br /&gt;
Per convertire tale timestamp Unix in una data di fomato Gambas è necessario attivare il Componente gb.util e utilizzare il Metodo &amp;quot;.FromUnixTime()&amp;quot; della Classe ''Date'':&lt;br /&gt;
 Date.FromUnixTime ( UnixTime As Long ) As Date&lt;/div&gt;</summary>
		<author><name>Vuott</name></author>
	</entry>
	<entry>
		<id>https://www.gambas-it.org/wiki/index.php?title=Convertire_un_timestamp_Unix_in_una_data_Gambas&amp;diff=42765</id>
		<title>Convertire un timestamp Unix in una data Gambas</title>
		<link rel="alternate" type="text/html" href="https://www.gambas-it.org/wiki/index.php?title=Convertire_un_timestamp_Unix_in_una_data_Gambas&amp;diff=42765"/>
		<updated>2025-11-16T19:05:30Z</updated>

		<summary type="html">&lt;p&gt;Vuott: Creata pagina con &amp;quot;Un timestamp Unix è un &amp;lt;U&amp;gt;numero&amp;lt;/u&amp;gt; di secondi trascorsi dal 01 gennaio 1970 all'attuale momento UTC.  Per convertire tale timestamp Unix in una data di fomato Gambas è necessario attivare il Componente gb.util e utilizzare il Metodo statico &amp;quot;.FromUnixTime()&amp;quot; della Classe ''Date'':  Date.FromUnixTime ( UnixTime As Long ) As Date&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Un timestamp Unix è un &amp;lt;U&amp;gt;numero&amp;lt;/u&amp;gt; di secondi trascorsi dal 01 gennaio 1970 all'attuale momento UTC.&lt;br /&gt;
&lt;br /&gt;
Per convertire tale timestamp Unix in una data di fomato Gambas è necessario attivare il Componente gb.util e utilizzare il Metodo statico &amp;quot;.FromUnixTime()&amp;quot; della Classe ''Date'':&lt;br /&gt;
 Date.FromUnixTime ( UnixTime As Long ) As Date&lt;/div&gt;</summary>
		<author><name>Vuott</name></author>
	</entry>
	<entry>
		<id>https://www.gambas-it.org/wiki/index.php?title=Guide_della_comunit%C3%A0&amp;diff=42764</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=42764"/>
		<updated>2025-11-16T18:51:05Z</updated>

		<summary type="html">&lt;p&gt;Vuott: /* Tempo, Date e Temporizzazioni */&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;
== Array (Vettori) e Matrici ==&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;B&amp;gt;[[Array: creazione, modifica e riempimento]]&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;B&amp;gt;[[Array multidimensionali con numero determinato di elementi]]&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;B&amp;gt;[[Array multidimensionali con numero indeterminato di elementi]]&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* [[Array annidati]]&lt;br /&gt;
&lt;br /&gt;
* [[Array contenenti array di varie dimensioni]]&lt;br /&gt;
&lt;br /&gt;
* [[Array in linea]]&lt;br /&gt;
&lt;br /&gt;
* [[Accedere linearmente in scrittura ed in lettura ad una Matrice]]&lt;br /&gt;
&lt;br /&gt;
* [[Assegnare ad un vettore i valori contenuti da un'area di memoria puntata da un Puntatore]]&lt;br /&gt;
&lt;br /&gt;
* [[Assegnare ciascuna cifra di un numero a un elemento di un vettore di tipo Byte]]&lt;br /&gt;
&lt;br /&gt;
* [[Assegnare i byte dei dati di un numero agli elementi di un vettore di tipo Byte]]&lt;br /&gt;
&lt;br /&gt;
* [[Assegnare un vettore ad una variabile di tipo Object]]&lt;br /&gt;
&lt;br /&gt;
* [[Assegnare un vettore ad una variabile di tipo Puntatore]]&lt;br /&gt;
&lt;br /&gt;
* [[Configurazione, organizzazione ed impostazione dell'array secondo i sorgenti di Gambas]]&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere quale elemento di un vettore contiene un determinato valore]]&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere con i Puntatori i valori contenuti in un vettore]]&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere il valore numerico più alto contenuto da un vettore]]&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere la dimensione ed il numero di elementi di una Matrice]]&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere in un array di tipo Stringa la quantità maggiore di caratteri contenuta nei suoi elementi]]&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere in un array di tipo Stringa l'elemento che contiene la quantità maggiore di caratteri]]&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;
* &amp;lt;B&amp;gt;[[Copie di variabili array]]&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* [[Eliminare più elementi da un array]]&lt;br /&gt;
&lt;br /&gt;
* [[Emulare la funzione Asc() con il vettore di tipo Byte]]&lt;br /&gt;
&lt;br /&gt;
* [[Gestione di una coda mediante array in modo circolare]]&lt;br /&gt;
&lt;br /&gt;
* [[Invertire l'ordine dei valori contenuti dagli elementi di un vettore]]&lt;br /&gt;
&lt;br /&gt;
* [[Invertire l'ordine nelle coppie di byte dell'area di memoria di un vettore con la funzione esterna swab()]]&lt;br /&gt;
&lt;br /&gt;
* [[Leggere e scrivere in un vettore mediante i Memory Stream]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere il puntatore a una variabile vettoriale]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere un vettore di tipo Byte da una Stringa]]&lt;br /&gt;
&lt;br /&gt;
* [[Porre a zero i valori contenuti da un Vettore]]&lt;br /&gt;
&lt;br /&gt;
* [[Proprietà ReadOnly dell'Array (proprietà di sola lettura)]]&lt;br /&gt;
&lt;br /&gt;
* [[Raccogliere il valore contenuto nell'ultimo elemento di indice non conosciuto di un vettore restituito da una funzione]]&lt;br /&gt;
&lt;br /&gt;
* [[Scrivere in un vettore i dati di un file]]&lt;br /&gt;
&lt;br /&gt;
* [[Utilizzare un Vettore al posto di una Matrice]]&lt;br /&gt;
&lt;br /&gt;
== Balloon ==&lt;br /&gt;
&lt;br /&gt;
* [[Colorare il testo di un Balloon]]&lt;br /&gt;
&lt;br /&gt;
* [[Mostrare un'immagine in un Ballon]]&lt;br /&gt;
&lt;br /&gt;
* [[Posizionare arbitrariamente un Balloon]]&lt;br /&gt;
&lt;br /&gt;
== Bit - Operazioni sui Bit ==&lt;br /&gt;
&lt;br /&gt;
* [[Conversione Big-Endian/Little-Endian]]&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere di un numero la posizione del primo bit da destra impostato a 1]]&lt;br /&gt;
&lt;br /&gt;
* [[Effettuare con le funzioni di libglib-2.0 alcune operazioni sui bit di un valore di una variabile puntata da un Puntatore]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere il ''nibble'' alto ed il ''nibble'' basso di un numero]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere in Gambas il risultato di uno spostamento di bit scritto in linguaggio C]]&lt;br /&gt;
&lt;br /&gt;
* [[Porre a 0 oppure a 1 un bit di un numero]]&lt;br /&gt;
&lt;br /&gt;
* [[Sapere con le funzioni esterne del API di libglib-2.0 quanti bit sono necessari per contenere un numero]]&lt;br /&gt;
&lt;br /&gt;
* [[Sapere quanti bit posti ad 1 sono presenti in un numero]]&lt;br /&gt;
&lt;br /&gt;
* [[Sostituire gli operatori logici di spostamento dei bit con semplici operazioni]]&lt;br /&gt;
&lt;br /&gt;
* [[Sottrazione con operatori bitwise]]&lt;br /&gt;
&lt;br /&gt;
== Classi ==&lt;br /&gt;
&lt;br /&gt;
===Classi in generale===&lt;br /&gt;
&lt;br /&gt;
* [[Accedere alla Struttura della risorsa &amp;quot;Classe&amp;quot;, come dichiarata nei sorgenti di Gambas]]&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere le risorse possedute da una Classe]]&lt;br /&gt;
&lt;br /&gt;
* [[Rendere gli elementi di una Classe richiamabili da un progetto Gambas esterno]]&lt;br /&gt;
&lt;br /&gt;
* [[Usare una Classe come fosse una Funzione]]&lt;br /&gt;
&lt;br /&gt;
===Classi particolari native===&lt;br /&gt;
&lt;br /&gt;
* [[Aggiungere una funzione personalizzata alla Classe nativa String]]&lt;br /&gt;
&lt;br /&gt;
* [[La classe Action]]&lt;br /&gt;
&lt;br /&gt;
===Classi specifiche===&lt;br /&gt;
&lt;br /&gt;
* [[Creare da codice una Classe specifica]]&lt;br /&gt;
&lt;br /&gt;
* [[Variabile del tipo di una Classe specifica creata]]&lt;br /&gt;
&lt;br /&gt;
* [[Vettore del tipo di una Classe specifica creata]]&lt;br /&gt;
 &lt;br /&gt;
====Classi particolari realizzate della Comunità Gambas-it.org====&lt;br /&gt;
&lt;br /&gt;
* [[Clib]]&lt;br /&gt;
&lt;br /&gt;
* [[csvbox]]&lt;br /&gt;
&lt;br /&gt;
* [[CTable]]&lt;br /&gt;
&lt;br /&gt;
* [[Fifo]]&lt;br /&gt;
&lt;br /&gt;
* [[GLibrary]]&lt;br /&gt;
&lt;br /&gt;
* [[GridViewUtil]]&lt;br /&gt;
&lt;br /&gt;
* [[PdfWriter]]&lt;br /&gt;
&lt;br /&gt;
* [[TrasfImpLett]]&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;
* [[Collection]]&lt;br /&gt;
&lt;br /&gt;
* [[Confronto Array di Strutture verso Collezione di Classi]]&lt;br /&gt;
&lt;br /&gt;
* [[Definizione esplicita di una Collection]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere il valore attribuito a una chiave della 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 Metodo o una Proprietà della Classe di un Oggetto inserito in una Collection]]&lt;br /&gt;
&lt;br /&gt;
* [[Richiamare un'intera Collection nel campo di un'altra Collection]]&lt;br /&gt;
&lt;br /&gt;
== ColorInfo ==&lt;br /&gt;
&lt;br /&gt;
* [[Uso della classe ColorInfo]]&lt;br /&gt;
&lt;br /&gt;
== ColumnView ==&lt;br /&gt;
&lt;br /&gt;
* [[Aggiungere una colonna a una ColumnView]]&lt;br /&gt;
&lt;br /&gt;
* [[Aggiungere una riga a una ColumnView]]&lt;br /&gt;
&lt;br /&gt;
* [[Assegnare colori allo sfondo ed al testo di una riga selezionata di una ColumnView]]&lt;br /&gt;
&lt;br /&gt;
* [[Assegnare il testo a una cella della ColumnView]]&lt;br /&gt;
&lt;br /&gt;
* [[Impostare la larghezza delle colonne in una ColumnView]]&lt;br /&gt;
&lt;br /&gt;
* [[Selezionare da codice una riga di una ColumnView]]&lt;br /&gt;
&lt;br /&gt;
== ComboBox ==&lt;br /&gt;
&lt;br /&gt;
* [[ComboBox che consente di posizionarsi sulla prima ricorrenza di un item quando si digitano le sue prime lettere]]&lt;br /&gt;
* [[ComboBox che mostra immagini anziché caratteri alfanumerici]]&lt;br /&gt;
* [[ComboBox: creare una lista da codice]]&lt;br /&gt;
* [[Impostare il colore del testo di ogni elemento della lista del ComboBox]]&lt;br /&gt;
* [[Impostare il colore dello sfondo del ComboBox]]&lt;br /&gt;
* [[Ridimensionare la larghezza della finestra a cascata di un ComboBox in base alla lunghezza testuale di un elemento della lista]]&lt;br /&gt;
* [[Scegliere da codice un elemento presente in un ComboBox]]&lt;br /&gt;
* [[Scegliere da codice un indice del ComboBox]]&lt;br /&gt;
&lt;br /&gt;
==Come Compilare Gambas==&lt;br /&gt;
* [[Compilare Gambas]]&lt;br /&gt;
&lt;br /&gt;
== Componenti ==&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;B&amp;gt;[[Cosa è un Componente di Gambas]]&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* [[Attivare un Componente dinamicamente da codice]]&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere il nome del Componente di appartenenza di una Classe mediante i sorgenti di Gambas]]&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere le Classi possedute da un Componente]]&lt;br /&gt;
&lt;br /&gt;
* [[Utilizzare un Componente obsoleto]]&lt;br /&gt;
&lt;br /&gt;
=== Realizzazione dei Componenti in linguaggio Gambas ===&lt;br /&gt;
&lt;br /&gt;
* [[Come creare un Componente scritto in linguaggio Gambas]]&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;
* [[gb.strLib]]&lt;br /&gt;
&lt;br /&gt;
* [[gb.textpro]]&lt;br /&gt;
&lt;br /&gt;
* [[GridBox]]&lt;br /&gt;
&lt;br /&gt;
* [[INILib]]&lt;br /&gt;
&lt;br /&gt;
* [[InvBox]]&lt;br /&gt;
&lt;br /&gt;
* [[qrcodereader]]&lt;br /&gt;
&lt;br /&gt;
* [[XMLLib]]&lt;br /&gt;
&lt;br /&gt;
=== Realizzazione dei Componenti in linguaggio C ===&lt;br /&gt;
&lt;br /&gt;
* [[Creare un Componente per Gambas scritto in linguaggio C]]&lt;br /&gt;
&lt;br /&gt;
== CPU e Scheda Madre==&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere con alcune funzioni della libreria libc.so.6 il numero dei processori configurati e disponibili]]&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere il numero dei processori presenti nel proprio calcolatore con la Proprietà System.Cores]]&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere il numero dei processori presenti nel proprio calcolatore leggendo il file di sistema &amp;quot;cpuinfo&amp;quot;]]&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere la frequenza delle CPU mediante le funzioni esterne del API di Libcpufreq]]&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere la risoluzione dei clock hardware con le risorse esterne dichiarate nel file header &amp;quot;time.h&amp;quot;]]&lt;br /&gt;
&lt;br /&gt;
* [[Controllare la temperatura della CPU con le sole funzioni di Gambas]]&lt;br /&gt;
&lt;br /&gt;
* [[Controllare la temperatura dell'hardware mediante le funzioni del API di libsensors]]&lt;br /&gt;
&lt;br /&gt;
* [[Generare arbitrariamente un errore &amp;quot;CPU Time Limit Exceeded&amp;quot; con la funzione esterna vlimit()]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere alcune informazioni sulla CPU mediante l'API di Libavutil]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere alcune informazioni sulla CPU mediante l'API di Libcpuid]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere informazioni generali sulla CPU con le funzioni esterne del API di SDL2]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere informazioni generali sulla CPU con le sole risorse di Gambas]]&lt;br /&gt;
&lt;br /&gt;
* [[Verificare la frequenza delle CPU con le sole risorse di Gambas]]&lt;br /&gt;
&lt;br /&gt;
== Creazione pacchetti di installazione ==&lt;br /&gt;
&lt;br /&gt;
* [[Creare un AppImage firmata di un progetto Gambas]]&lt;br /&gt;
&lt;br /&gt;
== DBus ==&lt;br /&gt;
&lt;br /&gt;
* [[Introduzione a DBus]]&lt;br /&gt;
&lt;br /&gt;
* [[Inviare dati da un programma Gambas ad un altro mediante le risorse del Componente DBus]]&lt;br /&gt;
&lt;br /&gt;
== Desktop - Scrivania ==&lt;br /&gt;
&lt;br /&gt;
* [[Far mostrare sulla Scrivania i messaggi della specifica Desktop Notifications mediante le funzioni esterne del API di Libnotify]]&lt;br /&gt;
&lt;br /&gt;
* [[Individuare con precisione il percorso ed il nome della Scrivania]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere il valore di un pixel sulla Scrivania]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere informazioni sulle icone presenti sulla Scrivania]]&lt;br /&gt;
&lt;br /&gt;
== DesktopFile ==&lt;br /&gt;
&lt;br /&gt;
* [[Uso del Metodo .RunExec()]]&lt;br /&gt;
&lt;br /&gt;
== DesktopWatcher ==&lt;br /&gt;
&lt;br /&gt;
* [[Uso della classe DesktopWatcher]]&lt;br /&gt;
&lt;br /&gt;
== DesktopWindow ==&lt;br /&gt;
&lt;br /&gt;
* [[Uso della classe DesktopWindow]]&lt;br /&gt;
&lt;br /&gt;
== Dialog ==&lt;br /&gt;
&lt;br /&gt;
* [[Caricare in un Dialog più file da aprire in sequenza]]&lt;br /&gt;
&lt;br /&gt;
* [[Far mostrare in un Dialog l'estensione dell'ultimo file precedentemente aperto]]&lt;br /&gt;
&lt;br /&gt;
* [[Far mostrare in un Dialog una particolare estensione di file]]&lt;br /&gt;
&lt;br /&gt;
* [[Filtrare contemporaneamente con il Dialog.Filter più estensioni di file]]&lt;br /&gt;
&lt;br /&gt;
* [[Preimpostare il percorso della finestra del Dialog]]&lt;br /&gt;
&lt;br /&gt;
* [[Ridimensionare la finestra del Dialog da codice]]&lt;br /&gt;
&lt;br /&gt;
== DirView - FileView ==&lt;br /&gt;
&lt;br /&gt;
* [[Copiare un file utilizzando gli oggetti DirView e FileView]]&lt;br /&gt;
&lt;br /&gt;
* [[Mostrare con diversi colori i nomi dei file in una FileView]]&lt;br /&gt;
&lt;br /&gt;
== Drag &amp;amp; Drop ==&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;B&amp;gt;[[Codice essenziale per effettuare il Drag&amp;amp;Drop di un'immagine da un Controllo grafico in un altro]]&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;B&amp;gt;[[Codice essenziale per effettuare il Drag&amp;amp;Drop di un testo]]&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* [[Mantenere durante il Drag&amp;amp;Drop il cursore del mouse nel punto dell'immagine ove si è cliccato]]&lt;br /&gt;
&lt;br /&gt;
* [[Mostrare il contenuto di un file di testo con il Drag&amp;amp;Drop del file in un oggetto di testo]]&lt;br /&gt;
&lt;br /&gt;
* [[Mostrare un'immagine animata con il Drag&amp;amp;Drop del suo file in una MovieBox]]&lt;br /&gt;
&lt;br /&gt;
* [[Mostrare un'immagine con il Drag&amp;amp;Drop del suo file in una PictureBox o in una ImageView]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere il percorso di un file trasportato e rilasciato con Drag&amp;amp;Drop]]&lt;br /&gt;
&lt;br /&gt;
* [[Spostare Oggetti grafici con il Drag&amp;amp;Drop all'interno di un Contenitore]]&lt;br /&gt;
&lt;br /&gt;
== DrawingArea ==&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;B&amp;gt;[[Istruzioni essenziali per disegnare su una DrawingArea]]&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* [[Calcolo e rappresentazione grafica in una DrawingArea del Seno e del Coseno]]&lt;br /&gt;
&lt;br /&gt;
* [[Creare e distruggere un Controllo grafico in una DrawingArea]]&lt;br /&gt;
&lt;br /&gt;
* [[Creare, spostare e distruggere un'immagine in una DrawingArea]]&lt;br /&gt;
&lt;br /&gt;
* [[Curvare il testo in una DrawingArea]]&lt;br /&gt;
&lt;br /&gt;
* [[Disegnare in una DrawingArea dei punti]]&lt;br /&gt;
&lt;br /&gt;
* [[Disegnare in una DrawingArea due immagini sovrapposte anche consentendo il cambio di opacità di quella disegnata sopra]]&lt;br /&gt;
&lt;br /&gt;
* [[Disegnare in una DrawingArea l'intersezione perpendicolare di due linee]]&lt;br /&gt;
&lt;br /&gt;
* [[Disegnare in una DrawingArea linee mediante codice]]&lt;br /&gt;
&lt;br /&gt;
* [[Disegnare in una DrawingArea linee rette con il mouse]]&lt;br /&gt;
&lt;br /&gt;
* [[Disegnare in una DrawingArea sulla base dei punti cliccati un parallelogramma con angoli retti]]&lt;br /&gt;
&lt;br /&gt;
* [[Disegnare in una DrawingArea un carattere punto per punto]]&lt;br /&gt;
&lt;br /&gt;
* [[Disegnare in una DrawingArea un cerchio]]&lt;br /&gt;
&lt;br /&gt;
* [[Disegnare in una DrawingArea un eptagono regolare]]&lt;br /&gt;
&lt;br /&gt;
* [[Disegnare in una DrawingArea un esagono regolare]]&lt;br /&gt;
&lt;br /&gt;
* [[Disegnare in una DrawingArea un goniometro]]&lt;br /&gt;
&lt;br /&gt;
* [[Disegnare in una DrawingArea un ottagono regolare]]&lt;br /&gt;
&lt;br /&gt;
* [[Disegnare in una DrawingArea un pentagono regolare]]&lt;br /&gt;
&lt;br /&gt;
* [[Disegnare in una DrawingArea un poligono]]&lt;br /&gt;
&lt;br /&gt;
* [[Disegnare in una DrawingArea un rettangolo]]&lt;br /&gt;
&lt;br /&gt;
* [[Disegnare in una DrawingArea un rettangolo colorato con distinzione sfumata fra i colori]]&lt;br /&gt;
&lt;br /&gt;
* [[Disegnare in una DrawingArea un rombo]]&lt;br /&gt;
&lt;br /&gt;
* [[Disegnare in una DrawingArea un romboide]]&lt;br /&gt;
&lt;br /&gt;
* [[Disegnare in una DrawingArea un triangolo]]&lt;br /&gt;
&lt;br /&gt;
* [[Disegnare in una DrawingArea una figura piana]]&lt;br /&gt;
&lt;br /&gt;
* [[Disegnare in una DrawingArea una spirale]]&lt;br /&gt;
&lt;br /&gt;
* [[Disegnare un Button contenente un'icona e un testo mediante la DrawingArea]]&lt;br /&gt;
&lt;br /&gt;
* [[Disegnare un misuratore analogico su una DrawingArea]]&lt;br /&gt;
&lt;br /&gt;
* [[Disegnare un orologio su una DrawingArea prendendo l'orario del sistema]]&lt;br /&gt;
&lt;br /&gt;
* [[Drag-Drop di un testo in una DrawingArea]]&lt;br /&gt;
&lt;br /&gt;
* [[Drag-Drop di un'immagine in una DrawingArea]]&lt;br /&gt;
&lt;br /&gt;
* [[Evidenziare il puntatore del mouse quando si clicca sulla DrawingArea]]&lt;br /&gt;
&lt;br /&gt;
* [[Far scorrere un testo in una DrawingArea]]&lt;br /&gt;
&lt;br /&gt;
* [[Generare un file immagine da una DrawingArea]]&lt;br /&gt;
&lt;br /&gt;
* [[Generare un file PDF da una DrawingArea]]&lt;br /&gt;
&lt;br /&gt;
* [[Impedire in una DrawingArea che si esegua il codice presente nell'Evento &amp;quot;_Draw()&amp;quot; , qualora sia sollevato arbitrariamente più di una volta]]&lt;br /&gt;
&lt;br /&gt;
* [[Impostare l'opacità di un disegno in una DrawingArea]]&lt;br /&gt;
&lt;br /&gt;
* [[Mostrare alcune sfumature di un colore in una DrawingArea]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere il valore di un pixel in una DrawingArea]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere l'effetto della gomma per cancellare in una DrawingArea]]&lt;br /&gt;
&lt;br /&gt;
* [[Passare direttamente ad un oggetto Image i dati grezzi dei pixel di una DrawingArea mediante le risorse del API di X11]]&lt;br /&gt;
&lt;br /&gt;
* [[Rappresentare su una DrawingArea l'onda oscillante di una serie di dati]]&lt;br /&gt;
&lt;br /&gt;
* [[Ruotare il testo in una DrawingArea]]&lt;br /&gt;
&lt;br /&gt;
* [[Ruotare qualsiasi elemento da disegnare in una DrawingArea]]&lt;br /&gt;
&lt;br /&gt;
* [[Ruotare un arco in una DrawingArea]]&lt;br /&gt;
&lt;br /&gt;
* [[Ruotare un cerchio disegnato in una DrawingArea]]&lt;br /&gt;
&lt;br /&gt;
* [[Ruotare un cubo in una DrawingArea]]&lt;br /&gt;
&lt;br /&gt;
* [[Ruotare un dodecaedro in una DrawingArea]]&lt;br /&gt;
&lt;br /&gt;
* [[Ruotare un eptagono in una DrawingArea]]&lt;br /&gt;
&lt;br /&gt;
* [[Ruotare un esagono in una DrawingArea]]&lt;br /&gt;
&lt;br /&gt;
* [[Ruotare un oloide in una DrawingArea]]&lt;br /&gt;
&lt;br /&gt;
* [[Ruotare un ottaedro in una DrawingArea]]&lt;br /&gt;
&lt;br /&gt;
* [[Ruotare un ottagono in una DrawingArea]]&lt;br /&gt;
&lt;br /&gt;
* [[Ruotare un pentagono in una DrawingArea]]&lt;br /&gt;
&lt;br /&gt;
* [[Ruotare un prisma in una DrawingArea]]&lt;br /&gt;
&lt;br /&gt;
* [[Ruotare un quadrato ed un rettangolo in una DrawingArea]]&lt;br /&gt;
 &lt;br /&gt;
* [[Ruotare un rombo in una DrawingArea]]&lt;br /&gt;
&lt;br /&gt;
* [[Ruotare un romboide in una DrawingArea]]&lt;br /&gt;
&lt;br /&gt;
* [[Ruotare un triangolo in una DrawingArea]]&lt;br /&gt;
&lt;br /&gt;
* [[Ruotare una figura piana intorno a una circonferenza in una DrawingArea]]&lt;br /&gt;
&lt;br /&gt;
* [[Ruotare una piramide in una DrawingArea]]&lt;br /&gt;
&lt;br /&gt;
* [[Ruotare una sfera in una DrawingArea]]&lt;br /&gt;
&lt;br /&gt;
* [[Ruotare un'immagine sul proprio asse centrale 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;
* [[Spostare con il mouse senza Drag&amp;amp;Drop un'immagine caricata in una DrawingArea]]&lt;br /&gt;
&lt;br /&gt;
* [[Spostare con il mouse un cerchio in una DrawingArea]]&lt;br /&gt;
&lt;br /&gt;
* [[Spostare con il mouse un Controllo grafico generato in una DrawingArea]]&lt;br /&gt;
&lt;br /&gt;
* [[Spostare con il mouse un rettangolo in una DrawingArea]]&lt;br /&gt;
&lt;br /&gt;
* [[Spostare con il mouse un triangolo in una DrawingArea]]&lt;br /&gt;
&lt;br /&gt;
* [[Spostare con il mouse un'ellisse in una DrawingArea]]&lt;br /&gt;
&lt;br /&gt;
* [[Stampare il contenuto di una DrawingArea]]&lt;br /&gt;
&lt;br /&gt;
== File e Directory ==&lt;br /&gt;
&lt;br /&gt;
* [[Aprire un file mediante la Classe 'DesktopFile' con il programma al quale è associato]]&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;
* [[Chiudere un file]]&lt;br /&gt;
&lt;br /&gt;
* [[Comprimere un file in un file compresso .zip mediante le funzioni esterne del API di libzip]]&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere a quale applicazione è associato un tipo di file]]&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere caratteristiche generali dei file]]&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere ed impostare i permessi di un file]]&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere i permessi di un file mediante le funzioni esterne del API di libgio-2.0]]&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere il file referenziato da un collegamento simbolico]]&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere il mime-type di un file  mediante le funzioni esterne del API di libgio-2.0]]&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere il mime-type di un file  mediante le funzioni esterne del API di libmagic]]&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere il mime-type di un file mediante le sole risorse di Gambas]]&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere il tipo di file mediante le funzioni esterne del API di libgio-2.0]]&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere il tipo di file mediante le funzioni esterne del API di libglib-2.0]]&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere la data di accesso e di modifica di un file con le funzioni esterne del API di libgio-2.0]]&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere la dimensione di un file]]&lt;br /&gt;
&lt;br /&gt;
* [[Convertire con la funzione g_filename_from_uri() di libglib-2.0 la URI di un file nel corrispondente identificativo comunemente usato]]&lt;br /&gt;
&lt;br /&gt;
* [[Convertire con la funzione g_filename_to_uri() di libglib-2.0 il percorso identificativo di un file nella sua corrispondente URI]]&lt;br /&gt;
&lt;br /&gt;
* [[Copiare ricorsivamente una cartella]]&lt;br /&gt;
&lt;br /&gt;
* [[Creare un file e scrivervi dati con le funzioni esterne della libreria libgio-2.0]]&lt;br /&gt;
&lt;br /&gt;
* [[Creare un file bash]]&lt;br /&gt;
&lt;br /&gt;
* [[Creare un link simbolico di un file]]&lt;br /&gt;
&lt;br /&gt;
* [[Controllare l'uguaglianza di due file mediante le funzioni esterne del API di libgio-2.0]]&lt;br /&gt;
&lt;br /&gt;
* [[Effettuare una copia di un file e verificarne la progressione]]&lt;br /&gt;
&lt;br /&gt;
* [[Eliminare un byte all'interno di un file binario]]&lt;br /&gt;
&lt;br /&gt;
* [[Eliminare un file mediante le funzioni esterne del API di libglib-2.0]]&lt;br /&gt;
&lt;br /&gt;
* [[Estrarre con le funzioni del API di libzip i file contenuti da un file compresso .zip]]&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;
* [[Evitare l'errore &amp;quot;Stream chiuso&amp;quot; dopo aver chiuso un flusso di dati]]&lt;br /&gt;
&lt;br /&gt;
* [[Identificare un tipo di file dalla sua estensione]]&lt;br /&gt;
&lt;br /&gt;
* [[Impostazione dei permessi di un file con la funzione 'g_chmod' del API di libglib-2.0]]&lt;br /&gt;
&lt;br /&gt;
* [[L'oggetto File secondo i sorgenti di Gambas]]&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 il contenuto di una Directory mediante le risorse dichiarate nel file header &amp;quot;dirent.h&amp;quot;]]&lt;br /&gt;
&lt;br /&gt;
* [[Leggere in una cartella con le sole risorse di Gambas]]&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;
* [[Leggere un file di testo con carattere di fine riga di codifica MAC]]&lt;br /&gt;
&lt;br /&gt;
* [[Modificare le date di accesso e di modifica dell'inode di un file con le risorse esterne di utime.h]]&lt;br /&gt;
&lt;br /&gt;
* [[Modificare o eliminare una riga in un file di testo]]&lt;br /&gt;
&lt;br /&gt;
* [[Monitorare con le funzioni esterne del API di libgio-2.0 le modifiche apportate ad un file]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere alcune informazioni generali sui file]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere all'apertura di un file un Puntatore anziché una variabile di tipo File]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere il nome di un file mediante le funzioni esterne del API di libgio-2.0]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere il percorso di un file, associato a un programma .gambas, aprendolo con un doppio-clic]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere il percorso di un file trasportato e rilasciato con Drag&amp;amp;Drop]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere il solo nome ed il solo percorso di un file con le funzioni esterne del API di libglib-2.0]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere l'intero percorso di un file mediante le funzioni esterne del API di libgio-2.0]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere la directory di appartenenza di un file mediante le funzioni esterne del API di libgio-2.0]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere un file coerente da dati con rappresentazione come stringa in memoria]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere un numero dalla sua memorizzazione in formato Big-Endian]]&lt;br /&gt;
&lt;br /&gt;
* [[Percorso assoluto e percorso relativo dei file]]&lt;br /&gt;
&lt;br /&gt;
* [[Porre sotto osservazione con Read Watch due o più file]]&lt;br /&gt;
&lt;br /&gt;
* [[Raccogliere solo alcune righe all'interno di un file di testo]]&lt;br /&gt;
&lt;br /&gt;
* [[Reindirizzare lo standard output con Output To]]&lt;br /&gt;
&lt;br /&gt;
* [[Richiamare un file dalla Home]]&lt;br /&gt;
&lt;br /&gt;
* [[Rinominare un file mediante le funzioni esterne del API di libglib-2.0]]&lt;br /&gt;
&lt;br /&gt;
* [[Salvare i byte-dati di un file in un file di testo]]&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 con le risorse del API di libglib-2.0 se il percorso di un file è un percorso assoluto]]&lt;br /&gt;
&lt;br /&gt;
* [[Sapere in tempo reale se un file di nome conosciuto viene modificato o distrutto]]&lt;br /&gt;
&lt;br /&gt;
* [[Sapere l'ordine dei byte utilizzato dal sistema per salvare i dati]]&lt;br /&gt;
&lt;br /&gt;
* [[Sapere quale file è stato creato per ultimo]]&lt;br /&gt;
&lt;br /&gt;
* [[Sapere se un file di nome sconosciuto è stato creato o distrutto]]&lt;br /&gt;
&lt;br /&gt;
* [[Sapere se un file esiste mediante le funzioni esterne del API di libgio-2.0]]&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 un file di testo]]&lt;br /&gt;
&lt;br /&gt;
* [[Spostare un file nel Cestino e ripristinarlo nella sua Cartella di origine]]&lt;br /&gt;
&lt;br /&gt;
* [[Troncare un file ad una determinata dimensione con la funzione esterna truncate()]]&lt;br /&gt;
&lt;br /&gt;
* [[Verificare l'esistenza di una directory]]&lt;br /&gt;
&lt;br /&gt;
== FileChooser ==&lt;br /&gt;
&lt;br /&gt;
* [[Impedire in un FileChooser che facendo doppio-clic su un file, ne venga richiesta la sovrascrittura]]&lt;br /&gt;
&lt;br /&gt;
* [[Impostare da codice la modalità di visualizzazione interna dei file in un FileChooser]]&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, Finestre e Contenitori ==&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 e disegnarvi una scacchiera con le funzioni del API di SDL2]]&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 libgtk-3]]&lt;br /&gt;
&lt;br /&gt;
* [[Creare una finestra mediante le funzioni del API di SDL2]]&lt;br /&gt;
&lt;br /&gt;
* [[Creare una finestra mediante le funzioni del API di X11]]&lt;br /&gt;
&lt;br /&gt;
* [[Creare una finestra mediante le funzioni del API di XCB]]&lt;br /&gt;
&lt;br /&gt;
* [[Creare un file immagine dagli oggetti presenti in un Contenitore]]&lt;br /&gt;
&lt;br /&gt;
* [[Creare un Form trasparente]]&lt;br /&gt;
&lt;br /&gt;
* [[Dimensionare il Form o un'altra finestra considerando la presenza della barra delle applicazioni sulla Scrivania]]&lt;br /&gt;
&lt;br /&gt;
* [[Evitare la perdita di memoria chiudendo forzatamente un Form]]&lt;br /&gt;
&lt;br /&gt;
* [[Evento Form_Activate e sua possibile sostituzione]]&lt;br /&gt;
&lt;br /&gt;
* [[Impedire l'apertura di un Form secondario più di una volta]]&lt;br /&gt;
&lt;br /&gt;
* [[Impedire la chiusura di un Form quando si clicca sulla &amp;quot;X&amp;quot; nell'angolo in alto a destra]]&lt;br /&gt;
&lt;br /&gt;
* [[Inglobare un Form o una finestra in un altro suo Form o finestra del medesimo programma]]&lt;br /&gt;
&lt;br /&gt;
* [[Mantenere il Form di un'applicazione Gambas sempre in primo piano]]&lt;br /&gt;
&lt;br /&gt;
* [[Mostrare una immagine JPEG in una finestra con le funzioni del API di X11 e di Libjpeg]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere un'immagine del Form]]&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 valori e altre risorse da un Form principale a un Form secondario]]&lt;br /&gt;
&lt;br /&gt;
* [[Passare valori e altre risorse da un Form secondario a un Form principale]]&lt;br /&gt;
&lt;br /&gt;
* [[Rapporto fra ShowModal ed il Metodo Form.Close]]&lt;br /&gt;
&lt;br /&gt;
* [[Referenziare in modo appropriato lo spazio all'interno di un Contenitore rispetto ai suoi Oggetti figli]]&lt;br /&gt;
&lt;br /&gt;
* [[Restituire ad un Form un valore passato ad Form secondario]]&lt;br /&gt;
&lt;br /&gt;
* [[Semitrasparenza di un Form]]&lt;br /&gt;
&lt;br /&gt;
* [[Simulare il posizionamento di alcuni ToolButton sulla barra del titolo della finestra]]&lt;br /&gt;
&lt;br /&gt;
* [[Sollevare l'evento _Resize al ridimensionamento di un Form secondario]]&lt;br /&gt;
&lt;br /&gt;
* [[Spostare un Form con il mouse sulla Scrivania]]&lt;br /&gt;
&lt;br /&gt;
* [[Verificare se un Form è attivo]]&lt;br /&gt;
&lt;br /&gt;
== Funzioni ==&lt;br /&gt;
&lt;br /&gt;
* [[Differenza fra Sub, Procedure e Function]]&lt;br /&gt;
&lt;br /&gt;
* [[Emulare i Puntatori a Funzione del linguaggio C mediante gli Oggetti]]&lt;br /&gt;
&lt;br /&gt;
* [[Gestire Funzioni come oggetti]]&lt;br /&gt;
&lt;br /&gt;
* [[Passaggio delle Funzioni di Callback alle Funzioni Callback]]&lt;br /&gt;
&lt;br /&gt;
* [[Passaggio di un argomento per 'indirizzo' ad una Funzione]]&lt;br /&gt;
&lt;br /&gt;
* [[Passare a una funzione un numero imprecisato di argomenti]]&lt;br /&gt;
&lt;br /&gt;
* [[Scrivere una Funzione]]&lt;br /&gt;
&lt;br /&gt;
== Gambas - IDE di Gambas ==&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere la versione di Gambas]]&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere le parole-chiave usate in Gambas]]&lt;br /&gt;
&lt;br /&gt;
* [[Far apparire un commento a una risorsa nella finestrina guida nell'editor del codice]]&lt;br /&gt;
&lt;br /&gt;
* [[Icone messe a disposizione da Gambas]]&lt;br /&gt;
&lt;br /&gt;
* [[Individuare in un file compilato .gambas gli eventuali file esterni in esso allegati]]&lt;br /&gt;
&lt;br /&gt;
* [[Individuare la cartella principale dei file sorgenti di Gambas contenente la sub-cartella di un file immagine]]&lt;br /&gt;
&lt;br /&gt;
* [[La cartella ove sono salvati in copia i file delle informazioni della wiki ufficiale sulle risorse di Gambas]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere l'indirizzo effettivo dei file ospitati in un progetto Gambas]]&lt;br /&gt;
&lt;br /&gt;
* [[Ripristinare nell'IDE di Gambas le voci del Menu se disabilitate]]&lt;br /&gt;
&lt;br /&gt;
* [[Visualizzare tutti gli elementi rilevanti di Gambas contenuti dal codice di un progetto]]&lt;br /&gt;
&lt;br /&gt;
== Gambas con HTML e JavaScript ==&lt;br /&gt;
&lt;br /&gt;
* [[Gambas con HTML e JavaScript - Uso necessario dell'oggetto WebView]]&lt;br /&gt;
&lt;br /&gt;
==== Applicazioni specifiche ====&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 mediante codice HTML]]&lt;br /&gt;
&lt;br /&gt;
* [[Leggere un valore generato da un codice HTML/JavaScript]]&lt;br /&gt;
&lt;br /&gt;
* [[Mostrare una finestra tipo MessageBox mediante codice HTML]]&lt;br /&gt;
&lt;br /&gt;
* [[Testo scorrevole dall'alto verso il basso e viceversa]]&lt;br /&gt;
&lt;br /&gt;
== Gambas e Arduino ==&lt;br /&gt;
&lt;br /&gt;
* [[Far interagire Gambas con Arduino]]&lt;br /&gt;
&lt;br /&gt;
* [[Inviare dati ad Arduino]]&lt;br /&gt;
&lt;br /&gt;
* [[Ricevere dati da Arduino]]&lt;br /&gt;
&lt;br /&gt;
* [[Ricevere da Arduino un tipo di dato di dimensione superiore al Byte]]&lt;br /&gt;
&lt;br /&gt;
* [[Ricevere una Struttura da Arduino]]&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 Basi di Dati ==&lt;br /&gt;
&lt;br /&gt;
* [[Installazione Server PostgreSQL]]&lt;br /&gt;
&lt;br /&gt;
== Gestione dei dati audio e dei file audio ==&lt;br /&gt;
&lt;br /&gt;
* [[Analizzare con le sole risorse di Gambas la frequenza di un audio presente in un file WAV]]&lt;br /&gt;
&lt;br /&gt;
* [[Calcolare i beat per minuto (BpM) di un file audio con le funzioni esterne del API di Libaubio]]&lt;br /&gt;
&lt;br /&gt;
* [[Calcolare la durata di un file MP3 con le sole risorse native di Gambas]]&lt;br /&gt;
&lt;br /&gt;
* [[Calcolare la durata di un file OGG con le sole risorse native di Gambas]]&lt;br /&gt;
&lt;br /&gt;
* [[Calcolare la durata di un file WAV con le sole risorse native di Gambas]]&lt;br /&gt;
&lt;br /&gt;
* [[Calcolare la potenza di picco e di ampiezza di un file WAV con le funzioni esterne del API di Libaudiofile]]&lt;br /&gt;
&lt;br /&gt;
* [[Calcolare la quantità di dati audio grezzi di un file WAV necessari per eseguire tot secondi di audio]]&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere alcune informazioni generali di un file OGG con le sole risorse di Gambas]]&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere il bitrate di un file MP3 con le sole risorse di Gambas]]&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere il bit depth di un file MP3 con le sole risorse di Gambas]]&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere il bit depth di un file OGG con le sole risorse di Gambas]]&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere in tempo reale con &amp;quot;proc...fdinfo&amp;quot; la quantità dei dati elaborati di un file audio]]&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere in tempo reale la quantità di frame audio processati dalla scheda audio]]&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere la frequenza di campionamento di un file MP3 con le sole risorse di Gambas]]&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere la quantità di canali di un file MP3 con le sole risorse di Gambas]]&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere la versione e il layer di un file MP3 con le sole risorse di Gambas]]&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere quale file audio un programma sta eseguendo]]&lt;br /&gt;
&lt;br /&gt;
* [[Convertire un file audio in formato OggVorbis con le funzioni esterne del API di libfishsound, libsndfile e liboggz]]&lt;br /&gt;
&lt;br /&gt;
* [[Convertire un file audio in formato OggVorbis con le funzioni esterne del API di libsndfile]]&lt;br /&gt;
&lt;br /&gt;
* [[Convertire un file audio in testo con le risorse del API di Sndfile]]&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 le funzioni esterne del API di Faac]]&lt;br /&gt;
&lt;br /&gt;
* [[Convertire un file WAV in formato MP3 con le funzioni esterne del API di Lame]]&lt;br /&gt;
&lt;br /&gt;
* [[Convertire un file WAV in formato OggVorbis con le funzioni esterne del API di libvorbisfile, libvorbisenc e libogg]]&lt;br /&gt;
&lt;br /&gt;
* [[Creare il blocco d'intestazione di un file WAV avendo dati audio grezzi]]&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;FONT Color=blue&amp;gt;[[Creare un Client di Jack con le funzioni esterne del API di libjack]]&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* [[Creare un Client di Jack con le funzioni esterne del API di libJack e GStreamer]]&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;
* [[Decomprimere e decodificare 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]]&lt;br /&gt;
&lt;br /&gt;
* [[Eseguire un file audio mediante il Metodo .Open() della Classe Desktop]]&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;B&amp;gt;[[Eseguire un file audio mediante l'oggetto MediaView del componente gb.media.form]]&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* [[Eseguire un file audio mediante le funzioni esterne del API di Alsa e SndFile]]&lt;br /&gt;
&lt;br /&gt;
* [[Eseguire un file audio mediante le funzioni esterne del API di GSound]]&lt;br /&gt;
&lt;br /&gt;
* [[Eseguire un file audio mediante le funzioni esterne del API di libaudiofile e di Alsa]]&lt;br /&gt;
&lt;br /&gt;
* [[Eseguire un file audio mediante le funzioni esterne del API di Mpv]]&lt;br /&gt;
&lt;br /&gt;
* [[Eseguire un file audio mediante le funzioni esterne del API di PortAudio e SndFile]]&lt;br /&gt;
&lt;br /&gt;
* [[Eseguire un file audio mediante le funzioni esterne del API di Rhythmbox]]&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 Flite]]&lt;br /&gt;
&lt;br /&gt;
* [[Eseguire un file WAV mediante le funzioni esterne del API di libaudio e di Alsa]]&lt;br /&gt;
&lt;br /&gt;
* [[Estrarre da un file FLAC i dati dell'immagine contenuta]]&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 dati audio grezzi mediante le sole risorse di Gambas]]&lt;br /&gt;
&lt;br /&gt;
* [[Estrarre i TAG da un file MP3 con le funzioni esterne del API di Id3tag]]&lt;br /&gt;
&lt;br /&gt;
* [[Estrarre i TAG da un file MP3 con le sole funzioni di Gambas]]&lt;br /&gt;
&lt;br /&gt;
* [[Estrarre i TAG da un file OggVorbis con le sole funzioni di Gambas]]&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 audio MOD con le sole risorse di Gambas]]&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 da un file VOC con le sole risorse di Gambas]]&lt;br /&gt;
&lt;br /&gt;
* [[Estrarre informazioni e TAG da file audio con le funzioni esterne del API di Libtag_c]]&lt;br /&gt;
&lt;br /&gt;
* [[Estrarre informazioni e TAG da un file audio con le funzioni esterne del API di SndFile]]&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 generali da un file audio aiff 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 Libaudiofile]]&lt;br /&gt;
&lt;br /&gt;
* [[Estrarre informazioni generali da un file audio flac]]&lt;br /&gt;
&lt;br /&gt;
* [[Estrarre l'immagine contenuta in un file MP3 con le sole risorse di Gambas]]&lt;br /&gt;
&lt;br /&gt;
* [[Fondere insieme due file WAV]]&lt;br /&gt;
&lt;br /&gt;
* [[Generare un'onda sinusoidale]]&lt;br /&gt;
&lt;br /&gt;
* [[Individuare le frequenze presenti in un'onda audio con le funzioni esterne della libreria Libaubio]]&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;B&amp;gt;[[La gestione dei file audio mediante il componente gb.openal]]&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;B&amp;gt;[[La gestione dei file audio mediante il componente gb.sdl2.audio]]&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* [[La gestione dei file audio mediante le funzioni esterne del API di Allegro 5]]&lt;br /&gt;
&lt;br /&gt;
* [[La gestione dei file audio mediante le funzioni esterne del API di Canberra]]&lt;br /&gt;
&lt;br /&gt;
* [[La gestione dei file audio mediante le funzioni esterne del API di GStreamer]]&lt;br /&gt;
&lt;br /&gt;
* [[La gestione dei file audio mediante le funzioni esterne del API di MikMod]]&lt;br /&gt;
&lt;br /&gt;
* [[La gestione dei file audio mediante le funzioni esterne del API di Mpeg3]]&lt;br /&gt;
&lt;br /&gt;
* [[La gestione dei file audio mediante le funzioni esterne del API di mpg123]]&lt;br /&gt;
&lt;br /&gt;
* [[La gestione dei file audio mediante le funzioni esterne del API di Sox]]&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;B&amp;gt;[[La gestione dell'audio e dei file audio mediante il componente gb.media]]&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* [[La gestione dell'audio e dei file audio mediante le funzioni esterne del API di ALSA]]&lt;br /&gt;
&lt;br /&gt;
* [[La gestione dell'audio e dei file audio mediante le funzioni esterne del API di LibAo]]&lt;br /&gt;
&lt;br /&gt;
* [[La gestione dell'audio e dei file audio mediante le funzioni esterne del API di OpenAL]]&lt;br /&gt;
&lt;br /&gt;
* [[La gestione dell'audio e dei file audio mediante le funzioni esterne del API di Opus]]&lt;br /&gt;
&lt;br /&gt;
* [[La gestione dell'audio e dei file audio mediante le funzioni esterne del API di PulseAudio]]&lt;br /&gt;
&lt;br /&gt;
* [[La gestione dell'audio e dei file audio mediante le funzioni esterne del API di SDL2 e di SDL3]]&lt;br /&gt;
&lt;br /&gt;
* [[La gestione dell'audio e dei file audio mediante le funzioni esterne del API di Sndio]]&lt;br /&gt;
&lt;br /&gt;
* [[La gestione dell'audio e dei file audio mediante le funzioni esterne del API di VLC]]&lt;br /&gt;
&lt;br /&gt;
* [[La struttura di un file MPEG]]&lt;br /&gt;
&lt;br /&gt;
* [[Modificare il volume audio di un file WAV mediante le sole risorse di Gambas]]&lt;br /&gt;
&lt;br /&gt;
* [[Modificare il volume e la frequenza di campionamento di file audio WAV e AIFF con l'API di Libaudio]] &lt;br /&gt;
&lt;br /&gt;
* [[Modificare la frequenza di campionamento di un file audio con l'API di Libresample e Libsndfile]]&lt;br /&gt;
&lt;br /&gt;
* [[Modificare la frequenza di campionamento di un file audio con l' API di Libsamplerate e Libsndfile]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere un file WAV da un file Midi con le funzioni esterne del API di FluidSynth]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere un file WAV da un file Midi con le funzioni esterne del API di WildMidi]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere uno spettrogramma audio da file WAV PCM 16bit con le sole funzioni di Gambas]]&lt;br /&gt;
&lt;br /&gt;
* [[Sapere con le funzioni esterne del API di Rhythmbox se un file contiene dati audio e/o video]]&lt;br /&gt;
&lt;br /&gt;
* [[Suddividere in due o più parti coerenti e funzionali un file audio mp3]]&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;
* [[Registrare in tempo reale il flusso di dati audio di una radio WEB con le risorse della Classe HttpClient di Gambas]]&lt;br /&gt;
&lt;br /&gt;
* [[Registrare in tempo reale in un file l'audio di una radio WEB con le funzioni esterne del API di VLC]]&lt;br /&gt;
&lt;br /&gt;
* [[Riproduzione dell'audio di radio WEB con il Componente gb.media]]&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;
* [[Riproduzione e contemporanea registrazione dell'audio di radio WEB mediante il Componente gb.media]]&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;
* [[Conoscere con le funzioni esterne di PortAudio i dispositivi audio presenti nel sistema]]&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere con le funzioni esterne di RtAudio i dispositivi audio presenti nel sistema]]&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere con le funzioni esterne di SDL2 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 con le sole risorse di Gambas]]&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere la durata in secondi del Tempo Delta fra due Eventi Midi]]&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere la lunghezza in byte di ciascuna traccia MTrk di un file Midi]]&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere quale file Midi un programma sta eseguendo]]&lt;br /&gt;
&lt;br /&gt;
* [[Conversione del Tempo Delta fra due eventi Midi dai secondi nel valore esadecimale in formato &amp;quot;a lunghezza variabile&amp;quot;]]&lt;br /&gt;
&lt;br /&gt;
* [[Convertire i dati grezzi delle note del messaggio Midi &amp;quot;NoteOn&amp;quot; nei corrispondenti simboli del protocollo ABC di notazione musicale]]&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;
* [[Emulare con il Midi il suono del bip prodotto dall'altoparlante del PC]]&lt;br /&gt;
&lt;br /&gt;
* [[Eseguire un file MIDI mediante il codice html]]&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;B&amp;gt;[[Eseguire un file MIDI mediante il componente gb.openal]]&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;B&amp;gt;[[Eseguire un file MIDI mediante il componente gb.sdl2.audio]]&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* [[Eseguire un file MIDI mediante il Metodo .Open() della Classe Desktop]]&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;B&amp;gt;[[Eseguire un file MIDI mediante l'oggetto MediaView del componente gb.media.form]]&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* [[Estrarre i dati degli eventi Midi da un file Midi]]&lt;br /&gt;
&lt;br /&gt;
* [[Estrarre i dati Midi dal file audio AIFF con le sole funzioni di Gambas]]&lt;br /&gt;
&lt;br /&gt;
* [[Estrarre il testo da un file Midi]]&lt;br /&gt;
&lt;br /&gt;
* [[Estrarre informazioni da un file Midi con le sole funzioni di Gambas]]&lt;br /&gt;
&lt;br /&gt;
* [[Fondere insieme due file MIDI]]&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;
* [[Intercettare dati Midi grezzi con le funzioni esterne del API di RtMidi]]&lt;br /&gt;
&lt;br /&gt;
* [[Intercettare dati Midi grezzi con le funzioni esterne del API di Sndio]]&lt;br /&gt;
&lt;br /&gt;
* [[Intercettare ed inviare dati Midi grezzi con le funzioni esterne del API di PortMidi]]&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;B&amp;gt;[[La gestione dei dati Midi e dei file MIDI mediante il componente gb.media]]&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* [[La gestione dei dati Midi mediante le funzioni esterne del API di Libsmf]]&lt;br /&gt;
&lt;br /&gt;
* [[La gestione dei dati Midi senza l'uso delle funzioni di Alsa]]&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 GStreamer]]&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 Rhythmbox]]&lt;br /&gt;
&lt;br /&gt;
* [[La gestione dei file MIDI mediante le funzioni esterne del API di SDL2 e di SDL3]]&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;
* [[Mostrare i dati del blocco d'intestazione e delle tracce di un file Midi con le sole risorse di Gambas]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere la frequenza corrispondente ad una nota Midi e viceversa]]&lt;br /&gt;
&lt;br /&gt;
* [[Verificare la corrispondenza fra il numero di tracce dichiarato nel file Midi e quelle effettive]]&lt;br /&gt;
&lt;br /&gt;
* [[Verificare l'integrità dei dati del blocco d'intestazione di un file Midi]]&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 RtMidi 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;
====Gambas, Midi e Arduino====&lt;br /&gt;
&lt;br /&gt;
* [[Inviare dati Midi da Arduino a Gambas]]&lt;br /&gt;
&lt;br /&gt;
====Gestione dei file soundfont bank====&lt;br /&gt;
&lt;br /&gt;
* [[Convertire un file soundfont bank sf2 in un file WAV con le sole risorse di Gambas]]&lt;br /&gt;
&lt;br /&gt;
* [[Estrarre da un file sf2 i dati audio di ciascun suono campionato e creare un file wav]]&lt;br /&gt;
&lt;br /&gt;
* [[Estrarre informazioni generali dai tag di un file soundfont bank sf2 con le sole funzioni di Gambas]]&lt;br /&gt;
&lt;br /&gt;
* [[Individuare i nomi e le rispettive posizioni degli strumenti musicali in un file sf2 con le sole risorse di Gambas]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere un file di dati audio grezzi da un file .pat]]&lt;br /&gt;
&lt;br /&gt;
==== Informazioni e risorse sul Midi ====&lt;br /&gt;
&lt;br /&gt;
* [[Il protocollo Midi]]&lt;br /&gt;
&lt;br /&gt;
* [[La struttura di un file Midi]]&lt;br /&gt;
&lt;br /&gt;
* [[Manuali sul Midi]]&lt;br /&gt;
&lt;br /&gt;
* [[Siti web sul Midi]]&lt;br /&gt;
&lt;br /&gt;
* [[Sulla nuova versione Midi 2.0]]&lt;br /&gt;
&lt;br /&gt;
== Gestione dei file ODT ==&lt;br /&gt;
&lt;br /&gt;
* [[Estrarre il file thumbnail contenuto nel file odt]]&lt;br /&gt;
&lt;br /&gt;
* [[Unire più file ODT in un unico file ODT]]&lt;br /&gt;
&lt;br /&gt;
== Gestione dei file PDF ==&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;B&amp;gt;[[Codice essenziale per mostrare un file PDF con le risorse del Componente gb.poppler]]&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* [[Cercare una parola in una pagina di un file PDF con le risorse del Componente gb.poppler]]&lt;br /&gt;
&lt;br /&gt;
* [[Comprimere un file PDF con le funzioni esterne del API di Ghostscript]]&lt;br /&gt;
&lt;br /&gt;
* [[Convertire in immagine una parte di una pagina PDF con le risorse del Componente gb.poppler]]&lt;br /&gt;
&lt;br /&gt;
* [[Convertire un file PNG in PDF con le funzioni del API di Cairo]]&lt;br /&gt;
&lt;br /&gt;
* [[Convertire una pagina di un file PDF in una immagine con le risorse del Componente gb.poppler]]&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;B&amp;gt;[[Creare un file PDF con la proprietà .OutputFile della Classe Printer]]&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* [[Creare un file PDF con le funzioni esterne del API di Cairo]]&lt;br /&gt;
&lt;br /&gt;
* [[Creare un file PDF con le funzioni esterne del API di Haru]]&lt;br /&gt;
&lt;br /&gt;
* [[Creare un file PDF con le funzioni esterne della libreria PDFGen]]&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;B&amp;gt;[[Creare un file PDF con le risorse del Componente gb.cairo]]&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* [[Creare un file PDF con le risorse di Gambas senza usare Componenti dedicati]]&lt;br /&gt;
&lt;br /&gt;
* [[Creare un file PDF da un file immagine con le risorse del Componente gb.cairo]]&lt;br /&gt;
&lt;br /&gt;
* [[Eliminare i dati immagine da un file PDF]]&lt;br /&gt;
&lt;br /&gt;
* [[Estrarre i dati audio, MIDI e video da un file PDF]]&lt;br /&gt;
&lt;br /&gt;
* [[Estrarre testo e immagini da un file PDF]]&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;B&amp;gt;[[Stampare un file PDF]]&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* [[Struttura di un file PDF]]&lt;br /&gt;
&lt;br /&gt;
== Gestione dei file PS ==&lt;br /&gt;
&lt;br /&gt;
* [[Creare un file PS con le risorse del API di Cairo]]&lt;br /&gt;
&lt;br /&gt;
* [[Creare un file PS con le risorse del Componente gb.cairo]]&lt;br /&gt;
&lt;br /&gt;
== Gestione dei file RTF ==&lt;br /&gt;
&lt;br /&gt;
* [[Documentazione per la gestione dei file di testo RTF]]&lt;br /&gt;
&lt;br /&gt;
== Gestione del CD e del DVD ==&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere il numero di titoli e di capitoli presenti in un DVD video con le funzioni del API di libdvdread]]&lt;br /&gt;
&lt;br /&gt;
* [[Convertire un numero di settori di un CD/DVD in ore,minuti,secondi con le funzioni del API Libdiscid]]&lt;br /&gt;
&lt;br /&gt;
* [[Eseguire una traccia di un CD-Audio con le risorse del API di libvlc]] &lt;br /&gt;
&lt;br /&gt;
* [[Eseguire una traccia di un CD-Audio con le risorse di linux/cdrom.h e le funzioni esterne di ALSA]]&lt;br /&gt;
&lt;br /&gt;
* [[Estrarre i dati presenti in un CD-Audio con le risorse di linux/cdrom.h]]&lt;br /&gt;
&lt;br /&gt;
* [[Individuare in GNOME il percorso contenente i file delle tracce di un CD-audio]]&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;B&amp;gt;[[La gestione del CD e del DVD mediante il Componente gb.media]]&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* [[La gestione del CD e del DVD mediante la funzione esterna 'gst_parse_launch()' di GStreamer]]&lt;br /&gt;
&lt;br /&gt;
* [[La gestione del CD e del DVD mediante le funzioni del API di libcdio]]&lt;br /&gt;
&lt;br /&gt;
* [[La gestione del CD e del DVD mediante le funzioni del API di SDL]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere alcune informazioni di un CD con le funzioni del API di libcdaudio]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere alcune informazioni di un CD con la funzione ioctl()]]&lt;br /&gt;
&lt;br /&gt;
== Gestione della Pen-Drive ==&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere i dispositivi pen-drive usb montati sul sistema]]&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere il contenuto di una pen-drive mediante le sole risorse di Gambas]]&lt;br /&gt;
&lt;br /&gt;
== Gestione delle immagini e dei colori ==&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;B&amp;gt;[[Aggiungere il canale Alfa a un Oggetto Image privo]]&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* [[Assegnare a un Oggetto ''Image'' i valori pixel contenuti in un'area di memoria puntata da un Puntatore]]&lt;br /&gt;
&lt;br /&gt;
* [[Assegnare a un Oggetto ''Image'' i valori pixel contenuti in un vettore]]&lt;br /&gt;
&lt;br /&gt;
* [[Cancellare una immagine in una PictureBox o in una ImageView]]&lt;br /&gt;
&lt;br /&gt;
* [[Caricare in un Controllo grafico i file immagine come Picture]]&lt;br /&gt;
&lt;br /&gt;
* [[Caricare in un Oggetto grafico le icone messe a disposizione da Gambas]]&lt;br /&gt;
&lt;br /&gt;
* [[Caricare un file di formato TIFF e da questo creare un file immagine di altro formato con l'API di GDK_PixBuf]]&lt;br /&gt;
&lt;br /&gt;
* [[Catturare un'immagine con una webcam mediante le funzioni esterne del API di libsane]]&lt;br /&gt;
&lt;br /&gt;
* [[Catturare un'immagine con una webcam mediante le funzioni esterne del API di libv4l2]]&lt;br /&gt;
&lt;br /&gt;
* [[Cliccare in un Oggetto grafico o in una immagine suddivisi in rettangoli]]&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;B&amp;gt;[[Come Gambas gestisce le immagini]]&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* [[Configurazione, organizzazione ed impostazione dell'oggetto Image secondo i sorgenti di Gambas]]&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere i formati immagine disponibili con GTK mediante le funzioni del API di GDK-PixBuf]]&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere in modo sicuro il formato di un file immagine mediante le funzioni esterne del API di SDL2]]&lt;br /&gt;
&lt;br /&gt;
* [[Convertire il formato RGBA di un colore nei corrispondenti valori decimale ed esadecimale]]&lt;br /&gt;
&lt;br /&gt;
* [[Convertire il valore di un colore da RGB in HSV]]&lt;br /&gt;
&lt;br /&gt;
* [[Convertire il valore di un colore in RGBA]]&lt;br /&gt;
&lt;br /&gt;
* [[Convertire immagini RAW di fotocamere digitali mediante le funzioni esterne del API di Libraw]]&lt;br /&gt;
&lt;br /&gt;
* [[Convertire un file immagine di un qualsiasi formato in un file immagine TIFF mediante le funzioni esterne del API di Libgdk_pixbuf]]&lt;br /&gt;
&lt;br /&gt;
* [[Convertire un file immagine PCX in un file immagine PNG mediante le funzioni esterne del API di SDL2]]&lt;br /&gt;
&lt;br /&gt;
* [[Convertire un'immagine a colori in un'immagine a scala di grigi mediante le funzioni esterne del API di Libgdk_pixbuf]]&lt;br /&gt;
&lt;br /&gt;
* [[Convertire un'immagine da un formato ad un altro mediante le funzioni esterne del API di FreeImage]]&lt;br /&gt;
&lt;br /&gt;
* [[Convertire un'immagine da un formato ad un altro mediante le funzioni esterne del API di Imlib2]]&lt;br /&gt;
&lt;br /&gt;
* [[Convertire un'immagine in un file immagine di formato ICO mediante le funzioni esterne del API di Libgdk_pixbuf]]&lt;br /&gt;
&lt;br /&gt;
* [[Convertire un oggetto di tipo &amp;quot;Image&amp;quot; in un file di formato TIFF o ICO con le funzioni esterne del API di Libgdk_pixbuf]]&lt;br /&gt;
&lt;br /&gt;
* [[Creare da codice un'immagine trasparente]]&lt;br /&gt;
&lt;br /&gt;
* [[Creare un file immagine da dati immagine grezzi mediante le funzioni del API di Imlib2]]&lt;br /&gt;
&lt;br /&gt;
* [[Creare un'immagine senza avere dati immagine]]&lt;br /&gt;
&lt;br /&gt;
* [[Curvare la linea di testo in un oggetto Image]]&lt;br /&gt;
&lt;br /&gt;
* [[Decomprimere un file immagine jpeg per ottenerne i dati grezzi mediante le funzioni esterne del API di libjpeg]]&lt;br /&gt;
&lt;br /&gt;
* [[Desaturare un colore]]&lt;br /&gt;
&lt;br /&gt;
* [[Elenco dei nomi dei colori e i corrispondenti valori delle Costanti della Classe Color utilizzati da Gambas]]&lt;br /&gt;
&lt;br /&gt;
* [[Elenco dei nomi dei colori e i corrispondenti valori RGB sotto X Window]]&lt;br /&gt;
&lt;br /&gt;
* [[Fondere due immagini in una sola]]&lt;br /&gt;
&lt;br /&gt;
* [[Gestione delle immagini con le risorse di Gambas ma senza attivazione dei Componenti che fanno riferimento alle librerie grafiche QT e GTK]]&lt;br /&gt;
&lt;br /&gt;
* [[Gestire un oggetto Image agendo direttamente sulle risorse dei sorgenti Gambas]]&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 i colori dei pixel di una immagine]]&lt;br /&gt;
&lt;br /&gt;
* [[Individuare i valori RGBA dei pixel di 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;
* [[Inserire in un'immagine uno sfondo colorato mediante le funzioni esterne del API di Libgdk_pixbuf]]&lt;br /&gt;
&lt;br /&gt;
* [[Inserire un'immagine all'interno di un'altra immagine mediante le funzioni esterne del API di Libgdk_pixbuf]]&lt;br /&gt;
&lt;br /&gt;
* [[Leggere le informazioni di una Image dalle sue risorse dei sorgenti di Gambas]]&lt;br /&gt;
&lt;br /&gt;
* [[Modi di caricare un'immagine di tipo ''Picture'']]&lt;br /&gt;
&lt;br /&gt;
* [[Modificare i colori dei pixel di un'immagine con la proprietà .Data della Classe Image ed i Memory Stream]]&lt;br /&gt;
&lt;br /&gt;
* [[Modificare il colore di un pixel di un'immagine se esso è minore o maggiore di un dato valore]]&lt;br /&gt;
&lt;br /&gt;
* [[Modificare l'opacità di un'immagine]]&lt;br /&gt;
&lt;br /&gt;
* [[Modificare le dimensioni di una Image usando il suo Metodo .Stretch]]&lt;br /&gt;
&lt;br /&gt;
* [[Mostrare un'immagine con funzioni del API di GStreamer]]&lt;br /&gt;
&lt;br /&gt;
* [[Mostrare un'immagine con il Controllo WebView]]&lt;br /&gt;
&lt;br /&gt;
* [[Mostrare un'immagine nella finestra di un Editor di testo con funzioni del API di X11 e Imlib2]]&lt;br /&gt;
&lt;br /&gt;
* [[Mostrare una parte di un'immagine]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere alcune informazioni su file immagine JPEG con le funzioni del API di libjpeg]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere alcune informazioni su un file immagine PNG con le funzioni del API di libpng]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere alcune informazioni sul file immagine con le funzioni del API di libgdk_pixbuf-2.0]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere dati grezzi di un file immagine mediante le funzioni del API di GDK-PixBuf]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere il valore per ciascuno dei canali rosso, verde e blu di un pixel]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere l'effettivo valore del colore del pixel individuato con la Proprietà vettoriale Image.Pixels]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere Metadati Exif da un'immagine JPEG con le risorse del API di libexif]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere un file immagine PNG da un'immagine di formato SVG]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere un file PDF da una Image]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere una schermata (&amp;quot;screenshot&amp;quot;) con Gambas]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere una schermata (screenshot) del desktop con le risorse del API di X11 e di Cairo]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere una schermata (screenshot) del desktop con le risorse del API di X11 e di Imlib2]]&lt;br /&gt;
&lt;br /&gt;
* [[Rendere trasparente una immagine in base ad un colore specifico]]&lt;br /&gt;
&lt;br /&gt;
* [[Ridimensionare e mostrare un'immagine in base al punto ove si è cliccato con il puntatore del mouse]]&lt;br /&gt;
&lt;br /&gt;
* [[Ruotare e ribaltare sul proprio asse una immagine con le funzioni del API di FreeImage]]&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;
* [[Salvare e richiamare i dati di un file immagine con Settings]]&lt;br /&gt;
&lt;br /&gt;
* [[Salvare un file immagine con le funzioni del API di GDK-PixBuf]]&lt;br /&gt;
&lt;br /&gt;
* [[Salvare una Image come file immagine]]&lt;br /&gt;
&lt;br /&gt;
* [[Sapere quanti pixel occupa un testo in un'immagine mediante le funzioni del API di Imlib2]]&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;B&amp;gt;[[Scaricare una immagine da un sito internet]]&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* [[Scaricare una immagine dal sito &amp;quot;Cover Art Archive&amp;quot; mediante le funzioni esterne della libreria libcoverart]]&lt;br /&gt;
&lt;br /&gt;
* [[Spostare con il mouse un'immagine all'interno di una PictureBox]]&lt;br /&gt;
&lt;br /&gt;
* [[Scrivere un testo in un'immagine mediante le funzioni del API di Imlib2]]&lt;br /&gt;
&lt;br /&gt;
=== Gestione delle immagini con CAIRO ===&lt;br /&gt;
&lt;br /&gt;
* [[Caricare un Oggetto ''Image'' direttamente in una ''ImageView'' con gb.cairo]]&lt;br /&gt;
* [[Convertire un file immagine in un file PNG con le risorse del Componente gb.cairo]]&lt;br /&gt;
* [[Convertire un file PNG in PDF con le funzioni del API di Cairo]]&lt;br /&gt;
* [[Convertire un file PNG in SVG con le risorse del Componente gb.cairo]]&lt;br /&gt;
* [[Creare file PNG con le risorse del Componente gb.cairo]]&lt;br /&gt;
* [[Creare file PNG con le funzioni esterne del API di Cairo e di Pango]]&lt;br /&gt;
* [[Creare file PNG con le funzioni esterne del API di Cairo]]&lt;br /&gt;
* [[Creare un file immagine PNG trasparente con le funzioni esterne del API di Cairo]]&lt;br /&gt;
* [[Ridurre le dimensioni di una immagine con il Metodo &amp;quot;.Scale()&amp;quot; del Componente gb.cairo]]&lt;br /&gt;
* [[Spostare il testo con il mouse all'interno dell'area grafica con la Classe Cairo]]&lt;br /&gt;
&lt;br /&gt;
=== Gestione delle immagini con il Componente gb.media ===&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere le dimensioni di una immagine mediante il Componente gb.media]]&lt;br /&gt;
* [[Convertire i formati immagine mediante il Componente gb.media]]&lt;br /&gt;
* [[Effetto caleidoscopico di un'immagine PNG con il Componente gb.media]]&lt;br /&gt;
* [[Estrarre e salvare singole immagini da una ripresa video mediante WebCam effettuata con il Componente gb.media]]&lt;br /&gt;
* [[Estrarre e salvare singole immagini durante l'esecuzione di un file video mediante il Componente gb.media]]&lt;br /&gt;
* [[Leggere codici a barre con una webcam mediante il Componente gb.media]]&lt;br /&gt;
* [[Mostrare un'immagine mediante il Componente gb.media]]&lt;br /&gt;
* [[Trasformare un'immagine in ascii art mediante il Componente gb.media]]&lt;br /&gt;
&lt;br /&gt;
=== Gestione delle immagini con ImageMagick ===&lt;br /&gt;
&lt;br /&gt;
* [[Convertire un file immagine in un altro formato immagine con le funzioni esterne del API di ImageMagick]]&lt;br /&gt;
* [[Modificare la risoluzione in PPI di un'immagine mediante le funzioni esterne del API di ImageMagick]]&lt;br /&gt;
* [[Ridimensionare un'immagine mediante le funzioni esterne del API di ImageMagick]]&lt;br /&gt;
* [[Ruotare un'immagine mediante le funzioni esterne del API di ImageMagick]]&lt;br /&gt;
* [[Sfumare radialmente un'immagine mediante le funzioni esterne del API di ImageMagick]]&lt;br /&gt;
* [[Spostare il contenuto all'interno di un'immagine mediante le funzioni esterne del API di ImageMagick]]&lt;br /&gt;
&lt;br /&gt;
=== Gestione delle immagini e dei file di tipo GIF ===&lt;br /&gt;
&lt;br /&gt;
* [[Convertire un file GIF in un file di formato OGV, Matroska e MP4 mediante il Componente gb.media]]&lt;br /&gt;
* [[Convertire un file immagine in un file immagine di tipo GIF con le funzioni esterne del API di LibFreeImage]]&lt;br /&gt;
* [[Creare file GIF con le funzioni esterne del API di Libplot]]&lt;br /&gt;
* [[Creare una GIF animata con le funzioni esterne del API di Libplot]]&lt;br /&gt;
* [[Creare un file immagine GIF con sfondo colorato mediante le funzioni del API di GIFLIB]]&lt;br /&gt;
* [[Creare un file immagine trasparente di tipo GIF con le funzioni del API di GIFLIB]]&lt;br /&gt;
* [[Disegnare e salvare un'immagine di tipo GIF con le funzioni del API di GifLib]]&lt;br /&gt;
* [[Estrarre i fotogrammi che compongono un file immagine di tipo GIF animata]]&lt;br /&gt;
* [[Estrarre informazioni da una GIF animata relative al tempo di esecuzione dei fotogrammi]]&lt;br /&gt;
* [[Modificare il colore di sfondo di un'immagine GIF con le funzioni del API di GifLib]]&lt;br /&gt;
* [[Ottenere alcune informazioni su file immagine GIF con le funzioni del API di GifLib]]&lt;br /&gt;
* [[Utilizzare una GIF animata]]&lt;br /&gt;
&lt;br /&gt;
=== Gestione delle immagini e dei file di tipo SVG ===&lt;br /&gt;
&lt;br /&gt;
* [[Convertire un file immagine SVG in un file immagine di altro formato con le funzioni esterne delle librerie librsvg e libgdk_pixbuf]]&lt;br /&gt;
* [[Convertire un file PNG in SVG con le risorse del Componente gb.cairo]]&lt;br /&gt;
* [[Creare file SVG con le risorse del Componente gb.cairo]]&lt;br /&gt;
* [[Creare file SVG con le funzioni esterne del API di Cairo]]&lt;br /&gt;
* [[Gestire un file immagine di formato SVG con la Classe SvgImage]]&lt;br /&gt;
* [[Mostrare in un Form un'immagine SVG]]&lt;br /&gt;
* [[Ottenere un file immagine PNG da un'immagine di formato SVG]]&lt;br /&gt;
&lt;br /&gt;
=== Struttura di file immagine particolari ===&lt;br /&gt;
&lt;br /&gt;
* [[Struttura del formato BMP]]&lt;br /&gt;
* [[Struttura del formato GIF]]&lt;br /&gt;
* [[Struttura del formato PNG]]&lt;br /&gt;
* [[Struttura del formato TIFF]]&lt;br /&gt;
* [[Struttura del formato XBM]]&lt;br /&gt;
* [[Struttura del formato XPM]]&lt;br /&gt;
* [[Struttura e gestione del file di tipo PNM]]&lt;br /&gt;
&lt;br /&gt;
== Grafici ==&lt;br /&gt;
&lt;br /&gt;
* [[Creare un grafico con il componente gb.chart]]&lt;br /&gt;
&lt;br /&gt;
* [[Creare un grafico per la console/Terminale]]&lt;br /&gt;
&lt;br /&gt;
== GridView ==&lt;br /&gt;
&lt;br /&gt;
* [[Adattare automaticamente la dimensione del font del testo presente nelle celle di una GridView al loro ridimensionarsi]]&lt;br /&gt;
&lt;br /&gt;
* [[Adattare automaticamente l'altezza e la larghezza di una cella di una GridView al testo contenuto]]&lt;br /&gt;
&lt;br /&gt;
* [[Adattare automaticamente l'altezza e la larghezza di una cella di una GridView all'immagine contenuta]]&lt;br /&gt;
&lt;br /&gt;
* [[Adattare l'altezza e la larghezza della GridView al numero delle righe e delle in essa contenute]]&lt;br /&gt;
&lt;br /&gt;
* [[Aggiungere colonne in una GridView da codice]]&lt;br /&gt;
&lt;br /&gt;
* [[Aggiungere righe in una GridView da codice]]&lt;br /&gt;
&lt;br /&gt;
* [[Cambiare il colore di fondo di una riga cliccata in una GridView e far tornare quello di un'altra al colore iniziale]]&lt;br /&gt;
&lt;br /&gt;
* [[Catturare l'immagine di una GridView con il Componente gb.media]]&lt;br /&gt;
&lt;br /&gt;
* [[Centrare il testo nell'header di una GridView]]&lt;br /&gt;
&lt;br /&gt;
* [[Colorare il bordo delle righe di una GridView]]&lt;br /&gt;
&lt;br /&gt;
* [[Colorare il fondo di una cella di una GridView]]&lt;br /&gt;
&lt;br /&gt;
* [[Colorare il fondo di una riga di una GridView]]&lt;br /&gt;
&lt;br /&gt;
* [[Colorare la griglia della GridView]]&lt;br /&gt;
&lt;br /&gt;
* [[Effettuare una ricerca nelle celle di una GridView]]&lt;br /&gt;
&lt;br /&gt;
* [[Eliminare una riga da una GridView]]&lt;br /&gt;
&lt;br /&gt;
* [[Far combaciare le immagini poste in due celle adiacenti di una GridView]]&lt;br /&gt;
&lt;br /&gt;
* [[Gestire testo, colori e immagini nelle celle della GridView con l'Evento _Data()]]&lt;br /&gt;
&lt;br /&gt;
* [[Header di una GridView contenente due o più righe testuali]]&lt;br /&gt;
&lt;br /&gt;
* [[Impostare due parole ciascuna all'estremità opposta di una cella di una GridView]]&lt;br /&gt;
&lt;br /&gt;
* [[Impostare le righe, le colonne e l'header di una GridView]]&lt;br /&gt;
&lt;br /&gt;
* [[Impostare font, colore dei caratteri e colore di sfondo diversi per ogni cella di una GridView]]&lt;br /&gt;
&lt;br /&gt;
* [[Impostare lo spessore e altre proprietà del bordo delle righe e delle singole celle di una GridView]]&lt;br /&gt;
&lt;br /&gt;
* [[Individuare la cella della GridView nella quale si è cliccato]]&lt;br /&gt;
&lt;br /&gt;
* [[Individuare con quale tasto del mouse si è cliccato in una cella della GridView]]&lt;br /&gt;
&lt;br /&gt;
* [[Inserire un disegno o un'immagine al di sotto della griglia di una GridView]]&lt;br /&gt;
&lt;br /&gt;
* [[Inserire un oggetto in una cella di una GridView]]&lt;br /&gt;
&lt;br /&gt;
* [[Inserire un ulteriore testo in una GridView sempre nell'ultima riga]] &lt;br /&gt;
&lt;br /&gt;
* [[Inserire un'immagine adattandola alle dimensioni della cella di una GridView]]&lt;br /&gt;
&lt;br /&gt;
* [[Mostrare il testo contenuto in una cella di una GridVew al semplice passare del puntatore del mouse]]&lt;br /&gt;
&lt;br /&gt;
* [[Mostrare un Balloon in una GridView in corrispondenza della cella nella quale si è cliccato]]&lt;br /&gt;
&lt;br /&gt;
* [[Nascondere le linee della griglia di una GridView]]&lt;br /&gt;
&lt;br /&gt;
* [[Nascondere tutte le celle di una riga di una GridView]]&lt;br /&gt;
&lt;br /&gt;
* [[Nascondere una Colonna di una GridView]] &lt;br /&gt;
&lt;br /&gt;
* [[Ordinare i valori all'interno di una colonna di una GridView]]&lt;br /&gt;
&lt;br /&gt;
* [[Ordinare in una GridView i valori di più righe in base ad una colonna]]&lt;br /&gt;
&lt;br /&gt;
* [[Ordinare manualmente i valori all'interno di una colonna di una GridView]]&lt;br /&gt;
&lt;br /&gt;
* [[Scambiare il contenuto delle celle di una GridView mediante trascinamento con il mouse ]]&lt;br /&gt;
&lt;br /&gt;
* [[Scrivere con la tastiera nelle celle di una GridView]]&lt;br /&gt;
&lt;br /&gt;
* [[Spostare il testo da una cella a un'altra di una GridView con il Drag&amp;amp;Drop]]&lt;br /&gt;
&lt;br /&gt;
* [[Spostare il testo da una cella a un'altra di una GridView senza Drag&amp;amp;Drop]]&lt;br /&gt;
&lt;br /&gt;
* [[Spostare il testo da una cella di una GridView nella cella di un'altra GridView con il Drag&amp;amp;Drop]]&lt;br /&gt;
&lt;br /&gt;
* [[Spostare il testo da una cella di una GridView nella cella di un'altra GridView senza Drag&amp;amp;Drop]]&lt;br /&gt;
&lt;br /&gt;
* [[Spostare su e giù le righe di una GridView con i tasti &amp;quot;up&amp;quot; e &amp;quot;down&amp;quot;]]&lt;br /&gt;
&lt;br /&gt;
* [[Spostare un Oggetto da una cella a un'altra di una GridView senza Drag&amp;amp;Drop]]&lt;br /&gt;
&lt;br /&gt;
* [[Spostare un'immagine da una cella a un'altra di una GridView con il Drag&amp;amp;Drop]]&lt;br /&gt;
&lt;br /&gt;
* [[Spostare un'immagine da una cella a un'altra di una GridView senza Drag&amp;amp;Drop]]&lt;br /&gt;
&lt;br /&gt;
* [[Spostare un'immagine da una PictureBox a una cella di una GridView con il Drag&amp;amp;Drop]]&lt;br /&gt;
&lt;br /&gt;
* [[Stampare una GridView e il suo contenuto]]&lt;br /&gt;
&lt;br /&gt;
* [[Unire in una GridView le celle in un'unica grande cella]]&lt;br /&gt;
&lt;br /&gt;
== Hard Disk ==&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere numero seriale, modello ed altre informazioni su hard-disk SATA con la funzione esterna ioctl()]]&lt;br /&gt;
&lt;br /&gt;
== Header file dell'ANSI C e Gambas ==&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere la quantità di memoria occupata dai tipi di dati di C e la loro locazione nei file header]]&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;
* [[Ottenere la descrizione del tipo di errore dai file header &amp;quot;errno-base.h&amp;quot; e &amp;quot;errno.h&amp;quot;]]&lt;br /&gt;
&lt;br /&gt;
== ImageStat ==&lt;br /&gt;
&lt;br /&gt;
* [[Uso della classe ImageStat]]&lt;br /&gt;
&lt;br /&gt;
== InputBox ==&lt;br /&gt;
&lt;br /&gt;
* [[Imporre in casi particolari la riapertura dell'InputBox]]&lt;br /&gt;
&lt;br /&gt;
* [[Impostare le coordinate ove far aprire la finestra dell'InputBox]]&lt;br /&gt;
&lt;br /&gt;
* [[Impostare le dimensioni di un InputBox]]&lt;br /&gt;
&lt;br /&gt;
* [[Individuare l'ID della finestra dell'InputBox]]&lt;br /&gt;
&lt;br /&gt;
== Installazione di Gambas3 dai pacchetti binari ==&lt;br /&gt;
&lt;br /&gt;
* [[Installazione di Gambas3 dai pacchetti binari]]&lt;br /&gt;
&lt;br /&gt;
== Interagire con la tastiera ==&lt;br /&gt;
&lt;br /&gt;
* [[Immissione di dati dalla tastiera durante l'esecuzione di un programma]]&lt;br /&gt;
&lt;br /&gt;
* [[Impedire che cliccando su un tasto della tastiera si produca più volte il medesimo effetto]]&lt;br /&gt;
&lt;br /&gt;
* [[Impedire che, mentre si tiene premuto un tasto della tastiera, si produca un effetto cliccando e rilasciando un altro tasto]]&lt;br /&gt;
&lt;br /&gt;
* [[Individuare i tasti premuti della tastiera]]&lt;br /&gt;
&lt;br /&gt;
* [[Individuare mediante le funzioni del API di SDL2 o di SDL3 tutti gli scancode disponibili]]&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;B&amp;gt;[[_KeyPress() - _KeyRelease() - Key]]&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* [[Sapere via codice se il tasto 'Blocco Maiuscole' è attivo]]&lt;br /&gt;
&lt;br /&gt;
* [[Usare gli Eventi _KeyPress() e _KeyRelease() in un programma con interfaccia a linea di comando]]&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 condivise esterne .so ==&lt;br /&gt;
&lt;br /&gt;
===Richiamare funzioni esterne mediante ''EXTERN''===&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;B&amp;gt;[[Extern: richiamare funzioni esterne a Gambas]]&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Gestione in Gambas delle Strutture esterne===&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;B&amp;gt;[[Gestione delle Strutture esterne]]&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;B&amp;gt;[[Gestire con sicurezza le Strutture esterne]]&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* [[Gestire con un Puntatore le Strutture esterne]]&lt;br /&gt;
&lt;br /&gt;
* [[Assegnare un valore ad una Struttura di una libreria esterna scrivendo con i Memory Stream nella sua area di memoria]]&lt;br /&gt;
&lt;br /&gt;
* [[Dereferenziare senza Memory-Stream un Puntatore ad una Struttura, passato da una funzione esterna]]&lt;br /&gt;
&lt;br /&gt;
* [[Utilizzare come Struttura in Gambas una Struttura esterna dichiarata, come proprio membro di tipo Puntatore, da una Struttura principale esterna]]&lt;br /&gt;
&lt;br /&gt;
===Richiamare particolari funzioni esterne delle librerie standard in C===&lt;br /&gt;
&lt;br /&gt;
* [[Richiamo ed uso di particolari funzioni esterne delle librerie standard scritte in C]]&lt;br /&gt;
&lt;br /&gt;
===Ulteriori contributi sulla gestione delle librerie condivise .so e delle funzioni esterne===&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;
* [[Caricare i dati di un vettore scritto in C in un vettore di un'applicazione Gambas]]&lt;br /&gt;
&lt;br /&gt;
* [[Come creare una Libreria condivisa (Shared Library) .so]]&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;B&amp;gt;[[Come creare una Libreria condivisa .so impostando il suo codice sorgente nell'applicazione Gambas]]&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* [[Creare una libreria condivisa .so esterna dai file sorgente presenti in una pagina web e senza installarla o caricarla nel sistema]]  &lt;br /&gt;
&lt;br /&gt;
* [[Emulare in Gambas la funzione fwrite() di C]]&lt;br /&gt;
&lt;br /&gt;
* [[Emulare in Gambas la funzione memcpy() di C]]&lt;br /&gt;
&lt;br /&gt;
* [[Emulare in Gambas le macro _IOC, _IOR, _IOW e _IOWR usate con la funzione ioctl()]]&lt;br /&gt;
&lt;br /&gt;
* [[Gestire una libreria esterna che ritorna una Linked List]]&lt;br /&gt;
&lt;br /&gt;
* [[Inserire nella libreria condivisa esterna .so anche codice Assembly]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere l'indirizzo e il valore di una Costante e di una variabile globale situate in una libreria condivisa]]&lt;br /&gt;
&lt;br /&gt;
* [[Passare a una funzione esterna il Puntatore di una Struttura, scritta in Gambas, ottenuto con la funzione VarPtr()]]&lt;br /&gt;
&lt;br /&gt;
* [[Passare a una funzione esterna un Puntatore che successivamente deve essere passato anche ad altre funzioni esterne]]&lt;br /&gt;
&lt;br /&gt;
* [[Passare un'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;
* [[Richiamare funzioni esterne di librerie scritte in C++]]&lt;br /&gt;
&lt;br /&gt;
* [[Scrivendo particolari librerie esterne in C]]&lt;br /&gt;
&lt;br /&gt;
* [[Un contributo sulle funzioni esterne in Gambas a cura di Doriano B.]]&lt;br /&gt;
&lt;br /&gt;
* [[Verificare quali dati Gambas passa ad una funzione esterna]]&lt;br /&gt;
&lt;br /&gt;
===Altre modalità di chiamata delle funzioni esterne===&lt;br /&gt;
&lt;br /&gt;
* [[Caricamento dinamico di librerie .so con il subsistema 'loadso' di SDL2]]&lt;br /&gt;
* [[Chiamare funzioni esterne mediante le risorse della libreria dlfcn.h]]&lt;br /&gt;
* [[Utilizzare il metodo 'System.GetExternSymbol()' per richiamare funzioni esterne di librerie condivise]]&lt;br /&gt;
&lt;br /&gt;
== Librerie .gambas ==&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;B&amp;gt;[[Creare, importare ed utilizzare librerie .gambas]]&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Librerie della Comunità Gambas-it.org ====&lt;br /&gt;
&lt;br /&gt;
* [[RTFLib.gambas]]&lt;br /&gt;
&lt;br /&gt;
* [[strLib.gambas]]&lt;br /&gt;
&lt;br /&gt;
== ListBox ==&lt;br /&gt;
&lt;br /&gt;
* [[Assegnare ad un oggetto di testo il contenuto di un elemento di una ListBox cliccandovi sopra]]&lt;br /&gt;
&lt;br /&gt;
* [[Assegnare colori allo sfondo ed al testo di una riga selezionata di una ListBox]]&lt;br /&gt;
&lt;br /&gt;
* [[Eliminare uno o più item di una ListBox selezionati con il mouse]]&lt;br /&gt;
&lt;br /&gt;
* [[Far coincidere da codice l'altezza di una ListBox con la somma delle altezze dei suoi Item]]&lt;br /&gt;
&lt;br /&gt;
* [[Far mostrare in una ListBox le ultime voci ogni volta che il loro numero aumenta]]&lt;br /&gt;
&lt;br /&gt;
* [[Individuare il numero d'indice della riga di una ListBox sulla quale si è cliccato con il mouse]]&lt;br /&gt;
&lt;br /&gt;
* [[Inserire un array di dati di tipo stringa in una ListBox]]&lt;br /&gt;
&lt;br /&gt;
* [[Inserire un oggetto in un item di una ListBox]]&lt;br /&gt;
&lt;br /&gt;
* [[Interscambiare la posizione del contenuto degli item di una ListBox mediante trascinamento con il mouse ]]&lt;br /&gt;
&lt;br /&gt;
* [[ListBox con due o più righe per item]]&lt;br /&gt;
&lt;br /&gt;
* [[Riordinare manualmente con il mouse gli elementi di una ListBox]]&lt;br /&gt;
&lt;br /&gt;
* [[Se l'Evento MouseDown() della ListBox non funziona]]&lt;br /&gt;
&lt;br /&gt;
==Liste Lineari==&lt;br /&gt;
&lt;br /&gt;
* [[Emulare in Gambas una Lista Lineare del linguaggio C]]&lt;br /&gt;
&lt;br /&gt;
== ListView ==&lt;br /&gt;
&lt;br /&gt;
* [[Aggiungere una nuova voce nella prima posizione di una Listview]]&lt;br /&gt;
&lt;br /&gt;
* [[Assegnare colori allo sfondo ed al testo di una riga selezionata di una ListView]]&lt;br /&gt;
&lt;br /&gt;
* [[Evitare che appaia il popmenu quando si clicca al di fuori di un elemento di una ListView]]&lt;br /&gt;
&lt;br /&gt;
== Logging ==&lt;br /&gt;
&lt;br /&gt;
* [[Attivare e registrare informazioni un singolo file di log]]&lt;br /&gt;
&lt;br /&gt;
== Map - MapView - Coordinate geografiche - Georeferenziazione ==&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;B&amp;gt;[[Istruzioni essenziali per mostrare una mappa in una MapView]]&amp;lt;/b&amp;gt;&lt;br /&gt;
* [[Arduino: misurare il campo magnetico terrestre con i magnetometri]]&lt;br /&gt;
* [[Calcolare il rilevamento (bearing) in gradi]]&lt;br /&gt;
* [[Calcolare la distanza tra due punti geografici, dei quali si conoscono latitudine e longitudine]]&lt;br /&gt;
* [[Calcolare l'area e il perimetro di poligoni disegnati sulla mappa con le risorse di gb.map]]&lt;br /&gt;
* [[Conoscere la versione più recente di Google Maps satellite]]&lt;br /&gt;
* [[Conoscere le risorse formali contenute da un oggetto della Classe _ShapeItem]]&lt;br /&gt;
* [[Convertire una coordinata dal formato gradi primi secondi del sistema EPSG:4326 WGS 84 al suo formato decimale e viceversa]]&lt;br /&gt;
* [[Convertire una coordinata geografica dal sistema EPSG:4326 WGS 84 al sistema EPSG:3857 e viceversa]]&lt;br /&gt;
* [[Convertire una coordinata geografica dal sistema EPSG:4326 WGS 84 al sistema Gradi e Minuti decimali e viceversa]]&lt;br /&gt;
* [[Convertire una coordinata geografica dal sistema UTM al sistema EPSG:4326 WGS 84 e viceversa]]&lt;br /&gt;
* [[Creare da una carta topografica i file delle tessere di una mappa e utilizzarli con MapView]]&lt;br /&gt;
* [[Disegnare sulla MapView dei cerchi concentrici al punto ove si è cliccato con il puntatore del mouse]]&lt;br /&gt;
* [[Disegnare un cerchio o un punto su una MapView]]&lt;br /&gt;
* [[Disegnare un poligono su una MapView usando l'Oggetto &amp;quot;Figlio&amp;quot; DrawingArea]]&lt;br /&gt;
* [[Disegnare un mirino come cursore del mouse su una MapView]]&lt;br /&gt;
* [[Disegnare un percorso su una MapView e calcolarne la lunghezza]]&lt;br /&gt;
* [[Elenco di raster Tile Server online con rispettive URL]]&lt;br /&gt;
* [[Eliminare un marcatore grafico da una mappa su una MapView]]&lt;br /&gt;
* [[Eseguire un file audio o Midi quando si clicca sulla MapView]]&lt;br /&gt;
* [[Estrarre le coordinate geografiche dai TAG GPS eventualmente presenti in un file immagine JPEG]]&lt;br /&gt;
* [[Estrarre le coordinate geografiche presenti in un file gpx]]&lt;br /&gt;
* [[Georeferenziare specifici punti geografici su carte topografiche 1:25000]]&lt;br /&gt;
* [[Georeferenziare una mappa con QGIS]]&lt;br /&gt;
* [[Individuare i valori x e y della tessera sulla quale si è cliccato]]&lt;br /&gt;
* [[Individuare il punto di intersezione degli angoli di direzione di due elementi geografici rispetto all'osservatore]]&lt;br /&gt;
* [[Individuare su una MapView un punto geografico avendo un punto iniziale, l'angolo di declinazione e la distanza]]&lt;br /&gt;
* [[Inserire del testo su una MapView]]&lt;br /&gt;
* &amp;lt;B&amp;gt;[[Inserire un marcatore di coordinate su una MapView]]&amp;lt;/b&amp;gt;&lt;br /&gt;
* [[Inserire un Oggetto grafico su una MapView]]&lt;br /&gt;
* [[Inserire un'immagine come marcatore di coordinate su una MapView]]&lt;br /&gt;
* [[Mostrare la mappa topografica IGM 1 25000 fornita dal Geoportale Nazionale del Ministero dell'Ambiente]]&lt;br /&gt;
* [[Mostrare nella finestra guida dei simboli, dichiarati nel codice, la mappa topografica IGM 1_25000 fornita dall'ISPRA  ]]&lt;br /&gt;
* [[Mostrare sulla MapView disegni, immagini e Controlli senza l'uso del Metodo Map.AddShape()]]&lt;br /&gt;
* [[Ottenere la distanza piana di due punti su una carta topografica]]&lt;br /&gt;
* [[Ottenere la Latitudine e la Longitudine del punto sulla mappa cliccato con il puntatore del mouse]]&lt;br /&gt;
* [[Ottenere la Longitudine e la Latitudine dell'angolo superiore sinistro dell'immagine di una mappa da un file GEOTIFF con le sole risorse di Gambas]]&lt;br /&gt;
* [[Ottenere le coordinate geografiche dei punti sulla mappa sui quali si passa con il puntatore del mouse]]&lt;br /&gt;
* [[Ottenere informazioni da un file GEOTIFF con l'API di libgeotiff]]&lt;br /&gt;
* [[Ottenere un file pdf dalla mappa mostrata da una MapView]]&lt;br /&gt;
* [[Ottenere un file png dalla mappa mostrata da una MapView]]&lt;br /&gt;
* [[Ottenere una Image dalla mappa mostrata da una MapView]]&lt;br /&gt;
* [[Registrare quanto mostrato da una MapView e farne un video]]&lt;br /&gt;
* [[Rendere trasparente la mappa mostrata da una MapView]]&lt;br /&gt;
* [[Ruotare la mappa]]&lt;br /&gt;
* [[Sapere sulla MapView se il puntatore del mouse è all'interno di una determinata area della mappa]]&lt;br /&gt;
* [[Scalare la dimensione della mappa in una Mapview]]&lt;br /&gt;
* [[Usare il Metodo '.AddPolygon()' di gb.map]]&lt;br /&gt;
* [[Usare il Metodo '.AddPolyLine()' di gb.map]]&lt;br /&gt;
* [[Utilizzando un Oggetto di visualizzazione diverso da una MapView consentire uno spostamento morbido e uniforme della mappa]]&lt;br /&gt;
* [[Utilizzare il Geoportale del Servizio Geologico d'Italia dell'I.S.P.R.A.]]&lt;br /&gt;
* [[Utilizzare il Geoportale Nazionale del Ministero dell'Ambiente]]&lt;br /&gt;
* [[Utilizzare in una MapView mappe fornite secondo lo standard WMS (Web Map Service)]]&lt;br /&gt;
* [[Utilizzare le tessere di una mappa senza connessione a internet]]&lt;br /&gt;
* [[Utilizzare una DrawingArea o una ImageView con gb.map anziché una MapView]]&lt;br /&gt;
* [[Utilizzare una MediaView con gb.map anziché una MapView]]&lt;br /&gt;
* [[Verificare le tessere dei livelli delle Map tiles]]&lt;br /&gt;
&lt;br /&gt;
== Menu ==&lt;br /&gt;
&lt;br /&gt;
* [[Colorare la barra dei Menu]]&lt;br /&gt;
&lt;br /&gt;
* [[Creare Menu da codice e non con l'Editor-Menu]]&lt;br /&gt;
&lt;br /&gt;
* [[Creare Menu popup da codice]]&lt;br /&gt;
&lt;br /&gt;
* [[Creare Menu popup utilizzando l'Editor di 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;
* [[Fare riferimento alle voci del Menu da altri Form]]&lt;br /&gt;
&lt;br /&gt;
* [[Impedire che appaia la finestra del menu predefinito cliccando con il tasto destro del mouse su un Controllo di testo]]&lt;br /&gt;
&lt;br /&gt;
* [[Inserire una linea separatrice in un Menu]]&lt;br /&gt;
&lt;br /&gt;
* [[Intercettare selezione di sotto-voci di un Menu]]&lt;br /&gt;
&lt;br /&gt;
* [[Modifiche delle proprietà dei Menu]]&lt;br /&gt;
&lt;br /&gt;
* [[Mostrare più righe di testo nella voce di un Menu]]&lt;br /&gt;
&lt;br /&gt;
* [[Rilevare quale sotto-voce di menu è stata cliccata]]&lt;br /&gt;
&lt;br /&gt;
== MenuButton ==&lt;br /&gt;
&lt;br /&gt;
* [[Creare Menu a finestra con MenuButton]]&lt;br /&gt;
&lt;br /&gt;
* [[Creare via Editor dalla IDE un Menu con sotto-menu che funzioni come popup in un MenuButton]]&lt;br /&gt;
&lt;br /&gt;
== Message ==&lt;br /&gt;
&lt;br /&gt;
* [[Impostare le dimensioni del Message]]&lt;br /&gt;
&lt;br /&gt;
* [[Individuare l'ID della finestra di un Message]]&lt;br /&gt;
&lt;br /&gt;
* [[Interruzione di riga con ritorno a capo in un Message]]&lt;br /&gt;
&lt;br /&gt;
* [[Mostrare un MessageBox in un programma con interfaccia a 'riga di comando']]&lt;br /&gt;
&lt;br /&gt;
* [[Spostare la finestra di un Message]]&lt;br /&gt;
&lt;br /&gt;
== Miscellanea ==&lt;br /&gt;
&lt;br /&gt;
* [[Controllare la batteria del proprio portatile con le funzioni esterne di SDL2 o di SDL3]]&lt;br /&gt;
&lt;br /&gt;
* [[Convertire i gradi della temperatura da un'unità di scala di misura in un'altra]]&lt;br /&gt;
&lt;br /&gt;
* [[Creare il QR Code con le risorse della libreria esterna libqrencode]]&lt;br /&gt;
&lt;br /&gt;
* [[Mostrare e usare in Gambas i simboli musicali forniti dal sistema UNICODE]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere informazioni sul tempo meteorologico di una città mediante il sito web wttr.in]]&lt;br /&gt;
&lt;br /&gt;
== Monitor - Schermo ==&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere informazioni relative al display video mediante le funzioni del API di SDL2]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere informazioni relative allo schermo mediante la funzione ioctl()]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere informazioni relative allo schermo mediante le funzioni del API di CBX]]&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 le dimensioni del monitor e la sua posizione sullo schermo con le funzioni esterne del API di Allegro 5]]&lt;br /&gt;
&lt;br /&gt;
== Mouse ==&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere le coordinate correnti del mouse sul Form senza tenere premuto un tasto del mouse]]&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere le coordinate correnti del mouse sullo schermo]]&lt;br /&gt;
&lt;br /&gt;
* [[Evento rotellina del mouse]]&lt;br /&gt;
&lt;br /&gt;
* [[Far assumere al puntatore grafico del mouse l'aspetto dell'attesa]]&lt;br /&gt;
&lt;br /&gt;
* [[Intercettare i dati del mouse dal file-device hidraw]]&lt;br /&gt;
&lt;br /&gt;
* [[Intercettare i dati del mouse dai file-device mouse, mice, event]]&lt;br /&gt;
&lt;br /&gt;
* [[Intercettare il tasto premuto del mouse]]&lt;br /&gt;
&lt;br /&gt;
* [[Modificare l'aspetto del puntatore grafico del mouse]]&lt;br /&gt;
&lt;br /&gt;
* [[Reiterare una procedura quando il tasto del mouse viene tenuto premuto su un Controllo]]&lt;br /&gt;
&lt;br /&gt;
* [[Segnalatore del puntatore del mouse sullo schermo usando le funzioni esterne del API di X11]]&lt;br /&gt;
&lt;br /&gt;
* [[Simulare il tasto premuto del mouse usando le funzioni esterne del API di X11]]&lt;br /&gt;
&lt;br /&gt;
* [[Sollevare l'Evento _MouseMove() di un Oggetto grafico spostando su di esso il mouse senza tenere premuto un suo tasto]] &lt;br /&gt;
&lt;br /&gt;
* [[Spostare da codice il mouse sullo schermo]]&lt;br /&gt;
&lt;br /&gt;
== MovieBox ==&lt;br /&gt;
&lt;br /&gt;
* [[Mostrare un'immagine animata in una MovieBox]]&lt;br /&gt;
&lt;br /&gt;
== Oggetti ==&lt;br /&gt;
&lt;br /&gt;
=== Oggetti in generale ===&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;B&amp;gt;[[Assegnare da codice più oggetti ad un Gruppo di eventi]]&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* [[Aggiungere un Evento o anche integrare quelli già posseduti da un Oggetto &amp;quot;Figlio&amp;quot; di un Oggetto più complesso]]&lt;br /&gt;
&lt;br /&gt;
* [[Assegnare un valore a una proprietà di un Oggetto]]&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere il tipo di Oggetto a cui appartiene un identificatore]]&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;B&amp;gt;[[Creare array di oggetti]]&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* [[Distruggere gli Oggetti che non posseggono il Metodo .Delete()]]&lt;br /&gt;
&lt;br /&gt;
* [[Impedire che un oggetto sollevi qualsiasi evento]]&lt;br /&gt;
&lt;br /&gt;
* [[Istanziare un oggetto mediante la Classe &amp;quot;Object&amp;quot;]]&lt;br /&gt;
&lt;br /&gt;
* [[Leggere nell'area di memoria occupata da un oggetto]]&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;
* [[Ottenere l'indirizzo dei dati di un Oggetto]]&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;
* [[Sapere il nome del Componente al quale appartiene la Classe di un oggetto utilizzato]]&lt;br /&gt;
&lt;br /&gt;
* [[Sapere la quantità di memoria occupata da un oggetto]]&lt;br /&gt;
&lt;br /&gt;
* [[Sapere l'oggetto che ha scatenato l'evento]]&lt;br /&gt;
&lt;br /&gt;
* [[Sapere quante istanze di una Classe sono state create]]&lt;br /&gt;
&lt;br /&gt;
* [[Sapere se un oggetto è un'istanza di una determinata Classe]]&lt;br /&gt;
&lt;br /&gt;
* [[Utilizzare la proprietà .Tag come un array di tipo Variant]]&lt;br /&gt;
&lt;br /&gt;
=== Oggetti grafici, Controlli e Widget===&lt;br /&gt;
&lt;br /&gt;
* [[Adattare la dimensione del font in un Oggetto grafico se il testo occupa una lunghezza o un'altezza superiore a quella dell'Oggetto]]&lt;br /&gt;
&lt;br /&gt;
* [[Adattare la dimensione di un Oggetto grafico al testo contenuto]]&lt;br /&gt;
&lt;br /&gt;
* [[Assegnare un Gruppo di Eventi a più Controlli modificando manualmente il file sorgente del programma Gambas]]  &lt;br /&gt;
&lt;br /&gt;
* [[Centrare un oggetto grafico all'interno di un Contenitore]]&lt;br /&gt;
&lt;br /&gt;
* [[Cliccare in un oggetto grafico qualsiasi o in una immagine suddivisi in rettangoli]]&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere gli oggetti grafici 'figli' costituenti l'oggetto 'padre']]&lt;br /&gt;
&lt;br /&gt;
* [[Copiare uno o più caratteri di un testo da una Label o da una TextLabel e incollarli in un altro Controllo di testo]]&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 un file immagine dagli oggetti presenti in un Contenitore]]&lt;br /&gt;
&lt;br /&gt;
* [[Creare widget di Controlli grafici]]&lt;br /&gt;
&lt;br /&gt;
* [[Differenza fra la proprietà &amp;quot;.Children&amp;quot; e la proprietà &amp;quot;.Controls&amp;quot; di un oggetto]]&lt;br /&gt;
&lt;br /&gt;
* [[Distruggere i Controlli grafici posti in un Contenitore]]&lt;br /&gt;
&lt;br /&gt;
* [[Far mostrare il simbolo &amp;quot;&amp;amp;&amp;quot; su un Controllo grafico fornito della Proprietà .Text]]&lt;br /&gt;
&lt;br /&gt;
* [[Fissare la distanza di un Controllo grafico in modo costante rispetto ai bordi del Form durante il ridimensionamento di questo]]&lt;br /&gt;
&lt;br /&gt;
* [[Individuare il numero d'indice di Controlli appartenenti al medesimo gruppo di Eventi senza servirsi di sue specifiche proprietà]]&lt;br /&gt;
&lt;br /&gt;
* [[Individuare una Classe di Oggetti grafici fra molti posti in un Contenitore]]&lt;br /&gt;
&lt;br /&gt;
* [[Individuare uno specifico Controllo con Last in base alla sua Proprietà &amp;quot;.Id&amp;quot;]]&lt;br /&gt;
&lt;br /&gt;
* [[Individuare uno specifico Controllo in base alla sua Proprietà &amp;quot;.Name&amp;quot;]]&lt;br /&gt;
&lt;br /&gt;
* [[Metodo di pseudo indirizzamento ad Oggetti grafici]]&lt;br /&gt;
&lt;br /&gt;
* [[Modificare la dimensione di un Oggetto grafico con il mouse impostando i punti di contatto intorno al suo perimetro]]&lt;br /&gt;
&lt;br /&gt;
* [[Modificare la dimensione di un Oggetto grafico ruotando la rotellina del mouse]]&lt;br /&gt;
&lt;br /&gt;
* [[Mostrare in un Oggetto di testo il contenuto di un file trascinandolo e rilasciandolo senza l'uso delle specifiche risorse di Gambas del Drag&amp;amp;Drop]]&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;B&amp;gt;[[Oggetti grafici e di testo che supportano il codice HTML]]&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* [[Oggetti scorrevoli]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere l'immagine di un Controllo grafico]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere risultati diversi in base alla parte del Controllo premuta dal mouse]]&lt;br /&gt;
&lt;br /&gt;
* [[Porre sotto osservazione un Oggetto grafico]]&lt;br /&gt;
&lt;br /&gt;
* [[Posizione equidistante di un Oggetto rispetto al margine destro del suo Contenitore e ad un punto alla sua sinistra]]&lt;br /&gt;
&lt;br /&gt;
* [[Proxy: la Proprietà per sollevare Eventi del mouse e della tastiera contemporaneamente in due Controlli]]&lt;br /&gt;
&lt;br /&gt;
* [[Raggiungere e gestire gli oggetti di FMain da una classe secondaria]]&lt;br /&gt;
&lt;br /&gt;
* [[Riposizionare in modo circolare più oggetti posti in pila]]&lt;br /&gt;
&lt;br /&gt;
* [[Sapere se un oggetto, spostato sul Form con il mouse, è al di sopra di un altro oggetto]]&lt;br /&gt;
&lt;br /&gt;
* [[Selezionare con lo spostamento del mouse un'area di un oggetto]]&lt;br /&gt;
&lt;br /&gt;
* [[Sollevare l'Evento _MouseMove() di un Oggetto grafico spostando su di esso il mouse senza tenere premuto un suo tasto]]&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;B&amp;gt;[[Spostare Oggetti grafici con il mouse all'interno di un contenitore senza Drag &amp;amp; Drop]]&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* [[Spostare o ridimensionare un oggetto a seconda del punto ove si clicca]]&lt;br /&gt;
&lt;br /&gt;
* [[Uso di Unicode con gli oggetti di testo]]&lt;br /&gt;
&lt;br /&gt;
* [[Utilizzare anche in altre subroutine un Oggetto grafico dichiarato localmente]]&lt;br /&gt;
&lt;br /&gt;
* [[Verificare l'esistenza di un Controllo in un Contenitore]]&lt;br /&gt;
&lt;br /&gt;
== ODBC ==&lt;br /&gt;
&lt;br /&gt;
* [[ODBC]]&lt;br /&gt;
&lt;br /&gt;
== OpenGL ==&lt;br /&gt;
&lt;br /&gt;
* [[Gambas e Opengl]]&lt;br /&gt;
&lt;br /&gt;
* [[OpenGL: lezioni di Grafica Interattiva]]&lt;br /&gt;
&lt;br /&gt;
* [[Textures]]&lt;br /&gt;
&lt;br /&gt;
===Esempi pratici===&lt;br /&gt;
&lt;br /&gt;
* [[Creare con OpenGL un ambiente virtuale 3D]]&lt;br /&gt;
* [[Ruotare un cubo sul suo asse Y usando OpenGL]]&lt;br /&gt;
* [[Ruotare un cubo sui suoi assi X e Y usando OpenGL]]&lt;br /&gt;
* [[Ruotare un cubo sui suoi assi X, Y e Z usando OpenGL]]&lt;br /&gt;
* [[Ruotare un triangolo intorno alla propria altezza usando OpenGL]]&lt;br /&gt;
* [[Ruotare una piramide sul suo asse Y usando OpenGL]]&lt;br /&gt;
* [[Ruotare una piramide sui suoi assi X, Y e Z usando OpenGL]]&lt;br /&gt;
* [[Ruotare una sfera usando OpenGL]]&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;
* [[Invio di posta elettronica con SMTP e SSL mediante le funzioni esterne del API di Libcurl]]&lt;br /&gt;
&lt;br /&gt;
* [[Leggere la posta elettronica con IMAP e SSL mediante le funzioni esterne del API di Libcurl]]&lt;br /&gt;
&lt;br /&gt;
* [[Leggere la posta elettronica con POP3 e SSL mediante le funzioni esterne del API di Libcurl]]&lt;br /&gt;
&lt;br /&gt;
* [[Leggere la posta elettronica mediante le sole risorse di Gambas]]&lt;br /&gt;
&lt;br /&gt;
== Processi ==&lt;br /&gt;
&lt;br /&gt;
=== Gestione dei Processi in genere ===&lt;br /&gt;
&lt;br /&gt;
* [[Cambiare in esecuzione la directory di lavoro di un processo Gambas con la funzione esterna chdir()]]&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere in tempo reale il numero dell'ultimo processo appena aperto]]&lt;br /&gt;
&lt;br /&gt;
=== Gestione dei Processi mediante la Classe &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 mediante Process]]&lt;br /&gt;
&lt;br /&gt;
* [[Sapere se esiste un Processo con un ID specifico]]&lt;br /&gt;
&lt;br /&gt;
* [[Terminare automaticamente un Processo dopo un periodo di tempo dalla sua apertura con Process]]&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;
* [[Attivare la finestra di un programma con le funzioni del API di X11]]&lt;br /&gt;
&lt;br /&gt;
* [[Avviare un'applicazione Gambas in un determinato desktop]]&lt;br /&gt;
&lt;br /&gt;
* [[Avviare un progetto Gambas dalla sua cartella]]&lt;br /&gt;
&lt;br /&gt;
* [[Catturare con il Componente gb.media quanto mostrato dalla finestra di un programma o sulla Scrivania e farne un file video]]&lt;br /&gt;
&lt;br /&gt;
* [[Catturare immagini di una finestra di un programma e farne un file audio-video OGG-Theora con le funzioni esterne del API di GStreamer]]&lt;br /&gt;
&lt;br /&gt;
* [[Catturare l'immagine della finestra di un programma mediante le risorse della Classe DesktopWindow e le funzioni esterne del API di X11]]&lt;br /&gt;
&lt;br /&gt;
* [[Chiudere la finestra di un programma Gambas premendo i tasti Ctrl e 'c' della tastiera]]&lt;br /&gt;
&lt;br /&gt;
* [[Chiudere le finestre secondarie di un programma Gambas lasciando aperto il solo Form principale]]&lt;br /&gt;
&lt;br /&gt;
* [[Chiudere programmi esterni]]&lt;br /&gt;
&lt;br /&gt;
* [[Chiudere un programma Gambas se si clicca all'esterno della sua finestra principale]]&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere con le risorse del API di libglib-2.0 il percorso assoluto di un programma]]&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere i valori della dimensione dei quattro margini delle finestre presenti sul Desktop]]&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere la directory in cui sono memorizzati i file temporanei del processo corrente di un programma Gambas]]&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;
* [[Creare una cartella delle preferenze di un programma Gambas con le funzioni esterne del API di SDL2 o di SDL3]]&lt;br /&gt;
&lt;br /&gt;
* [[Elencare il PID ed il corrispondente nome di ciascun processo attivo]]&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;
* [[Impedire la chiusura di un programma Gambas se si clicca sul tastino con la X in alto a destra della sua finestra principale]]&lt;br /&gt;
&lt;br /&gt;
* [[Individuare con certezza un file presente nella cartella di un progetto Gambas]]&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 ID e nome delle finestre attive con le risorse del Componente gb.desktop]]&lt;br /&gt;
&lt;br /&gt;
* [[Individuare ID e nome delle finestre attive, nonché il PID dei loro programmi con le risorse del Componente gb.desktop.x11]]&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 Gambas]]&lt;br /&gt;
&lt;br /&gt;
* [[Individuare il percorso ove risiede la cartella del progetto Gambas]]&lt;br /&gt;
&lt;br /&gt;
* [[Individuare l'ID ed il nome della finestra attiva mediante le funzioni del API di X11]]&lt;br /&gt;
&lt;br /&gt;
* [[Individuare l'ID ed il nome di una finestra nonché il PID del programma mediante le funzioni del API di X11]]&lt;br /&gt;
&lt;br /&gt;
* [[Inglobare in un programma Gambas la finestra di un altro programma Gambas mediante le funzioni del API di X11]]&lt;br /&gt;
&lt;br /&gt;
* [[Lanciare da un'applicazione Gambas il Terminale e far partire da esso un programma]]&lt;br /&gt;
&lt;br /&gt;
* [[Lanciare un programma esterno conoscendo soltanto il nome del suo file eseguibile presente nel sistema]]&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;
* [[Modificare le dimensioni della finestra di un programma con le funzioni del API di X11]]&lt;br /&gt;
&lt;br /&gt;
* [[Muovere e modificare le dimensioni della finestra di un programma con le funzioni del API di X11]]&lt;br /&gt;
&lt;br /&gt;
* [[Muovere la finestra di un programma con le funzioni del API di X11]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere informazioni sulle applicazioni client in esecuzione su un display con le funzioni del API di X11]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere la directory di lavoro corrente dell'applicazione Gambas]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere l'immagine della finestra di un programma]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere la schermata (screenshot) della finestra di un programma]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere le dimensioni della finestra di un programma esterno]]&lt;br /&gt;
&lt;br /&gt;
* [[Passare dati in runtime ad un programma 'a linea di comando']]&lt;br /&gt;
&lt;br /&gt;
* [[Porre la finestra di un programma esterno in primo piano]]&lt;br /&gt;
&lt;br /&gt;
* [[Salvare un file nella Directory di Lavoro di un programma Gambas]]&lt;br /&gt;
&lt;br /&gt;
* [[Sapere quando il puntatore del mouse si trova sulla finestra di un programma esterno]]&lt;br /&gt;
&lt;br /&gt;
* [[Sapere quanto tempo è passato dall'inizio del programma]]&lt;br /&gt;
&lt;br /&gt;
* [[Sapere se un programma esterno è già in funzione]]&lt;br /&gt;
&lt;br /&gt;
* [[Sapere se il programma Gambas sta funzionando come progetto dall'IDE oppure come eseguibile .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;
* [[Uscire da un'applicazione Gambas premendo un tasto mediante le funzioni del API di X11]]&lt;br /&gt;
&lt;br /&gt;
===Trasmissione di dati fra due programmi Gambas o fra un programma esterno e un programma Gambas===&lt;br /&gt;
&lt;br /&gt;
* [[Indirizzare dati da un programma a un altro e a un Terminale]]&lt;br /&gt;
&lt;br /&gt;
* [[Intercettare i dati inviati allo standard output da un programma C]]&lt;br /&gt;
&lt;br /&gt;
* [[Inviare dati da un programma Gambas ad un altro mediante le risorse del Componente DBus]]&lt;br /&gt;
&lt;br /&gt;
* [[Inviare dati stringa da un programma Gambas a un programma esterno avente un'area di testo o a un Terminale]]&lt;br /&gt;
&lt;br /&gt;
* [[Ricevere dati da un programma esterno mediante un file]]&lt;br /&gt;
&lt;br /&gt;
* [[Ricevere un 'segnale' da un programma C]]&lt;br /&gt;
&lt;br /&gt;
* [[Trasmissione di dati fra due o più programmi Gambas mediante la Classe Socket del Componente gb.net]]&lt;br /&gt;
&lt;br /&gt;
* [[Trasmissione di dati fra due o più programmi Gambas mediante la Classe UdpSocket del Componente gb.net]]&lt;br /&gt;
&lt;br /&gt;
* [[Usare ALSA per far comunicare due o più programmi Gambas]]&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 uno pseudoterminale per far comunicare bidirezionalmente due programmi]]&lt;br /&gt;
&lt;br /&gt;
== ProgressBar e simulazioni di ProgressBar==&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere una simil-ProgressBar da una LCDLabel]]&lt;br /&gt;
&lt;br /&gt;
* [[Pseudo-ProgressBar in un'applicazione 'a riga di comando']]&lt;br /&gt;
&lt;br /&gt;
* [[Simulare una ProgressBar mediante una DrawingArea]]&lt;br /&gt;
&lt;br /&gt;
* [[Spostare la barra indicatrice di una ProgressBar con il mouse]]&lt;br /&gt;
&lt;br /&gt;
== Puntatori - Memory Stream ==&lt;br /&gt;
&lt;br /&gt;
====Puntatori====&lt;br /&gt;
* [[Assegnare ad un Puntatore la rappresentazione numerica di un indirizzo di memoria contenuto da un altro Puntatore]]&lt;br /&gt;
&lt;br /&gt;
* [[Assegnare ad un Puntatore un'area di memoria riservata con Alloc()]]&lt;br /&gt;
&lt;br /&gt;
* [[Assegnare un Puntatore ad una Struttura per dereferenziarlo]]&lt;br /&gt;
&lt;br /&gt;
* [[Assegnare un vettore ad una variabile di tipo Puntatore]]&lt;br /&gt;
&lt;br /&gt;
* [[Cambiare la dimensione di un'area di memoria mediante Realloc()]]&lt;br /&gt;
&lt;br /&gt;
* [[Deallocare un'area di memoria precedentemente allocata con alloc() e assicurarsi che il Puntatore non punti a un indirizzo rilevante di memoria]]&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;B&amp;gt;[[Dereferenziare un Puntatore con le funzioni specifiche di dereferenziazione e con i Memory Stream]]&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* [[Dereferenziare un Puntatore con un vettore]]&lt;br /&gt;
&lt;br /&gt;
* [[Dereferenziare un Puntatore di Puntatore con le funzioni specifiche di dereferenziazione e con i Memory Stream]]&lt;br /&gt;
&lt;br /&gt;
* [[Differenza fra Assegnazione a un Puntatore di un indirizzo di memoria e Dereferenziazione di un Puntatore]]&lt;br /&gt;
&lt;br /&gt;
* [[Gestire un Puntatore con le funzioni esterne del API di libglib-2.0]]&lt;br /&gt;
&lt;br /&gt;
* [[Modificare il valore di una variabile Integer puntata da un Puntatore e sua dereferenziazione con le funzioni esterne del API di SDL2]]&lt;br /&gt;
&lt;br /&gt;
* [[Opportunità di azzerare tutti i byte di un'area di memoria riservata seppur senza deallocarla]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere il puntatore a una variabile vettoriale]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere il puntatore di una variabile di tipo Image]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere il puntatore di una variabile di tipo Struttura]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere il valore numerico dell'indirizzo di memoria contenuto dal Puntatore]]&lt;br /&gt;
&lt;br /&gt;
* [[Passaggio di un argomento per 'indirizzo' ad una Funzione]]&lt;br /&gt;
&lt;br /&gt;
* [[Porre a zero i valori contenuti dall'area di memoria puntata da un Puntatore]]&lt;br /&gt;
&lt;br /&gt;
* [[Scrivere i valori contenuti da un file in un'area riservata di memoria]]&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;B&amp;gt;[[Scrivere nell'area di memoria puntata da un Puntatore]]&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* [[Vedere e modificare con i Puntatori un byte costituente il valore di una variabile]]&lt;br /&gt;
&lt;br /&gt;
==== Memory Stream ====&lt;br /&gt;
&lt;br /&gt;
* [[Definizione ed uso dei Memory Stream]]&lt;br /&gt;
&lt;br /&gt;
* [[Creare con i Memory Stream un'area di memoria simile ad una Struttura avente come membro un'altra Struttura]]&lt;br /&gt;
&lt;br /&gt;
== RadioButton==&lt;br /&gt;
&lt;br /&gt;
* [[Adattare la lunghezza del RadioButton al testo contenuto]]&lt;br /&gt;
&lt;br /&gt;
== Report (gb.report2) ==&lt;br /&gt;
&lt;br /&gt;
* [[Creare report con il componente gb.report2]]&lt;br /&gt;
&lt;br /&gt;
== Scanner ==&lt;br /&gt;
&lt;br /&gt;
* [[Eseguire una scansione con lo Scanner mediante le funzioni esterne di libsane]]&lt;br /&gt;
&lt;br /&gt;
* [[Eseguire una scansione e riconoscimento caratteri (OCR) con l'API di Sane, Tesseract e Leptonica]]&lt;br /&gt;
&lt;br /&gt;
* [[Usare le risorse del Componente gb.scanner di Gambas]]&lt;br /&gt;
&lt;br /&gt;
== Scripting ==&lt;br /&gt;
&lt;br /&gt;
* [[Scripting con Gambas]]&lt;br /&gt;
&lt;br /&gt;
==ScrollArea==&lt;br /&gt;
&lt;br /&gt;
* [[Usare la ScrollArea]]&lt;br /&gt;
&lt;br /&gt;
==ScrollView==&lt;br /&gt;
&lt;br /&gt;
* [[Usare la ScrollView]]&lt;br /&gt;
&lt;br /&gt;
== Settings ==&lt;br /&gt;
&lt;br /&gt;
* [[Uso della classe Settings]]&lt;br /&gt;
&lt;br /&gt;
== Sistema operativo - Dispositivi - Interfacce - Reti ==&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere con la funzione esterna getrlimit() i valori limite che il kernel impone per alcune risorse]]&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere  con le risorse del API di libglib-2.0 la directory unica per l'utente corrente sul sistema locale]]&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere con le sole risorse di Gambas i dispositivi esterni SCSI o SATA montati]]&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere i dispositivi usb di memorizzazione di massa con le funzioni esterne di libudev]]&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere il nome delle interfacce di rete presenti nel proprio sistema]]&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere il file-devide pts associato ad un Terminale o console con la funzione esterna ttyname()]]&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere il fuso orario (TimeZone) impostato nel proprio sistema]]&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere il nome del file-device del Terminale di controllo del processo con la funzione esterna ctermid()]]&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere l'hostname impostato nel proprio sistema]]&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere la dimensione del Dispositivo a blocchi]]&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere la distribuzione Linux montata]]&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere la valuta monetaria locale utilizzata dal sistema operativo]]&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere le impostazioni del separatore decimale nel sistema]]&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere le impostazioni per il separatore delle migliaia]]&lt;br /&gt;
&lt;br /&gt;
* [[Effettuare il PING]]&lt;br /&gt;
&lt;br /&gt;
* [[Identificare univocamente un computer]]&lt;br /&gt;
&lt;br /&gt;
* [[La cartella ove sono depositate le icone fornite dal sistema operativo Linux]]&lt;br /&gt;
&lt;br /&gt;
* [[Leggere il file fstab per avere informazioni sui vari filesystem montati]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere gli indirizzi IP di ogni interfaccia presente sulla medesima macchina]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere i valori di baud rates del flusso in entrata ed in uscita dei file-device terminali]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere la distribuzione di Linux montata, il tipo di architettura e la versione del kernel]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere il nome dell'host corrispondente ad un indirizzo IP e viceversa]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere il solo nome del proprio sistema operativo]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere informazioni dal proprio dispositivo wireless con le risorse del API di libiw]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere informazioni generali sui dispositivi network mediante le risorse del API di Libnm-glib]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere informazioni sulle statistiche di sistema globali con la funzione esterna sysinfo()]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere la lista di tutte le variabili d'ambiente nel proprio sistema mediante le risorse del API di libglib-2.0]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere la lista di tutti i dispositivi PCI presenti nel sistema]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere mediante le funzioni esterne del API di Libusb la lista di tutti i dispositivi USB attivi nel sistema]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere mediante le funzioni esterne del API di Libgusb la lista di tutti i dispositivi USB attivi nel sistema]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere mediante le funzioni esterne della libreria Libudev un elenco degli oggetti hidraw collegati al sistema]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere un Identificativo Univoco Universale - UUID]]&lt;br /&gt;
&lt;br /&gt;
* [[Visualizzare il tempo trascorso dall'ultimo avvio del sistema]]&lt;br /&gt;
&lt;br /&gt;
== Slider ==&lt;br /&gt;
&lt;br /&gt;
* [[Creare uno pseudo-slider]]&lt;br /&gt;
&lt;br /&gt;
* [[Creare uno pseudo-slider con uno o più cursori posti fra un valore minimo e uno massimo variabili]]&lt;br /&gt;
&lt;br /&gt;
* [[Mostrare il segna-valori 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;
== SpinBar ==&lt;br /&gt;
* [[Adattare la SpinBar a valori in virgola mobile con più di tre decimali]]&lt;br /&gt;
&lt;br /&gt;
== SpinBox ==&lt;br /&gt;
* [[Variare il valore di uno SpinBox 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;
==Sqlite==&lt;br /&gt;
* [[Creare un DataBase sqlite3]]&lt;br /&gt;
* [[Utilizzo base di Gambas e Sqlite3]]&lt;br /&gt;
&lt;br /&gt;
== Stampa - Printer==&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;B&amp;gt;[[Stampare in Gambas]]&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* [[Individuare le stampanti presenti nel proprio sistema]]&lt;br /&gt;
&lt;br /&gt;
* [[Stampare il contenuto grafico di una PictureBox]]&lt;br /&gt;
&lt;br /&gt;
* [[Stampare il testo presente in oggetti di testo]]&lt;br /&gt;
&lt;br /&gt;
* [[Stampare un Controllo grafico posto sul Form]]&lt;br /&gt;
&lt;br /&gt;
* [[Stampare un file con le funzioni del API di cups]]&lt;br /&gt;
&lt;br /&gt;
* [[Verifica ed eliminazione dei processi di stampa mediante le funzioni del API di CUPS]]&lt;br /&gt;
&lt;br /&gt;
== Stringhe, caratteri, testo e file di testo ==&lt;br /&gt;
&lt;br /&gt;
* [[Accedere ai caratteri contenuti da una variabile di tipo stringa come se questa fosse una vettore]]&lt;br /&gt;
&lt;br /&gt;
* [[Aggiungere una riga di caratteri alla fine di un file di 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;
* [[Associare una stringa a un identificatore unico numerico mediante le funzioni Quarks del API di libglib-2.0]]&lt;br /&gt;
&lt;br /&gt;
* [[Cercare la seconda occorrenza di una lettera fra tre o più]]&lt;br /&gt;
&lt;br /&gt;
* [[Cercare una parola in una stringa]]&lt;br /&gt;
&lt;br /&gt;
* [[Concatenare due stringhe]]&lt;br /&gt;
&lt;br /&gt;
* [[Confrontare due stringhe]]&lt;br /&gt;
&lt;br /&gt;
* [[Confrontare i caratteri di due stringhe]]&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere con le sole risorse di Gambas il numero di occorrenze in una stringa]]&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere il numero di occorrenze in una stringa con la funzione esterna PyUnicode_Count() della libreria libpython3]]&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere il numero e la posizione di tutte le occorrenze di una sottostringa in una stringa]]&lt;br /&gt;
&lt;br /&gt;
* [[Conversione di due valori, costituenti un carattere speciale, nella sua rappresentazione grafica]]&lt;br /&gt;
&lt;br /&gt;
* [[Convertire due unità numeriche stringa graficamente rappresentanti un valore esadecimale nel corrispondente valore decimale effettivo]]&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;
* [[Convertire in un tipo di dati numerico un valore letto in formato Stringa da un file]]&lt;br /&gt;
&lt;br /&gt;
* [[Convertire un carattere maiuscolo in minuscolo senza la funzione LCase()]]&lt;br /&gt;
&lt;br /&gt;
* [[Convertire un codice Unicode in carattere UTF-8 con la funzione g_unichar_to_utf8() della libreria libglib-2.0]]&lt;br /&gt;
&lt;br /&gt;
* [[Convertire un numero di tipo stringa in un valore di tipo Float con la funzione g_strtod() della libreria glib-2.0]]&lt;br /&gt;
&lt;br /&gt;
* [[Convertire un numero di tipo stringa in un valore di tipo Float con la funzione  PyOS_string_to_double() della libreria libpython3]]&lt;br /&gt;
&lt;br /&gt;
* [[Convertire un numero in un carattere ASCII]]&lt;br /&gt;
&lt;br /&gt;
* [[Creare un collegamento ipertestuale]]&lt;br /&gt;
&lt;br /&gt;
* [[Filtrare i caratteri invalidi UTF8 ed ASCII da una stringa con le funzioni esterne del API di PulseAudio]]&lt;br /&gt;
&lt;br /&gt;
* [[Funzione simile a String()]]&lt;br /&gt;
&lt;br /&gt;
* [[Funzione simile a String.Len()]]&lt;br /&gt;
&lt;br /&gt;
* [[Individuare i valori costituenti i caratteri tipo UTF-8 di lettere localizzate]]&lt;br /&gt;
&lt;br /&gt;
* [[Individuare in un testo i caratteri non alfanumerici e la loro posizione]]&lt;br /&gt;
&lt;br /&gt;
* [[Individuare in una stringa i caratteri ricorrenti e loro posizioni]]&lt;br /&gt;
&lt;br /&gt;
* [[Inserire in una stringa caratteri ASCII non stampabili]]&lt;br /&gt;
&lt;br /&gt;
* [[Inserire un testo in diagonale in un Controllo grafico]]&lt;br /&gt;
&lt;br /&gt;
* [[Modificare in maiuscolo il primo carattere di una stringa]]&lt;br /&gt;
&lt;br /&gt;
* [[Modificare un 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 del testo con caratteri ruotati orizzontalmente e verticalmente]]&lt;br /&gt;
&lt;br /&gt;
* [[Mostrare il simbolo dell'Euro]]&lt;br /&gt;
&lt;br /&gt;
* [[Mostrare in una stringa le virgolette]]&lt;br /&gt;
&lt;br /&gt;
* [[Mostrare con il punto anziché con la virgola un numero in virgola mobile rappresentato in formato stringa]]&lt;br /&gt;
&lt;br /&gt;
* [[Non visualizzare i caratteri non-stampabili di una stringa che inizia con caratteri stampabili]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere con l'API di Libglib-2.0 il codice UNICODE di un carattere UTF-8]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere da un testo una parte delimitata da due parole]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere da un valore numerico i caratteri ASCII corrispondenti a ciascun byte componente il numero]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere il valore ASCII di un carattere]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere un file RTF da un file UTF8 e viceversa con le funzioni esterne del API di Librtfcomp]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere un'unica stringa dalle stringhe contenute dagli elementi di un vettore di tipo Stringa]] &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;
* [[Rappresentare in formato stringa un numero avente i punti delle migliaia e la virgola dei decimali]]&lt;br /&gt;
&lt;br /&gt;
* [[Ribaltare i caratteri e invertire il testo in un Controllo grafico che supporta il RichText]]&lt;br /&gt;
&lt;br /&gt;
* [[Rimuovere da una stringa tutti i caratteri non-stampabili eventualmente presenti]]&lt;br /&gt;
&lt;br /&gt;
* [[Rimuovere da una stringa uno o più caratteri del codice ASCII esteso]]&lt;br /&gt;
&lt;br /&gt;
* [[Rimuovere tot caratteri da una stringa mediante le funzioni esterne del API di Libglib-2.0]]&lt;br /&gt;
&lt;br /&gt;
* [[Riposizionare in modo casuale i caratteri di una stringa con la funzione esterna strfry()]]&lt;br /&gt;
&lt;br /&gt;
* [[Sapere con l'API di Libglib-2.0 se un carattere è stampabile]]&lt;br /&gt;
&lt;br /&gt;
* [[Sapere con l'API di Libglib-2.0 se un codice UNICODE corrisponde ad un carattere alfabetico]]&lt;br /&gt;
&lt;br /&gt;
* [[Sapere se una stringa è formata soltanto da caratteri alfanumerici]]&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;
* [[Sovrascrivere una stringa con uno o più caratteri]]&lt;br /&gt;
&lt;br /&gt;
* [[Testo verticale]]&lt;br /&gt;
&lt;br /&gt;
* [[Utilizzare in una Costante un numero esadecimale per rappresentare un carattere ASCII]]&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;
* [[Verificare con le funzioni del API di Libglib-2.0 se una stringa inizia con un prefisso o termina con un siffisso]]&lt;br /&gt;
&lt;br /&gt;
* [[Verificare con le risorse del API di PulseAudio se una stringa contiene solo caratteri UTF8 validi]]&lt;br /&gt;
&lt;br /&gt;
* [[Verificare se in una stringa vi sono caratteri non stampabili]]&lt;br /&gt;
&lt;br /&gt;
== Strutture ==&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;B&amp;gt;[[Strutture: dichiarazione ed uso]]&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* [[Assegnare a una Struttura i valori contenuti in un'area di memoria creata con la funzione Alloc()]]&lt;br /&gt;
&lt;br /&gt;
* [[Assegnare direttamente i valori di dimensione conosciuta, letti da un file, ad una Struttura]]&lt;br /&gt;
&lt;br /&gt;
* [[Assegnare i valori di un file ad una Struttura mediante un Puntatore]]&lt;br /&gt;
&lt;br /&gt;
* [[Assegnare una Struttura a un Puntatore]]&lt;br /&gt;
&lt;br /&gt;
* [[Configurazione, organizzazione ed impostazione dell'oggetto Struttura secondo i sorgenti di Gambas]]&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere i nomi identificatori dei membri di una Struttura]]&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere la dimensione di una Struttura]]&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere via codice il nome di una Struttura]]&lt;br /&gt;
&lt;br /&gt;
* [[Leggere e scrivere direttamente nell'area di memoria di una Struttura accedendovi con la classe Object]]&lt;br /&gt;
&lt;br /&gt;
* [[Nascondere un valore in una Struttura]]&lt;br /&gt;
&lt;br /&gt;
* [[Ordinare gli elementi di un vettore di Strutture in base ad un loro medesimo membro]]&lt;br /&gt;
&lt;br /&gt;
* [[Ordinare gli elementi dei membri vettoriali di una Struttura in base ad uno di loro]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere il puntatore di una variabile di tipo Struttura]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere il puntatore direttamente ai dati associati a una Struttura]]&lt;br /&gt;
&lt;br /&gt;
* [[Passare una Struttura con Event]]&lt;br /&gt;
&lt;br /&gt;
* [[Scrivere i dati dei membri di una Struttura in un file direttamente]]&lt;br /&gt;
&lt;br /&gt;
* [[Strutture e Funzioni esterne]]&lt;br /&gt;
&lt;br /&gt;
* [[Uso delle Strutture tra Classi e Moduli]]&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;
== TableView ==&lt;br /&gt;
&lt;br /&gt;
* [[Assegnare i dati di una TextArea a una TableView]]&lt;br /&gt;
&lt;br /&gt;
* [[Inserire un oggetto in una cella di una TableView]]&lt;br /&gt;
&lt;br /&gt;
* [[Modificare il contenuto di una cella di una TableView cliccandoci dentro]]&lt;br /&gt;
&lt;br /&gt;
* [[Selezionare una intera riga di una TableView]]&lt;br /&gt;
&lt;br /&gt;
* [[Utilizzare il tasto Tab della tastiera per spostare il cursore del mouse fra le celle di una TableView]]&lt;br /&gt;
&lt;br /&gt;
* [[Visualizzare automaticamente una specifica riga di una TableView senza dover agire sulla ScrollBar laterale]]&lt;br /&gt;
&lt;br /&gt;
== TabPanel ==&lt;br /&gt;
&lt;br /&gt;
* [[Cancellare il testo presente in uno o più Controlli di testo posti su una TabPanel]]&lt;br /&gt;
&lt;br /&gt;
* [[Impostare l'immagine ed il colore del titolo delle tabelle di una TabPanel]]&lt;br /&gt;
&lt;br /&gt;
* [[Inserire tabelle ed oggetti all'interno di una TabPanel]]&lt;br /&gt;
&lt;br /&gt;
== TabStrip ==&lt;br /&gt;
&lt;br /&gt;
* [[Aggiungere Controlli su una determinata scheda di una TabStrip successivamente alla sua creazione]]&lt;br /&gt;
&lt;br /&gt;
* [[Aggiungere schede in una TabStrip successivamente alla sua creazione]]&lt;br /&gt;
&lt;br /&gt;
* [[Eliminare una scheda da una TabStrip]]&lt;br /&gt;
&lt;br /&gt;
* [[Estrarre i dati dagli oggetti presenti sulle schede di una TabStrip]]&lt;br /&gt;
&lt;br /&gt;
* [[Inserire più schede e Controlli in una TabStrip nel momento della sua creazione]]&lt;br /&gt;
&lt;br /&gt;
* [[Modificare il valore delle proprietà degli oggetti posti sulla scheda in primo piano di una TabStrip]]&lt;br /&gt;
&lt;br /&gt;
* [[Nascondere una scheda di una TabStrip]]&lt;br /&gt;
&lt;br /&gt;
== Tavoletta grafica e Gambas ==&lt;br /&gt;
&lt;br /&gt;
* [[Leggere l'azione di una penna su una Tavoletta grafica]]&lt;br /&gt;
&lt;br /&gt;
== Tempo, Date e Temporizzazioni ==&lt;br /&gt;
&lt;br /&gt;
* [[Calcolare il numero di giorni compresi fra due date]]&lt;br /&gt;
&lt;br /&gt;
* [[Calcolare il tempo trascorso mediante le funzioni esterne del sub-sistema Timers del API di libglib-2.0]]&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere il fuso orario (TimeZone) impostato nel proprio sistema]]&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere il giorno della settimana di una data mediante le risorse della libreria standard C &amp;quot;time.h&amp;quot;]]&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere il numero di giorni posseduti da un mese]]&lt;br /&gt;
&lt;br /&gt;
* [[Convertire data ed orario da formato Date in un numero]]&lt;br /&gt;
&lt;br /&gt;
* [[Convertire i giorni in formato anni:mesi:giorni]]&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;
* [[Convertire un timestamp Unix in una data Gambas]]&lt;br /&gt;
&lt;br /&gt;
* [[Creare un Cronometro]]&lt;br /&gt;
&lt;br /&gt;
* [[Creare un metronomo per console]]&lt;br /&gt;
&lt;br /&gt;
* [[Creare un Timer con le funzioni esterne delle librerie standard C 'signal.h' e 'time.h']]&lt;br /&gt;
&lt;br /&gt;
* [[Formattare &amp;quot;hh:nn:ss&amp;quot; dai soli secondi]]&lt;br /&gt;
&lt;br /&gt;
* [[Funzione di attesa in millisecondi con la libreria esterna libpulsecore]]&lt;br /&gt;
&lt;br /&gt;
* [[Gestione del tempo mediante le funzioni esterne del API di Libcsfml]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere con le risorse della libreria Libc.so.6 il tempo impiegato per eseguire un programma]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere con le risorse della libreria standard C 'time.h' la data nella forma 'giorno-della-settimana mese giorno ora:min:sec anno']]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere il tempo trascorso dall'inizializzazione della libreria SDL2 o della libreria SDL3]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere l'orario locale comprensivo dei microsecondi con la funzione esterna g_date_time_get_microsecond() del API di libglib-2.0]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere l'orario locale comprensivo dei nanosecondi con le risorse di alcune librerie standard C]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere la differenza temporale fra due orari]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere una data e-o l'orario comprensivo dei millisecondi]]&lt;br /&gt;
&lt;br /&gt;
* [[Porre in pausa il programma per un dato numero di microsecondi con la funzione esterna g_usleep() del API di libglib-2.0]]&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;B&amp;gt;[[Rappresentazione stringa localizzata e non-localizzata di una data]]&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* [[Sapere di quanti giorni è formato un determinato anno]]&lt;br /&gt;
&lt;br /&gt;
* [[Sapere di quanti giorni è formato il mese corrente]]&lt;br /&gt;
&lt;br /&gt;
* [[Sapere quanto tempo è passato dall'inizio del programma]]&lt;br /&gt;
&lt;br /&gt;
* [[Sapere quanti microsecondi sono passati dalla data iniziale del tempo Unix sino alla data e all'orario correnti]]&lt;br /&gt;
&lt;br /&gt;
* [[Sapere quanti millisecondi sono passati dalla data iniziale del tempo Unix sino alla data e all'orario correnti]]&lt;br /&gt;
&lt;br /&gt;
* [[Sapere quanti nanosecondi sono passati dalla data iniziale del tempo Unix sino alla data e all'orario correnti]]&lt;br /&gt;
&lt;br /&gt;
* [[Sapere quanti secondi bisogna aggiungere all'orario locale per ottenere l'orario UTC]]&lt;br /&gt;
&lt;br /&gt;
* [[Sapere quanti secondi sono passati dalla data iniziale del tempo Unix sino alla data e all'orario correnti]]&lt;br /&gt;
&lt;br /&gt;
* [[Sapere quanti secondi sono passati dall'inizio del giorno corrente]]&lt;br /&gt;
&lt;br /&gt;
* [[Sapere quanti giorni sono passati dall'inizio dell'anno corrente]]&lt;br /&gt;
&lt;br /&gt;
* [[Sapere quanti secondi sono passati dall'inizio dell'anno corrente]]&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;
* [[Aprire un Terminale con Desktop.OpenTerminal e passargli una riga di comando]]&lt;br /&gt;
&lt;br /&gt;
* [[Aprire un Terminale e passargli una riga di comando mediante le funzioni esterne del API di X11]]&lt;br /&gt;
&lt;br /&gt;
* [[Attendere in un'applicazione 'a riga di comando' la pressione del tasto 'Invio']]&lt;br /&gt;
&lt;br /&gt;
* [[Colorare testo e sfondo in Console o Terminale]]&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere il numero di linee e di colonne costituenti la corrente dimensione di un terminale o console]]&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere in tempo reale il file-device &amp;quot;pts&amp;quot; dell'ultimo Terminale appena aperto]]&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;
* [[Formattare il testo da mostrare in console o in terminale]]&lt;br /&gt;
&lt;br /&gt;
* [[Intercettare i dati inviati allo standard output da un programma C]]&lt;br /&gt;
&lt;br /&gt;
* [[Intercettare il risultato restituito ad intervalli temporali di un comando bash]]&lt;br /&gt;
&lt;br /&gt;
* [[Intercettare la stringa di caratteri immessi dall'utente nella console o Terminale]]&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;
* [[Lanciare da un'applicazione Gambas il Terminale e far partire da esso un programma]]&lt;br /&gt;
&lt;br /&gt;
* [[Lanciare da un'applicazione Gambas un comando bash e far scrivere il risultato in un Terminale]]&lt;br /&gt;
&lt;br /&gt;
* [[Modificare il prompt bash]]&lt;br /&gt;
&lt;br /&gt;
* [[Passare in runtime il numero del file-device 'pts' di un Terminale]]&lt;br /&gt;
&lt;br /&gt;
* [[Pulire il Terminale o la console via codice]]&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 console (standard output) di Gambas]]&lt;br /&gt;
&lt;br /&gt;
* [[Scrivere nella finestra di un Terminale distinto dal programma Gambas]]&lt;br /&gt;
&lt;br /&gt;
* [[Scrivere nello Standard Input di un Terminale con un programma Gambas 'a riga di comando']]&lt;br /&gt;
&lt;br /&gt;
* [[Spostare il cursore in un Terminale lungo una riga di caratteri]]&lt;br /&gt;
&lt;br /&gt;
* [[Stampare un qualsiasi carattere nella console o nel Terminale alle coordinate x, y]]&lt;br /&gt;
&lt;br /&gt;
* [[Stampare una stringa in console con allineamento a destra o a sinistra]]&lt;br /&gt;
&lt;br /&gt;
* [[Stampare una stringa in console sempre su una medesima riga]]&lt;br /&gt;
&lt;br /&gt;
== TextArea ==&lt;br /&gt;
&lt;br /&gt;
* [[Inserire un testo da un Controllo all'interno del testo di una TextArea senza l'uso del Drag&amp;amp;Drop]]&lt;br /&gt;
&lt;br /&gt;
* [[Verificare che siano stati aggiunti uno o più caratteri a una TextArea con l'opzione &amp;quot;Incolla&amp;quot;]]&lt;br /&gt;
&lt;br /&gt;
== TextBox ==&lt;br /&gt;
&lt;br /&gt;
* [[Scrivere in un TextBox dalla posizione manualmente mutata del cursore]]&lt;br /&gt;
&lt;br /&gt;
* [[Sovrascrivere mediante nuovi caratteri i caratteri già presenti in un TextBox]]&lt;br /&gt;
&lt;br /&gt;
== ToolTip ==&lt;br /&gt;
&lt;br /&gt;
* [[Chiudere un ToolTip anticipatamente]]&lt;br /&gt;
&lt;br /&gt;
* [[Modificare il colore e la dimensione del font del testo del ToolTip]]&lt;br /&gt;
&lt;br /&gt;
* [[Modificare la dimensione del ToolTip]]&lt;br /&gt;
&lt;br /&gt;
== Valori numerici, Operazioni matematiche ==&lt;br /&gt;
&lt;br /&gt;
* [[Arrotondamento di un numero con virgola mobile]]&lt;br /&gt;
&lt;br /&gt;
* [[Arrotondare un Intero al più prossimo valore inferiore multiplo di 2, 4, 8, 16, 32 e 64]]&lt;br /&gt;
&lt;br /&gt;
* [[Arrotondare un Intero al successivo multiplo di 2, 4, 8, 16, 32 e 64]]&lt;br /&gt;
&lt;br /&gt;
* [[Cercare un valore all'interno di un file aperto come un flusso di dati di tipo File]]&lt;br /&gt;
&lt;br /&gt;
* [[Cercare un valore all'interno di un file aperto come un flusso di dati di tipo Stringa]]&lt;br /&gt;
&lt;br /&gt;
* [[Calcolare i numeri di Fibonacci]]&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere di un numero il multiplo posto immediatamente dopo un altro numero]]&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere gli angoli acuti di un triangolo rettangolo dai cateti noti]]&lt;br /&gt;
&lt;br /&gt;
* [[Conversione da Base64]]&lt;br /&gt;
&lt;br /&gt;
* [[Conversione di un angolo da valori sessagesimali in decimali e viceversa]]&lt;br /&gt;
&lt;br /&gt;
* [[Conversione in Base64]]&lt;br /&gt;
&lt;br /&gt;
* [[Convertire in un tipo di dati numerico un valore letto in formato Stringa da un file]]&lt;br /&gt;
&lt;br /&gt;
* [[Convertire un numero da Decimale in Binario]]&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 a Esadecimale]]&lt;br /&gt;
&lt;br /&gt;
* [[Convertire un numero da rappresentazione Decimale a Ottale]]&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 esadecimale in binaria]]&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;
* [[Convertire un valore di tipo Float in una stringa con la funzione PyOS_double_to_string() della libreria libpython3]]&lt;br /&gt;
&lt;br /&gt;
* [[Convertire un valore numerico di tipo Float in una stringa di caratteri ASCII]]&lt;br /&gt;
&lt;br /&gt;
* [[Distinguere ogni byte della rappresentazione esadecimale di un valore decimale]]&lt;br /&gt;
&lt;br /&gt;
* [[Elevamento a potenza]]&lt;br /&gt;
&lt;br /&gt;
* [[Esempio di utilizzo delle funzioni esterne del API di GMP]]&lt;br /&gt;
&lt;br /&gt;
* [[Esponente di una potenza]]&lt;br /&gt;
&lt;br /&gt;
* [[Generare numeri casuali con le funzioni esterne del API di libglib-2.0]]&lt;br /&gt;
&lt;br /&gt;
* [[Generare numeri casuali con le funzioni esterne srand() e rand() di stdlib.h]]&lt;br /&gt;
&lt;br /&gt;
* [[Gestire numeri superiori al limite massimo supportato dal tipo Long]]&lt;br /&gt;
&lt;br /&gt;
* [[Invertire le cifre di un numero intero]]&lt;br /&gt;
&lt;br /&gt;
* [[Massimo Comun Divisore di due numeri con le sole risorse di Gambas]]&lt;br /&gt;
&lt;br /&gt;
* [[Minimo Comune Multiplo di due numeri con le sole risorse di Gambas]]&lt;br /&gt;
&lt;br /&gt;
* [[Notazione scientifica e notazione esponenziale in Gambas]]&lt;br /&gt;
&lt;br /&gt;
* [[Operazioni con precisione quadrupla a 128-bit con numeri in virgola mobile mediante la libreria quadmath.h]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere da un valore numerico i caratteri ASCII corrispondenti a ciascun byte componente il numero]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere dai suoi singoli dati-byte un valore numerico di tipo superiore al Byte]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere di un numero in virgola mobile la rappresentazione del separatore con il punto anziché con la virgola]]&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 numero più piccolo e quello più grande fra tre o più numeri mediante le funzioni esterne del API di libgsl]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere il resto da due operandi di tipo Float di una divisione con le risorse del API di Libm.so.6]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere la parte intera e quella decimale di un numero in virgola mobile]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere la rappresentazione come stringa in memoria di un valore numerico]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere numeri casuali di ambito Byte dai file-device /dev/random e /dev/urandom]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere un numero dalla sua memorizzazione in formato Big-Endian]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere un numero dalla sua memorizzazione in formato Little-Endian]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere un valore sempre compreso tra un numero massimo e un numero minimo stabiliti]] &lt;br /&gt;
&lt;br /&gt;
* [[Ottenere un valore numerico dalla rappresentazione in memoria come stringa]]&lt;br /&gt;
&lt;br /&gt;
* [[Rappresentare un numero in alcune basi numeriche]]&lt;br /&gt;
&lt;br /&gt;
* [[Rendere la sola parte decimale di un numero in virgola mobile come un numero di tipo Intero]]&lt;br /&gt;
&lt;br /&gt;
* [[Sapere il tipo di dato più piccolo in Gambas capace di contenere e rappresentare un numero]]&lt;br /&gt;
&lt;br /&gt;
* [[Sapere se la cifra delle unità di un numero è zero]]&lt;br /&gt;
&lt;br /&gt;
* [[Sapere se un numero è pari o dispari]]&lt;br /&gt;
&lt;br /&gt;
* [[Sapere se un numero rientra in un ambito definito di due valori]]&lt;br /&gt;
&lt;br /&gt;
* [[Scambiare i rispettivi valori fra due variabili]]&lt;br /&gt;
&lt;br /&gt;
* [[Troncare alcune cifre decimali in un valore in virgola mobile]]&lt;br /&gt;
&lt;br /&gt;
* [[Verificare se un numero è una potenza di 2]]&lt;br /&gt;
&lt;br /&gt;
== ValueBox ==&lt;br /&gt;
&lt;br /&gt;
* [[Modificare l'allineamento del valore numerico in un ValueBox]]&lt;br /&gt;
&lt;br /&gt;
* [[Rappresentare in un ValueBox un numero avente i punti delle migliaia e la virgola dei decimali]]&lt;br /&gt;
&lt;br /&gt;
* [[Scrivere testo in un ValueBox]]&lt;br /&gt;
&lt;br /&gt;
* [[Utilizzare in un ValueBox vari tipi di valori]]&lt;br /&gt;
&lt;br /&gt;
* [[Utilizzare l'evento _Change() in un ValueBox]]&lt;br /&gt;
&lt;br /&gt;
== Variabili in particolare ==&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere il nome di una variabile 'Pubblica']]&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere in runtime il numero identificatore di un tipo di dato di una variabile presente nel codice]]&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere via codice la quantità di memoria occupata da una variabile]]&lt;br /&gt;
&lt;br /&gt;
* [[Contenere valori di diverso tipo]]&lt;br /&gt;
&lt;br /&gt;
* [[Rendere esplicitamente una variabile quale elemento di un vettore]]&lt;br /&gt;
&lt;br /&gt;
* [[Usare come identificatore di variabile il nome di una parola chiave o di una funzione ovvero un carattere non consentito]]&lt;br /&gt;
&lt;br /&gt;
* [[Verificare l'indirizzo di memoria di una variabile]]&lt;br /&gt;
&lt;br /&gt;
== Video ==&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere con 'proc...fdinfo' la quantità dei dati elaborati di un file video]]&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere quale file video un programma sta eseguendo]]&lt;br /&gt;
&lt;br /&gt;
* [[Eseguire in streaming un video da youtube mediante l'oggetto WebView]]&lt;br /&gt;
&lt;br /&gt;
* [[Eseguire un file Video con il codice HTML]]&lt;br /&gt;
&lt;br /&gt;
* [[Eseguire un file Video con le funzioni esterne del API di Libmpv]]&lt;br /&gt;
&lt;br /&gt;
* [[Eseguire un file Video mediante il Metodo .Open() della Classe Desktop]]&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;B&amp;gt;[[La gestione dei dati video con la Classe MediaView del componente gb.media.form]]&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;B&amp;gt;[[La gestione del video e dei file video con il componente gb.media]]&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* [[La gestione del video e dei file video  con le funzioni esterne del API di GStreamer]]&lt;br /&gt;
&lt;br /&gt;
* [[La gestione del video e dei file video con le funzioni esterne del API di VLC]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere informazioni generali su flussi multimediali con le funzioni esterne del API di Quvi]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere informazioni generali sull'audio e sul video con le funzioni esterne del API di Libquicktime]]&lt;br /&gt;
&lt;br /&gt;
* [[Sapere con le funzioni esterne del API di Rhythmbox se un file contiene dati audio e/o video]]&lt;br /&gt;
&lt;br /&gt;
====i/o video====&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere i driver video disponibili nel sistema mediante le funzioni esterne del API di SDL2 o di SDL3]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere alcune informazioni sul dispositivo video di una webcam con le funzioni esterne del API di libv4l2]]&lt;br /&gt;
&lt;br /&gt;
== Watcher ==&lt;br /&gt;
&lt;br /&gt;
* [[Uso della classe Watcher]]&lt;br /&gt;
&lt;br /&gt;
== Web ==&lt;br /&gt;
&lt;br /&gt;
* [[Acquisire il codice HTML di una pagina web]]&lt;br /&gt;
&lt;br /&gt;
* [[Caricare una pagina web]]&lt;br /&gt;
&lt;br /&gt;
* [[Controllare i link contenuti da una pagina web]]&lt;br /&gt;
&lt;br /&gt;
* [[Decodificare con le risorse del API di Libidn i nomi di dominio internazionalizzati]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere il valore del colore di un pixel di una pagina web aperta con l'Oggetto WebView]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere l'immagine di una pagina web]]&lt;br /&gt;
&lt;br /&gt;
* [[Sapere se un indirizzo web è valido]]&lt;br /&gt;
&lt;br /&gt;
== WorkSpace ==&lt;br /&gt;
&lt;br /&gt;
* [[Uso della Classe WorkSpace]]&lt;/div&gt;</summary>
		<author><name>Vuott</name></author>
	</entry>
	<entry>
		<id>https://www.gambas-it.org/wiki/index.php?title=Assegnare_colori_allo_sfondo_ed_al_testo_di_una_riga_selezionata_di_una_ColumnView&amp;diff=42763</id>
		<title>Assegnare colori allo sfondo ed al testo di una riga selezionata di una ColumnView</title>
		<link rel="alternate" type="text/html" href="https://www.gambas-it.org/wiki/index.php?title=Assegnare_colori_allo_sfondo_ed_al_testo_di_una_riga_selezionata_di_una_ColumnView&amp;diff=42763"/>
		<updated>2025-11-12T19:27:26Z</updated>

		<summary type="html">&lt;p&gt;Vuott: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Attualmente non è possibile assegnare ''direttamente'' - ossia da una proprietà - colori allo sfondo ed al testo di una sola riga selezionata di un oggetto ''ColumnView''.&lt;br /&gt;
&lt;br /&gt;
Per superare questo ostacolo si può adottare uno stratagemma, basandosi sulla circostanza che l'oggetto ''ColumnView'' è composto anche dall'oggetto ''GridView''.&lt;br /&gt;
&amp;lt;BR&amp;gt;Pertanto, si potrà agire sull'oggetto ''GridView'', figlio della ''ColumnView'' per impostare il colore dello sfondo della riga selezionata (cliccata) della ''ColumnView''; e si potrà anche agire sull'item selezionato della ''ColumnView'' (in tal caso l'assegnazione del colore è ''diretto'') per imporre al testo in esso presente il colore prescelto.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Mostriamo un esempio pratico, &amp;lt;U&amp;gt;funzionante con le risorse grafiche di QT&amp;lt;/u&amp;gt;, nel quale verrà colorato di blu lo sfondo e di giallo il testo della riga cliccata di una ''ColumnView''.&lt;br /&gt;
&amp;lt;BR&amp;gt;Lo sfondo ed il testo della riga precedentemente cliccata torna ai colori predefiniti.&lt;br /&gt;
 Public Sub Form_Open()&lt;br /&gt;
  &lt;br /&gt;
  With ColumnView1&lt;br /&gt;
    .Add(&amp;quot;1&amp;quot;, &amp;quot;Riga_1&amp;quot;)&lt;br /&gt;
    .Add(&amp;quot;2&amp;quot;, &amp;quot;Riga_2&amp;quot;)&lt;br /&gt;
    .Add(&amp;quot;3&amp;quot;, &amp;quot;Riga_3&amp;quot;)&lt;br /&gt;
    .Add(&amp;quot;4&amp;quot;, &amp;quot;Riga_4&amp;quot;)&lt;br /&gt;
    .Add(&amp;quot;5&amp;quot;, &amp;quot;Riga_5&amp;quot;)&lt;br /&gt;
    .Add(&amp;quot;6&amp;quot;, &amp;quot;Riga_6&amp;quot;)&lt;br /&gt;
    .Add(&amp;quot;7&amp;quot;, &amp;quot;Riga_7&amp;quot;)&lt;br /&gt;
  End With&lt;br /&gt;
  &lt;br /&gt;
 End&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 Public Sub ColumnView1_Select()&lt;br /&gt;
 &lt;br /&gt;
  Dim b As Byte&lt;br /&gt;
  Dim ob As Object&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;FONT Color=gray&amp;gt;' ''Assegna alla variabile di tipo oggetto il &amp;quot;figlio&amp;quot; (che è una &amp;quot;GridView&amp;quot;) della &amp;quot;ColumnView&amp;quot;:''&amp;lt;/font&amp;gt;&lt;br /&gt;
  ob = ColumnView1.Children[0]&lt;br /&gt;
   &lt;br /&gt;
 &amp;lt;FONT Color=gray&amp;gt;' ''Assegna i colori di base allo sfondo della &amp;quot;GridView-figlio&amp;quot; e al testo presente nella  &amp;quot;ColumnView&amp;quot;:''&amp;lt;/font&amp;gt;&lt;br /&gt;
  For b = 0 To ob.Rows.Max&lt;br /&gt;
    ob[b, 0].Background = Color.Default&lt;br /&gt;
    ColumnView1[b + 1].Richtext = &amp;quot;&amp;amp;lt;FONT Color=#212121&amp;gt;&amp;quot; &amp;amp; ColumnView1[b + 1].text&lt;br /&gt;
  Next&lt;br /&gt;
   &lt;br /&gt;
 &amp;lt;FONT Color=gray&amp;gt;' ''Assegna il colore blu allo sfondo della riga cliccata della &amp;quot;GridView-figlio&amp;quot;:''&amp;lt;/font&amp;gt;&lt;br /&gt;
  ob[ob.Row, 0].Background = &amp;amp;0000FF&lt;br /&gt;
   &lt;br /&gt;
 &amp;lt;FONT Color=gray&amp;gt;' ''Assegna il colore giallo al testo presente nella riga cliccata della &amp;quot;ColumnView&amp;quot;:''&amp;lt;/font&amp;gt;&lt;br /&gt;
  ColumnView1[ob.Row + 1].Richtext = &amp;quot;&amp;amp;lt;FONT Color=#FFFF00&amp;gt;&amp;amp;lt;B&amp;gt;&amp;quot; &amp;amp; ColumnView1[ob.Row + 1].text&lt;br /&gt;
   &lt;br /&gt;
 End&lt;/div&gt;</summary>
		<author><name>Vuott</name></author>
	</entry>
	<entry>
		<id>https://www.gambas-it.org/wiki/index.php?title=Assegnare_colori_allo_sfondo_ed_al_testo_di_una_riga_selezionata_di_una_ColumnView&amp;diff=42762</id>
		<title>Assegnare colori allo sfondo ed al testo di una riga selezionata di una ColumnView</title>
		<link rel="alternate" type="text/html" href="https://www.gambas-it.org/wiki/index.php?title=Assegnare_colori_allo_sfondo_ed_al_testo_di_una_riga_selezionata_di_una_ColumnView&amp;diff=42762"/>
		<updated>2025-11-11T20:12:08Z</updated>

		<summary type="html">&lt;p&gt;Vuott: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Attualmente non è possibile assegnare ''direttamente'' - ossia da una proprietà - colori allo sfondo ed al testo di una sola riga selezionata di un oggetto ''ColumnView''.&lt;br /&gt;
&lt;br /&gt;
Per superare questo ostacolo si può adottare uno stratagemma, basandosi sulla circostanza che l'oggetto ''ColumnView'' è composto anche dall'oggetto ''GridView''.&lt;br /&gt;
&amp;lt;BR&amp;gt;Pertanto, si potrà agire sull'oggetto ''GridView'', figlio della ''ColumnView'' per impostare il colore dello sfondo della riga selezionata (cliccata) della ''ColumnView''; e si potrà anche agire sull'item selezionato della ''ColumnView'' (in tal caso l'assegnazione del colore è ''diretto'') per imporre al testo in esso presente il colore prescelto.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Mostriamo un esempio pratico, nel quale verrà colorato di blu lo sfondo e di giallo il testo della riga cliccata di una ''ColumnView''.&lt;br /&gt;
&amp;lt;BR&amp;gt;Lo sfondo ed il testo della riga precedentemente cliccata torna ai colori predefiniti.&lt;br /&gt;
 Public Sub Form_Open()&lt;br /&gt;
  &lt;br /&gt;
  With ColumnView1&lt;br /&gt;
    .Add(&amp;quot;1&amp;quot;, &amp;quot;Riga_1&amp;quot;)&lt;br /&gt;
    .Add(&amp;quot;2&amp;quot;, &amp;quot;Riga_2&amp;quot;)&lt;br /&gt;
    .Add(&amp;quot;3&amp;quot;, &amp;quot;Riga_3&amp;quot;)&lt;br /&gt;
    .Add(&amp;quot;4&amp;quot;, &amp;quot;Riga_4&amp;quot;)&lt;br /&gt;
    .Add(&amp;quot;5&amp;quot;, &amp;quot;Riga_5&amp;quot;)&lt;br /&gt;
    .Add(&amp;quot;6&amp;quot;, &amp;quot;Riga_6&amp;quot;)&lt;br /&gt;
    .Add(&amp;quot;7&amp;quot;, &amp;quot;Riga_7&amp;quot;)&lt;br /&gt;
  End With&lt;br /&gt;
  &lt;br /&gt;
 End&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 Public Sub ColumnView1_Select()&lt;br /&gt;
 &lt;br /&gt;
  Dim b As Byte&lt;br /&gt;
  Dim ob As Object&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;FONT Color=gray&amp;gt;' ''Assegna alla variabile di tipo oggetto il &amp;quot;figlio&amp;quot; (che è una &amp;quot;GridView&amp;quot;) della &amp;quot;ColumnView&amp;quot;:''&amp;lt;/font&amp;gt;&lt;br /&gt;
  ob = ColumnView1.Children[0]&lt;br /&gt;
   &lt;br /&gt;
 &amp;lt;FONT Color=gray&amp;gt;' ''Assegna i colori di base allo sfondo della &amp;quot;GridView-figlio&amp;quot; e al testo presente nella  &amp;quot;ColumnView&amp;quot;:''&amp;lt;/font&amp;gt;&lt;br /&gt;
  For b = 0 To ob.Rows.Max&lt;br /&gt;
    ob[b, 0].Background = Color.Default&lt;br /&gt;
    ColumnView1[b + 1].Richtext = &amp;quot;&amp;amp;lt;FONT Color=#212121&amp;gt;&amp;quot; &amp;amp; ColumnView1[b + 1].text&lt;br /&gt;
  Next&lt;br /&gt;
   &lt;br /&gt;
 &amp;lt;FONT Color=gray&amp;gt;' ''Assegna il colore blu allo sfondo della riga cliccata della &amp;quot;GridView-figlio&amp;quot;:''&amp;lt;/font&amp;gt;&lt;br /&gt;
  ob[ob.Row, 0].Background = &amp;amp;0000FF&lt;br /&gt;
   &lt;br /&gt;
 &amp;lt;FONT Color=gray&amp;gt;' ''Assegna il colore giallo al testo presente nella riga cliccata della &amp;quot;ColumnView&amp;quot;:''&amp;lt;/font&amp;gt;&lt;br /&gt;
  ColumnView1[ob.Row + 1].Richtext = &amp;quot;&amp;amp;lt;FONT Color=#FFFF00&amp;gt;&amp;amp;lt;B&amp;gt;&amp;quot; &amp;amp; ColumnView1[ob.Row + 1].text&lt;br /&gt;
   &lt;br /&gt;
 End&lt;/div&gt;</summary>
		<author><name>Vuott</name></author>
	</entry>
	<entry>
		<id>https://www.gambas-it.org/wiki/index.php?title=Assegnare_colori_allo_sfondo_ed_al_testo_di_una_riga_selezionata_di_una_ColumnView&amp;diff=42761</id>
		<title>Assegnare colori allo sfondo ed al testo di una riga selezionata di una ColumnView</title>
		<link rel="alternate" type="text/html" href="https://www.gambas-it.org/wiki/index.php?title=Assegnare_colori_allo_sfondo_ed_al_testo_di_una_riga_selezionata_di_una_ColumnView&amp;diff=42761"/>
		<updated>2025-11-11T20:10:50Z</updated>

		<summary type="html">&lt;p&gt;Vuott: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Attualmente non è possibile assegnare ''direttamente'' - ossia da una proprietà - colori allo sfondo ed al testo di una sola riga selezionata di un oggetto ''ColumnView''.&lt;br /&gt;
&lt;br /&gt;
Per superare questo ostacolo si può adottare uno stratagemma, basandosi sulla circostanza che l'oggetto ''ColumnView'' è composto anche dall'oggetto ''GridView''. Pertanto, si potrà agire sull'oggetto ''GridView'', figlio della ''ColumnView'' per impostare il colore dello sfondo della riga selezionata (cliccata) della ''ColumnView''; e si potrà, però, agire sull'item selezionato della ''ColumnView'' (in tal caso l'assegnazione del colore è ''diretto'') per imporre al testo in esso presente il colore prescelto.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Mostriamo un esempio pratico, nel quale verrà colorato di blu lo sfondo e di giallo il testo della riga cliccata di una ''ColumnView''.&lt;br /&gt;
&amp;lt;BR&amp;gt;Lo sfondo ed il testo della riga precedentemente cliccata torna ai colori predefiniti.&lt;br /&gt;
 Public Sub Form_Open()&lt;br /&gt;
  &lt;br /&gt;
  With ColumnView1&lt;br /&gt;
    .Add(&amp;quot;1&amp;quot;, &amp;quot;Riga_1&amp;quot;)&lt;br /&gt;
    .Add(&amp;quot;2&amp;quot;, &amp;quot;Riga_2&amp;quot;)&lt;br /&gt;
    .Add(&amp;quot;3&amp;quot;, &amp;quot;Riga_3&amp;quot;)&lt;br /&gt;
    .Add(&amp;quot;4&amp;quot;, &amp;quot;Riga_4&amp;quot;)&lt;br /&gt;
    .Add(&amp;quot;5&amp;quot;, &amp;quot;Riga_5&amp;quot;)&lt;br /&gt;
    .Add(&amp;quot;6&amp;quot;, &amp;quot;Riga_6&amp;quot;)&lt;br /&gt;
    .Add(&amp;quot;7&amp;quot;, &amp;quot;Riga_7&amp;quot;)&lt;br /&gt;
  End With&lt;br /&gt;
  &lt;br /&gt;
 End&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 Public Sub ColumnView1_Select()&lt;br /&gt;
 &lt;br /&gt;
  Dim b As Byte&lt;br /&gt;
  Dim ob As Object&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;FONT Color=gray&amp;gt;' ''Assegna alla variabile di tipo oggetto il &amp;quot;figlio&amp;quot; (che è una &amp;quot;GridView&amp;quot;) della &amp;quot;ColumnView&amp;quot;:''&amp;lt;/font&amp;gt;&lt;br /&gt;
  ob = ColumnView1.Children[0]&lt;br /&gt;
   &lt;br /&gt;
 &amp;lt;FONT Color=gray&amp;gt;' ''Assegna i colori di base allo sfondo della &amp;quot;GridView-figlio&amp;quot; e al testo presente nella  &amp;quot;ColumnView&amp;quot;:''&amp;lt;/font&amp;gt;&lt;br /&gt;
  For b = 0 To ob.Rows.Max&lt;br /&gt;
    ob[b, 0].Background = Color.Default&lt;br /&gt;
    ColumnView1[b + 1].Richtext = &amp;quot;&amp;amp;lt;FONT Color=#212121&amp;gt;&amp;quot; &amp;amp; ColumnView1[b + 1].text&lt;br /&gt;
  Next&lt;br /&gt;
   &lt;br /&gt;
 &amp;lt;FONT Color=gray&amp;gt;' ''Assegna il colore blu allo sfondo della riga cliccata della &amp;quot;GridView-figlio&amp;quot;:''&amp;lt;/font&amp;gt;&lt;br /&gt;
  ob[ob.Row, 0].Background = &amp;amp;0000FF&lt;br /&gt;
   &lt;br /&gt;
 &amp;lt;FONT Color=gray&amp;gt;' ''Assegna il colore giallo al testo presente nella riga cliccata della &amp;quot;ColumnView&amp;quot;:''&amp;lt;/font&amp;gt;&lt;br /&gt;
  ColumnView1[ob.Row + 1].Richtext = &amp;quot;&amp;amp;lt;FONT Color=#FFFF00&amp;gt;&amp;amp;lt;B&amp;gt;&amp;quot; &amp;amp; ColumnView1[ob.Row + 1].text&lt;br /&gt;
   &lt;br /&gt;
 End&lt;/div&gt;</summary>
		<author><name>Vuott</name></author>
	</entry>
	<entry>
		<id>https://www.gambas-it.org/wiki/index.php?title=Assegnare_colori_allo_sfondo_ed_al_testo_di_una_riga_selezionata_di_una_ColumnView&amp;diff=42760</id>
		<title>Assegnare colori allo sfondo ed al testo di una riga selezionata di una ColumnView</title>
		<link rel="alternate" type="text/html" href="https://www.gambas-it.org/wiki/index.php?title=Assegnare_colori_allo_sfondo_ed_al_testo_di_una_riga_selezionata_di_una_ColumnView&amp;diff=42760"/>
		<updated>2025-11-11T20:08:47Z</updated>

		<summary type="html">&lt;p&gt;Vuott: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Attualmente non è possibile assegnare ''direttamente'' - ossia da una proprietà - colori allo sfondo ed al testo di una sola riga selezionata di un oggetto ''ColumnView''.&lt;br /&gt;
&lt;br /&gt;
Per superare questo ostacolo si può adottare uno stratagemma, basandosi sulla circostanza che l'oggetto ''ColumnView'' è composto anche dall'oggetto ''GridView''. Pertanto, si potrà agire sull'oggetto ''GridView'', figlio della ''ColumnView'' per impostare il colore dello sfondo della riga selezionata (cliccata) della ''ColumnView''; e si potrà, però, agire sull'item selezionato della ''ColumnView'' (in tal caso l'assegnazione del colore è ''diretto'') per imporre al testo in esso presente il colore prescelto.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Mostriamo un esempio pratico, nel quale verrà colorato di blu lo sfondo e di giallo il testo della riga cliccata di una ''ColumnView''.&lt;br /&gt;
&amp;lt;BR&amp;gt;Lo sfondo ed il testo della riga precedentemente cliccata torna ai colori predefiniti.&lt;br /&gt;
 Public Sub Form_Open()&lt;br /&gt;
  &lt;br /&gt;
  With ColumnView1&lt;br /&gt;
    .Add(&amp;quot;1&amp;quot;, &amp;quot;Riga_1&amp;quot;)&lt;br /&gt;
    .Add(&amp;quot;2&amp;quot;, &amp;quot;Riga_2&amp;quot;)&lt;br /&gt;
    .Add(&amp;quot;3&amp;quot;, &amp;quot;Riga_3&amp;quot;)&lt;br /&gt;
    .Add(&amp;quot;4&amp;quot;, &amp;quot;Riga_4&amp;quot;)&lt;br /&gt;
    .Add(&amp;quot;5&amp;quot;, &amp;quot;Riga_5&amp;quot;)&lt;br /&gt;
    .Add(&amp;quot;6&amp;quot;, &amp;quot;Riga_6&amp;quot;)&lt;br /&gt;
    .Add(&amp;quot;7&amp;quot;, &amp;quot;Riga_7&amp;quot;)&lt;br /&gt;
  End With&lt;br /&gt;
  &lt;br /&gt;
 End&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 Public Sub ColumnView1_Select()&lt;br /&gt;
 &lt;br /&gt;
  Dim b As Byte&lt;br /&gt;
  Dim ob As Object&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;FONT Color=gray&amp;gt;' ''Assegna alla variabile di tipo oggetto il &amp;quot;figlio&amp;quot; (che è una &amp;quot;GridView&amp;quot;) della &amp;quot;ColumnView&amp;quot;:''&amp;lt;/font&amp;gt;&lt;br /&gt;
  ob = ColumnView1.Children[0]&lt;br /&gt;
   &lt;br /&gt;
 &amp;lt;FONT Color=gray&amp;gt;' ''Assegna i colori di base allo sfondo della &amp;quot;GridView-figlio&amp;quot; e al testo presente nella  &amp;quot;ColumnView&amp;quot;:''&amp;lt;/font&amp;gt;&lt;br /&gt;
  For b = 0 To ob.Rows.Max&lt;br /&gt;
    ob[b, 0].Background = Color.Default&lt;br /&gt;
    ColumnView1[b + 1].Richtext = &amp;quot;&amp;lt;FONT Color=#212121&amp;gt;&amp;quot; &amp;amp; ColumnView1[b + 1].text&lt;br /&gt;
  Next&lt;br /&gt;
   &lt;br /&gt;
 &amp;lt;FONT Color=gray&amp;gt;' ''Assegna il colore blu allo sfondo della riga cliccata della &amp;quot;GridView-figlio&amp;quot;:''&amp;lt;/font&amp;gt;&lt;br /&gt;
  ob[ob.Row, 0].Background = &amp;amp;0000FF&lt;br /&gt;
   &lt;br /&gt;
 &amp;lt;FONT Color=gray&amp;gt;' ''Assegna il colore giallo al testo presente nella riga cliccata della &amp;quot;ColumnView&amp;quot;:''&amp;lt;/font&amp;gt;&lt;br /&gt;
  ColumnView1[ob.Row + 1].Richtext = &amp;quot;&amp;amp;lt;FONT Color=#FFFF00&amp;gt;&amp;amp;lt;B&amp;gt;&amp;quot; &amp;amp; ColumnView1[ob.Row + 1].text&lt;br /&gt;
   &lt;br /&gt;
 End&lt;/div&gt;</summary>
		<author><name>Vuott</name></author>
	</entry>
	<entry>
		<id>https://www.gambas-it.org/wiki/index.php?title=Assegnare_colori_allo_sfondo_ed_al_testo_di_una_riga_selezionata_di_una_ColumnView&amp;diff=42759</id>
		<title>Assegnare colori allo sfondo ed al testo di una riga selezionata di una ColumnView</title>
		<link rel="alternate" type="text/html" href="https://www.gambas-it.org/wiki/index.php?title=Assegnare_colori_allo_sfondo_ed_al_testo_di_una_riga_selezionata_di_una_ColumnView&amp;diff=42759"/>
		<updated>2025-11-11T20:06:42Z</updated>

		<summary type="html">&lt;p&gt;Vuott: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Attualmente non è possibile assegnare ''direttamente'' - ossia da una proprietà - colori allo sfondo ed al testo di una sola riga selezionata di un oggetto ''ColumnView''.&lt;br /&gt;
&lt;br /&gt;
Per superare questo ostacolo si può adottare uno stratagemma, basandosi sulla circostanza che l'oggetto ''ColumnView'' è composto anche dall'oggetto ''GridView''. Pertanto, si potrà agire sull'oggetto ''GridView'', figlio della ''ColumnView'' per impostare il colore dello sfondo della riga selezionata (cliccata) della ''ColumnView''; e si potrà, però, agire sull'item selezionato della ''ColumnView'' (in tal caso l'assegnazione del colore è ''diretto'') per imporre al testo in esso presente il colore prescelto.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Mostriamo un esempio pratico, nel quale verrà colorato di blu lo sfondo e di giallo il testo della riga cliccata di una ''ColumnView''. Lo sfondo ed il testo della riga precedentemente cliccata torna ai colori predefiniti.&lt;br /&gt;
 Public Sub Form_Open()&lt;br /&gt;
  &lt;br /&gt;
  With ColumnView1&lt;br /&gt;
    .Add(&amp;quot;1&amp;quot;, &amp;quot;Riga_1&amp;quot;)&lt;br /&gt;
    .Add(&amp;quot;2&amp;quot;, &amp;quot;Riga_2&amp;quot;)&lt;br /&gt;
    .Add(&amp;quot;3&amp;quot;, &amp;quot;Riga_3&amp;quot;)&lt;br /&gt;
    .Add(&amp;quot;4&amp;quot;, &amp;quot;Riga_4&amp;quot;)&lt;br /&gt;
    .Add(&amp;quot;5&amp;quot;, &amp;quot;Riga_5&amp;quot;)&lt;br /&gt;
    .Add(&amp;quot;6&amp;quot;, &amp;quot;Riga_6&amp;quot;)&lt;br /&gt;
    .Add(&amp;quot;7&amp;quot;, &amp;quot;Riga_7&amp;quot;)&lt;br /&gt;
  End With&lt;br /&gt;
  &lt;br /&gt;
 End&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 Public Sub ColumnView1_Select()&lt;br /&gt;
 &lt;br /&gt;
  Dim b As Byte&lt;br /&gt;
  Dim ob As Object&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;FONT Color=gray&amp;gt;' ''Assegna alla variabile di tipo oggetto il &amp;quot;figlio&amp;quot; (che è una &amp;quot;GridView&amp;quot;) della &amp;quot;ColumnView&amp;quot;:''&amp;lt;/font&amp;gt;&lt;br /&gt;
  ob = ColumnView1.Children[0]&lt;br /&gt;
   &lt;br /&gt;
 &amp;lt;FONT Color=gray&amp;gt;' ''Assegna i colori di base allo sfondo della &amp;quot;GridView-figlio&amp;quot; e al testo presente nella  &amp;quot;ColumnView&amp;quot;:''&amp;lt;/font&amp;gt;&lt;br /&gt;
  For b = 0 To ob.Rows.Max&lt;br /&gt;
    ob[b, 0].Background = Color.Default&lt;br /&gt;
    ColumnView1[b + 1].Richtext = &amp;quot;&amp;lt;FONT Color=#212121&amp;gt;&amp;quot; &amp;amp; ColumnView1[b + 1].text&lt;br /&gt;
  Next&lt;br /&gt;
   &lt;br /&gt;
 &amp;lt;FONT Color=gray&amp;gt;' ''Assegna il colore blu allo sfondo della riga cliccata della &amp;quot;GridView-figlio&amp;quot;:''&amp;lt;/font&amp;gt;&lt;br /&gt;
  ob[ob.Row, 0].Background = &amp;amp;0000FF&lt;br /&gt;
   &lt;br /&gt;
 &amp;lt;FONT Color=gray&amp;gt;' ''Assegna il colore giallo al testo presente nella riga cliccata della &amp;quot;ColumnView&amp;quot;:''&amp;lt;/font&amp;gt;&lt;br /&gt;
  ColumnView1[ob.Row + 1].Richtext = &amp;quot;&amp;amp;lt;FONT Color=#FFFF00&amp;gt;&amp;amp;lt;B&amp;gt;&amp;quot; &amp;amp; ColumnView1[ob.Row + 1].text&lt;br /&gt;
   &lt;br /&gt;
 End&lt;/div&gt;</summary>
		<author><name>Vuott</name></author>
	</entry>
	<entry>
		<id>https://www.gambas-it.org/wiki/index.php?title=Selezionare_da_codice_una_riga_di_una_ColumnView&amp;diff=42758</id>
		<title>Selezionare da codice una riga di una ColumnView</title>
		<link rel="alternate" type="text/html" href="https://www.gambas-it.org/wiki/index.php?title=Selezionare_da_codice_una_riga_di_una_ColumnView&amp;diff=42758"/>
		<updated>2025-11-11T09:27:45Z</updated>

		<summary type="html">&lt;p&gt;Vuott: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Per selezionare da codice una riga di una ''ColumnView'', possiamo adottare un codice simile al seguente, nel quale selezioneremo l'ultima riga:&lt;br /&gt;
 Public Sub Form_Open()&lt;br /&gt;
 &lt;br /&gt;
  Dim ColumnView1 As ColumnView&lt;br /&gt;
 &lt;br /&gt;
  With ColumnView1 = New ColumnView(Me)&lt;br /&gt;
    .Move(0, 0, Me.W, 100)&lt;br /&gt;
 &amp;lt;FONT Color=gray&amp;gt;' ''Imposta due colonne:''&amp;lt;/font&amp;gt;&lt;br /&gt;
    .Columns.Count = 2&lt;br /&gt;
    .Columns[0].Alignment = Align.Center&lt;br /&gt;
    .Columns[0].Title = &amp;quot;Prima Colonna&amp;quot;&lt;br /&gt;
    .Columns[0].Width = -1&lt;br /&gt;
    .Columns[1].Alignment = Align.Center&lt;br /&gt;
    .Columns[1].Title = &amp;quot;Seconda Colonna&amp;quot;&lt;br /&gt;
    .Columns[1].Width = -1&lt;br /&gt;
    .Add(&amp;quot;Prima riga&amp;quot;, Null, Picture[&amp;quot;icon:/16/red&amp;quot;])&lt;br /&gt;
    .Add(&amp;quot;Seconda riga&amp;quot;, Null, Picture[&amp;quot;icon:/16/green&amp;quot;])&lt;br /&gt;
    .Add(&amp;quot;Terza riga&amp;quot;, Null, Picture[&amp;quot;icon:/16/blue&amp;quot;])&lt;br /&gt;
  End With&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;FONT Color=gray&amp;gt;' ''Assegna un testo alla cella della prima colonna della prima riga della &amp;quot;ColumnView&amp;quot;:''&amp;lt;/font&amp;gt;&lt;br /&gt;
  ColumnView1[&amp;quot;Prima riga&amp;quot;][0] = &amp;quot;Cella della 1^ colonna della 1^ riga&amp;quot;&lt;br /&gt;
 &amp;lt;FONT Color=gray&amp;gt;' ''Assegna un testo alla cella della seconda colonna della prima riga della &amp;quot;ColumnView&amp;quot;:''&amp;lt;/font&amp;gt;&lt;br /&gt;
  ColumnView1[&amp;quot;Prima riga&amp;quot;][1] = &amp;quot;Cella della 2^ colonna della 1^ riga&amp;quot;&lt;br /&gt;
 &amp;lt;FONT Color=gray&amp;gt;' ''Assegna un testo alla cella della prima colonna della seconda riga della &amp;quot;ColumnView&amp;quot;:''&amp;lt;/font&amp;gt;&lt;br /&gt;
  ColumnView1[&amp;quot;Seconda riga&amp;quot;][0] = &amp;quot;Cella della 1^ colonna della 2^ riga&amp;quot;&lt;br /&gt;
 &amp;lt;FONT Color=gray&amp;gt;' ''Assegna un testo alla cella della seconda colonna della seconda riga della &amp;quot;ColumnView&amp;quot;:''&amp;lt;/font&amp;gt;&lt;br /&gt;
  ColumnView1[&amp;quot;Seconda riga&amp;quot;][1] = &amp;quot;Cella della 2^ colonna della 2^ riga&amp;quot;&lt;br /&gt;
 &amp;lt;FONT Color=gray&amp;gt;' ''Assegna un testo alla cella della prima colonna della terza riga della &amp;quot;ColumnView&amp;quot;:''&amp;lt;/font&amp;gt;&lt;br /&gt;
  ColumnView1[&amp;quot;Terza riga&amp;quot;][0] = &amp;quot;Cella della 1^ colonna della 3^ riga&amp;quot;&lt;br /&gt;
 &amp;lt;FONT Color=gray&amp;gt;' ''Assegna un testo alla cella della seconda colonna della terza riga della &amp;quot;ColumnView&amp;quot;:''&amp;lt;/font&amp;gt;&lt;br /&gt;
  ColumnView1[&amp;quot;Terza riga&amp;quot;][1] = &amp;quot;Cella della 2^ colonna della 3^ riga&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;FONT Color=gray&amp;gt;' ''Seleziona l'intera terza riga della &amp;quot;ColumnView&amp;quot;:''&amp;lt;/font&amp;gt;&lt;br /&gt;
  ColumnView1[ColumnView1.Keys[ColumnView1.Keys.Max]].Selected = True&lt;br /&gt;
 &lt;br /&gt;
 End&lt;/div&gt;</summary>
		<author><name>Vuott</name></author>
	</entry>
	<entry>
		<id>https://www.gambas-it.org/wiki/index.php?title=Selezionare_da_codice_una_riga_di_una_ColumnView&amp;diff=42757</id>
		<title>Selezionare da codice una riga di una ColumnView</title>
		<link rel="alternate" type="text/html" href="https://www.gambas-it.org/wiki/index.php?title=Selezionare_da_codice_una_riga_di_una_ColumnView&amp;diff=42757"/>
		<updated>2025-11-11T09:26:28Z</updated>

		<summary type="html">&lt;p&gt;Vuott: Creata pagina con &amp;quot;Per selezionare da codice una riga di una ''ColumnView'', possiamo adottare un codice simile al seguente, nel quale selezioneremo l'ultima riga:  Public Sub Form_Open()    Dim ColumnView1 As ColumnView      With ColumnView1 = New ColumnView(Me)     .Move(0, 0, Me.W, 100)  &amp;lt;FONT Color=gray&amp;gt;' ''Imposta due colonne:''&amp;lt;/font&amp;gt;     .Columns.Count = 2     .Columns[0].Alignment = Align.Center     .Columns[0].Title = &amp;quot;Prima Colonna&amp;quot;     .Columns[0].Width = -1     .Columns[1].Alig...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Per selezionare da codice una riga di una ''ColumnView'', possiamo adottare un codice simile al seguente, nel quale selezioneremo l'ultima riga:&lt;br /&gt;
 Public Sub Form_Open()&lt;br /&gt;
&lt;br /&gt;
  Dim ColumnView1 As ColumnView&lt;br /&gt;
  &lt;br /&gt;
  With ColumnView1 = New ColumnView(Me)&lt;br /&gt;
    .Move(0, 0, Me.W, 100)&lt;br /&gt;
 &amp;lt;FONT Color=gray&amp;gt;' ''Imposta due colonne:''&amp;lt;/font&amp;gt;&lt;br /&gt;
    .Columns.Count = 2&lt;br /&gt;
    .Columns[0].Alignment = Align.Center&lt;br /&gt;
    .Columns[0].Title = &amp;quot;Prima Colonna&amp;quot;&lt;br /&gt;
    .Columns[0].Width = -1&lt;br /&gt;
    .Columns[1].Alignment = Align.Center&lt;br /&gt;
    .Columns[1].Title = &amp;quot;Seconda Colonna&amp;quot;&lt;br /&gt;
    .Columns[1].Width = -1&lt;br /&gt;
    .Add(&amp;quot;Prima riga&amp;quot;, Null, Picture[&amp;quot;icon:/16/red&amp;quot;])&lt;br /&gt;
    .Add(&amp;quot;Seconda riga&amp;quot;, Null, Picture[&amp;quot;icon:/16/green&amp;quot;])&lt;br /&gt;
    .Add(&amp;quot;Terza riga&amp;quot;, Null, Picture[&amp;quot;icon:/16/blue&amp;quot;])&lt;br /&gt;
  End With&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;FONT Color=gray&amp;gt;' ''Assegna un testo alla cella della prima colonna della prima riga della &amp;quot;ColumnView&amp;quot;:''&amp;lt;/font&amp;gt;&lt;br /&gt;
  ColumnView1[&amp;quot;Prima riga&amp;quot;][0] = &amp;quot;Cella della 1^ colonna della 1^ riga&amp;quot;&lt;br /&gt;
 &amp;lt;FONT Color=gray&amp;gt;' ''Assegna un testo alla cella della seconda colonna della prima riga della &amp;quot;ColumnView&amp;quot;:''&amp;lt;/font&amp;gt;&lt;br /&gt;
  ColumnView1[&amp;quot;Prima riga&amp;quot;][1] = &amp;quot;Cella della 2^ colonna della 1^ riga&amp;quot;&lt;br /&gt;
 &amp;lt;FONT Color=gray&amp;gt;' ''Assegna un testo alla cella della prima colonna della seconda riga della &amp;quot;ColumnView&amp;quot;:''&amp;lt;/font&amp;gt;&lt;br /&gt;
  ColumnView1[&amp;quot;Seconda riga&amp;quot;][0] = &amp;quot;Cella della 1^ colonna della 2^ riga&amp;quot;&lt;br /&gt;
 &amp;lt;FONT Color=gray&amp;gt;' ''Assegna un testo alla cella della seconda colonna della seconda riga della &amp;quot;ColumnView&amp;quot;:''&amp;lt;/font&amp;gt;&lt;br /&gt;
  ColumnView1[&amp;quot;Seconda riga&amp;quot;][1] = &amp;quot;Cella della 2^ colonna della 2^ riga&amp;quot;&lt;br /&gt;
 &amp;lt;FONT Color=gray&amp;gt;' ''Assegna un testo alla cella della prima colonna della terza riga della &amp;quot;ColumnView&amp;quot;:''&amp;lt;/font&amp;gt;&lt;br /&gt;
  ColumnView1[&amp;quot;Terza riga&amp;quot;][0] = &amp;quot;Cella della 1^ colonna della 3^ riga&amp;quot;&lt;br /&gt;
 &amp;lt;FONT Color=gray&amp;gt;' ''Assegna un testo alla cella della seconda colonna della terza riga della &amp;quot;ColumnView&amp;quot;:''&amp;lt;/font&amp;gt;&lt;br /&gt;
  ColumnView1[&amp;quot;Terza riga&amp;quot;][1] = &amp;quot;Cella della 2^ colonna della 3^ riga&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;FONT Color=gray&amp;gt;' ''Seleziona l'intera terza riga della &amp;quot;ColumnView&amp;quot;:''&amp;lt;/font&amp;gt;&lt;br /&gt;
  ColumnView1[ColumnView1.Keys[ColumnView1.Keys.Max]].Selected = True&lt;br /&gt;
 &lt;br /&gt;
 End&lt;/div&gt;</summary>
		<author><name>Vuott</name></author>
	</entry>
	<entry>
		<id>https://www.gambas-it.org/wiki/index.php?title=Guide_della_comunit%C3%A0&amp;diff=42756</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=42756"/>
		<updated>2025-11-11T09:15:38Z</updated>

		<summary type="html">&lt;p&gt;Vuott: /* ColumnView */&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;
== Array (Vettori) e Matrici ==&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;B&amp;gt;[[Array: creazione, modifica e riempimento]]&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;B&amp;gt;[[Array multidimensionali con numero determinato di elementi]]&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;B&amp;gt;[[Array multidimensionali con numero indeterminato di elementi]]&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* [[Array annidati]]&lt;br /&gt;
&lt;br /&gt;
* [[Array contenenti array di varie dimensioni]]&lt;br /&gt;
&lt;br /&gt;
* [[Array in linea]]&lt;br /&gt;
&lt;br /&gt;
* [[Accedere linearmente in scrittura ed in lettura ad una Matrice]]&lt;br /&gt;
&lt;br /&gt;
* [[Assegnare ad un vettore i valori contenuti da un'area di memoria puntata da un Puntatore]]&lt;br /&gt;
&lt;br /&gt;
* [[Assegnare ciascuna cifra di un numero a un elemento di un vettore di tipo Byte]]&lt;br /&gt;
&lt;br /&gt;
* [[Assegnare i byte dei dati di un numero agli elementi di un vettore di tipo Byte]]&lt;br /&gt;
&lt;br /&gt;
* [[Assegnare un vettore ad una variabile di tipo Object]]&lt;br /&gt;
&lt;br /&gt;
* [[Assegnare un vettore ad una variabile di tipo Puntatore]]&lt;br /&gt;
&lt;br /&gt;
* [[Configurazione, organizzazione ed impostazione dell'array secondo i sorgenti di Gambas]]&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere quale elemento di un vettore contiene un determinato valore]]&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere con i Puntatori i valori contenuti in un vettore]]&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere il valore numerico più alto contenuto da un vettore]]&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere la dimensione ed il numero di elementi di una Matrice]]&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere in un array di tipo Stringa la quantità maggiore di caratteri contenuta nei suoi elementi]]&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere in un array di tipo Stringa l'elemento che contiene la quantità maggiore di caratteri]]&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;
* &amp;lt;B&amp;gt;[[Copie di variabili array]]&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* [[Eliminare più elementi da un array]]&lt;br /&gt;
&lt;br /&gt;
* [[Emulare la funzione Asc() con il vettore di tipo Byte]]&lt;br /&gt;
&lt;br /&gt;
* [[Gestione di una coda mediante array in modo circolare]]&lt;br /&gt;
&lt;br /&gt;
* [[Invertire l'ordine dei valori contenuti dagli elementi di un vettore]]&lt;br /&gt;
&lt;br /&gt;
* [[Invertire l'ordine nelle coppie di byte dell'area di memoria di un vettore con la funzione esterna swab()]]&lt;br /&gt;
&lt;br /&gt;
* [[Leggere e scrivere in un vettore mediante i Memory Stream]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere il puntatore a una variabile vettoriale]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere un vettore di tipo Byte da una Stringa]]&lt;br /&gt;
&lt;br /&gt;
* [[Porre a zero i valori contenuti da un Vettore]]&lt;br /&gt;
&lt;br /&gt;
* [[Proprietà ReadOnly dell'Array (proprietà di sola lettura)]]&lt;br /&gt;
&lt;br /&gt;
* [[Raccogliere il valore contenuto nell'ultimo elemento di indice non conosciuto di un vettore restituito da una funzione]]&lt;br /&gt;
&lt;br /&gt;
* [[Scrivere in un vettore i dati di un file]]&lt;br /&gt;
&lt;br /&gt;
* [[Utilizzare un Vettore al posto di una Matrice]]&lt;br /&gt;
&lt;br /&gt;
== Balloon ==&lt;br /&gt;
&lt;br /&gt;
* [[Colorare il testo di un Balloon]]&lt;br /&gt;
&lt;br /&gt;
* [[Mostrare un'immagine in un Ballon]]&lt;br /&gt;
&lt;br /&gt;
* [[Posizionare arbitrariamente un Balloon]]&lt;br /&gt;
&lt;br /&gt;
== Bit - Operazioni sui Bit ==&lt;br /&gt;
&lt;br /&gt;
* [[Conversione Big-Endian/Little-Endian]]&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere di un numero la posizione del primo bit da destra impostato a 1]]&lt;br /&gt;
&lt;br /&gt;
* [[Effettuare con le funzioni di libglib-2.0 alcune operazioni sui bit di un valore di una variabile puntata da un Puntatore]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere il ''nibble'' alto ed il ''nibble'' basso di un numero]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere in Gambas il risultato di uno spostamento di bit scritto in linguaggio C]]&lt;br /&gt;
&lt;br /&gt;
* [[Porre a 0 oppure a 1 un bit di un numero]]&lt;br /&gt;
&lt;br /&gt;
* [[Sapere con le funzioni esterne del API di libglib-2.0 quanti bit sono necessari per contenere un numero]]&lt;br /&gt;
&lt;br /&gt;
* [[Sapere quanti bit posti ad 1 sono presenti in un numero]]&lt;br /&gt;
&lt;br /&gt;
* [[Sostituire gli operatori logici di spostamento dei bit con semplici operazioni]]&lt;br /&gt;
&lt;br /&gt;
* [[Sottrazione con operatori bitwise]]&lt;br /&gt;
&lt;br /&gt;
== Classi ==&lt;br /&gt;
&lt;br /&gt;
===Classi in generale===&lt;br /&gt;
&lt;br /&gt;
* [[Accedere alla Struttura della risorsa &amp;quot;Classe&amp;quot;, come dichiarata nei sorgenti di Gambas]]&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere le risorse possedute da una Classe]]&lt;br /&gt;
&lt;br /&gt;
* [[Rendere gli elementi di una Classe richiamabili da un progetto Gambas esterno]]&lt;br /&gt;
&lt;br /&gt;
* [[Usare una Classe come fosse una Funzione]]&lt;br /&gt;
&lt;br /&gt;
===Classi particolari native===&lt;br /&gt;
&lt;br /&gt;
* [[Aggiungere una funzione personalizzata alla Classe nativa String]]&lt;br /&gt;
&lt;br /&gt;
* [[La classe Action]]&lt;br /&gt;
&lt;br /&gt;
===Classi specifiche===&lt;br /&gt;
&lt;br /&gt;
* [[Creare da codice una Classe specifica]]&lt;br /&gt;
&lt;br /&gt;
* [[Variabile del tipo di una Classe specifica creata]]&lt;br /&gt;
&lt;br /&gt;
* [[Vettore del tipo di una Classe specifica creata]]&lt;br /&gt;
 &lt;br /&gt;
====Classi particolari realizzate della Comunità Gambas-it.org====&lt;br /&gt;
&lt;br /&gt;
* [[Clib]]&lt;br /&gt;
&lt;br /&gt;
* [[csvbox]]&lt;br /&gt;
&lt;br /&gt;
* [[CTable]]&lt;br /&gt;
&lt;br /&gt;
* [[Fifo]]&lt;br /&gt;
&lt;br /&gt;
* [[GLibrary]]&lt;br /&gt;
&lt;br /&gt;
* [[GridViewUtil]]&lt;br /&gt;
&lt;br /&gt;
* [[PdfWriter]]&lt;br /&gt;
&lt;br /&gt;
* [[TrasfImpLett]]&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;
* [[Collection]]&lt;br /&gt;
&lt;br /&gt;
* [[Confronto Array di Strutture verso Collezione di Classi]]&lt;br /&gt;
&lt;br /&gt;
* [[Definizione esplicita di una Collection]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere il valore attribuito a una chiave della 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 Metodo o una Proprietà della Classe di un Oggetto inserito in una Collection]]&lt;br /&gt;
&lt;br /&gt;
* [[Richiamare un'intera Collection nel campo di un'altra Collection]]&lt;br /&gt;
&lt;br /&gt;
== ColorInfo ==&lt;br /&gt;
&lt;br /&gt;
* [[Uso della classe ColorInfo]]&lt;br /&gt;
&lt;br /&gt;
== ColumnView ==&lt;br /&gt;
&lt;br /&gt;
* [[Aggiungere una colonna a una ColumnView]]&lt;br /&gt;
&lt;br /&gt;
* [[Aggiungere una riga a una ColumnView]]&lt;br /&gt;
&lt;br /&gt;
* [[Assegnare colori allo sfondo ed al testo di una riga selezionata di una ColumnView]]&lt;br /&gt;
&lt;br /&gt;
* [[Assegnare il testo a una cella della ColumnView]]&lt;br /&gt;
&lt;br /&gt;
* [[Impostare la larghezza delle colonne in una ColumnView]]&lt;br /&gt;
&lt;br /&gt;
* [[Selezionare da codice una riga di una ColumnView]]&lt;br /&gt;
&lt;br /&gt;
== ComboBox ==&lt;br /&gt;
&lt;br /&gt;
* [[ComboBox che consente di posizionarsi sulla prima ricorrenza di un item quando si digitano le sue prime lettere]]&lt;br /&gt;
* [[ComboBox che mostra immagini anziché caratteri alfanumerici]]&lt;br /&gt;
* [[ComboBox: creare una lista da codice]]&lt;br /&gt;
* [[Impostare il colore del testo di ogni elemento della lista del ComboBox]]&lt;br /&gt;
* [[Impostare il colore dello sfondo del ComboBox]]&lt;br /&gt;
* [[Ridimensionare la larghezza della finestra a cascata di un ComboBox in base alla lunghezza testuale di un elemento della lista]]&lt;br /&gt;
* [[Scegliere da codice un elemento presente in un ComboBox]]&lt;br /&gt;
* [[Scegliere da codice un indice del ComboBox]]&lt;br /&gt;
&lt;br /&gt;
==Come Compilare Gambas==&lt;br /&gt;
* [[Compilare Gambas]]&lt;br /&gt;
&lt;br /&gt;
== Componenti ==&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;B&amp;gt;[[Cosa è un Componente di Gambas]]&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* [[Attivare un Componente dinamicamente da codice]]&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere il nome del Componente di appartenenza di una Classe mediante i sorgenti di Gambas]]&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere le Classi possedute da un Componente]]&lt;br /&gt;
&lt;br /&gt;
* [[Utilizzare un Componente obsoleto]]&lt;br /&gt;
&lt;br /&gt;
=== Realizzazione dei Componenti in linguaggio Gambas ===&lt;br /&gt;
&lt;br /&gt;
* [[Come creare un Componente scritto in linguaggio Gambas]]&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;
* [[gb.strLib]]&lt;br /&gt;
&lt;br /&gt;
* [[gb.textpro]]&lt;br /&gt;
&lt;br /&gt;
* [[GridBox]]&lt;br /&gt;
&lt;br /&gt;
* [[INILib]]&lt;br /&gt;
&lt;br /&gt;
* [[InvBox]]&lt;br /&gt;
&lt;br /&gt;
* [[qrcodereader]]&lt;br /&gt;
&lt;br /&gt;
* [[XMLLib]]&lt;br /&gt;
&lt;br /&gt;
=== Realizzazione dei Componenti in linguaggio C ===&lt;br /&gt;
&lt;br /&gt;
* [[Creare un Componente per Gambas scritto in linguaggio C]]&lt;br /&gt;
&lt;br /&gt;
== CPU e Scheda Madre==&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere con alcune funzioni della libreria libc.so.6 il numero dei processori configurati e disponibili]]&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere il numero dei processori presenti nel proprio calcolatore con la Proprietà System.Cores]]&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere il numero dei processori presenti nel proprio calcolatore leggendo il file di sistema &amp;quot;cpuinfo&amp;quot;]]&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere la frequenza delle CPU mediante le funzioni esterne del API di Libcpufreq]]&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere la risoluzione dei clock hardware con le risorse esterne dichiarate nel file header &amp;quot;time.h&amp;quot;]]&lt;br /&gt;
&lt;br /&gt;
* [[Controllare la temperatura della CPU con le sole funzioni di Gambas]]&lt;br /&gt;
&lt;br /&gt;
* [[Controllare la temperatura dell'hardware mediante le funzioni del API di libsensors]]&lt;br /&gt;
&lt;br /&gt;
* [[Generare arbitrariamente un errore &amp;quot;CPU Time Limit Exceeded&amp;quot; con la funzione esterna vlimit()]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere alcune informazioni sulla CPU mediante l'API di Libavutil]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere alcune informazioni sulla CPU mediante l'API di Libcpuid]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere informazioni generali sulla CPU con le funzioni esterne del API di SDL2]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere informazioni generali sulla CPU con le sole risorse di Gambas]]&lt;br /&gt;
&lt;br /&gt;
* [[Verificare la frequenza delle CPU con le sole risorse di Gambas]]&lt;br /&gt;
&lt;br /&gt;
== Creazione pacchetti di installazione ==&lt;br /&gt;
&lt;br /&gt;
* [[Creare un AppImage firmata di un progetto Gambas]]&lt;br /&gt;
&lt;br /&gt;
== DBus ==&lt;br /&gt;
&lt;br /&gt;
* [[Introduzione a DBus]]&lt;br /&gt;
&lt;br /&gt;
* [[Inviare dati da un programma Gambas ad un altro mediante le risorse del Componente DBus]]&lt;br /&gt;
&lt;br /&gt;
== Desktop - Scrivania ==&lt;br /&gt;
&lt;br /&gt;
* [[Far mostrare sulla Scrivania i messaggi della specifica Desktop Notifications mediante le funzioni esterne del API di Libnotify]]&lt;br /&gt;
&lt;br /&gt;
* [[Individuare con precisione il percorso ed il nome della Scrivania]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere il valore di un pixel sulla Scrivania]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere informazioni sulle icone presenti sulla Scrivania]]&lt;br /&gt;
&lt;br /&gt;
== DesktopFile ==&lt;br /&gt;
&lt;br /&gt;
* [[Uso del Metodo .RunExec()]]&lt;br /&gt;
&lt;br /&gt;
== DesktopWatcher ==&lt;br /&gt;
&lt;br /&gt;
* [[Uso della classe DesktopWatcher]]&lt;br /&gt;
&lt;br /&gt;
== DesktopWindow ==&lt;br /&gt;
&lt;br /&gt;
* [[Uso della classe DesktopWindow]]&lt;br /&gt;
&lt;br /&gt;
== Dialog ==&lt;br /&gt;
&lt;br /&gt;
* [[Caricare in un Dialog più file da aprire in sequenza]]&lt;br /&gt;
&lt;br /&gt;
* [[Far mostrare in un Dialog l'estensione dell'ultimo file precedentemente aperto]]&lt;br /&gt;
&lt;br /&gt;
* [[Far mostrare in un Dialog una particolare estensione di file]]&lt;br /&gt;
&lt;br /&gt;
* [[Filtrare contemporaneamente con il Dialog.Filter più estensioni di file]]&lt;br /&gt;
&lt;br /&gt;
* [[Preimpostare il percorso della finestra del Dialog]]&lt;br /&gt;
&lt;br /&gt;
* [[Ridimensionare la finestra del Dialog da codice]]&lt;br /&gt;
&lt;br /&gt;
== DirView - FileView ==&lt;br /&gt;
&lt;br /&gt;
* [[Copiare un file utilizzando gli oggetti DirView e FileView]]&lt;br /&gt;
&lt;br /&gt;
* [[Mostrare con diversi colori i nomi dei file in una FileView]]&lt;br /&gt;
&lt;br /&gt;
== Drag &amp;amp; Drop ==&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;B&amp;gt;[[Codice essenziale per effettuare il Drag&amp;amp;Drop di un'immagine da un Controllo grafico in un altro]]&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;B&amp;gt;[[Codice essenziale per effettuare il Drag&amp;amp;Drop di un testo]]&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* [[Mantenere durante il Drag&amp;amp;Drop il cursore del mouse nel punto dell'immagine ove si è cliccato]]&lt;br /&gt;
&lt;br /&gt;
* [[Mostrare il contenuto di un file di testo con il Drag&amp;amp;Drop del file in un oggetto di testo]]&lt;br /&gt;
&lt;br /&gt;
* [[Mostrare un'immagine animata con il Drag&amp;amp;Drop del suo file in una MovieBox]]&lt;br /&gt;
&lt;br /&gt;
* [[Mostrare un'immagine con il Drag&amp;amp;Drop del suo file in una PictureBox o in una ImageView]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere il percorso di un file trasportato e rilasciato con Drag&amp;amp;Drop]]&lt;br /&gt;
&lt;br /&gt;
* [[Spostare Oggetti grafici con il Drag&amp;amp;Drop all'interno di un Contenitore]]&lt;br /&gt;
&lt;br /&gt;
== DrawingArea ==&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;B&amp;gt;[[Istruzioni essenziali per disegnare su una DrawingArea]]&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* [[Calcolo e rappresentazione grafica in una DrawingArea del Seno e del Coseno]]&lt;br /&gt;
&lt;br /&gt;
* [[Creare e distruggere un Controllo grafico in una DrawingArea]]&lt;br /&gt;
&lt;br /&gt;
* [[Creare, spostare e distruggere un'immagine in una DrawingArea]]&lt;br /&gt;
&lt;br /&gt;
* [[Curvare il testo in una DrawingArea]]&lt;br /&gt;
&lt;br /&gt;
* [[Disegnare in una DrawingArea dei punti]]&lt;br /&gt;
&lt;br /&gt;
* [[Disegnare in una DrawingArea due immagini sovrapposte anche consentendo il cambio di opacità di quella disegnata sopra]]&lt;br /&gt;
&lt;br /&gt;
* [[Disegnare in una DrawingArea l'intersezione perpendicolare di due linee]]&lt;br /&gt;
&lt;br /&gt;
* [[Disegnare in una DrawingArea linee mediante codice]]&lt;br /&gt;
&lt;br /&gt;
* [[Disegnare in una DrawingArea linee rette con il mouse]]&lt;br /&gt;
&lt;br /&gt;
* [[Disegnare in una DrawingArea sulla base dei punti cliccati un parallelogramma con angoli retti]]&lt;br /&gt;
&lt;br /&gt;
* [[Disegnare in una DrawingArea un carattere punto per punto]]&lt;br /&gt;
&lt;br /&gt;
* [[Disegnare in una DrawingArea un cerchio]]&lt;br /&gt;
&lt;br /&gt;
* [[Disegnare in una DrawingArea un eptagono regolare]]&lt;br /&gt;
&lt;br /&gt;
* [[Disegnare in una DrawingArea un esagono regolare]]&lt;br /&gt;
&lt;br /&gt;
* [[Disegnare in una DrawingArea un goniometro]]&lt;br /&gt;
&lt;br /&gt;
* [[Disegnare in una DrawingArea un ottagono regolare]]&lt;br /&gt;
&lt;br /&gt;
* [[Disegnare in una DrawingArea un pentagono regolare]]&lt;br /&gt;
&lt;br /&gt;
* [[Disegnare in una DrawingArea un poligono]]&lt;br /&gt;
&lt;br /&gt;
* [[Disegnare in una DrawingArea un rettangolo]]&lt;br /&gt;
&lt;br /&gt;
* [[Disegnare in una DrawingArea un rettangolo colorato con distinzione sfumata fra i colori]]&lt;br /&gt;
&lt;br /&gt;
* [[Disegnare in una DrawingArea un rombo]]&lt;br /&gt;
&lt;br /&gt;
* [[Disegnare in una DrawingArea un romboide]]&lt;br /&gt;
&lt;br /&gt;
* [[Disegnare in una DrawingArea un triangolo]]&lt;br /&gt;
&lt;br /&gt;
* [[Disegnare in una DrawingArea una figura piana]]&lt;br /&gt;
&lt;br /&gt;
* [[Disegnare in una DrawingArea una spirale]]&lt;br /&gt;
&lt;br /&gt;
* [[Disegnare un Button contenente un'icona e un testo mediante la DrawingArea]]&lt;br /&gt;
&lt;br /&gt;
* [[Disegnare un misuratore analogico su una DrawingArea]]&lt;br /&gt;
&lt;br /&gt;
* [[Disegnare un orologio su una DrawingArea prendendo l'orario del sistema]]&lt;br /&gt;
&lt;br /&gt;
* [[Drag-Drop di un testo in una DrawingArea]]&lt;br /&gt;
&lt;br /&gt;
* [[Drag-Drop di un'immagine in una DrawingArea]]&lt;br /&gt;
&lt;br /&gt;
* [[Evidenziare il puntatore del mouse quando si clicca sulla DrawingArea]]&lt;br /&gt;
&lt;br /&gt;
* [[Far scorrere un testo in una DrawingArea]]&lt;br /&gt;
&lt;br /&gt;
* [[Generare un file immagine da una DrawingArea]]&lt;br /&gt;
&lt;br /&gt;
* [[Generare un file PDF da una DrawingArea]]&lt;br /&gt;
&lt;br /&gt;
* [[Impedire in una DrawingArea che si esegua il codice presente nell'Evento &amp;quot;_Draw()&amp;quot; , qualora sia sollevato arbitrariamente più di una volta]]&lt;br /&gt;
&lt;br /&gt;
* [[Impostare l'opacità di un disegno in una DrawingArea]]&lt;br /&gt;
&lt;br /&gt;
* [[Mostrare alcune sfumature di un colore in una DrawingArea]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere il valore di un pixel in una DrawingArea]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere l'effetto della gomma per cancellare in una DrawingArea]]&lt;br /&gt;
&lt;br /&gt;
* [[Passare direttamente ad un oggetto Image i dati grezzi dei pixel di una DrawingArea mediante le risorse del API di X11]]&lt;br /&gt;
&lt;br /&gt;
* [[Rappresentare su una DrawingArea l'onda oscillante di una serie di dati]]&lt;br /&gt;
&lt;br /&gt;
* [[Ruotare il testo in una DrawingArea]]&lt;br /&gt;
&lt;br /&gt;
* [[Ruotare qualsiasi elemento da disegnare in una DrawingArea]]&lt;br /&gt;
&lt;br /&gt;
* [[Ruotare un arco in una DrawingArea]]&lt;br /&gt;
&lt;br /&gt;
* [[Ruotare un cerchio disegnato in una DrawingArea]]&lt;br /&gt;
&lt;br /&gt;
* [[Ruotare un cubo in una DrawingArea]]&lt;br /&gt;
&lt;br /&gt;
* [[Ruotare un dodecaedro in una DrawingArea]]&lt;br /&gt;
&lt;br /&gt;
* [[Ruotare un eptagono in una DrawingArea]]&lt;br /&gt;
&lt;br /&gt;
* [[Ruotare un esagono in una DrawingArea]]&lt;br /&gt;
&lt;br /&gt;
* [[Ruotare un oloide in una DrawingArea]]&lt;br /&gt;
&lt;br /&gt;
* [[Ruotare un ottaedro in una DrawingArea]]&lt;br /&gt;
&lt;br /&gt;
* [[Ruotare un ottagono in una DrawingArea]]&lt;br /&gt;
&lt;br /&gt;
* [[Ruotare un pentagono in una DrawingArea]]&lt;br /&gt;
&lt;br /&gt;
* [[Ruotare un prisma in una DrawingArea]]&lt;br /&gt;
&lt;br /&gt;
* [[Ruotare un quadrato ed un rettangolo in una DrawingArea]]&lt;br /&gt;
 &lt;br /&gt;
* [[Ruotare un rombo in una DrawingArea]]&lt;br /&gt;
&lt;br /&gt;
* [[Ruotare un romboide in una DrawingArea]]&lt;br /&gt;
&lt;br /&gt;
* [[Ruotare un triangolo in una DrawingArea]]&lt;br /&gt;
&lt;br /&gt;
* [[Ruotare una figura piana intorno a una circonferenza in una DrawingArea]]&lt;br /&gt;
&lt;br /&gt;
* [[Ruotare una piramide in una DrawingArea]]&lt;br /&gt;
&lt;br /&gt;
* [[Ruotare una sfera in una DrawingArea]]&lt;br /&gt;
&lt;br /&gt;
* [[Ruotare un'immagine sul proprio asse centrale 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;
* [[Spostare con il mouse senza Drag&amp;amp;Drop un'immagine caricata in una DrawingArea]]&lt;br /&gt;
&lt;br /&gt;
* [[Spostare con il mouse un cerchio in una DrawingArea]]&lt;br /&gt;
&lt;br /&gt;
* [[Spostare con il mouse un Controllo grafico generato in una DrawingArea]]&lt;br /&gt;
&lt;br /&gt;
* [[Spostare con il mouse un rettangolo in una DrawingArea]]&lt;br /&gt;
&lt;br /&gt;
* [[Spostare con il mouse un triangolo in una DrawingArea]]&lt;br /&gt;
&lt;br /&gt;
* [[Spostare con il mouse un'ellisse in una DrawingArea]]&lt;br /&gt;
&lt;br /&gt;
* [[Stampare il contenuto di una DrawingArea]]&lt;br /&gt;
&lt;br /&gt;
== File e Directory ==&lt;br /&gt;
&lt;br /&gt;
* [[Aprire un file mediante la Classe 'DesktopFile' con il programma al quale è associato]]&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;
* [[Chiudere un file]]&lt;br /&gt;
&lt;br /&gt;
* [[Comprimere un file in un file compresso .zip mediante le funzioni esterne del API di libzip]]&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere a quale applicazione è associato un tipo di file]]&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere caratteristiche generali dei file]]&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere ed impostare i permessi di un file]]&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere i permessi di un file mediante le funzioni esterne del API di libgio-2.0]]&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere il file referenziato da un collegamento simbolico]]&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere il mime-type di un file  mediante le funzioni esterne del API di libgio-2.0]]&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere il mime-type di un file  mediante le funzioni esterne del API di libmagic]]&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere il mime-type di un file mediante le sole risorse di Gambas]]&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere il tipo di file mediante le funzioni esterne del API di libgio-2.0]]&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere il tipo di file mediante le funzioni esterne del API di libglib-2.0]]&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere la data di accesso e di modifica di un file con le funzioni esterne del API di libgio-2.0]]&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere la dimensione di un file]]&lt;br /&gt;
&lt;br /&gt;
* [[Convertire con la funzione g_filename_from_uri() di libglib-2.0 la URI di un file nel corrispondente identificativo comunemente usato]]&lt;br /&gt;
&lt;br /&gt;
* [[Convertire con la funzione g_filename_to_uri() di libglib-2.0 il percorso identificativo di un file nella sua corrispondente URI]]&lt;br /&gt;
&lt;br /&gt;
* [[Copiare ricorsivamente una cartella]]&lt;br /&gt;
&lt;br /&gt;
* [[Creare un file e scrivervi dati con le funzioni esterne della libreria libgio-2.0]]&lt;br /&gt;
&lt;br /&gt;
* [[Creare un file bash]]&lt;br /&gt;
&lt;br /&gt;
* [[Creare un link simbolico di un file]]&lt;br /&gt;
&lt;br /&gt;
* [[Controllare l'uguaglianza di due file mediante le funzioni esterne del API di libgio-2.0]]&lt;br /&gt;
&lt;br /&gt;
* [[Effettuare una copia di un file e verificarne la progressione]]&lt;br /&gt;
&lt;br /&gt;
* [[Eliminare un byte all'interno di un file binario]]&lt;br /&gt;
&lt;br /&gt;
* [[Eliminare un file mediante le funzioni esterne del API di libglib-2.0]]&lt;br /&gt;
&lt;br /&gt;
* [[Estrarre con le funzioni del API di libzip i file contenuti da un file compresso .zip]]&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;
* [[Evitare l'errore &amp;quot;Stream chiuso&amp;quot; dopo aver chiuso un flusso di dati]]&lt;br /&gt;
&lt;br /&gt;
* [[Identificare un tipo di file dalla sua estensione]]&lt;br /&gt;
&lt;br /&gt;
* [[Impostazione dei permessi di un file con la funzione 'g_chmod' del API di libglib-2.0]]&lt;br /&gt;
&lt;br /&gt;
* [[L'oggetto File secondo i sorgenti di Gambas]]&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 il contenuto di una Directory mediante le risorse dichiarate nel file header &amp;quot;dirent.h&amp;quot;]]&lt;br /&gt;
&lt;br /&gt;
* [[Leggere in una cartella con le sole risorse di Gambas]]&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;
* [[Leggere un file di testo con carattere di fine riga di codifica MAC]]&lt;br /&gt;
&lt;br /&gt;
* [[Modificare le date di accesso e di modifica dell'inode di un file con le risorse esterne di utime.h]]&lt;br /&gt;
&lt;br /&gt;
* [[Modificare o eliminare una riga in un file di testo]]&lt;br /&gt;
&lt;br /&gt;
* [[Monitorare con le funzioni esterne del API di libgio-2.0 le modifiche apportate ad un file]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere alcune informazioni generali sui file]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere all'apertura di un file un Puntatore anziché una variabile di tipo File]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere il nome di un file mediante le funzioni esterne del API di libgio-2.0]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere il percorso di un file, associato a un programma .gambas, aprendolo con un doppio-clic]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere il percorso di un file trasportato e rilasciato con Drag&amp;amp;Drop]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere il solo nome ed il solo percorso di un file con le funzioni esterne del API di libglib-2.0]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere l'intero percorso di un file mediante le funzioni esterne del API di libgio-2.0]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere la directory di appartenenza di un file mediante le funzioni esterne del API di libgio-2.0]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere un file coerente da dati con rappresentazione come stringa in memoria]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere un numero dalla sua memorizzazione in formato Big-Endian]]&lt;br /&gt;
&lt;br /&gt;
* [[Percorso assoluto e percorso relativo dei file]]&lt;br /&gt;
&lt;br /&gt;
* [[Porre sotto osservazione con Read Watch due o più file]]&lt;br /&gt;
&lt;br /&gt;
* [[Raccogliere solo alcune righe all'interno di un file di testo]]&lt;br /&gt;
&lt;br /&gt;
* [[Reindirizzare lo standard output con Output To]]&lt;br /&gt;
&lt;br /&gt;
* [[Richiamare un file dalla Home]]&lt;br /&gt;
&lt;br /&gt;
* [[Rinominare un file mediante le funzioni esterne del API di libglib-2.0]]&lt;br /&gt;
&lt;br /&gt;
* [[Salvare i byte-dati di un file in un file di testo]]&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 con le risorse del API di libglib-2.0 se il percorso di un file è un percorso assoluto]]&lt;br /&gt;
&lt;br /&gt;
* [[Sapere in tempo reale se un file di nome conosciuto viene modificato o distrutto]]&lt;br /&gt;
&lt;br /&gt;
* [[Sapere l'ordine dei byte utilizzato dal sistema per salvare i dati]]&lt;br /&gt;
&lt;br /&gt;
* [[Sapere quale file è stato creato per ultimo]]&lt;br /&gt;
&lt;br /&gt;
* [[Sapere se un file di nome sconosciuto è stato creato o distrutto]]&lt;br /&gt;
&lt;br /&gt;
* [[Sapere se un file esiste mediante le funzioni esterne del API di libgio-2.0]]&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 un file di testo]]&lt;br /&gt;
&lt;br /&gt;
* [[Spostare un file nel Cestino e ripristinarlo nella sua Cartella di origine]]&lt;br /&gt;
&lt;br /&gt;
* [[Troncare un file ad una determinata dimensione con la funzione esterna truncate()]]&lt;br /&gt;
&lt;br /&gt;
* [[Verificare l'esistenza di una directory]]&lt;br /&gt;
&lt;br /&gt;
== FileChooser ==&lt;br /&gt;
&lt;br /&gt;
* [[Impedire in un FileChooser che facendo doppio-clic su un file, ne venga richiesta la sovrascrittura]]&lt;br /&gt;
&lt;br /&gt;
* [[Impostare da codice la modalità di visualizzazione interna dei file in un FileChooser]]&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, Finestre e Contenitori ==&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 e disegnarvi una scacchiera con le funzioni del API di SDL2]]&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 libgtk-3]]&lt;br /&gt;
&lt;br /&gt;
* [[Creare una finestra mediante le funzioni del API di SDL2]]&lt;br /&gt;
&lt;br /&gt;
* [[Creare una finestra mediante le funzioni del API di X11]]&lt;br /&gt;
&lt;br /&gt;
* [[Creare una finestra mediante le funzioni del API di XCB]]&lt;br /&gt;
&lt;br /&gt;
* [[Creare un file immagine dagli oggetti presenti in un Contenitore]]&lt;br /&gt;
&lt;br /&gt;
* [[Creare un Form trasparente]]&lt;br /&gt;
&lt;br /&gt;
* [[Dimensionare il Form o un'altra finestra considerando la presenza della barra delle applicazioni sulla Scrivania]]&lt;br /&gt;
&lt;br /&gt;
* [[Evitare la perdita di memoria chiudendo forzatamente un Form]]&lt;br /&gt;
&lt;br /&gt;
* [[Evento Form_Activate e sua possibile sostituzione]]&lt;br /&gt;
&lt;br /&gt;
* [[Impedire l'apertura di un Form secondario più di una volta]]&lt;br /&gt;
&lt;br /&gt;
* [[Impedire la chiusura di un Form quando si clicca sulla &amp;quot;X&amp;quot; nell'angolo in alto a destra]]&lt;br /&gt;
&lt;br /&gt;
* [[Inglobare un Form o una finestra in un altro suo Form o finestra del medesimo programma]]&lt;br /&gt;
&lt;br /&gt;
* [[Mantenere il Form di un'applicazione Gambas sempre in primo piano]]&lt;br /&gt;
&lt;br /&gt;
* [[Mostrare una immagine JPEG in una finestra con le funzioni del API di X11 e di Libjpeg]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere un'immagine del Form]]&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 valori e altre risorse da un Form principale a un Form secondario]]&lt;br /&gt;
&lt;br /&gt;
* [[Passare valori e altre risorse da un Form secondario a un Form principale]]&lt;br /&gt;
&lt;br /&gt;
* [[Rapporto fra ShowModal ed il Metodo Form.Close]]&lt;br /&gt;
&lt;br /&gt;
* [[Referenziare in modo appropriato lo spazio all'interno di un Contenitore rispetto ai suoi Oggetti figli]]&lt;br /&gt;
&lt;br /&gt;
* [[Restituire ad un Form un valore passato ad Form secondario]]&lt;br /&gt;
&lt;br /&gt;
* [[Semitrasparenza di un Form]]&lt;br /&gt;
&lt;br /&gt;
* [[Simulare il posizionamento di alcuni ToolButton sulla barra del titolo della finestra]]&lt;br /&gt;
&lt;br /&gt;
* [[Sollevare l'evento _Resize al ridimensionamento di un Form secondario]]&lt;br /&gt;
&lt;br /&gt;
* [[Spostare un Form con il mouse sulla Scrivania]]&lt;br /&gt;
&lt;br /&gt;
* [[Verificare se un Form è attivo]]&lt;br /&gt;
&lt;br /&gt;
== Funzioni ==&lt;br /&gt;
&lt;br /&gt;
* [[Differenza fra Sub, Procedure e Function]]&lt;br /&gt;
&lt;br /&gt;
* [[Emulare i Puntatori a Funzione del linguaggio C mediante gli Oggetti]]&lt;br /&gt;
&lt;br /&gt;
* [[Gestire Funzioni come oggetti]]&lt;br /&gt;
&lt;br /&gt;
* [[Passaggio delle Funzioni di Callback alle Funzioni Callback]]&lt;br /&gt;
&lt;br /&gt;
* [[Passaggio di un argomento per 'indirizzo' ad una Funzione]]&lt;br /&gt;
&lt;br /&gt;
* [[Passare a una funzione un numero imprecisato di argomenti]]&lt;br /&gt;
&lt;br /&gt;
* [[Scrivere una Funzione]]&lt;br /&gt;
&lt;br /&gt;
== Gambas - IDE di Gambas ==&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere la versione di Gambas]]&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere le parole-chiave usate in Gambas]]&lt;br /&gt;
&lt;br /&gt;
* [[Far apparire un commento a una risorsa nella finestrina guida nell'editor del codice]]&lt;br /&gt;
&lt;br /&gt;
* [[Icone messe a disposizione da Gambas]]&lt;br /&gt;
&lt;br /&gt;
* [[Individuare in un file compilato .gambas gli eventuali file esterni in esso allegati]]&lt;br /&gt;
&lt;br /&gt;
* [[Individuare la cartella principale dei file sorgenti di Gambas contenente la sub-cartella di un file immagine]]&lt;br /&gt;
&lt;br /&gt;
* [[La cartella ove sono salvati in copia i file delle informazioni della wiki ufficiale sulle risorse di Gambas]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere l'indirizzo effettivo dei file ospitati in un progetto Gambas]]&lt;br /&gt;
&lt;br /&gt;
* [[Ripristinare nell'IDE di Gambas le voci del Menu se disabilitate]]&lt;br /&gt;
&lt;br /&gt;
* [[Visualizzare tutti gli elementi rilevanti di Gambas contenuti dal codice di un progetto]]&lt;br /&gt;
&lt;br /&gt;
== Gambas con HTML e JavaScript ==&lt;br /&gt;
&lt;br /&gt;
* [[Gambas con HTML e JavaScript - Uso necessario dell'oggetto WebView]]&lt;br /&gt;
&lt;br /&gt;
==== Applicazioni specifiche ====&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 mediante codice HTML]]&lt;br /&gt;
&lt;br /&gt;
* [[Leggere un valore generato da un codice HTML/JavaScript]]&lt;br /&gt;
&lt;br /&gt;
* [[Mostrare una finestra tipo MessageBox mediante codice HTML]]&lt;br /&gt;
&lt;br /&gt;
* [[Testo scorrevole dall'alto verso il basso e viceversa]]&lt;br /&gt;
&lt;br /&gt;
== Gambas e Arduino ==&lt;br /&gt;
&lt;br /&gt;
* [[Far interagire Gambas con Arduino]]&lt;br /&gt;
&lt;br /&gt;
* [[Inviare dati ad Arduino]]&lt;br /&gt;
&lt;br /&gt;
* [[Ricevere dati da Arduino]]&lt;br /&gt;
&lt;br /&gt;
* [[Ricevere da Arduino un tipo di dato di dimensione superiore al Byte]]&lt;br /&gt;
&lt;br /&gt;
* [[Ricevere una Struttura da Arduino]]&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 Basi di Dati ==&lt;br /&gt;
&lt;br /&gt;
* [[Installazione Server PostgreSQL]]&lt;br /&gt;
&lt;br /&gt;
== Gestione dei dati audio e dei file audio ==&lt;br /&gt;
&lt;br /&gt;
* [[Analizzare con le sole risorse di Gambas la frequenza di un audio presente in un file WAV]]&lt;br /&gt;
&lt;br /&gt;
* [[Calcolare i beat per minuto (BpM) di un file audio con le funzioni esterne del API di Libaubio]]&lt;br /&gt;
&lt;br /&gt;
* [[Calcolare la durata di un file MP3 con le sole risorse native di Gambas]]&lt;br /&gt;
&lt;br /&gt;
* [[Calcolare la durata di un file OGG con le sole risorse native di Gambas]]&lt;br /&gt;
&lt;br /&gt;
* [[Calcolare la durata di un file WAV con le sole risorse native di Gambas]]&lt;br /&gt;
&lt;br /&gt;
* [[Calcolare la potenza di picco e di ampiezza di un file WAV con le funzioni esterne del API di Libaudiofile]]&lt;br /&gt;
&lt;br /&gt;
* [[Calcolare la quantità di dati audio grezzi di un file WAV necessari per eseguire tot secondi di audio]]&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere alcune informazioni generali di un file OGG con le sole risorse di Gambas]]&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere il bitrate di un file MP3 con le sole risorse di Gambas]]&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere il bit depth di un file MP3 con le sole risorse di Gambas]]&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere il bit depth di un file OGG con le sole risorse di Gambas]]&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere in tempo reale con &amp;quot;proc...fdinfo&amp;quot; la quantità dei dati elaborati di un file audio]]&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere in tempo reale la quantità di frame audio processati dalla scheda audio]]&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere la frequenza di campionamento di un file MP3 con le sole risorse di Gambas]]&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere la quantità di canali di un file MP3 con le sole risorse di Gambas]]&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere la versione e il layer di un file MP3 con le sole risorse di Gambas]]&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere quale file audio un programma sta eseguendo]]&lt;br /&gt;
&lt;br /&gt;
* [[Convertire un file audio in formato OggVorbis con le funzioni esterne del API di libfishsound, libsndfile e liboggz]]&lt;br /&gt;
&lt;br /&gt;
* [[Convertire un file audio in formato OggVorbis con le funzioni esterne del API di libsndfile]]&lt;br /&gt;
&lt;br /&gt;
* [[Convertire un file audio in testo con le risorse del API di Sndfile]]&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 le funzioni esterne del API di Faac]]&lt;br /&gt;
&lt;br /&gt;
* [[Convertire un file WAV in formato MP3 con le funzioni esterne del API di Lame]]&lt;br /&gt;
&lt;br /&gt;
* [[Convertire un file WAV in formato OggVorbis con le funzioni esterne del API di libvorbisfile, libvorbisenc e libogg]]&lt;br /&gt;
&lt;br /&gt;
* [[Creare il blocco d'intestazione di un file WAV avendo dati audio grezzi]]&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;FONT Color=blue&amp;gt;[[Creare un Client di Jack con le funzioni esterne del API di libjack]]&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* [[Creare un Client di Jack con le funzioni esterne del API di libJack e GStreamer]]&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;
* [[Decomprimere e decodificare 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]]&lt;br /&gt;
&lt;br /&gt;
* [[Eseguire un file audio mediante il Metodo .Open() della Classe Desktop]]&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;B&amp;gt;[[Eseguire un file audio mediante l'oggetto MediaView del componente gb.media.form]]&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* [[Eseguire un file audio mediante le funzioni esterne del API di Alsa e SndFile]]&lt;br /&gt;
&lt;br /&gt;
* [[Eseguire un file audio mediante le funzioni esterne del API di GSound]]&lt;br /&gt;
&lt;br /&gt;
* [[Eseguire un file audio mediante le funzioni esterne del API di libaudiofile e di Alsa]]&lt;br /&gt;
&lt;br /&gt;
* [[Eseguire un file audio mediante le funzioni esterne del API di Mpv]]&lt;br /&gt;
&lt;br /&gt;
* [[Eseguire un file audio mediante le funzioni esterne del API di PortAudio e SndFile]]&lt;br /&gt;
&lt;br /&gt;
* [[Eseguire un file audio mediante le funzioni esterne del API di Rhythmbox]]&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 Flite]]&lt;br /&gt;
&lt;br /&gt;
* [[Eseguire un file WAV mediante le funzioni esterne del API di libaudio e di Alsa]]&lt;br /&gt;
&lt;br /&gt;
* [[Estrarre da un file FLAC i dati dell'immagine contenuta]]&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 dati audio grezzi mediante le sole risorse di Gambas]]&lt;br /&gt;
&lt;br /&gt;
* [[Estrarre i TAG da un file MP3 con le funzioni esterne del API di Id3tag]]&lt;br /&gt;
&lt;br /&gt;
* [[Estrarre i TAG da un file MP3 con le sole funzioni di Gambas]]&lt;br /&gt;
&lt;br /&gt;
* [[Estrarre i TAG da un file OggVorbis con le sole funzioni di Gambas]]&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 audio MOD con le sole risorse di Gambas]]&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 da un file VOC con le sole risorse di Gambas]]&lt;br /&gt;
&lt;br /&gt;
* [[Estrarre informazioni e TAG da file audio con le funzioni esterne del API di Libtag_c]]&lt;br /&gt;
&lt;br /&gt;
* [[Estrarre informazioni e TAG da un file audio con le funzioni esterne del API di SndFile]]&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 generali da un file audio aiff 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 Libaudiofile]]&lt;br /&gt;
&lt;br /&gt;
* [[Estrarre informazioni generali da un file audio flac]]&lt;br /&gt;
&lt;br /&gt;
* [[Estrarre l'immagine contenuta in un file MP3 con le sole risorse di Gambas]]&lt;br /&gt;
&lt;br /&gt;
* [[Fondere insieme due file WAV]]&lt;br /&gt;
&lt;br /&gt;
* [[Generare un'onda sinusoidale]]&lt;br /&gt;
&lt;br /&gt;
* [[Individuare le frequenze presenti in un'onda audio con le funzioni esterne della libreria Libaubio]]&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;B&amp;gt;[[La gestione dei file audio mediante il componente gb.openal]]&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;B&amp;gt;[[La gestione dei file audio mediante il componente gb.sdl2.audio]]&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* [[La gestione dei file audio mediante le funzioni esterne del API di Allegro 5]]&lt;br /&gt;
&lt;br /&gt;
* [[La gestione dei file audio mediante le funzioni esterne del API di Canberra]]&lt;br /&gt;
&lt;br /&gt;
* [[La gestione dei file audio mediante le funzioni esterne del API di GStreamer]]&lt;br /&gt;
&lt;br /&gt;
* [[La gestione dei file audio mediante le funzioni esterne del API di MikMod]]&lt;br /&gt;
&lt;br /&gt;
* [[La gestione dei file audio mediante le funzioni esterne del API di Mpeg3]]&lt;br /&gt;
&lt;br /&gt;
* [[La gestione dei file audio mediante le funzioni esterne del API di mpg123]]&lt;br /&gt;
&lt;br /&gt;
* [[La gestione dei file audio mediante le funzioni esterne del API di Sox]]&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;B&amp;gt;[[La gestione dell'audio e dei file audio mediante il componente gb.media]]&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* [[La gestione dell'audio e dei file audio mediante le funzioni esterne del API di ALSA]]&lt;br /&gt;
&lt;br /&gt;
* [[La gestione dell'audio e dei file audio mediante le funzioni esterne del API di LibAo]]&lt;br /&gt;
&lt;br /&gt;
* [[La gestione dell'audio e dei file audio mediante le funzioni esterne del API di OpenAL]]&lt;br /&gt;
&lt;br /&gt;
* [[La gestione dell'audio e dei file audio mediante le funzioni esterne del API di Opus]]&lt;br /&gt;
&lt;br /&gt;
* [[La gestione dell'audio e dei file audio mediante le funzioni esterne del API di PulseAudio]]&lt;br /&gt;
&lt;br /&gt;
* [[La gestione dell'audio e dei file audio mediante le funzioni esterne del API di SDL2 e di SDL3]]&lt;br /&gt;
&lt;br /&gt;
* [[La gestione dell'audio e dei file audio mediante le funzioni esterne del API di Sndio]]&lt;br /&gt;
&lt;br /&gt;
* [[La gestione dell'audio e dei file audio mediante le funzioni esterne del API di VLC]]&lt;br /&gt;
&lt;br /&gt;
* [[La struttura di un file MPEG]]&lt;br /&gt;
&lt;br /&gt;
* [[Modificare il volume audio di un file WAV mediante le sole risorse di Gambas]]&lt;br /&gt;
&lt;br /&gt;
* [[Modificare il volume e la frequenza di campionamento di file audio WAV e AIFF con l'API di Libaudio]] &lt;br /&gt;
&lt;br /&gt;
* [[Modificare la frequenza di campionamento di un file audio con l'API di Libresample e Libsndfile]]&lt;br /&gt;
&lt;br /&gt;
* [[Modificare la frequenza di campionamento di un file audio con l' API di Libsamplerate e Libsndfile]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere un file WAV da un file Midi con le funzioni esterne del API di FluidSynth]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere un file WAV da un file Midi con le funzioni esterne del API di WildMidi]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere uno spettrogramma audio da file WAV PCM 16bit con le sole funzioni di Gambas]]&lt;br /&gt;
&lt;br /&gt;
* [[Sapere con le funzioni esterne del API di Rhythmbox se un file contiene dati audio e/o video]]&lt;br /&gt;
&lt;br /&gt;
* [[Suddividere in due o più parti coerenti e funzionali un file audio mp3]]&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;
* [[Registrare in tempo reale il flusso di dati audio di una radio WEB con le risorse della Classe HttpClient di Gambas]]&lt;br /&gt;
&lt;br /&gt;
* [[Registrare in tempo reale in un file l'audio di una radio WEB con le funzioni esterne del API di VLC]]&lt;br /&gt;
&lt;br /&gt;
* [[Riproduzione dell'audio di radio WEB con il Componente gb.media]]&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;
* [[Riproduzione e contemporanea registrazione dell'audio di radio WEB mediante il Componente gb.media]]&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;
* [[Conoscere con le funzioni esterne di PortAudio i dispositivi audio presenti nel sistema]]&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere con le funzioni esterne di RtAudio i dispositivi audio presenti nel sistema]]&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere con le funzioni esterne di SDL2 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 con le sole risorse di Gambas]]&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere la durata in secondi del Tempo Delta fra due Eventi Midi]]&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere la lunghezza in byte di ciascuna traccia MTrk di un file Midi]]&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere quale file Midi un programma sta eseguendo]]&lt;br /&gt;
&lt;br /&gt;
* [[Conversione del Tempo Delta fra due eventi Midi dai secondi nel valore esadecimale in formato &amp;quot;a lunghezza variabile&amp;quot;]]&lt;br /&gt;
&lt;br /&gt;
* [[Convertire i dati grezzi delle note del messaggio Midi &amp;quot;NoteOn&amp;quot; nei corrispondenti simboli del protocollo ABC di notazione musicale]]&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;
* [[Emulare con il Midi il suono del bip prodotto dall'altoparlante del PC]]&lt;br /&gt;
&lt;br /&gt;
* [[Eseguire un file MIDI mediante il codice html]]&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;B&amp;gt;[[Eseguire un file MIDI mediante il componente gb.openal]]&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;B&amp;gt;[[Eseguire un file MIDI mediante il componente gb.sdl2.audio]]&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* [[Eseguire un file MIDI mediante il Metodo .Open() della Classe Desktop]]&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;B&amp;gt;[[Eseguire un file MIDI mediante l'oggetto MediaView del componente gb.media.form]]&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* [[Estrarre i dati degli eventi Midi da un file Midi]]&lt;br /&gt;
&lt;br /&gt;
* [[Estrarre i dati Midi dal file audio AIFF con le sole funzioni di Gambas]]&lt;br /&gt;
&lt;br /&gt;
* [[Estrarre il testo da un file Midi]]&lt;br /&gt;
&lt;br /&gt;
* [[Estrarre informazioni da un file Midi con le sole funzioni di Gambas]]&lt;br /&gt;
&lt;br /&gt;
* [[Fondere insieme due file MIDI]]&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;
* [[Intercettare dati Midi grezzi con le funzioni esterne del API di RtMidi]]&lt;br /&gt;
&lt;br /&gt;
* [[Intercettare dati Midi grezzi con le funzioni esterne del API di Sndio]]&lt;br /&gt;
&lt;br /&gt;
* [[Intercettare ed inviare dati Midi grezzi con le funzioni esterne del API di PortMidi]]&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;B&amp;gt;[[La gestione dei dati Midi e dei file MIDI mediante il componente gb.media]]&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* [[La gestione dei dati Midi mediante le funzioni esterne del API di Libsmf]]&lt;br /&gt;
&lt;br /&gt;
* [[La gestione dei dati Midi senza l'uso delle funzioni di Alsa]]&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 GStreamer]]&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 Rhythmbox]]&lt;br /&gt;
&lt;br /&gt;
* [[La gestione dei file MIDI mediante le funzioni esterne del API di SDL2 e di SDL3]]&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;
* [[Mostrare i dati del blocco d'intestazione e delle tracce di un file Midi con le sole risorse di Gambas]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere la frequenza corrispondente ad una nota Midi e viceversa]]&lt;br /&gt;
&lt;br /&gt;
* [[Verificare la corrispondenza fra il numero di tracce dichiarato nel file Midi e quelle effettive]]&lt;br /&gt;
&lt;br /&gt;
* [[Verificare l'integrità dei dati del blocco d'intestazione di un file Midi]]&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 RtMidi 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;
====Gambas, Midi e Arduino====&lt;br /&gt;
&lt;br /&gt;
* [[Inviare dati Midi da Arduino a Gambas]]&lt;br /&gt;
&lt;br /&gt;
====Gestione dei file soundfont bank====&lt;br /&gt;
&lt;br /&gt;
* [[Convertire un file soundfont bank sf2 in un file WAV con le sole risorse di Gambas]]&lt;br /&gt;
&lt;br /&gt;
* [[Estrarre da un file sf2 i dati audio di ciascun suono campionato e creare un file wav]]&lt;br /&gt;
&lt;br /&gt;
* [[Estrarre informazioni generali dai tag di un file soundfont bank sf2 con le sole funzioni di Gambas]]&lt;br /&gt;
&lt;br /&gt;
* [[Individuare i nomi e le rispettive posizioni degli strumenti musicali in un file sf2 con le sole risorse di Gambas]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere un file di dati audio grezzi da un file .pat]]&lt;br /&gt;
&lt;br /&gt;
==== Informazioni e risorse sul Midi ====&lt;br /&gt;
&lt;br /&gt;
* [[Il protocollo Midi]]&lt;br /&gt;
&lt;br /&gt;
* [[La struttura di un file Midi]]&lt;br /&gt;
&lt;br /&gt;
* [[Manuali sul Midi]]&lt;br /&gt;
&lt;br /&gt;
* [[Siti web sul Midi]]&lt;br /&gt;
&lt;br /&gt;
* [[Sulla nuova versione Midi 2.0]]&lt;br /&gt;
&lt;br /&gt;
== Gestione dei file ODT ==&lt;br /&gt;
&lt;br /&gt;
* [[Estrarre il file thumbnail contenuto nel file odt]]&lt;br /&gt;
&lt;br /&gt;
* [[Unire più file ODT in un unico file ODT]]&lt;br /&gt;
&lt;br /&gt;
== Gestione dei file PDF ==&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;B&amp;gt;[[Codice essenziale per mostrare un file PDF con le risorse del Componente gb.poppler]]&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* [[Cercare una parola in una pagina di un file PDF con le risorse del Componente gb.poppler]]&lt;br /&gt;
&lt;br /&gt;
* [[Comprimere un file PDF con le funzioni esterne del API di Ghostscript]]&lt;br /&gt;
&lt;br /&gt;
* [[Convertire in immagine una parte di una pagina PDF con le risorse del Componente gb.poppler]]&lt;br /&gt;
&lt;br /&gt;
* [[Convertire un file PNG in PDF con le funzioni del API di Cairo]]&lt;br /&gt;
&lt;br /&gt;
* [[Convertire una pagina di un file PDF in una immagine con le risorse del Componente gb.poppler]]&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;B&amp;gt;[[Creare un file PDF con la proprietà .OutputFile della Classe Printer]]&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* [[Creare un file PDF con le funzioni esterne del API di Cairo]]&lt;br /&gt;
&lt;br /&gt;
* [[Creare un file PDF con le funzioni esterne del API di Haru]]&lt;br /&gt;
&lt;br /&gt;
* [[Creare un file PDF con le funzioni esterne della libreria PDFGen]]&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;B&amp;gt;[[Creare un file PDF con le risorse del Componente gb.cairo]]&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* [[Creare un file PDF con le risorse di Gambas senza usare Componenti dedicati]]&lt;br /&gt;
&lt;br /&gt;
* [[Creare un file PDF da un file immagine con le risorse del Componente gb.cairo]]&lt;br /&gt;
&lt;br /&gt;
* [[Eliminare i dati immagine da un file PDF]]&lt;br /&gt;
&lt;br /&gt;
* [[Estrarre i dati audio, MIDI e video da un file PDF]]&lt;br /&gt;
&lt;br /&gt;
* [[Estrarre testo e immagini da un file PDF]]&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;B&amp;gt;[[Stampare un file PDF]]&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* [[Struttura di un file PDF]]&lt;br /&gt;
&lt;br /&gt;
== Gestione dei file PS ==&lt;br /&gt;
&lt;br /&gt;
* [[Creare un file PS con le risorse del API di Cairo]]&lt;br /&gt;
&lt;br /&gt;
* [[Creare un file PS con le risorse del Componente gb.cairo]]&lt;br /&gt;
&lt;br /&gt;
== Gestione dei file RTF ==&lt;br /&gt;
&lt;br /&gt;
* [[Documentazione per la gestione dei file di testo RTF]]&lt;br /&gt;
&lt;br /&gt;
== Gestione del CD e del DVD ==&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere il numero di titoli e di capitoli presenti in un DVD video con le funzioni del API di libdvdread]]&lt;br /&gt;
&lt;br /&gt;
* [[Convertire un numero di settori di un CD/DVD in ore,minuti,secondi con le funzioni del API Libdiscid]]&lt;br /&gt;
&lt;br /&gt;
* [[Eseguire una traccia di un CD-Audio con le risorse del API di libvlc]] &lt;br /&gt;
&lt;br /&gt;
* [[Eseguire una traccia di un CD-Audio con le risorse di linux/cdrom.h e le funzioni esterne di ALSA]]&lt;br /&gt;
&lt;br /&gt;
* [[Estrarre i dati presenti in un CD-Audio con le risorse di linux/cdrom.h]]&lt;br /&gt;
&lt;br /&gt;
* [[Individuare in GNOME il percorso contenente i file delle tracce di un CD-audio]]&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;B&amp;gt;[[La gestione del CD e del DVD mediante il Componente gb.media]]&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* [[La gestione del CD e del DVD mediante la funzione esterna 'gst_parse_launch()' di GStreamer]]&lt;br /&gt;
&lt;br /&gt;
* [[La gestione del CD e del DVD mediante le funzioni del API di libcdio]]&lt;br /&gt;
&lt;br /&gt;
* [[La gestione del CD e del DVD mediante le funzioni del API di SDL]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere alcune informazioni di un CD con le funzioni del API di libcdaudio]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere alcune informazioni di un CD con la funzione ioctl()]]&lt;br /&gt;
&lt;br /&gt;
== Gestione della Pen-Drive ==&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere i dispositivi pen-drive usb montati sul sistema]]&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere il contenuto di una pen-drive mediante le sole risorse di Gambas]]&lt;br /&gt;
&lt;br /&gt;
== Gestione delle immagini e dei colori ==&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;B&amp;gt;[[Aggiungere il canale Alfa a un Oggetto Image privo]]&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* [[Assegnare a un Oggetto ''Image'' i valori pixel contenuti in un'area di memoria puntata da un Puntatore]]&lt;br /&gt;
&lt;br /&gt;
* [[Assegnare a un Oggetto ''Image'' i valori pixel contenuti in un vettore]]&lt;br /&gt;
&lt;br /&gt;
* [[Cancellare una immagine in una PictureBox o in una ImageView]]&lt;br /&gt;
&lt;br /&gt;
* [[Caricare in un Controllo grafico i file immagine come Picture]]&lt;br /&gt;
&lt;br /&gt;
* [[Caricare in un Oggetto grafico le icone messe a disposizione da Gambas]]&lt;br /&gt;
&lt;br /&gt;
* [[Caricare un file di formato TIFF e da questo creare un file immagine di altro formato con l'API di GDK_PixBuf]]&lt;br /&gt;
&lt;br /&gt;
* [[Catturare un'immagine con una webcam mediante le funzioni esterne del API di libsane]]&lt;br /&gt;
&lt;br /&gt;
* [[Catturare un'immagine con una webcam mediante le funzioni esterne del API di libv4l2]]&lt;br /&gt;
&lt;br /&gt;
* [[Cliccare in un Oggetto grafico o in una immagine suddivisi in rettangoli]]&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;B&amp;gt;[[Come Gambas gestisce le immagini]]&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* [[Configurazione, organizzazione ed impostazione dell'oggetto Image secondo i sorgenti di Gambas]]&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere i formati immagine disponibili con GTK mediante le funzioni del API di GDK-PixBuf]]&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere in modo sicuro il formato di un file immagine mediante le funzioni esterne del API di SDL2]]&lt;br /&gt;
&lt;br /&gt;
* [[Convertire il formato RGBA di un colore nei corrispondenti valori decimale ed esadecimale]]&lt;br /&gt;
&lt;br /&gt;
* [[Convertire il valore di un colore da RGB in HSV]]&lt;br /&gt;
&lt;br /&gt;
* [[Convertire il valore di un colore in RGBA]]&lt;br /&gt;
&lt;br /&gt;
* [[Convertire immagini RAW di fotocamere digitali mediante le funzioni esterne del API di Libraw]]&lt;br /&gt;
&lt;br /&gt;
* [[Convertire un file immagine di un qualsiasi formato in un file immagine TIFF mediante le funzioni esterne del API di Libgdk_pixbuf]]&lt;br /&gt;
&lt;br /&gt;
* [[Convertire un file immagine PCX in un file immagine PNG mediante le funzioni esterne del API di SDL2]]&lt;br /&gt;
&lt;br /&gt;
* [[Convertire un'immagine a colori in un'immagine a scala di grigi mediante le funzioni esterne del API di Libgdk_pixbuf]]&lt;br /&gt;
&lt;br /&gt;
* [[Convertire un'immagine da un formato ad un altro mediante le funzioni esterne del API di FreeImage]]&lt;br /&gt;
&lt;br /&gt;
* [[Convertire un'immagine da un formato ad un altro mediante le funzioni esterne del API di Imlib2]]&lt;br /&gt;
&lt;br /&gt;
* [[Convertire un'immagine in un file immagine di formato ICO mediante le funzioni esterne del API di Libgdk_pixbuf]]&lt;br /&gt;
&lt;br /&gt;
* [[Convertire un oggetto di tipo &amp;quot;Image&amp;quot; in un file di formato TIFF o ICO con le funzioni esterne del API di Libgdk_pixbuf]]&lt;br /&gt;
&lt;br /&gt;
* [[Creare da codice un'immagine trasparente]]&lt;br /&gt;
&lt;br /&gt;
* [[Creare un file immagine da dati immagine grezzi mediante le funzioni del API di Imlib2]]&lt;br /&gt;
&lt;br /&gt;
* [[Creare un'immagine senza avere dati immagine]]&lt;br /&gt;
&lt;br /&gt;
* [[Curvare la linea di testo in un oggetto Image]]&lt;br /&gt;
&lt;br /&gt;
* [[Decomprimere un file immagine jpeg per ottenerne i dati grezzi mediante le funzioni esterne del API di libjpeg]]&lt;br /&gt;
&lt;br /&gt;
* [[Desaturare un colore]]&lt;br /&gt;
&lt;br /&gt;
* [[Elenco dei nomi dei colori e i corrispondenti valori delle Costanti della Classe Color utilizzati da Gambas]]&lt;br /&gt;
&lt;br /&gt;
* [[Elenco dei nomi dei colori e i corrispondenti valori RGB sotto X Window]]&lt;br /&gt;
&lt;br /&gt;
* [[Fondere due immagini in una sola]]&lt;br /&gt;
&lt;br /&gt;
* [[Gestione delle immagini con le risorse di Gambas ma senza attivazione dei Componenti che fanno riferimento alle librerie grafiche QT e GTK]]&lt;br /&gt;
&lt;br /&gt;
* [[Gestire un oggetto Image agendo direttamente sulle risorse dei sorgenti Gambas]]&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 i colori dei pixel di una immagine]]&lt;br /&gt;
&lt;br /&gt;
* [[Individuare i valori RGBA dei pixel di 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;
* [[Inserire in un'immagine uno sfondo colorato mediante le funzioni esterne del API di Libgdk_pixbuf]]&lt;br /&gt;
&lt;br /&gt;
* [[Inserire un'immagine all'interno di un'altra immagine mediante le funzioni esterne del API di Libgdk_pixbuf]]&lt;br /&gt;
&lt;br /&gt;
* [[Leggere le informazioni di una Image dalle sue risorse dei sorgenti di Gambas]]&lt;br /&gt;
&lt;br /&gt;
* [[Modi di caricare un'immagine di tipo ''Picture'']]&lt;br /&gt;
&lt;br /&gt;
* [[Modificare i colori dei pixel di un'immagine con la proprietà .Data della Classe Image ed i Memory Stream]]&lt;br /&gt;
&lt;br /&gt;
* [[Modificare il colore di un pixel di un'immagine se esso è minore o maggiore di un dato valore]]&lt;br /&gt;
&lt;br /&gt;
* [[Modificare l'opacità di un'immagine]]&lt;br /&gt;
&lt;br /&gt;
* [[Modificare le dimensioni di una Image usando il suo Metodo .Stretch]]&lt;br /&gt;
&lt;br /&gt;
* [[Mostrare un'immagine con funzioni del API di GStreamer]]&lt;br /&gt;
&lt;br /&gt;
* [[Mostrare un'immagine con il Controllo WebView]]&lt;br /&gt;
&lt;br /&gt;
* [[Mostrare un'immagine nella finestra di un Editor di testo con funzioni del API di X11 e Imlib2]]&lt;br /&gt;
&lt;br /&gt;
* [[Mostrare una parte di un'immagine]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere alcune informazioni su file immagine JPEG con le funzioni del API di libjpeg]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere alcune informazioni su un file immagine PNG con le funzioni del API di libpng]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere alcune informazioni sul file immagine con le funzioni del API di libgdk_pixbuf-2.0]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere dati grezzi di un file immagine mediante le funzioni del API di GDK-PixBuf]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere il valore per ciascuno dei canali rosso, verde e blu di un pixel]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere l'effettivo valore del colore del pixel individuato con la Proprietà vettoriale Image.Pixels]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere Metadati Exif da un'immagine JPEG con le risorse del API di libexif]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere un file immagine PNG da un'immagine di formato SVG]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere un file PDF da una Image]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere una schermata (&amp;quot;screenshot&amp;quot;) con Gambas]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere una schermata (screenshot) del desktop con le risorse del API di X11 e di Cairo]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere una schermata (screenshot) del desktop con le risorse del API di X11 e di Imlib2]]&lt;br /&gt;
&lt;br /&gt;
* [[Rendere trasparente una immagine in base ad un colore specifico]]&lt;br /&gt;
&lt;br /&gt;
* [[Ridimensionare e mostrare un'immagine in base al punto ove si è cliccato con il puntatore del mouse]]&lt;br /&gt;
&lt;br /&gt;
* [[Ruotare e ribaltare sul proprio asse una immagine con le funzioni del API di FreeImage]]&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;
* [[Salvare e richiamare i dati di un file immagine con Settings]]&lt;br /&gt;
&lt;br /&gt;
* [[Salvare un file immagine con le funzioni del API di GDK-PixBuf]]&lt;br /&gt;
&lt;br /&gt;
* [[Salvare una Image come file immagine]]&lt;br /&gt;
&lt;br /&gt;
* [[Sapere quanti pixel occupa un testo in un'immagine mediante le funzioni del API di Imlib2]]&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;B&amp;gt;[[Scaricare una immagine da un sito internet]]&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* [[Scaricare una immagine dal sito &amp;quot;Cover Art Archive&amp;quot; mediante le funzioni esterne della libreria libcoverart]]&lt;br /&gt;
&lt;br /&gt;
* [[Spostare con il mouse un'immagine all'interno di una PictureBox]]&lt;br /&gt;
&lt;br /&gt;
* [[Scrivere un testo in un'immagine mediante le funzioni del API di Imlib2]]&lt;br /&gt;
&lt;br /&gt;
=== Gestione delle immagini con CAIRO ===&lt;br /&gt;
&lt;br /&gt;
* [[Caricare un Oggetto ''Image'' direttamente in una ''ImageView'' con gb.cairo]]&lt;br /&gt;
* [[Convertire un file immagine in un file PNG con le risorse del Componente gb.cairo]]&lt;br /&gt;
* [[Convertire un file PNG in PDF con le funzioni del API di Cairo]]&lt;br /&gt;
* [[Convertire un file PNG in SVG con le risorse del Componente gb.cairo]]&lt;br /&gt;
* [[Creare file PNG con le risorse del Componente gb.cairo]]&lt;br /&gt;
* [[Creare file PNG con le funzioni esterne del API di Cairo e di Pango]]&lt;br /&gt;
* [[Creare file PNG con le funzioni esterne del API di Cairo]]&lt;br /&gt;
* [[Creare un file immagine PNG trasparente con le funzioni esterne del API di Cairo]]&lt;br /&gt;
* [[Ridurre le dimensioni di una immagine con il Metodo &amp;quot;.Scale()&amp;quot; del Componente gb.cairo]]&lt;br /&gt;
* [[Spostare il testo con il mouse all'interno dell'area grafica con la Classe Cairo]]&lt;br /&gt;
&lt;br /&gt;
=== Gestione delle immagini con il Componente gb.media ===&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere le dimensioni di una immagine mediante il Componente gb.media]]&lt;br /&gt;
* [[Convertire i formati immagine mediante il Componente gb.media]]&lt;br /&gt;
* [[Effetto caleidoscopico di un'immagine PNG con il Componente gb.media]]&lt;br /&gt;
* [[Estrarre e salvare singole immagini da una ripresa video mediante WebCam effettuata con il Componente gb.media]]&lt;br /&gt;
* [[Estrarre e salvare singole immagini durante l'esecuzione di un file video mediante il Componente gb.media]]&lt;br /&gt;
* [[Leggere codici a barre con una webcam mediante il Componente gb.media]]&lt;br /&gt;
* [[Mostrare un'immagine mediante il Componente gb.media]]&lt;br /&gt;
* [[Trasformare un'immagine in ascii art mediante il Componente gb.media]]&lt;br /&gt;
&lt;br /&gt;
=== Gestione delle immagini con ImageMagick ===&lt;br /&gt;
&lt;br /&gt;
* [[Convertire un file immagine in un altro formato immagine con le funzioni esterne del API di ImageMagick]]&lt;br /&gt;
* [[Modificare la risoluzione in PPI di un'immagine mediante le funzioni esterne del API di ImageMagick]]&lt;br /&gt;
* [[Ridimensionare un'immagine mediante le funzioni esterne del API di ImageMagick]]&lt;br /&gt;
* [[Ruotare un'immagine mediante le funzioni esterne del API di ImageMagick]]&lt;br /&gt;
* [[Sfumare radialmente un'immagine mediante le funzioni esterne del API di ImageMagick]]&lt;br /&gt;
* [[Spostare il contenuto all'interno di un'immagine mediante le funzioni esterne del API di ImageMagick]]&lt;br /&gt;
&lt;br /&gt;
=== Gestione delle immagini e dei file di tipo GIF ===&lt;br /&gt;
&lt;br /&gt;
* [[Convertire un file GIF in un file di formato OGV, Matroska e MP4 mediante il Componente gb.media]]&lt;br /&gt;
* [[Convertire un file immagine in un file immagine di tipo GIF con le funzioni esterne del API di LibFreeImage]]&lt;br /&gt;
* [[Creare file GIF con le funzioni esterne del API di Libplot]]&lt;br /&gt;
* [[Creare una GIF animata con le funzioni esterne del API di Libplot]]&lt;br /&gt;
* [[Creare un file immagine GIF con sfondo colorato mediante le funzioni del API di GIFLIB]]&lt;br /&gt;
* [[Creare un file immagine trasparente di tipo GIF con le funzioni del API di GIFLIB]]&lt;br /&gt;
* [[Disegnare e salvare un'immagine di tipo GIF con le funzioni del API di GifLib]]&lt;br /&gt;
* [[Estrarre i fotogrammi che compongono un file immagine di tipo GIF animata]]&lt;br /&gt;
* [[Estrarre informazioni da una GIF animata relative al tempo di esecuzione dei fotogrammi]]&lt;br /&gt;
* [[Modificare il colore di sfondo di un'immagine GIF con le funzioni del API di GifLib]]&lt;br /&gt;
* [[Ottenere alcune informazioni su file immagine GIF con le funzioni del API di GifLib]]&lt;br /&gt;
* [[Utilizzare una GIF animata]]&lt;br /&gt;
&lt;br /&gt;
=== Gestione delle immagini e dei file di tipo SVG ===&lt;br /&gt;
&lt;br /&gt;
* [[Convertire un file immagine SVG in un file immagine di altro formato con le funzioni esterne delle librerie librsvg e libgdk_pixbuf]]&lt;br /&gt;
* [[Convertire un file PNG in SVG con le risorse del Componente gb.cairo]]&lt;br /&gt;
* [[Creare file SVG con le risorse del Componente gb.cairo]]&lt;br /&gt;
* [[Creare file SVG con le funzioni esterne del API di Cairo]]&lt;br /&gt;
* [[Gestire un file immagine di formato SVG con la Classe SvgImage]]&lt;br /&gt;
* [[Mostrare in un Form un'immagine SVG]]&lt;br /&gt;
* [[Ottenere un file immagine PNG da un'immagine di formato SVG]]&lt;br /&gt;
&lt;br /&gt;
=== Struttura di file immagine particolari ===&lt;br /&gt;
&lt;br /&gt;
* [[Struttura del formato BMP]]&lt;br /&gt;
* [[Struttura del formato GIF]]&lt;br /&gt;
* [[Struttura del formato PNG]]&lt;br /&gt;
* [[Struttura del formato TIFF]]&lt;br /&gt;
* [[Struttura del formato XBM]]&lt;br /&gt;
* [[Struttura del formato XPM]]&lt;br /&gt;
* [[Struttura e gestione del file di tipo PNM]]&lt;br /&gt;
&lt;br /&gt;
== Grafici ==&lt;br /&gt;
&lt;br /&gt;
* [[Creare un grafico con il componente gb.chart]]&lt;br /&gt;
&lt;br /&gt;
* [[Creare un grafico per la console/Terminale]]&lt;br /&gt;
&lt;br /&gt;
== GridView ==&lt;br /&gt;
&lt;br /&gt;
* [[Adattare automaticamente la dimensione del font del testo presente nelle celle di una GridView al loro ridimensionarsi]]&lt;br /&gt;
&lt;br /&gt;
* [[Adattare automaticamente l'altezza e la larghezza di una cella di una GridView al testo contenuto]]&lt;br /&gt;
&lt;br /&gt;
* [[Adattare automaticamente l'altezza e la larghezza di una cella di una GridView all'immagine contenuta]]&lt;br /&gt;
&lt;br /&gt;
* [[Adattare l'altezza e la larghezza della GridView al numero delle righe e delle in essa contenute]]&lt;br /&gt;
&lt;br /&gt;
* [[Aggiungere colonne in una GridView da codice]]&lt;br /&gt;
&lt;br /&gt;
* [[Aggiungere righe in una GridView da codice]]&lt;br /&gt;
&lt;br /&gt;
* [[Cambiare il colore di fondo di una riga cliccata in una GridView e far tornare quello di un'altra al colore iniziale]]&lt;br /&gt;
&lt;br /&gt;
* [[Catturare l'immagine di una GridView con il Componente gb.media]]&lt;br /&gt;
&lt;br /&gt;
* [[Centrare il testo nell'header di una GridView]]&lt;br /&gt;
&lt;br /&gt;
* [[Colorare il bordo delle righe di una GridView]]&lt;br /&gt;
&lt;br /&gt;
* [[Colorare il fondo di una cella di una GridView]]&lt;br /&gt;
&lt;br /&gt;
* [[Colorare il fondo di una riga di una GridView]]&lt;br /&gt;
&lt;br /&gt;
* [[Colorare la griglia della GridView]]&lt;br /&gt;
&lt;br /&gt;
* [[Effettuare una ricerca nelle celle di una GridView]]&lt;br /&gt;
&lt;br /&gt;
* [[Eliminare una riga da una GridView]]&lt;br /&gt;
&lt;br /&gt;
* [[Far combaciare le immagini poste in due celle adiacenti di una GridView]]&lt;br /&gt;
&lt;br /&gt;
* [[Gestire testo, colori e immagini nelle celle della GridView con l'Evento _Data()]]&lt;br /&gt;
&lt;br /&gt;
* [[Header di una GridView contenente due o più righe testuali]]&lt;br /&gt;
&lt;br /&gt;
* [[Impostare due parole ciascuna all'estremità opposta di una cella di una GridView]]&lt;br /&gt;
&lt;br /&gt;
* [[Impostare le righe, le colonne e l'header di una GridView]]&lt;br /&gt;
&lt;br /&gt;
* [[Impostare font, colore dei caratteri e colore di sfondo diversi per ogni cella di una GridView]]&lt;br /&gt;
&lt;br /&gt;
* [[Impostare lo spessore e altre proprietà del bordo delle righe e delle singole celle di una GridView]]&lt;br /&gt;
&lt;br /&gt;
* [[Individuare la cella della GridView nella quale si è cliccato]]&lt;br /&gt;
&lt;br /&gt;
* [[Individuare con quale tasto del mouse si è cliccato in una cella della GridView]]&lt;br /&gt;
&lt;br /&gt;
* [[Inserire un disegno o un'immagine al di sotto della griglia di una GridView]]&lt;br /&gt;
&lt;br /&gt;
* [[Inserire un oggetto in una cella di una GridView]]&lt;br /&gt;
&lt;br /&gt;
* [[Inserire un ulteriore testo in una GridView sempre nell'ultima riga]] &lt;br /&gt;
&lt;br /&gt;
* [[Inserire un'immagine adattandola alle dimensioni della cella di una GridView]]&lt;br /&gt;
&lt;br /&gt;
* [[Mostrare il testo contenuto in una cella di una GridVew al semplice passare del puntatore del mouse]]&lt;br /&gt;
&lt;br /&gt;
* [[Mostrare un Balloon in una GridView in corrispondenza della cella nella quale si è cliccato]]&lt;br /&gt;
&lt;br /&gt;
* [[Nascondere le linee della griglia di una GridView]]&lt;br /&gt;
&lt;br /&gt;
* [[Nascondere tutte le celle di una riga di una GridView]]&lt;br /&gt;
&lt;br /&gt;
* [[Nascondere una Colonna di una GridView]] &lt;br /&gt;
&lt;br /&gt;
* [[Ordinare i valori all'interno di una colonna di una GridView]]&lt;br /&gt;
&lt;br /&gt;
* [[Ordinare in una GridView i valori di più righe in base ad una colonna]]&lt;br /&gt;
&lt;br /&gt;
* [[Ordinare manualmente i valori all'interno di una colonna di una GridView]]&lt;br /&gt;
&lt;br /&gt;
* [[Scambiare il contenuto delle celle di una GridView mediante trascinamento con il mouse ]]&lt;br /&gt;
&lt;br /&gt;
* [[Scrivere con la tastiera nelle celle di una GridView]]&lt;br /&gt;
&lt;br /&gt;
* [[Spostare il testo da una cella a un'altra di una GridView con il Drag&amp;amp;Drop]]&lt;br /&gt;
&lt;br /&gt;
* [[Spostare il testo da una cella a un'altra di una GridView senza Drag&amp;amp;Drop]]&lt;br /&gt;
&lt;br /&gt;
* [[Spostare il testo da una cella di una GridView nella cella di un'altra GridView con il Drag&amp;amp;Drop]]&lt;br /&gt;
&lt;br /&gt;
* [[Spostare il testo da una cella di una GridView nella cella di un'altra GridView senza Drag&amp;amp;Drop]]&lt;br /&gt;
&lt;br /&gt;
* [[Spostare su e giù le righe di una GridView con i tasti &amp;quot;up&amp;quot; e &amp;quot;down&amp;quot;]]&lt;br /&gt;
&lt;br /&gt;
* [[Spostare un Oggetto da una cella a un'altra di una GridView senza Drag&amp;amp;Drop]]&lt;br /&gt;
&lt;br /&gt;
* [[Spostare un'immagine da una cella a un'altra di una GridView con il Drag&amp;amp;Drop]]&lt;br /&gt;
&lt;br /&gt;
* [[Spostare un'immagine da una cella a un'altra di una GridView senza Drag&amp;amp;Drop]]&lt;br /&gt;
&lt;br /&gt;
* [[Spostare un'immagine da una PictureBox a una cella di una GridView con il Drag&amp;amp;Drop]]&lt;br /&gt;
&lt;br /&gt;
* [[Stampare una GridView e il suo contenuto]]&lt;br /&gt;
&lt;br /&gt;
* [[Unire in una GridView le celle in un'unica grande cella]]&lt;br /&gt;
&lt;br /&gt;
== Hard Disk ==&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere numero seriale, modello ed altre informazioni su hard-disk SATA con la funzione esterna ioctl()]]&lt;br /&gt;
&lt;br /&gt;
== Header file dell'ANSI C e Gambas ==&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere la quantità di memoria occupata dai tipi di dati di C e la loro locazione nei file header]]&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;
* [[Ottenere la descrizione del tipo di errore dai file header &amp;quot;errno-base.h&amp;quot; e &amp;quot;errno.h&amp;quot;]]&lt;br /&gt;
&lt;br /&gt;
== ImageStat ==&lt;br /&gt;
&lt;br /&gt;
* [[Uso della classe ImageStat]]&lt;br /&gt;
&lt;br /&gt;
== InputBox ==&lt;br /&gt;
&lt;br /&gt;
* [[Imporre in casi particolari la riapertura dell'InputBox]]&lt;br /&gt;
&lt;br /&gt;
* [[Impostare le coordinate ove far aprire la finestra dell'InputBox]]&lt;br /&gt;
&lt;br /&gt;
* [[Impostare le dimensioni di un InputBox]]&lt;br /&gt;
&lt;br /&gt;
* [[Individuare l'ID della finestra dell'InputBox]]&lt;br /&gt;
&lt;br /&gt;
== Installazione di Gambas3 dai pacchetti binari ==&lt;br /&gt;
&lt;br /&gt;
* [[Installazione di Gambas3 dai pacchetti binari]]&lt;br /&gt;
&lt;br /&gt;
== Interagire con la tastiera ==&lt;br /&gt;
&lt;br /&gt;
* [[Immissione di dati dalla tastiera durante l'esecuzione di un programma]]&lt;br /&gt;
&lt;br /&gt;
* [[Impedire che cliccando su un tasto della tastiera si produca più volte il medesimo effetto]]&lt;br /&gt;
&lt;br /&gt;
* [[Impedire che, mentre si tiene premuto un tasto della tastiera, si produca un effetto cliccando e rilasciando un altro tasto]]&lt;br /&gt;
&lt;br /&gt;
* [[Individuare i tasti premuti della tastiera]]&lt;br /&gt;
&lt;br /&gt;
* [[Individuare mediante le funzioni del API di SDL2 o di SDL3 tutti gli scancode disponibili]]&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;B&amp;gt;[[_KeyPress() - _KeyRelease() - Key]]&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* [[Sapere via codice se il tasto 'Blocco Maiuscole' è attivo]]&lt;br /&gt;
&lt;br /&gt;
* [[Usare gli Eventi _KeyPress() e _KeyRelease() in un programma con interfaccia a linea di comando]]&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 condivise esterne .so ==&lt;br /&gt;
&lt;br /&gt;
===Richiamare funzioni esterne mediante ''EXTERN''===&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;B&amp;gt;[[Extern: richiamare funzioni esterne a Gambas]]&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Gestione in Gambas delle Strutture esterne===&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;B&amp;gt;[[Gestione delle Strutture esterne]]&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;B&amp;gt;[[Gestire con sicurezza le Strutture esterne]]&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* [[Gestire con un Puntatore le Strutture esterne]]&lt;br /&gt;
&lt;br /&gt;
* [[Assegnare un valore ad una Struttura di una libreria esterna scrivendo con i Memory Stream nella sua area di memoria]]&lt;br /&gt;
&lt;br /&gt;
* [[Dereferenziare senza Memory-Stream un Puntatore ad una Struttura, passato da una funzione esterna]]&lt;br /&gt;
&lt;br /&gt;
* [[Utilizzare come Struttura in Gambas una Struttura esterna dichiarata, come proprio membro di tipo Puntatore, da una Struttura principale esterna]]&lt;br /&gt;
&lt;br /&gt;
===Richiamare particolari funzioni esterne delle librerie standard in C===&lt;br /&gt;
&lt;br /&gt;
* [[Richiamo ed uso di particolari funzioni esterne delle librerie standard scritte in C]]&lt;br /&gt;
&lt;br /&gt;
===Ulteriori contributi sulla gestione delle librerie condivise .so e delle funzioni esterne===&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;
* [[Caricare i dati di un vettore scritto in C in un vettore di un'applicazione Gambas]]&lt;br /&gt;
&lt;br /&gt;
* [[Come creare una Libreria condivisa (Shared Library) .so]]&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;B&amp;gt;[[Come creare una Libreria condivisa .so impostando il suo codice sorgente nell'applicazione Gambas]]&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* [[Creare una libreria condivisa .so esterna dai file sorgente presenti in una pagina web e senza installarla o caricarla nel sistema]]  &lt;br /&gt;
&lt;br /&gt;
* [[Emulare in Gambas la funzione fwrite() di C]]&lt;br /&gt;
&lt;br /&gt;
* [[Emulare in Gambas la funzione memcpy() di C]]&lt;br /&gt;
&lt;br /&gt;
* [[Emulare in Gambas le macro _IOC, _IOR, _IOW e _IOWR usate con la funzione ioctl()]]&lt;br /&gt;
&lt;br /&gt;
* [[Gestire una libreria esterna che ritorna una Linked List]]&lt;br /&gt;
&lt;br /&gt;
* [[Inserire nella libreria condivisa esterna .so anche codice Assembly]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere l'indirizzo e il valore di una Costante e di una variabile globale situate in una libreria condivisa]]&lt;br /&gt;
&lt;br /&gt;
* [[Passare a una funzione esterna il Puntatore di una Struttura, scritta in Gambas, ottenuto con la funzione VarPtr()]]&lt;br /&gt;
&lt;br /&gt;
* [[Passare a una funzione esterna un Puntatore che successivamente deve essere passato anche ad altre funzioni esterne]]&lt;br /&gt;
&lt;br /&gt;
* [[Passare un'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;
* [[Richiamare funzioni esterne di librerie scritte in C++]]&lt;br /&gt;
&lt;br /&gt;
* [[Scrivendo particolari librerie esterne in C]]&lt;br /&gt;
&lt;br /&gt;
* [[Un contributo sulle funzioni esterne in Gambas a cura di Doriano B.]]&lt;br /&gt;
&lt;br /&gt;
* [[Verificare quali dati Gambas passa ad una funzione esterna]]&lt;br /&gt;
&lt;br /&gt;
===Altre modalità di chiamata delle funzioni esterne===&lt;br /&gt;
&lt;br /&gt;
* [[Caricamento dinamico di librerie .so con il subsistema 'loadso' di SDL2]]&lt;br /&gt;
* [[Chiamare funzioni esterne mediante le risorse della libreria dlfcn.h]]&lt;br /&gt;
* [[Utilizzare il metodo 'System.GetExternSymbol()' per richiamare funzioni esterne di librerie condivise]]&lt;br /&gt;
&lt;br /&gt;
== Librerie .gambas ==&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;B&amp;gt;[[Creare, importare ed utilizzare librerie .gambas]]&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Librerie della Comunità Gambas-it.org ====&lt;br /&gt;
&lt;br /&gt;
* [[RTFLib.gambas]]&lt;br /&gt;
&lt;br /&gt;
* [[strLib.gambas]]&lt;br /&gt;
&lt;br /&gt;
== ListBox ==&lt;br /&gt;
&lt;br /&gt;
* [[Assegnare ad un oggetto di testo il contenuto di un elemento di una ListBox cliccandovi sopra]]&lt;br /&gt;
&lt;br /&gt;
* [[Assegnare colori allo sfondo ed al testo di una riga selezionata di una ListBox]]&lt;br /&gt;
&lt;br /&gt;
* [[Eliminare uno o più item di una ListBox selezionati con il mouse]]&lt;br /&gt;
&lt;br /&gt;
* [[Far coincidere da codice l'altezza di una ListBox con la somma delle altezze dei suoi Item]]&lt;br /&gt;
&lt;br /&gt;
* [[Far mostrare in una ListBox le ultime voci ogni volta che il loro numero aumenta]]&lt;br /&gt;
&lt;br /&gt;
* [[Individuare il numero d'indice della riga di una ListBox sulla quale si è cliccato con il mouse]]&lt;br /&gt;
&lt;br /&gt;
* [[Inserire un array di dati di tipo stringa in una ListBox]]&lt;br /&gt;
&lt;br /&gt;
* [[Inserire un oggetto in un item di una ListBox]]&lt;br /&gt;
&lt;br /&gt;
* [[Interscambiare la posizione del contenuto degli item di una ListBox mediante trascinamento con il mouse ]]&lt;br /&gt;
&lt;br /&gt;
* [[ListBox con due o più righe per item]]&lt;br /&gt;
&lt;br /&gt;
* [[Riordinare manualmente con il mouse gli elementi di una ListBox]]&lt;br /&gt;
&lt;br /&gt;
* [[Se l'Evento MouseDown() della ListBox non funziona]]&lt;br /&gt;
&lt;br /&gt;
==Liste Lineari==&lt;br /&gt;
&lt;br /&gt;
* [[Emulare in Gambas una Lista Lineare del linguaggio C]]&lt;br /&gt;
&lt;br /&gt;
== ListView ==&lt;br /&gt;
&lt;br /&gt;
* [[Aggiungere una nuova voce nella prima posizione di una Listview]]&lt;br /&gt;
&lt;br /&gt;
* [[Assegnare colori allo sfondo ed al testo di una riga selezionata di una ListView]]&lt;br /&gt;
&lt;br /&gt;
* [[Evitare che appaia il popmenu quando si clicca al di fuori di un elemento di una ListView]]&lt;br /&gt;
&lt;br /&gt;
== Logging ==&lt;br /&gt;
&lt;br /&gt;
* [[Attivare e registrare informazioni un singolo file di log]]&lt;br /&gt;
&lt;br /&gt;
== Map - MapView - Coordinate geografiche - Georeferenziazione ==&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;B&amp;gt;[[Istruzioni essenziali per mostrare una mappa in una MapView]]&amp;lt;/b&amp;gt;&lt;br /&gt;
* [[Arduino: misurare il campo magnetico terrestre con i magnetometri]]&lt;br /&gt;
* [[Calcolare il rilevamento (bearing) in gradi]]&lt;br /&gt;
* [[Calcolare la distanza tra due punti geografici, dei quali si conoscono latitudine e longitudine]]&lt;br /&gt;
* [[Calcolare l'area e il perimetro di poligoni disegnati sulla mappa con le risorse di gb.map]]&lt;br /&gt;
* [[Conoscere la versione più recente di Google Maps satellite]]&lt;br /&gt;
* [[Conoscere le risorse formali contenute da un oggetto della Classe _ShapeItem]]&lt;br /&gt;
* [[Convertire una coordinata dal formato gradi primi secondi del sistema EPSG:4326 WGS 84 al suo formato decimale e viceversa]]&lt;br /&gt;
* [[Convertire una coordinata geografica dal sistema EPSG:4326 WGS 84 al sistema EPSG:3857 e viceversa]]&lt;br /&gt;
* [[Convertire una coordinata geografica dal sistema EPSG:4326 WGS 84 al sistema Gradi e Minuti decimali e viceversa]]&lt;br /&gt;
* [[Convertire una coordinata geografica dal sistema UTM al sistema EPSG:4326 WGS 84 e viceversa]]&lt;br /&gt;
* [[Creare da una carta topografica i file delle tessere di una mappa e utilizzarli con MapView]]&lt;br /&gt;
* [[Disegnare sulla MapView dei cerchi concentrici al punto ove si è cliccato con il puntatore del mouse]]&lt;br /&gt;
* [[Disegnare un cerchio o un punto su una MapView]]&lt;br /&gt;
* [[Disegnare un poligono su una MapView usando l'Oggetto &amp;quot;Figlio&amp;quot; DrawingArea]]&lt;br /&gt;
* [[Disegnare un mirino come cursore del mouse su una MapView]]&lt;br /&gt;
* [[Disegnare un percorso su una MapView e calcolarne la lunghezza]]&lt;br /&gt;
* [[Elenco di raster Tile Server online con rispettive URL]]&lt;br /&gt;
* [[Eliminare un marcatore grafico da una mappa su una MapView]]&lt;br /&gt;
* [[Eseguire un file audio o Midi quando si clicca sulla MapView]]&lt;br /&gt;
* [[Estrarre le coordinate geografiche dai TAG GPS eventualmente presenti in un file immagine JPEG]]&lt;br /&gt;
* [[Estrarre le coordinate geografiche presenti in un file gpx]]&lt;br /&gt;
* [[Georeferenziare specifici punti geografici su carte topografiche 1:25000]]&lt;br /&gt;
* [[Georeferenziare una mappa con QGIS]]&lt;br /&gt;
* [[Individuare i valori x e y della tessera sulla quale si è cliccato]]&lt;br /&gt;
* [[Individuare il punto di intersezione degli angoli di direzione di due elementi geografici rispetto all'osservatore]]&lt;br /&gt;
* [[Individuare su una MapView un punto geografico avendo un punto iniziale, l'angolo di declinazione e la distanza]]&lt;br /&gt;
* [[Inserire del testo su una MapView]]&lt;br /&gt;
* &amp;lt;B&amp;gt;[[Inserire un marcatore di coordinate su una MapView]]&amp;lt;/b&amp;gt;&lt;br /&gt;
* [[Inserire un Oggetto grafico su una MapView]]&lt;br /&gt;
* [[Inserire un'immagine come marcatore di coordinate su una MapView]]&lt;br /&gt;
* [[Mostrare la mappa topografica IGM 1 25000 fornita dal Geoportale Nazionale del Ministero dell'Ambiente]]&lt;br /&gt;
* [[Mostrare nella finestra guida dei simboli, dichiarati nel codice, la mappa topografica IGM 1_25000 fornita dall'ISPRA  ]]&lt;br /&gt;
* [[Mostrare sulla MapView disegni, immagini e Controlli senza l'uso del Metodo Map.AddShape()]]&lt;br /&gt;
* [[Ottenere la distanza piana di due punti su una carta topografica]]&lt;br /&gt;
* [[Ottenere la Latitudine e la Longitudine del punto sulla mappa cliccato con il puntatore del mouse]]&lt;br /&gt;
* [[Ottenere la Longitudine e la Latitudine dell'angolo superiore sinistro dell'immagine di una mappa da un file GEOTIFF con le sole risorse di Gambas]]&lt;br /&gt;
* [[Ottenere le coordinate geografiche dei punti sulla mappa sui quali si passa con il puntatore del mouse]]&lt;br /&gt;
* [[Ottenere informazioni da un file GEOTIFF con l'API di libgeotiff]]&lt;br /&gt;
* [[Ottenere un file pdf dalla mappa mostrata da una MapView]]&lt;br /&gt;
* [[Ottenere un file png dalla mappa mostrata da una MapView]]&lt;br /&gt;
* [[Ottenere una Image dalla mappa mostrata da una MapView]]&lt;br /&gt;
* [[Registrare quanto mostrato da una MapView e farne un video]]&lt;br /&gt;
* [[Rendere trasparente la mappa mostrata da una MapView]]&lt;br /&gt;
* [[Ruotare la mappa]]&lt;br /&gt;
* [[Sapere sulla MapView se il puntatore del mouse è all'interno di una determinata area della mappa]]&lt;br /&gt;
* [[Scalare la dimensione della mappa in una Mapview]]&lt;br /&gt;
* [[Usare il Metodo '.AddPolygon()' di gb.map]]&lt;br /&gt;
* [[Usare il Metodo '.AddPolyLine()' di gb.map]]&lt;br /&gt;
* [[Utilizzando un Oggetto di visualizzazione diverso da una MapView consentire uno spostamento morbido e uniforme della mappa]]&lt;br /&gt;
* [[Utilizzare il Geoportale del Servizio Geologico d'Italia dell'I.S.P.R.A.]]&lt;br /&gt;
* [[Utilizzare il Geoportale Nazionale del Ministero dell'Ambiente]]&lt;br /&gt;
* [[Utilizzare in una MapView mappe fornite secondo lo standard WMS (Web Map Service)]]&lt;br /&gt;
* [[Utilizzare le tessere di una mappa senza connessione a internet]]&lt;br /&gt;
* [[Utilizzare una DrawingArea o una ImageView con gb.map anziché una MapView]]&lt;br /&gt;
* [[Utilizzare una MediaView con gb.map anziché una MapView]]&lt;br /&gt;
* [[Verificare le tessere dei livelli delle Map tiles]]&lt;br /&gt;
&lt;br /&gt;
== Menu ==&lt;br /&gt;
&lt;br /&gt;
* [[Colorare la barra dei Menu]]&lt;br /&gt;
&lt;br /&gt;
* [[Creare Menu da codice e non con l'Editor-Menu]]&lt;br /&gt;
&lt;br /&gt;
* [[Creare Menu popup da codice]]&lt;br /&gt;
&lt;br /&gt;
* [[Creare Menu popup utilizzando l'Editor di 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;
* [[Fare riferimento alle voci del Menu da altri Form]]&lt;br /&gt;
&lt;br /&gt;
* [[Impedire che appaia la finestra del menu predefinito cliccando con il tasto destro del mouse su un Controllo di testo]]&lt;br /&gt;
&lt;br /&gt;
* [[Inserire una linea separatrice in un Menu]]&lt;br /&gt;
&lt;br /&gt;
* [[Intercettare selezione di sotto-voci di un Menu]]&lt;br /&gt;
&lt;br /&gt;
* [[Modifiche delle proprietà dei Menu]]&lt;br /&gt;
&lt;br /&gt;
* [[Mostrare più righe di testo nella voce di un Menu]]&lt;br /&gt;
&lt;br /&gt;
* [[Rilevare quale sotto-voce di menu è stata cliccata]]&lt;br /&gt;
&lt;br /&gt;
== MenuButton ==&lt;br /&gt;
&lt;br /&gt;
* [[Creare Menu a finestra con MenuButton]]&lt;br /&gt;
&lt;br /&gt;
* [[Creare via Editor dalla IDE un Menu con sotto-menu che funzioni come popup in un MenuButton]]&lt;br /&gt;
&lt;br /&gt;
== Message ==&lt;br /&gt;
&lt;br /&gt;
* [[Impostare le dimensioni del Message]]&lt;br /&gt;
&lt;br /&gt;
* [[Individuare l'ID della finestra di un Message]]&lt;br /&gt;
&lt;br /&gt;
* [[Interruzione di riga con ritorno a capo in un Message]]&lt;br /&gt;
&lt;br /&gt;
* [[Mostrare un MessageBox in un programma con interfaccia a 'riga di comando']]&lt;br /&gt;
&lt;br /&gt;
* [[Spostare la finestra di un Message]]&lt;br /&gt;
&lt;br /&gt;
== Miscellanea ==&lt;br /&gt;
&lt;br /&gt;
* [[Controllare la batteria del proprio portatile con le funzioni esterne di SDL2 o di SDL3]]&lt;br /&gt;
&lt;br /&gt;
* [[Convertire i gradi della temperatura da un'unità di scala di misura in un'altra]]&lt;br /&gt;
&lt;br /&gt;
* [[Creare il QR Code con le risorse della libreria esterna libqrencode]]&lt;br /&gt;
&lt;br /&gt;
* [[Mostrare e usare in Gambas i simboli musicali forniti dal sistema UNICODE]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere informazioni sul tempo meteorologico di una città mediante il sito web wttr.in]]&lt;br /&gt;
&lt;br /&gt;
== Monitor - Schermo ==&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere informazioni relative al display video mediante le funzioni del API di SDL2]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere informazioni relative allo schermo mediante la funzione ioctl()]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere informazioni relative allo schermo mediante le funzioni del API di CBX]]&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 le dimensioni del monitor e la sua posizione sullo schermo con le funzioni esterne del API di Allegro 5]]&lt;br /&gt;
&lt;br /&gt;
== Mouse ==&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere le coordinate correnti del mouse sul Form senza tenere premuto un tasto del mouse]]&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere le coordinate correnti del mouse sullo schermo]]&lt;br /&gt;
&lt;br /&gt;
* [[Evento rotellina del mouse]]&lt;br /&gt;
&lt;br /&gt;
* [[Far assumere al puntatore grafico del mouse l'aspetto dell'attesa]]&lt;br /&gt;
&lt;br /&gt;
* [[Intercettare i dati del mouse dal file-device hidraw]]&lt;br /&gt;
&lt;br /&gt;
* [[Intercettare i dati del mouse dai file-device mouse, mice, event]]&lt;br /&gt;
&lt;br /&gt;
* [[Intercettare il tasto premuto del mouse]]&lt;br /&gt;
&lt;br /&gt;
* [[Modificare l'aspetto del puntatore grafico del mouse]]&lt;br /&gt;
&lt;br /&gt;
* [[Reiterare una procedura quando il tasto del mouse viene tenuto premuto su un Controllo]]&lt;br /&gt;
&lt;br /&gt;
* [[Segnalatore del puntatore del mouse sullo schermo usando le funzioni esterne del API di X11]]&lt;br /&gt;
&lt;br /&gt;
* [[Simulare il tasto premuto del mouse usando le funzioni esterne del API di X11]]&lt;br /&gt;
&lt;br /&gt;
* [[Sollevare l'Evento _MouseMove() di un Oggetto grafico spostando su di esso il mouse senza tenere premuto un suo tasto]] &lt;br /&gt;
&lt;br /&gt;
* [[Spostare da codice il mouse sullo schermo]]&lt;br /&gt;
&lt;br /&gt;
== MovieBox ==&lt;br /&gt;
&lt;br /&gt;
* [[Mostrare un'immagine animata in una MovieBox]]&lt;br /&gt;
&lt;br /&gt;
== Oggetti ==&lt;br /&gt;
&lt;br /&gt;
=== Oggetti in generale ===&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;B&amp;gt;[[Assegnare da codice più oggetti ad un Gruppo di eventi]]&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* [[Aggiungere un Evento o anche integrare quelli già posseduti da un Oggetto &amp;quot;Figlio&amp;quot; di un Oggetto più complesso]]&lt;br /&gt;
&lt;br /&gt;
* [[Assegnare un valore a una proprietà di un Oggetto]]&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere il tipo di Oggetto a cui appartiene un identificatore]]&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;B&amp;gt;[[Creare array di oggetti]]&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* [[Distruggere gli Oggetti che non posseggono il Metodo .Delete()]]&lt;br /&gt;
&lt;br /&gt;
* [[Impedire che un oggetto sollevi qualsiasi evento]]&lt;br /&gt;
&lt;br /&gt;
* [[Istanziare un oggetto mediante la Classe &amp;quot;Object&amp;quot;]]&lt;br /&gt;
&lt;br /&gt;
* [[Leggere nell'area di memoria occupata da un oggetto]]&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;
* [[Ottenere l'indirizzo dei dati di un Oggetto]]&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;
* [[Sapere il nome del Componente al quale appartiene la Classe di un oggetto utilizzato]]&lt;br /&gt;
&lt;br /&gt;
* [[Sapere la quantità di memoria occupata da un oggetto]]&lt;br /&gt;
&lt;br /&gt;
* [[Sapere l'oggetto che ha scatenato l'evento]]&lt;br /&gt;
&lt;br /&gt;
* [[Sapere quante istanze di una Classe sono state create]]&lt;br /&gt;
&lt;br /&gt;
* [[Sapere se un oggetto è un'istanza di una determinata Classe]]&lt;br /&gt;
&lt;br /&gt;
* [[Utilizzare la proprietà .Tag come un array di tipo Variant]]&lt;br /&gt;
&lt;br /&gt;
=== Oggetti grafici, Controlli e Widget===&lt;br /&gt;
&lt;br /&gt;
* [[Adattare la dimensione del font in un Oggetto grafico se il testo occupa una lunghezza o un'altezza superiore a quella dell'Oggetto]]&lt;br /&gt;
&lt;br /&gt;
* [[Adattare la dimensione di un Oggetto grafico al testo contenuto]]&lt;br /&gt;
&lt;br /&gt;
* [[Assegnare un Gruppo di Eventi a più Controlli modificando manualmente il file sorgente del programma Gambas]]  &lt;br /&gt;
&lt;br /&gt;
* [[Centrare un oggetto grafico all'interno di un Contenitore]]&lt;br /&gt;
&lt;br /&gt;
* [[Cliccare in un oggetto grafico qualsiasi o in una immagine suddivisi in rettangoli]]&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere gli oggetti grafici 'figli' costituenti l'oggetto 'padre']]&lt;br /&gt;
&lt;br /&gt;
* [[Copiare uno o più caratteri di un testo da una Label o da una TextLabel e incollarli in un altro Controllo di testo]]&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 un file immagine dagli oggetti presenti in un Contenitore]]&lt;br /&gt;
&lt;br /&gt;
* [[Creare widget di Controlli grafici]]&lt;br /&gt;
&lt;br /&gt;
* [[Differenza fra la proprietà &amp;quot;.Children&amp;quot; e la proprietà &amp;quot;.Controls&amp;quot; di un oggetto]]&lt;br /&gt;
&lt;br /&gt;
* [[Distruggere i Controlli grafici posti in un Contenitore]]&lt;br /&gt;
&lt;br /&gt;
* [[Far mostrare il simbolo &amp;quot;&amp;amp;&amp;quot; su un Controllo grafico fornito della Proprietà .Text]]&lt;br /&gt;
&lt;br /&gt;
* [[Fissare la distanza di un Controllo grafico in modo costante rispetto ai bordi del Form durante il ridimensionamento di questo]]&lt;br /&gt;
&lt;br /&gt;
* [[Individuare il numero d'indice di Controlli appartenenti al medesimo gruppo di Eventi senza servirsi di sue specifiche proprietà]]&lt;br /&gt;
&lt;br /&gt;
* [[Individuare una Classe di Oggetti grafici fra molti posti in un Contenitore]]&lt;br /&gt;
&lt;br /&gt;
* [[Individuare uno specifico Controllo con Last in base alla sua Proprietà &amp;quot;.Id&amp;quot;]]&lt;br /&gt;
&lt;br /&gt;
* [[Individuare uno specifico Controllo in base alla sua Proprietà &amp;quot;.Name&amp;quot;]]&lt;br /&gt;
&lt;br /&gt;
* [[Metodo di pseudo indirizzamento ad Oggetti grafici]]&lt;br /&gt;
&lt;br /&gt;
* [[Modificare la dimensione di un Oggetto grafico con il mouse impostando i punti di contatto intorno al suo perimetro]]&lt;br /&gt;
&lt;br /&gt;
* [[Modificare la dimensione di un Oggetto grafico ruotando la rotellina del mouse]]&lt;br /&gt;
&lt;br /&gt;
* [[Mostrare in un Oggetto di testo il contenuto di un file trascinandolo e rilasciandolo senza l'uso delle specifiche risorse di Gambas del Drag&amp;amp;Drop]]&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;B&amp;gt;[[Oggetti grafici e di testo che supportano il codice HTML]]&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* [[Oggetti scorrevoli]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere l'immagine di un Controllo grafico]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere risultati diversi in base alla parte del Controllo premuta dal mouse]]&lt;br /&gt;
&lt;br /&gt;
* [[Porre sotto osservazione un Oggetto grafico]]&lt;br /&gt;
&lt;br /&gt;
* [[Posizione equidistante di un Oggetto rispetto al margine destro del suo Contenitore e ad un punto alla sua sinistra]]&lt;br /&gt;
&lt;br /&gt;
* [[Proxy: la Proprietà per sollevare Eventi del mouse e della tastiera contemporaneamente in due Controlli]]&lt;br /&gt;
&lt;br /&gt;
* [[Raggiungere e gestire gli oggetti di FMain da una classe secondaria]]&lt;br /&gt;
&lt;br /&gt;
* [[Riposizionare in modo circolare più oggetti posti in pila]]&lt;br /&gt;
&lt;br /&gt;
* [[Sapere se un oggetto, spostato sul Form con il mouse, è al di sopra di un altro oggetto]]&lt;br /&gt;
&lt;br /&gt;
* [[Selezionare con lo spostamento del mouse un'area di un oggetto]]&lt;br /&gt;
&lt;br /&gt;
* [[Sollevare l'Evento _MouseMove() di un Oggetto grafico spostando su di esso il mouse senza tenere premuto un suo tasto]]&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;B&amp;gt;[[Spostare Oggetti grafici con il mouse all'interno di un contenitore senza Drag &amp;amp; Drop]]&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* [[Spostare o ridimensionare un oggetto a seconda del punto ove si clicca]]&lt;br /&gt;
&lt;br /&gt;
* [[Uso di Unicode con gli oggetti di testo]]&lt;br /&gt;
&lt;br /&gt;
* [[Utilizzare anche in altre subroutine un Oggetto grafico dichiarato localmente]]&lt;br /&gt;
&lt;br /&gt;
* [[Verificare l'esistenza di un Controllo in un Contenitore]]&lt;br /&gt;
&lt;br /&gt;
== ODBC ==&lt;br /&gt;
&lt;br /&gt;
* [[ODBC]]&lt;br /&gt;
&lt;br /&gt;
== OpenGL ==&lt;br /&gt;
&lt;br /&gt;
* [[Gambas e Opengl]]&lt;br /&gt;
&lt;br /&gt;
* [[OpenGL: lezioni di Grafica Interattiva]]&lt;br /&gt;
&lt;br /&gt;
* [[Textures]]&lt;br /&gt;
&lt;br /&gt;
===Esempi pratici===&lt;br /&gt;
&lt;br /&gt;
* [[Creare con OpenGL un ambiente virtuale 3D]]&lt;br /&gt;
* [[Ruotare un cubo sul suo asse Y usando OpenGL]]&lt;br /&gt;
* [[Ruotare un cubo sui suoi assi X e Y usando OpenGL]]&lt;br /&gt;
* [[Ruotare un cubo sui suoi assi X, Y e Z usando OpenGL]]&lt;br /&gt;
* [[Ruotare un triangolo intorno alla propria altezza usando OpenGL]]&lt;br /&gt;
* [[Ruotare una piramide sul suo asse Y usando OpenGL]]&lt;br /&gt;
* [[Ruotare una piramide sui suoi assi X, Y e Z usando OpenGL]]&lt;br /&gt;
* [[Ruotare una sfera usando OpenGL]]&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;
* [[Invio di posta elettronica con SMTP e SSL mediante le funzioni esterne del API di Libcurl]]&lt;br /&gt;
&lt;br /&gt;
* [[Leggere la posta elettronica con IMAP e SSL mediante le funzioni esterne del API di Libcurl]]&lt;br /&gt;
&lt;br /&gt;
* [[Leggere la posta elettronica con POP3 e SSL mediante le funzioni esterne del API di Libcurl]]&lt;br /&gt;
&lt;br /&gt;
* [[Leggere la posta elettronica mediante le sole risorse di Gambas]]&lt;br /&gt;
&lt;br /&gt;
== Processi ==&lt;br /&gt;
&lt;br /&gt;
=== Gestione dei Processi in genere ===&lt;br /&gt;
&lt;br /&gt;
* [[Cambiare in esecuzione la directory di lavoro di un processo Gambas con la funzione esterna chdir()]]&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere in tempo reale il numero dell'ultimo processo appena aperto]]&lt;br /&gt;
&lt;br /&gt;
=== Gestione dei Processi mediante la Classe &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 mediante Process]]&lt;br /&gt;
&lt;br /&gt;
* [[Sapere se esiste un Processo con un ID specifico]]&lt;br /&gt;
&lt;br /&gt;
* [[Terminare automaticamente un Processo dopo un periodo di tempo dalla sua apertura con Process]]&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;
* [[Attivare la finestra di un programma con le funzioni del API di X11]]&lt;br /&gt;
&lt;br /&gt;
* [[Avviare un'applicazione Gambas in un determinato desktop]]&lt;br /&gt;
&lt;br /&gt;
* [[Avviare un progetto Gambas dalla sua cartella]]&lt;br /&gt;
&lt;br /&gt;
* [[Catturare con il Componente gb.media quanto mostrato dalla finestra di un programma o sulla Scrivania e farne un file video]]&lt;br /&gt;
&lt;br /&gt;
* [[Catturare immagini di una finestra di un programma e farne un file audio-video OGG-Theora con le funzioni esterne del API di GStreamer]]&lt;br /&gt;
&lt;br /&gt;
* [[Catturare l'immagine della finestra di un programma mediante le risorse della Classe DesktopWindow e le funzioni esterne del API di X11]]&lt;br /&gt;
&lt;br /&gt;
* [[Chiudere la finestra di un programma Gambas premendo i tasti Ctrl e 'c' della tastiera]]&lt;br /&gt;
&lt;br /&gt;
* [[Chiudere le finestre secondarie di un programma Gambas lasciando aperto il solo Form principale]]&lt;br /&gt;
&lt;br /&gt;
* [[Chiudere programmi esterni]]&lt;br /&gt;
&lt;br /&gt;
* [[Chiudere un programma Gambas se si clicca all'esterno della sua finestra principale]]&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere con le risorse del API di libglib-2.0 il percorso assoluto di un programma]]&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere i valori della dimensione dei quattro margini delle finestre presenti sul Desktop]]&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere la directory in cui sono memorizzati i file temporanei del processo corrente di un programma Gambas]]&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;
* [[Creare una cartella delle preferenze di un programma Gambas con le funzioni esterne del API di SDL2 o di SDL3]]&lt;br /&gt;
&lt;br /&gt;
* [[Elencare il PID ed il corrispondente nome di ciascun processo attivo]]&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;
* [[Impedire la chiusura di un programma Gambas se si clicca sul tastino con la X in alto a destra della sua finestra principale]]&lt;br /&gt;
&lt;br /&gt;
* [[Individuare con certezza un file presente nella cartella di un progetto Gambas]]&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 ID e nome delle finestre attive con le risorse del Componente gb.desktop]]&lt;br /&gt;
&lt;br /&gt;
* [[Individuare ID e nome delle finestre attive, nonché il PID dei loro programmi con le risorse del Componente gb.desktop.x11]]&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 Gambas]]&lt;br /&gt;
&lt;br /&gt;
* [[Individuare il percorso ove risiede la cartella del progetto Gambas]]&lt;br /&gt;
&lt;br /&gt;
* [[Individuare l'ID ed il nome della finestra attiva mediante le funzioni del API di X11]]&lt;br /&gt;
&lt;br /&gt;
* [[Individuare l'ID ed il nome di una finestra nonché il PID del programma mediante le funzioni del API di X11]]&lt;br /&gt;
&lt;br /&gt;
* [[Inglobare in un programma Gambas la finestra di un altro programma Gambas mediante le funzioni del API di X11]]&lt;br /&gt;
&lt;br /&gt;
* [[Lanciare da un'applicazione Gambas il Terminale e far partire da esso un programma]]&lt;br /&gt;
&lt;br /&gt;
* [[Lanciare un programma esterno conoscendo soltanto il nome del suo file eseguibile presente nel sistema]]&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;
* [[Modificare le dimensioni della finestra di un programma con le funzioni del API di X11]]&lt;br /&gt;
&lt;br /&gt;
* [[Muovere e modificare le dimensioni della finestra di un programma con le funzioni del API di X11]]&lt;br /&gt;
&lt;br /&gt;
* [[Muovere la finestra di un programma con le funzioni del API di X11]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere informazioni sulle applicazioni client in esecuzione su un display con le funzioni del API di X11]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere la directory di lavoro corrente dell'applicazione Gambas]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere l'immagine della finestra di un programma]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere la schermata (screenshot) della finestra di un programma]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere le dimensioni della finestra di un programma esterno]]&lt;br /&gt;
&lt;br /&gt;
* [[Passare dati in runtime ad un programma 'a linea di comando']]&lt;br /&gt;
&lt;br /&gt;
* [[Porre la finestra di un programma esterno in primo piano]]&lt;br /&gt;
&lt;br /&gt;
* [[Salvare un file nella Directory di Lavoro di un programma Gambas]]&lt;br /&gt;
&lt;br /&gt;
* [[Sapere quando il puntatore del mouse si trova sulla finestra di un programma esterno]]&lt;br /&gt;
&lt;br /&gt;
* [[Sapere quanto tempo è passato dall'inizio del programma]]&lt;br /&gt;
&lt;br /&gt;
* [[Sapere se un programma esterno è già in funzione]]&lt;br /&gt;
&lt;br /&gt;
* [[Sapere se il programma Gambas sta funzionando come progetto dall'IDE oppure come eseguibile .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;
* [[Uscire da un'applicazione Gambas premendo un tasto mediante le funzioni del API di X11]]&lt;br /&gt;
&lt;br /&gt;
===Trasmissione di dati fra due programmi Gambas o fra un programma esterno e un programma Gambas===&lt;br /&gt;
&lt;br /&gt;
* [[Indirizzare dati da un programma a un altro e a un Terminale]]&lt;br /&gt;
&lt;br /&gt;
* [[Intercettare i dati inviati allo standard output da un programma C]]&lt;br /&gt;
&lt;br /&gt;
* [[Inviare dati da un programma Gambas ad un altro mediante le risorse del Componente DBus]]&lt;br /&gt;
&lt;br /&gt;
* [[Inviare dati stringa da un programma Gambas a un programma esterno avente un'area di testo o a un Terminale]]&lt;br /&gt;
&lt;br /&gt;
* [[Ricevere dati da un programma esterno mediante un file]]&lt;br /&gt;
&lt;br /&gt;
* [[Ricevere un 'segnale' da un programma C]]&lt;br /&gt;
&lt;br /&gt;
* [[Trasmissione di dati fra due o più programmi Gambas mediante la Classe Socket del Componente gb.net]]&lt;br /&gt;
&lt;br /&gt;
* [[Trasmissione di dati fra due o più programmi Gambas mediante la Classe UdpSocket del Componente gb.net]]&lt;br /&gt;
&lt;br /&gt;
* [[Usare ALSA per far comunicare due o più programmi Gambas]]&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 uno pseudoterminale per far comunicare bidirezionalmente due programmi]]&lt;br /&gt;
&lt;br /&gt;
== ProgressBar e simulazioni di ProgressBar==&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere una simil-ProgressBar da una LCDLabel]]&lt;br /&gt;
&lt;br /&gt;
* [[Pseudo-ProgressBar in un'applicazione 'a riga di comando']]&lt;br /&gt;
&lt;br /&gt;
* [[Simulare una ProgressBar mediante una DrawingArea]]&lt;br /&gt;
&lt;br /&gt;
* [[Spostare la barra indicatrice di una ProgressBar con il mouse]]&lt;br /&gt;
&lt;br /&gt;
== Puntatori - Memory Stream ==&lt;br /&gt;
&lt;br /&gt;
====Puntatori====&lt;br /&gt;
* [[Assegnare ad un Puntatore la rappresentazione numerica di un indirizzo di memoria contenuto da un altro Puntatore]]&lt;br /&gt;
&lt;br /&gt;
* [[Assegnare ad un Puntatore un'area di memoria riservata con Alloc()]]&lt;br /&gt;
&lt;br /&gt;
* [[Assegnare un Puntatore ad una Struttura per dereferenziarlo]]&lt;br /&gt;
&lt;br /&gt;
* [[Assegnare un vettore ad una variabile di tipo Puntatore]]&lt;br /&gt;
&lt;br /&gt;
* [[Cambiare la dimensione di un'area di memoria mediante Realloc()]]&lt;br /&gt;
&lt;br /&gt;
* [[Deallocare un'area di memoria precedentemente allocata con alloc() e assicurarsi che il Puntatore non punti a un indirizzo rilevante di memoria]]&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;B&amp;gt;[[Dereferenziare un Puntatore con le funzioni specifiche di dereferenziazione e con i Memory Stream]]&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* [[Dereferenziare un Puntatore con un vettore]]&lt;br /&gt;
&lt;br /&gt;
* [[Dereferenziare un Puntatore di Puntatore con le funzioni specifiche di dereferenziazione e con i Memory Stream]]&lt;br /&gt;
&lt;br /&gt;
* [[Differenza fra Assegnazione a un Puntatore di un indirizzo di memoria e Dereferenziazione di un Puntatore]]&lt;br /&gt;
&lt;br /&gt;
* [[Gestire un Puntatore con le funzioni esterne del API di libglib-2.0]]&lt;br /&gt;
&lt;br /&gt;
* [[Modificare il valore di una variabile Integer puntata da un Puntatore e sua dereferenziazione con le funzioni esterne del API di SDL2]]&lt;br /&gt;
&lt;br /&gt;
* [[Opportunità di azzerare tutti i byte di un'area di memoria riservata seppur senza deallocarla]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere il puntatore a una variabile vettoriale]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere il puntatore di una variabile di tipo Image]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere il puntatore di una variabile di tipo Struttura]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere il valore numerico dell'indirizzo di memoria contenuto dal Puntatore]]&lt;br /&gt;
&lt;br /&gt;
* [[Passaggio di un argomento per 'indirizzo' ad una Funzione]]&lt;br /&gt;
&lt;br /&gt;
* [[Porre a zero i valori contenuti dall'area di memoria puntata da un Puntatore]]&lt;br /&gt;
&lt;br /&gt;
* [[Scrivere i valori contenuti da un file in un'area riservata di memoria]]&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;B&amp;gt;[[Scrivere nell'area di memoria puntata da un Puntatore]]&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* [[Vedere e modificare con i Puntatori un byte costituente il valore di una variabile]]&lt;br /&gt;
&lt;br /&gt;
==== Memory Stream ====&lt;br /&gt;
&lt;br /&gt;
* [[Definizione ed uso dei Memory Stream]]&lt;br /&gt;
&lt;br /&gt;
* [[Creare con i Memory Stream un'area di memoria simile ad una Struttura avente come membro un'altra Struttura]]&lt;br /&gt;
&lt;br /&gt;
== RadioButton==&lt;br /&gt;
&lt;br /&gt;
* [[Adattare la lunghezza del RadioButton al testo contenuto]]&lt;br /&gt;
&lt;br /&gt;
== Report (gb.report2) ==&lt;br /&gt;
&lt;br /&gt;
* [[Creare report con il componente gb.report2]]&lt;br /&gt;
&lt;br /&gt;
== Scanner ==&lt;br /&gt;
&lt;br /&gt;
* [[Eseguire una scansione con lo Scanner mediante le funzioni esterne di libsane]]&lt;br /&gt;
&lt;br /&gt;
* [[Eseguire una scansione e riconoscimento caratteri (OCR) con l'API di Sane, Tesseract e Leptonica]]&lt;br /&gt;
&lt;br /&gt;
* [[Usare le risorse del Componente gb.scanner di Gambas]]&lt;br /&gt;
&lt;br /&gt;
== Scripting ==&lt;br /&gt;
&lt;br /&gt;
* [[Scripting con Gambas]]&lt;br /&gt;
&lt;br /&gt;
==ScrollArea==&lt;br /&gt;
&lt;br /&gt;
* [[Usare la ScrollArea]]&lt;br /&gt;
&lt;br /&gt;
==ScrollView==&lt;br /&gt;
&lt;br /&gt;
* [[Usare la ScrollView]]&lt;br /&gt;
&lt;br /&gt;
== Settings ==&lt;br /&gt;
&lt;br /&gt;
* [[Uso della classe Settings]]&lt;br /&gt;
&lt;br /&gt;
== Sistema operativo - Dispositivi - Interfacce - Reti ==&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere con la funzione esterna getrlimit() i valori limite che il kernel impone per alcune risorse]]&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere  con le risorse del API di libglib-2.0 la directory unica per l'utente corrente sul sistema locale]]&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere con le sole risorse di Gambas i dispositivi esterni SCSI o SATA montati]]&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere i dispositivi usb di memorizzazione di massa con le funzioni esterne di libudev]]&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere il nome delle interfacce di rete presenti nel proprio sistema]]&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere il file-devide pts associato ad un Terminale o console con la funzione esterna ttyname()]]&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere il fuso orario (TimeZone) impostato nel proprio sistema]]&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere il nome del file-device del Terminale di controllo del processo con la funzione esterna ctermid()]]&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere l'hostname impostato nel proprio sistema]]&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere la dimensione del Dispositivo a blocchi]]&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere la distribuzione Linux montata]]&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere la valuta monetaria locale utilizzata dal sistema operativo]]&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere le impostazioni del separatore decimale nel sistema]]&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere le impostazioni per il separatore delle migliaia]]&lt;br /&gt;
&lt;br /&gt;
* [[Effettuare il PING]]&lt;br /&gt;
&lt;br /&gt;
* [[Identificare univocamente un computer]]&lt;br /&gt;
&lt;br /&gt;
* [[La cartella ove sono depositate le icone fornite dal sistema operativo Linux]]&lt;br /&gt;
&lt;br /&gt;
* [[Leggere il file fstab per avere informazioni sui vari filesystem montati]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere gli indirizzi IP di ogni interfaccia presente sulla medesima macchina]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere i valori di baud rates del flusso in entrata ed in uscita dei file-device terminali]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere la distribuzione di Linux montata, il tipo di architettura e la versione del kernel]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere il nome dell'host corrispondente ad un indirizzo IP e viceversa]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere il solo nome del proprio sistema operativo]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere informazioni dal proprio dispositivo wireless con le risorse del API di libiw]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere informazioni generali sui dispositivi network mediante le risorse del API di Libnm-glib]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere informazioni sulle statistiche di sistema globali con la funzione esterna sysinfo()]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere la lista di tutte le variabili d'ambiente nel proprio sistema mediante le risorse del API di libglib-2.0]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere la lista di tutti i dispositivi PCI presenti nel sistema]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere mediante le funzioni esterne del API di Libusb la lista di tutti i dispositivi USB attivi nel sistema]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere mediante le funzioni esterne del API di Libgusb la lista di tutti i dispositivi USB attivi nel sistema]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere mediante le funzioni esterne della libreria Libudev un elenco degli oggetti hidraw collegati al sistema]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere un Identificativo Univoco Universale - UUID]]&lt;br /&gt;
&lt;br /&gt;
* [[Visualizzare il tempo trascorso dall'ultimo avvio del sistema]]&lt;br /&gt;
&lt;br /&gt;
== Slider ==&lt;br /&gt;
&lt;br /&gt;
* [[Creare uno pseudo-slider]]&lt;br /&gt;
&lt;br /&gt;
* [[Creare uno pseudo-slider con uno o più cursori posti fra un valore minimo e uno massimo variabili]]&lt;br /&gt;
&lt;br /&gt;
* [[Mostrare il segna-valori 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;
== SpinBar ==&lt;br /&gt;
* [[Adattare la SpinBar a valori in virgola mobile con più di tre decimali]]&lt;br /&gt;
&lt;br /&gt;
== SpinBox ==&lt;br /&gt;
* [[Variare il valore di uno SpinBox 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;
==Sqlite==&lt;br /&gt;
* [[Creare un DataBase sqlite3]]&lt;br /&gt;
* [[Utilizzo base di Gambas e Sqlite3]]&lt;br /&gt;
&lt;br /&gt;
== Stampa - Printer==&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;B&amp;gt;[[Stampare in Gambas]]&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* [[Individuare le stampanti presenti nel proprio sistema]]&lt;br /&gt;
&lt;br /&gt;
* [[Stampare il contenuto grafico di una PictureBox]]&lt;br /&gt;
&lt;br /&gt;
* [[Stampare il testo presente in oggetti di testo]]&lt;br /&gt;
&lt;br /&gt;
* [[Stampare un Controllo grafico posto sul Form]]&lt;br /&gt;
&lt;br /&gt;
* [[Stampare un file con le funzioni del API di cups]]&lt;br /&gt;
&lt;br /&gt;
* [[Verifica ed eliminazione dei processi di stampa mediante le funzioni del API di CUPS]]&lt;br /&gt;
&lt;br /&gt;
== Stringhe, caratteri, testo e file di testo ==&lt;br /&gt;
&lt;br /&gt;
* [[Accedere ai caratteri contenuti da una variabile di tipo stringa come se questa fosse una vettore]]&lt;br /&gt;
&lt;br /&gt;
* [[Aggiungere una riga di caratteri alla fine di un file di 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;
* [[Associare una stringa a un identificatore unico numerico mediante le funzioni Quarks del API di libglib-2.0]]&lt;br /&gt;
&lt;br /&gt;
* [[Cercare la seconda occorrenza di una lettera fra tre o più]]&lt;br /&gt;
&lt;br /&gt;
* [[Cercare una parola in una stringa]]&lt;br /&gt;
&lt;br /&gt;
* [[Concatenare due stringhe]]&lt;br /&gt;
&lt;br /&gt;
* [[Confrontare due stringhe]]&lt;br /&gt;
&lt;br /&gt;
* [[Confrontare i caratteri di due stringhe]]&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere con le sole risorse di Gambas il numero di occorrenze in una stringa]]&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere il numero di occorrenze in una stringa con la funzione esterna PyUnicode_Count() della libreria libpython3]]&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere il numero e la posizione di tutte le occorrenze di una sottostringa in una stringa]]&lt;br /&gt;
&lt;br /&gt;
* [[Conversione di due valori, costituenti un carattere speciale, nella sua rappresentazione grafica]]&lt;br /&gt;
&lt;br /&gt;
* [[Convertire due unità numeriche stringa graficamente rappresentanti un valore esadecimale nel corrispondente valore decimale effettivo]]&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;
* [[Convertire in un tipo di dati numerico un valore letto in formato Stringa da un file]]&lt;br /&gt;
&lt;br /&gt;
* [[Convertire un carattere maiuscolo in minuscolo senza la funzione LCase()]]&lt;br /&gt;
&lt;br /&gt;
* [[Convertire un codice Unicode in carattere UTF-8 con la funzione g_unichar_to_utf8() della libreria libglib-2.0]]&lt;br /&gt;
&lt;br /&gt;
* [[Convertire un numero di tipo stringa in un valore di tipo Float con la funzione g_strtod() della libreria glib-2.0]]&lt;br /&gt;
&lt;br /&gt;
* [[Convertire un numero di tipo stringa in un valore di tipo Float con la funzione  PyOS_string_to_double() della libreria libpython3]]&lt;br /&gt;
&lt;br /&gt;
* [[Convertire un numero in un carattere ASCII]]&lt;br /&gt;
&lt;br /&gt;
* [[Creare un collegamento ipertestuale]]&lt;br /&gt;
&lt;br /&gt;
* [[Filtrare i caratteri invalidi UTF8 ed ASCII da una stringa con le funzioni esterne del API di PulseAudio]]&lt;br /&gt;
&lt;br /&gt;
* [[Funzione simile a String()]]&lt;br /&gt;
&lt;br /&gt;
* [[Funzione simile a String.Len()]]&lt;br /&gt;
&lt;br /&gt;
* [[Individuare i valori costituenti i caratteri tipo UTF-8 di lettere localizzate]]&lt;br /&gt;
&lt;br /&gt;
* [[Individuare in un testo i caratteri non alfanumerici e la loro posizione]]&lt;br /&gt;
&lt;br /&gt;
* [[Individuare in una stringa i caratteri ricorrenti e loro posizioni]]&lt;br /&gt;
&lt;br /&gt;
* [[Inserire in una stringa caratteri ASCII non stampabili]]&lt;br /&gt;
&lt;br /&gt;
* [[Inserire un testo in diagonale in un Controllo grafico]]&lt;br /&gt;
&lt;br /&gt;
* [[Modificare in maiuscolo il primo carattere di una stringa]]&lt;br /&gt;
&lt;br /&gt;
* [[Modificare un 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 del testo con caratteri ruotati orizzontalmente e verticalmente]]&lt;br /&gt;
&lt;br /&gt;
* [[Mostrare il simbolo dell'Euro]]&lt;br /&gt;
&lt;br /&gt;
* [[Mostrare in una stringa le virgolette]]&lt;br /&gt;
&lt;br /&gt;
* [[Mostrare con il punto anziché con la virgola un numero in virgola mobile rappresentato in formato stringa]]&lt;br /&gt;
&lt;br /&gt;
* [[Non visualizzare i caratteri non-stampabili di una stringa che inizia con caratteri stampabili]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere con l'API di Libglib-2.0 il codice UNICODE di un carattere UTF-8]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere da un testo una parte delimitata da due parole]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere da un valore numerico i caratteri ASCII corrispondenti a ciascun byte componente il numero]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere il valore ASCII di un carattere]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere un file RTF da un file UTF8 e viceversa con le funzioni esterne del API di Librtfcomp]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere un'unica stringa dalle stringhe contenute dagli elementi di un vettore di tipo Stringa]] &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;
* [[Rappresentare in formato stringa un numero avente i punti delle migliaia e la virgola dei decimali]]&lt;br /&gt;
&lt;br /&gt;
* [[Ribaltare i caratteri e invertire il testo in un Controllo grafico che supporta il RichText]]&lt;br /&gt;
&lt;br /&gt;
* [[Rimuovere da una stringa tutti i caratteri non-stampabili eventualmente presenti]]&lt;br /&gt;
&lt;br /&gt;
* [[Rimuovere da una stringa uno o più caratteri del codice ASCII esteso]]&lt;br /&gt;
&lt;br /&gt;
* [[Rimuovere tot caratteri da una stringa mediante le funzioni esterne del API di Libglib-2.0]]&lt;br /&gt;
&lt;br /&gt;
* [[Riposizionare in modo casuale i caratteri di una stringa con la funzione esterna strfry()]]&lt;br /&gt;
&lt;br /&gt;
* [[Sapere con l'API di Libglib-2.0 se un carattere è stampabile]]&lt;br /&gt;
&lt;br /&gt;
* [[Sapere con l'API di Libglib-2.0 se un codice UNICODE corrisponde ad un carattere alfabetico]]&lt;br /&gt;
&lt;br /&gt;
* [[Sapere se una stringa è formata soltanto da caratteri alfanumerici]]&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;
* [[Sovrascrivere una stringa con uno o più caratteri]]&lt;br /&gt;
&lt;br /&gt;
* [[Testo verticale]]&lt;br /&gt;
&lt;br /&gt;
* [[Utilizzare in una Costante un numero esadecimale per rappresentare un carattere ASCII]]&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;
* [[Verificare con le funzioni del API di Libglib-2.0 se una stringa inizia con un prefisso o termina con un siffisso]]&lt;br /&gt;
&lt;br /&gt;
* [[Verificare con le risorse del API di PulseAudio se una stringa contiene solo caratteri UTF8 validi]]&lt;br /&gt;
&lt;br /&gt;
* [[Verificare se in una stringa vi sono caratteri non stampabili]]&lt;br /&gt;
&lt;br /&gt;
== Strutture ==&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;B&amp;gt;[[Strutture: dichiarazione ed uso]]&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* [[Assegnare a una Struttura i valori contenuti in un'area di memoria creata con la funzione Alloc()]]&lt;br /&gt;
&lt;br /&gt;
* [[Assegnare direttamente i valori di dimensione conosciuta, letti da un file, ad una Struttura]]&lt;br /&gt;
&lt;br /&gt;
* [[Assegnare i valori di un file ad una Struttura mediante un Puntatore]]&lt;br /&gt;
&lt;br /&gt;
* [[Assegnare una Struttura a un Puntatore]]&lt;br /&gt;
&lt;br /&gt;
* [[Configurazione, organizzazione ed impostazione dell'oggetto Struttura secondo i sorgenti di Gambas]]&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere i nomi identificatori dei membri di una Struttura]]&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere la dimensione di una Struttura]]&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere via codice il nome di una Struttura]]&lt;br /&gt;
&lt;br /&gt;
* [[Leggere e scrivere direttamente nell'area di memoria di una Struttura accedendovi con la classe Object]]&lt;br /&gt;
&lt;br /&gt;
* [[Nascondere un valore in una Struttura]]&lt;br /&gt;
&lt;br /&gt;
* [[Ordinare gli elementi di un vettore di Strutture in base ad un loro medesimo membro]]&lt;br /&gt;
&lt;br /&gt;
* [[Ordinare gli elementi dei membri vettoriali di una Struttura in base ad uno di loro]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere il puntatore di una variabile di tipo Struttura]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere il puntatore direttamente ai dati associati a una Struttura]]&lt;br /&gt;
&lt;br /&gt;
* [[Passare una Struttura con Event]]&lt;br /&gt;
&lt;br /&gt;
* [[Scrivere i dati dei membri di una Struttura in un file direttamente]]&lt;br /&gt;
&lt;br /&gt;
* [[Strutture e Funzioni esterne]]&lt;br /&gt;
&lt;br /&gt;
* [[Uso delle Strutture tra Classi e Moduli]]&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;
== TableView ==&lt;br /&gt;
&lt;br /&gt;
* [[Assegnare i dati di una TextArea a una TableView]]&lt;br /&gt;
&lt;br /&gt;
* [[Inserire un oggetto in una cella di una TableView]]&lt;br /&gt;
&lt;br /&gt;
* [[Modificare il contenuto di una cella di una TableView cliccandoci dentro]]&lt;br /&gt;
&lt;br /&gt;
* [[Selezionare una intera riga di una TableView]]&lt;br /&gt;
&lt;br /&gt;
* [[Utilizzare il tasto Tab della tastiera per spostare il cursore del mouse fra le celle di una TableView]]&lt;br /&gt;
&lt;br /&gt;
* [[Visualizzare automaticamente una specifica riga di una TableView senza dover agire sulla ScrollBar laterale]]&lt;br /&gt;
&lt;br /&gt;
== TabPanel ==&lt;br /&gt;
&lt;br /&gt;
* [[Cancellare il testo presente in uno o più Controlli di testo posti su una TabPanel]]&lt;br /&gt;
&lt;br /&gt;
* [[Impostare l'immagine ed il colore del titolo delle tabelle di una TabPanel]]&lt;br /&gt;
&lt;br /&gt;
* [[Inserire tabelle ed oggetti all'interno di una TabPanel]]&lt;br /&gt;
&lt;br /&gt;
== TabStrip ==&lt;br /&gt;
&lt;br /&gt;
* [[Aggiungere Controlli su una determinata scheda di una TabStrip successivamente alla sua creazione]]&lt;br /&gt;
&lt;br /&gt;
* [[Aggiungere schede in una TabStrip successivamente alla sua creazione]]&lt;br /&gt;
&lt;br /&gt;
* [[Eliminare una scheda da una TabStrip]]&lt;br /&gt;
&lt;br /&gt;
* [[Estrarre i dati dagli oggetti presenti sulle schede di una TabStrip]]&lt;br /&gt;
&lt;br /&gt;
* [[Inserire più schede e Controlli in una TabStrip nel momento della sua creazione]]&lt;br /&gt;
&lt;br /&gt;
* [[Modificare il valore delle proprietà degli oggetti posti sulla scheda in primo piano di una TabStrip]]&lt;br /&gt;
&lt;br /&gt;
* [[Nascondere una scheda di una TabStrip]]&lt;br /&gt;
&lt;br /&gt;
== Tavoletta grafica e Gambas ==&lt;br /&gt;
&lt;br /&gt;
* [[Leggere l'azione di una penna su una Tavoletta grafica]]&lt;br /&gt;
&lt;br /&gt;
== Tempo, Date e Temporizzazioni ==&lt;br /&gt;
&lt;br /&gt;
* [[Calcolare il numero di giorni compresi fra due date]]&lt;br /&gt;
&lt;br /&gt;
* [[Calcolare il tempo trascorso mediante le funzioni esterne del sub-sistema Timers del API di libglib-2.0]]&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere il fuso orario (TimeZone) impostato nel proprio sistema]]&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere il giorno della settimana di una data mediante le risorse della libreria standard C &amp;quot;time.h&amp;quot;]]&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere il numero di giorni posseduti da un mese]]&lt;br /&gt;
&lt;br /&gt;
* [[Convertire data ed orario da formato Date in un numero]]&lt;br /&gt;
&lt;br /&gt;
* [[Convertire i giorni in formato anni:mesi:giorni]]&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;
* [[Creare un metronomo per console]]&lt;br /&gt;
&lt;br /&gt;
* [[Creare un Timer con le funzioni esterne delle librerie standard C 'signal.h' e 'time.h']]&lt;br /&gt;
&lt;br /&gt;
* [[Formattare &amp;quot;hh:nn:ss&amp;quot; dai soli secondi]]&lt;br /&gt;
&lt;br /&gt;
* [[Funzione di attesa in millisecondi con la libreria esterna libpulsecore]]&lt;br /&gt;
&lt;br /&gt;
* [[Gestione del tempo mediante le funzioni esterne del API di Libcsfml]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere con le risorse della libreria Libc.so.6 il tempo impiegato per eseguire un programma]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere con le risorse della libreria standard C 'time.h' la data nella forma 'giorno-della-settimana mese giorno ora:min:sec anno']]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere il tempo trascorso dall'inizializzazione della libreria SDL2 o della libreria SDL3]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere l'orario locale comprensivo dei microsecondi con la funzione esterna g_date_time_get_microsecond() del API di libglib-2.0]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere l'orario locale comprensivo dei nanosecondi con le risorse di alcune librerie standard C]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere la differenza temporale fra due orari]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere una data e-o l'orario comprensivo dei millisecondi]]&lt;br /&gt;
&lt;br /&gt;
* [[Porre in pausa il programma per un dato numero di microsecondi con la funzione esterna g_usleep() del API di libglib-2.0]]&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;B&amp;gt;[[Rappresentazione stringa localizzata e non-localizzata di una data]]&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* [[Sapere di quanti giorni è formato un determinato anno]]&lt;br /&gt;
&lt;br /&gt;
* [[Sapere di quanti giorni è formato il mese corrente]]&lt;br /&gt;
&lt;br /&gt;
* [[Sapere quanto tempo è passato dall'inizio del programma]]&lt;br /&gt;
&lt;br /&gt;
* [[Sapere quanti microsecondi sono passati dalla data iniziale del tempo Unix sino alla data e all'orario correnti]]&lt;br /&gt;
&lt;br /&gt;
* [[Sapere quanti millisecondi sono passati dalla data iniziale del tempo Unix sino alla data e all'orario correnti]]&lt;br /&gt;
&lt;br /&gt;
* [[Sapere quanti nanosecondi sono passati dalla data iniziale del tempo Unix sino alla data e all'orario correnti]]&lt;br /&gt;
&lt;br /&gt;
* [[Sapere quanti secondi bisogna aggiungere all'orario locale per ottenere l'orario UTC]]&lt;br /&gt;
&lt;br /&gt;
* [[Sapere quanti secondi sono passati dalla data iniziale del tempo Unix sino alla data e all'orario correnti]]&lt;br /&gt;
&lt;br /&gt;
* [[Sapere quanti secondi sono passati dall'inizio del giorno corrente]]&lt;br /&gt;
&lt;br /&gt;
* [[Sapere quanti giorni sono passati dall'inizio dell'anno corrente]]&lt;br /&gt;
&lt;br /&gt;
* [[Sapere quanti secondi sono passati dall'inizio dell'anno corrente]]&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;
* [[Aprire un Terminale con Desktop.OpenTerminal e passargli una riga di comando]]&lt;br /&gt;
&lt;br /&gt;
* [[Aprire un Terminale e passargli una riga di comando mediante le funzioni esterne del API di X11]]&lt;br /&gt;
&lt;br /&gt;
* [[Attendere in un'applicazione 'a riga di comando' la pressione del tasto 'Invio']]&lt;br /&gt;
&lt;br /&gt;
* [[Colorare testo e sfondo in Console o Terminale]]&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere il numero di linee e di colonne costituenti la corrente dimensione di un terminale o console]]&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere in tempo reale il file-device &amp;quot;pts&amp;quot; dell'ultimo Terminale appena aperto]]&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;
* [[Formattare il testo da mostrare in console o in terminale]]&lt;br /&gt;
&lt;br /&gt;
* [[Intercettare i dati inviati allo standard output da un programma C]]&lt;br /&gt;
&lt;br /&gt;
* [[Intercettare il risultato restituito ad intervalli temporali di un comando bash]]&lt;br /&gt;
&lt;br /&gt;
* [[Intercettare la stringa di caratteri immessi dall'utente nella console o Terminale]]&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;
* [[Lanciare da un'applicazione Gambas il Terminale e far partire da esso un programma]]&lt;br /&gt;
&lt;br /&gt;
* [[Lanciare da un'applicazione Gambas un comando bash e far scrivere il risultato in un Terminale]]&lt;br /&gt;
&lt;br /&gt;
* [[Modificare il prompt bash]]&lt;br /&gt;
&lt;br /&gt;
* [[Passare in runtime il numero del file-device 'pts' di un Terminale]]&lt;br /&gt;
&lt;br /&gt;
* [[Pulire il Terminale o la console via codice]]&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 console (standard output) di Gambas]]&lt;br /&gt;
&lt;br /&gt;
* [[Scrivere nella finestra di un Terminale distinto dal programma Gambas]]&lt;br /&gt;
&lt;br /&gt;
* [[Scrivere nello Standard Input di un Terminale con un programma Gambas 'a riga di comando']]&lt;br /&gt;
&lt;br /&gt;
* [[Spostare il cursore in un Terminale lungo una riga di caratteri]]&lt;br /&gt;
&lt;br /&gt;
* [[Stampare un qualsiasi carattere nella console o nel Terminale alle coordinate x, y]]&lt;br /&gt;
&lt;br /&gt;
* [[Stampare una stringa in console con allineamento a destra o a sinistra]]&lt;br /&gt;
&lt;br /&gt;
* [[Stampare una stringa in console sempre su una medesima riga]]&lt;br /&gt;
&lt;br /&gt;
== TextArea ==&lt;br /&gt;
&lt;br /&gt;
* [[Inserire un testo da un Controllo all'interno del testo di una TextArea senza l'uso del Drag&amp;amp;Drop]]&lt;br /&gt;
&lt;br /&gt;
* [[Verificare che siano stati aggiunti uno o più caratteri a una TextArea con l'opzione &amp;quot;Incolla&amp;quot;]]&lt;br /&gt;
&lt;br /&gt;
== TextBox ==&lt;br /&gt;
&lt;br /&gt;
* [[Scrivere in un TextBox dalla posizione manualmente mutata del cursore]]&lt;br /&gt;
&lt;br /&gt;
* [[Sovrascrivere mediante nuovi caratteri i caratteri già presenti in un TextBox]]&lt;br /&gt;
&lt;br /&gt;
== ToolTip ==&lt;br /&gt;
&lt;br /&gt;
* [[Chiudere un ToolTip anticipatamente]]&lt;br /&gt;
&lt;br /&gt;
* [[Modificare il colore e la dimensione del font del testo del ToolTip]]&lt;br /&gt;
&lt;br /&gt;
* [[Modificare la dimensione del ToolTip]]&lt;br /&gt;
&lt;br /&gt;
== Valori numerici, Operazioni matematiche ==&lt;br /&gt;
&lt;br /&gt;
* [[Arrotondamento di un numero con virgola mobile]]&lt;br /&gt;
&lt;br /&gt;
* [[Arrotondare un Intero al più prossimo valore inferiore multiplo di 2, 4, 8, 16, 32 e 64]]&lt;br /&gt;
&lt;br /&gt;
* [[Arrotondare un Intero al successivo multiplo di 2, 4, 8, 16, 32 e 64]]&lt;br /&gt;
&lt;br /&gt;
* [[Cercare un valore all'interno di un file aperto come un flusso di dati di tipo File]]&lt;br /&gt;
&lt;br /&gt;
* [[Cercare un valore all'interno di un file aperto come un flusso di dati di tipo Stringa]]&lt;br /&gt;
&lt;br /&gt;
* [[Calcolare i numeri di Fibonacci]]&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere di un numero il multiplo posto immediatamente dopo un altro numero]]&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere gli angoli acuti di un triangolo rettangolo dai cateti noti]]&lt;br /&gt;
&lt;br /&gt;
* [[Conversione da Base64]]&lt;br /&gt;
&lt;br /&gt;
* [[Conversione di un angolo da valori sessagesimali in decimali e viceversa]]&lt;br /&gt;
&lt;br /&gt;
* [[Conversione in Base64]]&lt;br /&gt;
&lt;br /&gt;
* [[Convertire in un tipo di dati numerico un valore letto in formato Stringa da un file]]&lt;br /&gt;
&lt;br /&gt;
* [[Convertire un numero da Decimale in Binario]]&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 a Esadecimale]]&lt;br /&gt;
&lt;br /&gt;
* [[Convertire un numero da rappresentazione Decimale a Ottale]]&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 esadecimale in binaria]]&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;
* [[Convertire un valore di tipo Float in una stringa con la funzione PyOS_double_to_string() della libreria libpython3]]&lt;br /&gt;
&lt;br /&gt;
* [[Convertire un valore numerico di tipo Float in una stringa di caratteri ASCII]]&lt;br /&gt;
&lt;br /&gt;
* [[Distinguere ogni byte della rappresentazione esadecimale di un valore decimale]]&lt;br /&gt;
&lt;br /&gt;
* [[Elevamento a potenza]]&lt;br /&gt;
&lt;br /&gt;
* [[Esempio di utilizzo delle funzioni esterne del API di GMP]]&lt;br /&gt;
&lt;br /&gt;
* [[Esponente di una potenza]]&lt;br /&gt;
&lt;br /&gt;
* [[Generare numeri casuali con le funzioni esterne del API di libglib-2.0]]&lt;br /&gt;
&lt;br /&gt;
* [[Generare numeri casuali con le funzioni esterne srand() e rand() di stdlib.h]]&lt;br /&gt;
&lt;br /&gt;
* [[Gestire numeri superiori al limite massimo supportato dal tipo Long]]&lt;br /&gt;
&lt;br /&gt;
* [[Invertire le cifre di un numero intero]]&lt;br /&gt;
&lt;br /&gt;
* [[Massimo Comun Divisore di due numeri con le sole risorse di Gambas]]&lt;br /&gt;
&lt;br /&gt;
* [[Minimo Comune Multiplo di due numeri con le sole risorse di Gambas]]&lt;br /&gt;
&lt;br /&gt;
* [[Notazione scientifica e notazione esponenziale in Gambas]]&lt;br /&gt;
&lt;br /&gt;
* [[Operazioni con precisione quadrupla a 128-bit con numeri in virgola mobile mediante la libreria quadmath.h]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere da un valore numerico i caratteri ASCII corrispondenti a ciascun byte componente il numero]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere dai suoi singoli dati-byte un valore numerico di tipo superiore al Byte]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere di un numero in virgola mobile la rappresentazione del separatore con il punto anziché con la virgola]]&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 numero più piccolo e quello più grande fra tre o più numeri mediante le funzioni esterne del API di libgsl]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere il resto da due operandi di tipo Float di una divisione con le risorse del API di Libm.so.6]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere la parte intera e quella decimale di un numero in virgola mobile]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere la rappresentazione come stringa in memoria di un valore numerico]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere numeri casuali di ambito Byte dai file-device /dev/random e /dev/urandom]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere un numero dalla sua memorizzazione in formato Big-Endian]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere un numero dalla sua memorizzazione in formato Little-Endian]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere un valore sempre compreso tra un numero massimo e un numero minimo stabiliti]] &lt;br /&gt;
&lt;br /&gt;
* [[Ottenere un valore numerico dalla rappresentazione in memoria come stringa]]&lt;br /&gt;
&lt;br /&gt;
* [[Rappresentare un numero in alcune basi numeriche]]&lt;br /&gt;
&lt;br /&gt;
* [[Rendere la sola parte decimale di un numero in virgola mobile come un numero di tipo Intero]]&lt;br /&gt;
&lt;br /&gt;
* [[Sapere il tipo di dato più piccolo in Gambas capace di contenere e rappresentare un numero]]&lt;br /&gt;
&lt;br /&gt;
* [[Sapere se la cifra delle unità di un numero è zero]]&lt;br /&gt;
&lt;br /&gt;
* [[Sapere se un numero è pari o dispari]]&lt;br /&gt;
&lt;br /&gt;
* [[Sapere se un numero rientra in un ambito definito di due valori]]&lt;br /&gt;
&lt;br /&gt;
* [[Scambiare i rispettivi valori fra due variabili]]&lt;br /&gt;
&lt;br /&gt;
* [[Troncare alcune cifre decimali in un valore in virgola mobile]]&lt;br /&gt;
&lt;br /&gt;
* [[Verificare se un numero è una potenza di 2]]&lt;br /&gt;
&lt;br /&gt;
== ValueBox ==&lt;br /&gt;
&lt;br /&gt;
* [[Modificare l'allineamento del valore numerico in un ValueBox]]&lt;br /&gt;
&lt;br /&gt;
* [[Rappresentare in un ValueBox un numero avente i punti delle migliaia e la virgola dei decimali]]&lt;br /&gt;
&lt;br /&gt;
* [[Scrivere testo in un ValueBox]]&lt;br /&gt;
&lt;br /&gt;
* [[Utilizzare in un ValueBox vari tipi di valori]]&lt;br /&gt;
&lt;br /&gt;
* [[Utilizzare l'evento _Change() in un ValueBox]]&lt;br /&gt;
&lt;br /&gt;
== Variabili in particolare ==&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere il nome di una variabile 'Pubblica']]&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere in runtime il numero identificatore di un tipo di dato di una variabile presente nel codice]]&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere via codice la quantità di memoria occupata da una variabile]]&lt;br /&gt;
&lt;br /&gt;
* [[Contenere valori di diverso tipo]]&lt;br /&gt;
&lt;br /&gt;
* [[Rendere esplicitamente una variabile quale elemento di un vettore]]&lt;br /&gt;
&lt;br /&gt;
* [[Usare come identificatore di variabile il nome di una parola chiave o di una funzione ovvero un carattere non consentito]]&lt;br /&gt;
&lt;br /&gt;
* [[Verificare l'indirizzo di memoria di una variabile]]&lt;br /&gt;
&lt;br /&gt;
== Video ==&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere con 'proc...fdinfo' la quantità dei dati elaborati di un file video]]&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere quale file video un programma sta eseguendo]]&lt;br /&gt;
&lt;br /&gt;
* [[Eseguire in streaming un video da youtube mediante l'oggetto WebView]]&lt;br /&gt;
&lt;br /&gt;
* [[Eseguire un file Video con il codice HTML]]&lt;br /&gt;
&lt;br /&gt;
* [[Eseguire un file Video con le funzioni esterne del API di Libmpv]]&lt;br /&gt;
&lt;br /&gt;
* [[Eseguire un file Video mediante il Metodo .Open() della Classe Desktop]]&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;B&amp;gt;[[La gestione dei dati video con la Classe MediaView del componente gb.media.form]]&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;B&amp;gt;[[La gestione del video e dei file video con il componente gb.media]]&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* [[La gestione del video e dei file video  con le funzioni esterne del API di GStreamer]]&lt;br /&gt;
&lt;br /&gt;
* [[La gestione del video e dei file video con le funzioni esterne del API di VLC]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere informazioni generali su flussi multimediali con le funzioni esterne del API di Quvi]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere informazioni generali sull'audio e sul video con le funzioni esterne del API di Libquicktime]]&lt;br /&gt;
&lt;br /&gt;
* [[Sapere con le funzioni esterne del API di Rhythmbox se un file contiene dati audio e/o video]]&lt;br /&gt;
&lt;br /&gt;
====i/o video====&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere i driver video disponibili nel sistema mediante le funzioni esterne del API di SDL2 o di SDL3]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere alcune informazioni sul dispositivo video di una webcam con le funzioni esterne del API di libv4l2]]&lt;br /&gt;
&lt;br /&gt;
== Watcher ==&lt;br /&gt;
&lt;br /&gt;
* [[Uso della classe Watcher]]&lt;br /&gt;
&lt;br /&gt;
== Web ==&lt;br /&gt;
&lt;br /&gt;
* [[Acquisire il codice HTML di una pagina web]]&lt;br /&gt;
&lt;br /&gt;
* [[Caricare una pagina web]]&lt;br /&gt;
&lt;br /&gt;
* [[Controllare i link contenuti da una pagina web]]&lt;br /&gt;
&lt;br /&gt;
* [[Decodificare con le risorse del API di Libidn i nomi di dominio internazionalizzati]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere il valore del colore di un pixel di una pagina web aperta con l'Oggetto WebView]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere l'immagine di una pagina web]]&lt;br /&gt;
&lt;br /&gt;
* [[Sapere se un indirizzo web è valido]]&lt;br /&gt;
&lt;br /&gt;
== WorkSpace ==&lt;br /&gt;
&lt;br /&gt;
* [[Uso della Classe WorkSpace]]&lt;/div&gt;</summary>
		<author><name>Vuott</name></author>
	</entry>
	<entry>
		<id>https://www.gambas-it.org/wiki/index.php?title=Guide_della_comunit%C3%A0&amp;diff=42755</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=42755"/>
		<updated>2025-11-11T09:14:18Z</updated>

		<summary type="html">&lt;p&gt;Vuott: /* ColumnView */&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;
== Array (Vettori) e Matrici ==&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;B&amp;gt;[[Array: creazione, modifica e riempimento]]&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;B&amp;gt;[[Array multidimensionali con numero determinato di elementi]]&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;B&amp;gt;[[Array multidimensionali con numero indeterminato di elementi]]&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* [[Array annidati]]&lt;br /&gt;
&lt;br /&gt;
* [[Array contenenti array di varie dimensioni]]&lt;br /&gt;
&lt;br /&gt;
* [[Array in linea]]&lt;br /&gt;
&lt;br /&gt;
* [[Accedere linearmente in scrittura ed in lettura ad una Matrice]]&lt;br /&gt;
&lt;br /&gt;
* [[Assegnare ad un vettore i valori contenuti da un'area di memoria puntata da un Puntatore]]&lt;br /&gt;
&lt;br /&gt;
* [[Assegnare ciascuna cifra di un numero a un elemento di un vettore di tipo Byte]]&lt;br /&gt;
&lt;br /&gt;
* [[Assegnare i byte dei dati di un numero agli elementi di un vettore di tipo Byte]]&lt;br /&gt;
&lt;br /&gt;
* [[Assegnare un vettore ad una variabile di tipo Object]]&lt;br /&gt;
&lt;br /&gt;
* [[Assegnare un vettore ad una variabile di tipo Puntatore]]&lt;br /&gt;
&lt;br /&gt;
* [[Configurazione, organizzazione ed impostazione dell'array secondo i sorgenti di Gambas]]&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere quale elemento di un vettore contiene un determinato valore]]&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere con i Puntatori i valori contenuti in un vettore]]&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere il valore numerico più alto contenuto da un vettore]]&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere la dimensione ed il numero di elementi di una Matrice]]&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere in un array di tipo Stringa la quantità maggiore di caratteri contenuta nei suoi elementi]]&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere in un array di tipo Stringa l'elemento che contiene la quantità maggiore di caratteri]]&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;
* &amp;lt;B&amp;gt;[[Copie di variabili array]]&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* [[Eliminare più elementi da un array]]&lt;br /&gt;
&lt;br /&gt;
* [[Emulare la funzione Asc() con il vettore di tipo Byte]]&lt;br /&gt;
&lt;br /&gt;
* [[Gestione di una coda mediante array in modo circolare]]&lt;br /&gt;
&lt;br /&gt;
* [[Invertire l'ordine dei valori contenuti dagli elementi di un vettore]]&lt;br /&gt;
&lt;br /&gt;
* [[Invertire l'ordine nelle coppie di byte dell'area di memoria di un vettore con la funzione esterna swab()]]&lt;br /&gt;
&lt;br /&gt;
* [[Leggere e scrivere in un vettore mediante i Memory Stream]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere il puntatore a una variabile vettoriale]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere un vettore di tipo Byte da una Stringa]]&lt;br /&gt;
&lt;br /&gt;
* [[Porre a zero i valori contenuti da un Vettore]]&lt;br /&gt;
&lt;br /&gt;
* [[Proprietà ReadOnly dell'Array (proprietà di sola lettura)]]&lt;br /&gt;
&lt;br /&gt;
* [[Raccogliere il valore contenuto nell'ultimo elemento di indice non conosciuto di un vettore restituito da una funzione]]&lt;br /&gt;
&lt;br /&gt;
* [[Scrivere in un vettore i dati di un file]]&lt;br /&gt;
&lt;br /&gt;
* [[Utilizzare un Vettore al posto di una Matrice]]&lt;br /&gt;
&lt;br /&gt;
== Balloon ==&lt;br /&gt;
&lt;br /&gt;
* [[Colorare il testo di un Balloon]]&lt;br /&gt;
&lt;br /&gt;
* [[Mostrare un'immagine in un Ballon]]&lt;br /&gt;
&lt;br /&gt;
* [[Posizionare arbitrariamente un Balloon]]&lt;br /&gt;
&lt;br /&gt;
== Bit - Operazioni sui Bit ==&lt;br /&gt;
&lt;br /&gt;
* [[Conversione Big-Endian/Little-Endian]]&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere di un numero la posizione del primo bit da destra impostato a 1]]&lt;br /&gt;
&lt;br /&gt;
* [[Effettuare con le funzioni di libglib-2.0 alcune operazioni sui bit di un valore di una variabile puntata da un Puntatore]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere il ''nibble'' alto ed il ''nibble'' basso di un numero]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere in Gambas il risultato di uno spostamento di bit scritto in linguaggio C]]&lt;br /&gt;
&lt;br /&gt;
* [[Porre a 0 oppure a 1 un bit di un numero]]&lt;br /&gt;
&lt;br /&gt;
* [[Sapere con le funzioni esterne del API di libglib-2.0 quanti bit sono necessari per contenere un numero]]&lt;br /&gt;
&lt;br /&gt;
* [[Sapere quanti bit posti ad 1 sono presenti in un numero]]&lt;br /&gt;
&lt;br /&gt;
* [[Sostituire gli operatori logici di spostamento dei bit con semplici operazioni]]&lt;br /&gt;
&lt;br /&gt;
* [[Sottrazione con operatori bitwise]]&lt;br /&gt;
&lt;br /&gt;
== Classi ==&lt;br /&gt;
&lt;br /&gt;
===Classi in generale===&lt;br /&gt;
&lt;br /&gt;
* [[Accedere alla Struttura della risorsa &amp;quot;Classe&amp;quot;, come dichiarata nei sorgenti di Gambas]]&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere le risorse possedute da una Classe]]&lt;br /&gt;
&lt;br /&gt;
* [[Rendere gli elementi di una Classe richiamabili da un progetto Gambas esterno]]&lt;br /&gt;
&lt;br /&gt;
* [[Usare una Classe come fosse una Funzione]]&lt;br /&gt;
&lt;br /&gt;
===Classi particolari native===&lt;br /&gt;
&lt;br /&gt;
* [[Aggiungere una funzione personalizzata alla Classe nativa String]]&lt;br /&gt;
&lt;br /&gt;
* [[La classe Action]]&lt;br /&gt;
&lt;br /&gt;
===Classi specifiche===&lt;br /&gt;
&lt;br /&gt;
* [[Creare da codice una Classe specifica]]&lt;br /&gt;
&lt;br /&gt;
* [[Variabile del tipo di una Classe specifica creata]]&lt;br /&gt;
&lt;br /&gt;
* [[Vettore del tipo di una Classe specifica creata]]&lt;br /&gt;
 &lt;br /&gt;
====Classi particolari realizzate della Comunità Gambas-it.org====&lt;br /&gt;
&lt;br /&gt;
* [[Clib]]&lt;br /&gt;
&lt;br /&gt;
* [[csvbox]]&lt;br /&gt;
&lt;br /&gt;
* [[CTable]]&lt;br /&gt;
&lt;br /&gt;
* [[Fifo]]&lt;br /&gt;
&lt;br /&gt;
* [[GLibrary]]&lt;br /&gt;
&lt;br /&gt;
* [[GridViewUtil]]&lt;br /&gt;
&lt;br /&gt;
* [[PdfWriter]]&lt;br /&gt;
&lt;br /&gt;
* [[TrasfImpLett]]&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;
* [[Collection]]&lt;br /&gt;
&lt;br /&gt;
* [[Confronto Array di Strutture verso Collezione di Classi]]&lt;br /&gt;
&lt;br /&gt;
* [[Definizione esplicita di una Collection]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere il valore attribuito a una chiave della 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 Metodo o una Proprietà della Classe di un Oggetto inserito in una Collection]]&lt;br /&gt;
&lt;br /&gt;
* [[Richiamare un'intera Collection nel campo di un'altra Collection]]&lt;br /&gt;
&lt;br /&gt;
== ColorInfo ==&lt;br /&gt;
&lt;br /&gt;
* [[Uso della classe ColorInfo]]&lt;br /&gt;
&lt;br /&gt;
== ColumnView ==&lt;br /&gt;
&lt;br /&gt;
* [[Aggiungere una colonna a una ColumnView]]&lt;br /&gt;
&lt;br /&gt;
* [[Aggiungere una riga a una ColumnView]]&lt;br /&gt;
&lt;br /&gt;
* [[Assegnare colori allo sfondo ed al testo di una riga selezionata di una ColumnView]]&lt;br /&gt;
&lt;br /&gt;
* [[Assegnare il testo a una cella della ColumnView]]&lt;br /&gt;
&lt;br /&gt;
* [[Dare il focus da codice a una riga di una ColumnView]]&lt;br /&gt;
&lt;br /&gt;
* [[Impostare la larghezza delle colonne in una ColumnView]]&lt;br /&gt;
&lt;br /&gt;
== ComboBox ==&lt;br /&gt;
&lt;br /&gt;
* [[ComboBox che consente di posizionarsi sulla prima ricorrenza di un item quando si digitano le sue prime lettere]]&lt;br /&gt;
* [[ComboBox che mostra immagini anziché caratteri alfanumerici]]&lt;br /&gt;
* [[ComboBox: creare una lista da codice]]&lt;br /&gt;
* [[Impostare il colore del testo di ogni elemento della lista del ComboBox]]&lt;br /&gt;
* [[Impostare il colore dello sfondo del ComboBox]]&lt;br /&gt;
* [[Ridimensionare la larghezza della finestra a cascata di un ComboBox in base alla lunghezza testuale di un elemento della lista]]&lt;br /&gt;
* [[Scegliere da codice un elemento presente in un ComboBox]]&lt;br /&gt;
* [[Scegliere da codice un indice del ComboBox]]&lt;br /&gt;
&lt;br /&gt;
==Come Compilare Gambas==&lt;br /&gt;
* [[Compilare Gambas]]&lt;br /&gt;
&lt;br /&gt;
== Componenti ==&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;B&amp;gt;[[Cosa è un Componente di Gambas]]&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* [[Attivare un Componente dinamicamente da codice]]&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere il nome del Componente di appartenenza di una Classe mediante i sorgenti di Gambas]]&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere le Classi possedute da un Componente]]&lt;br /&gt;
&lt;br /&gt;
* [[Utilizzare un Componente obsoleto]]&lt;br /&gt;
&lt;br /&gt;
=== Realizzazione dei Componenti in linguaggio Gambas ===&lt;br /&gt;
&lt;br /&gt;
* [[Come creare un Componente scritto in linguaggio Gambas]]&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;
* [[gb.strLib]]&lt;br /&gt;
&lt;br /&gt;
* [[gb.textpro]]&lt;br /&gt;
&lt;br /&gt;
* [[GridBox]]&lt;br /&gt;
&lt;br /&gt;
* [[INILib]]&lt;br /&gt;
&lt;br /&gt;
* [[InvBox]]&lt;br /&gt;
&lt;br /&gt;
* [[qrcodereader]]&lt;br /&gt;
&lt;br /&gt;
* [[XMLLib]]&lt;br /&gt;
&lt;br /&gt;
=== Realizzazione dei Componenti in linguaggio C ===&lt;br /&gt;
&lt;br /&gt;
* [[Creare un Componente per Gambas scritto in linguaggio C]]&lt;br /&gt;
&lt;br /&gt;
== CPU e Scheda Madre==&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere con alcune funzioni della libreria libc.so.6 il numero dei processori configurati e disponibili]]&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere il numero dei processori presenti nel proprio calcolatore con la Proprietà System.Cores]]&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere il numero dei processori presenti nel proprio calcolatore leggendo il file di sistema &amp;quot;cpuinfo&amp;quot;]]&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere la frequenza delle CPU mediante le funzioni esterne del API di Libcpufreq]]&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere la risoluzione dei clock hardware con le risorse esterne dichiarate nel file header &amp;quot;time.h&amp;quot;]]&lt;br /&gt;
&lt;br /&gt;
* [[Controllare la temperatura della CPU con le sole funzioni di Gambas]]&lt;br /&gt;
&lt;br /&gt;
* [[Controllare la temperatura dell'hardware mediante le funzioni del API di libsensors]]&lt;br /&gt;
&lt;br /&gt;
* [[Generare arbitrariamente un errore &amp;quot;CPU Time Limit Exceeded&amp;quot; con la funzione esterna vlimit()]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere alcune informazioni sulla CPU mediante l'API di Libavutil]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere alcune informazioni sulla CPU mediante l'API di Libcpuid]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere informazioni generali sulla CPU con le funzioni esterne del API di SDL2]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere informazioni generali sulla CPU con le sole risorse di Gambas]]&lt;br /&gt;
&lt;br /&gt;
* [[Verificare la frequenza delle CPU con le sole risorse di Gambas]]&lt;br /&gt;
&lt;br /&gt;
== Creazione pacchetti di installazione ==&lt;br /&gt;
&lt;br /&gt;
* [[Creare un AppImage firmata di un progetto Gambas]]&lt;br /&gt;
&lt;br /&gt;
== DBus ==&lt;br /&gt;
&lt;br /&gt;
* [[Introduzione a DBus]]&lt;br /&gt;
&lt;br /&gt;
* [[Inviare dati da un programma Gambas ad un altro mediante le risorse del Componente DBus]]&lt;br /&gt;
&lt;br /&gt;
== Desktop - Scrivania ==&lt;br /&gt;
&lt;br /&gt;
* [[Far mostrare sulla Scrivania i messaggi della specifica Desktop Notifications mediante le funzioni esterne del API di Libnotify]]&lt;br /&gt;
&lt;br /&gt;
* [[Individuare con precisione il percorso ed il nome della Scrivania]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere il valore di un pixel sulla Scrivania]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere informazioni sulle icone presenti sulla Scrivania]]&lt;br /&gt;
&lt;br /&gt;
== DesktopFile ==&lt;br /&gt;
&lt;br /&gt;
* [[Uso del Metodo .RunExec()]]&lt;br /&gt;
&lt;br /&gt;
== DesktopWatcher ==&lt;br /&gt;
&lt;br /&gt;
* [[Uso della classe DesktopWatcher]]&lt;br /&gt;
&lt;br /&gt;
== DesktopWindow ==&lt;br /&gt;
&lt;br /&gt;
* [[Uso della classe DesktopWindow]]&lt;br /&gt;
&lt;br /&gt;
== Dialog ==&lt;br /&gt;
&lt;br /&gt;
* [[Caricare in un Dialog più file da aprire in sequenza]]&lt;br /&gt;
&lt;br /&gt;
* [[Far mostrare in un Dialog l'estensione dell'ultimo file precedentemente aperto]]&lt;br /&gt;
&lt;br /&gt;
* [[Far mostrare in un Dialog una particolare estensione di file]]&lt;br /&gt;
&lt;br /&gt;
* [[Filtrare contemporaneamente con il Dialog.Filter più estensioni di file]]&lt;br /&gt;
&lt;br /&gt;
* [[Preimpostare il percorso della finestra del Dialog]]&lt;br /&gt;
&lt;br /&gt;
* [[Ridimensionare la finestra del Dialog da codice]]&lt;br /&gt;
&lt;br /&gt;
== DirView - FileView ==&lt;br /&gt;
&lt;br /&gt;
* [[Copiare un file utilizzando gli oggetti DirView e FileView]]&lt;br /&gt;
&lt;br /&gt;
* [[Mostrare con diversi colori i nomi dei file in una FileView]]&lt;br /&gt;
&lt;br /&gt;
== Drag &amp;amp; Drop ==&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;B&amp;gt;[[Codice essenziale per effettuare il Drag&amp;amp;Drop di un'immagine da un Controllo grafico in un altro]]&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;B&amp;gt;[[Codice essenziale per effettuare il Drag&amp;amp;Drop di un testo]]&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* [[Mantenere durante il Drag&amp;amp;Drop il cursore del mouse nel punto dell'immagine ove si è cliccato]]&lt;br /&gt;
&lt;br /&gt;
* [[Mostrare il contenuto di un file di testo con il Drag&amp;amp;Drop del file in un oggetto di testo]]&lt;br /&gt;
&lt;br /&gt;
* [[Mostrare un'immagine animata con il Drag&amp;amp;Drop del suo file in una MovieBox]]&lt;br /&gt;
&lt;br /&gt;
* [[Mostrare un'immagine con il Drag&amp;amp;Drop del suo file in una PictureBox o in una ImageView]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere il percorso di un file trasportato e rilasciato con Drag&amp;amp;Drop]]&lt;br /&gt;
&lt;br /&gt;
* [[Spostare Oggetti grafici con il Drag&amp;amp;Drop all'interno di un Contenitore]]&lt;br /&gt;
&lt;br /&gt;
== DrawingArea ==&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;B&amp;gt;[[Istruzioni essenziali per disegnare su una DrawingArea]]&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* [[Calcolo e rappresentazione grafica in una DrawingArea del Seno e del Coseno]]&lt;br /&gt;
&lt;br /&gt;
* [[Creare e distruggere un Controllo grafico in una DrawingArea]]&lt;br /&gt;
&lt;br /&gt;
* [[Creare, spostare e distruggere un'immagine in una DrawingArea]]&lt;br /&gt;
&lt;br /&gt;
* [[Curvare il testo in una DrawingArea]]&lt;br /&gt;
&lt;br /&gt;
* [[Disegnare in una DrawingArea dei punti]]&lt;br /&gt;
&lt;br /&gt;
* [[Disegnare in una DrawingArea due immagini sovrapposte anche consentendo il cambio di opacità di quella disegnata sopra]]&lt;br /&gt;
&lt;br /&gt;
* [[Disegnare in una DrawingArea l'intersezione perpendicolare di due linee]]&lt;br /&gt;
&lt;br /&gt;
* [[Disegnare in una DrawingArea linee mediante codice]]&lt;br /&gt;
&lt;br /&gt;
* [[Disegnare in una DrawingArea linee rette con il mouse]]&lt;br /&gt;
&lt;br /&gt;
* [[Disegnare in una DrawingArea sulla base dei punti cliccati un parallelogramma con angoli retti]]&lt;br /&gt;
&lt;br /&gt;
* [[Disegnare in una DrawingArea un carattere punto per punto]]&lt;br /&gt;
&lt;br /&gt;
* [[Disegnare in una DrawingArea un cerchio]]&lt;br /&gt;
&lt;br /&gt;
* [[Disegnare in una DrawingArea un eptagono regolare]]&lt;br /&gt;
&lt;br /&gt;
* [[Disegnare in una DrawingArea un esagono regolare]]&lt;br /&gt;
&lt;br /&gt;
* [[Disegnare in una DrawingArea un goniometro]]&lt;br /&gt;
&lt;br /&gt;
* [[Disegnare in una DrawingArea un ottagono regolare]]&lt;br /&gt;
&lt;br /&gt;
* [[Disegnare in una DrawingArea un pentagono regolare]]&lt;br /&gt;
&lt;br /&gt;
* [[Disegnare in una DrawingArea un poligono]]&lt;br /&gt;
&lt;br /&gt;
* [[Disegnare in una DrawingArea un rettangolo]]&lt;br /&gt;
&lt;br /&gt;
* [[Disegnare in una DrawingArea un rettangolo colorato con distinzione sfumata fra i colori]]&lt;br /&gt;
&lt;br /&gt;
* [[Disegnare in una DrawingArea un rombo]]&lt;br /&gt;
&lt;br /&gt;
* [[Disegnare in una DrawingArea un romboide]]&lt;br /&gt;
&lt;br /&gt;
* [[Disegnare in una DrawingArea un triangolo]]&lt;br /&gt;
&lt;br /&gt;
* [[Disegnare in una DrawingArea una figura piana]]&lt;br /&gt;
&lt;br /&gt;
* [[Disegnare in una DrawingArea una spirale]]&lt;br /&gt;
&lt;br /&gt;
* [[Disegnare un Button contenente un'icona e un testo mediante la DrawingArea]]&lt;br /&gt;
&lt;br /&gt;
* [[Disegnare un misuratore analogico su una DrawingArea]]&lt;br /&gt;
&lt;br /&gt;
* [[Disegnare un orologio su una DrawingArea prendendo l'orario del sistema]]&lt;br /&gt;
&lt;br /&gt;
* [[Drag-Drop di un testo in una DrawingArea]]&lt;br /&gt;
&lt;br /&gt;
* [[Drag-Drop di un'immagine in una DrawingArea]]&lt;br /&gt;
&lt;br /&gt;
* [[Evidenziare il puntatore del mouse quando si clicca sulla DrawingArea]]&lt;br /&gt;
&lt;br /&gt;
* [[Far scorrere un testo in una DrawingArea]]&lt;br /&gt;
&lt;br /&gt;
* [[Generare un file immagine da una DrawingArea]]&lt;br /&gt;
&lt;br /&gt;
* [[Generare un file PDF da una DrawingArea]]&lt;br /&gt;
&lt;br /&gt;
* [[Impedire in una DrawingArea che si esegua il codice presente nell'Evento &amp;quot;_Draw()&amp;quot; , qualora sia sollevato arbitrariamente più di una volta]]&lt;br /&gt;
&lt;br /&gt;
* [[Impostare l'opacità di un disegno in una DrawingArea]]&lt;br /&gt;
&lt;br /&gt;
* [[Mostrare alcune sfumature di un colore in una DrawingArea]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere il valore di un pixel in una DrawingArea]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere l'effetto della gomma per cancellare in una DrawingArea]]&lt;br /&gt;
&lt;br /&gt;
* [[Passare direttamente ad un oggetto Image i dati grezzi dei pixel di una DrawingArea mediante le risorse del API di X11]]&lt;br /&gt;
&lt;br /&gt;
* [[Rappresentare su una DrawingArea l'onda oscillante di una serie di dati]]&lt;br /&gt;
&lt;br /&gt;
* [[Ruotare il testo in una DrawingArea]]&lt;br /&gt;
&lt;br /&gt;
* [[Ruotare qualsiasi elemento da disegnare in una DrawingArea]]&lt;br /&gt;
&lt;br /&gt;
* [[Ruotare un arco in una DrawingArea]]&lt;br /&gt;
&lt;br /&gt;
* [[Ruotare un cerchio disegnato in una DrawingArea]]&lt;br /&gt;
&lt;br /&gt;
* [[Ruotare un cubo in una DrawingArea]]&lt;br /&gt;
&lt;br /&gt;
* [[Ruotare un dodecaedro in una DrawingArea]]&lt;br /&gt;
&lt;br /&gt;
* [[Ruotare un eptagono in una DrawingArea]]&lt;br /&gt;
&lt;br /&gt;
* [[Ruotare un esagono in una DrawingArea]]&lt;br /&gt;
&lt;br /&gt;
* [[Ruotare un oloide in una DrawingArea]]&lt;br /&gt;
&lt;br /&gt;
* [[Ruotare un ottaedro in una DrawingArea]]&lt;br /&gt;
&lt;br /&gt;
* [[Ruotare un ottagono in una DrawingArea]]&lt;br /&gt;
&lt;br /&gt;
* [[Ruotare un pentagono in una DrawingArea]]&lt;br /&gt;
&lt;br /&gt;
* [[Ruotare un prisma in una DrawingArea]]&lt;br /&gt;
&lt;br /&gt;
* [[Ruotare un quadrato ed un rettangolo in una DrawingArea]]&lt;br /&gt;
 &lt;br /&gt;
* [[Ruotare un rombo in una DrawingArea]]&lt;br /&gt;
&lt;br /&gt;
* [[Ruotare un romboide in una DrawingArea]]&lt;br /&gt;
&lt;br /&gt;
* [[Ruotare un triangolo in una DrawingArea]]&lt;br /&gt;
&lt;br /&gt;
* [[Ruotare una figura piana intorno a una circonferenza in una DrawingArea]]&lt;br /&gt;
&lt;br /&gt;
* [[Ruotare una piramide in una DrawingArea]]&lt;br /&gt;
&lt;br /&gt;
* [[Ruotare una sfera in una DrawingArea]]&lt;br /&gt;
&lt;br /&gt;
* [[Ruotare un'immagine sul proprio asse centrale 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;
* [[Spostare con il mouse senza Drag&amp;amp;Drop un'immagine caricata in una DrawingArea]]&lt;br /&gt;
&lt;br /&gt;
* [[Spostare con il mouse un cerchio in una DrawingArea]]&lt;br /&gt;
&lt;br /&gt;
* [[Spostare con il mouse un Controllo grafico generato in una DrawingArea]]&lt;br /&gt;
&lt;br /&gt;
* [[Spostare con il mouse un rettangolo in una DrawingArea]]&lt;br /&gt;
&lt;br /&gt;
* [[Spostare con il mouse un triangolo in una DrawingArea]]&lt;br /&gt;
&lt;br /&gt;
* [[Spostare con il mouse un'ellisse in una DrawingArea]]&lt;br /&gt;
&lt;br /&gt;
* [[Stampare il contenuto di una DrawingArea]]&lt;br /&gt;
&lt;br /&gt;
== File e Directory ==&lt;br /&gt;
&lt;br /&gt;
* [[Aprire un file mediante la Classe 'DesktopFile' con il programma al quale è associato]]&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;
* [[Chiudere un file]]&lt;br /&gt;
&lt;br /&gt;
* [[Comprimere un file in un file compresso .zip mediante le funzioni esterne del API di libzip]]&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere a quale applicazione è associato un tipo di file]]&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere caratteristiche generali dei file]]&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere ed impostare i permessi di un file]]&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere i permessi di un file mediante le funzioni esterne del API di libgio-2.0]]&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere il file referenziato da un collegamento simbolico]]&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere il mime-type di un file  mediante le funzioni esterne del API di libgio-2.0]]&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere il mime-type di un file  mediante le funzioni esterne del API di libmagic]]&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere il mime-type di un file mediante le sole risorse di Gambas]]&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere il tipo di file mediante le funzioni esterne del API di libgio-2.0]]&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere il tipo di file mediante le funzioni esterne del API di libglib-2.0]]&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere la data di accesso e di modifica di un file con le funzioni esterne del API di libgio-2.0]]&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere la dimensione di un file]]&lt;br /&gt;
&lt;br /&gt;
* [[Convertire con la funzione g_filename_from_uri() di libglib-2.0 la URI di un file nel corrispondente identificativo comunemente usato]]&lt;br /&gt;
&lt;br /&gt;
* [[Convertire con la funzione g_filename_to_uri() di libglib-2.0 il percorso identificativo di un file nella sua corrispondente URI]]&lt;br /&gt;
&lt;br /&gt;
* [[Copiare ricorsivamente una cartella]]&lt;br /&gt;
&lt;br /&gt;
* [[Creare un file e scrivervi dati con le funzioni esterne della libreria libgio-2.0]]&lt;br /&gt;
&lt;br /&gt;
* [[Creare un file bash]]&lt;br /&gt;
&lt;br /&gt;
* [[Creare un link simbolico di un file]]&lt;br /&gt;
&lt;br /&gt;
* [[Controllare l'uguaglianza di due file mediante le funzioni esterne del API di libgio-2.0]]&lt;br /&gt;
&lt;br /&gt;
* [[Effettuare una copia di un file e verificarne la progressione]]&lt;br /&gt;
&lt;br /&gt;
* [[Eliminare un byte all'interno di un file binario]]&lt;br /&gt;
&lt;br /&gt;
* [[Eliminare un file mediante le funzioni esterne del API di libglib-2.0]]&lt;br /&gt;
&lt;br /&gt;
* [[Estrarre con le funzioni del API di libzip i file contenuti da un file compresso .zip]]&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;
* [[Evitare l'errore &amp;quot;Stream chiuso&amp;quot; dopo aver chiuso un flusso di dati]]&lt;br /&gt;
&lt;br /&gt;
* [[Identificare un tipo di file dalla sua estensione]]&lt;br /&gt;
&lt;br /&gt;
* [[Impostazione dei permessi di un file con la funzione 'g_chmod' del API di libglib-2.0]]&lt;br /&gt;
&lt;br /&gt;
* [[L'oggetto File secondo i sorgenti di Gambas]]&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 il contenuto di una Directory mediante le risorse dichiarate nel file header &amp;quot;dirent.h&amp;quot;]]&lt;br /&gt;
&lt;br /&gt;
* [[Leggere in una cartella con le sole risorse di Gambas]]&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;
* [[Leggere un file di testo con carattere di fine riga di codifica MAC]]&lt;br /&gt;
&lt;br /&gt;
* [[Modificare le date di accesso e di modifica dell'inode di un file con le risorse esterne di utime.h]]&lt;br /&gt;
&lt;br /&gt;
* [[Modificare o eliminare una riga in un file di testo]]&lt;br /&gt;
&lt;br /&gt;
* [[Monitorare con le funzioni esterne del API di libgio-2.0 le modifiche apportate ad un file]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere alcune informazioni generali sui file]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere all'apertura di un file un Puntatore anziché una variabile di tipo File]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere il nome di un file mediante le funzioni esterne del API di libgio-2.0]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere il percorso di un file, associato a un programma .gambas, aprendolo con un doppio-clic]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere il percorso di un file trasportato e rilasciato con Drag&amp;amp;Drop]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere il solo nome ed il solo percorso di un file con le funzioni esterne del API di libglib-2.0]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere l'intero percorso di un file mediante le funzioni esterne del API di libgio-2.0]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere la directory di appartenenza di un file mediante le funzioni esterne del API di libgio-2.0]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere un file coerente da dati con rappresentazione come stringa in memoria]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere un numero dalla sua memorizzazione in formato Big-Endian]]&lt;br /&gt;
&lt;br /&gt;
* [[Percorso assoluto e percorso relativo dei file]]&lt;br /&gt;
&lt;br /&gt;
* [[Porre sotto osservazione con Read Watch due o più file]]&lt;br /&gt;
&lt;br /&gt;
* [[Raccogliere solo alcune righe all'interno di un file di testo]]&lt;br /&gt;
&lt;br /&gt;
* [[Reindirizzare lo standard output con Output To]]&lt;br /&gt;
&lt;br /&gt;
* [[Richiamare un file dalla Home]]&lt;br /&gt;
&lt;br /&gt;
* [[Rinominare un file mediante le funzioni esterne del API di libglib-2.0]]&lt;br /&gt;
&lt;br /&gt;
* [[Salvare i byte-dati di un file in un file di testo]]&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 con le risorse del API di libglib-2.0 se il percorso di un file è un percorso assoluto]]&lt;br /&gt;
&lt;br /&gt;
* [[Sapere in tempo reale se un file di nome conosciuto viene modificato o distrutto]]&lt;br /&gt;
&lt;br /&gt;
* [[Sapere l'ordine dei byte utilizzato dal sistema per salvare i dati]]&lt;br /&gt;
&lt;br /&gt;
* [[Sapere quale file è stato creato per ultimo]]&lt;br /&gt;
&lt;br /&gt;
* [[Sapere se un file di nome sconosciuto è stato creato o distrutto]]&lt;br /&gt;
&lt;br /&gt;
* [[Sapere se un file esiste mediante le funzioni esterne del API di libgio-2.0]]&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 un file di testo]]&lt;br /&gt;
&lt;br /&gt;
* [[Spostare un file nel Cestino e ripristinarlo nella sua Cartella di origine]]&lt;br /&gt;
&lt;br /&gt;
* [[Troncare un file ad una determinata dimensione con la funzione esterna truncate()]]&lt;br /&gt;
&lt;br /&gt;
* [[Verificare l'esistenza di una directory]]&lt;br /&gt;
&lt;br /&gt;
== FileChooser ==&lt;br /&gt;
&lt;br /&gt;
* [[Impedire in un FileChooser che facendo doppio-clic su un file, ne venga richiesta la sovrascrittura]]&lt;br /&gt;
&lt;br /&gt;
* [[Impostare da codice la modalità di visualizzazione interna dei file in un FileChooser]]&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, Finestre e Contenitori ==&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 e disegnarvi una scacchiera con le funzioni del API di SDL2]]&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 libgtk-3]]&lt;br /&gt;
&lt;br /&gt;
* [[Creare una finestra mediante le funzioni del API di SDL2]]&lt;br /&gt;
&lt;br /&gt;
* [[Creare una finestra mediante le funzioni del API di X11]]&lt;br /&gt;
&lt;br /&gt;
* [[Creare una finestra mediante le funzioni del API di XCB]]&lt;br /&gt;
&lt;br /&gt;
* [[Creare un file immagine dagli oggetti presenti in un Contenitore]]&lt;br /&gt;
&lt;br /&gt;
* [[Creare un Form trasparente]]&lt;br /&gt;
&lt;br /&gt;
* [[Dimensionare il Form o un'altra finestra considerando la presenza della barra delle applicazioni sulla Scrivania]]&lt;br /&gt;
&lt;br /&gt;
* [[Evitare la perdita di memoria chiudendo forzatamente un Form]]&lt;br /&gt;
&lt;br /&gt;
* [[Evento Form_Activate e sua possibile sostituzione]]&lt;br /&gt;
&lt;br /&gt;
* [[Impedire l'apertura di un Form secondario più di una volta]]&lt;br /&gt;
&lt;br /&gt;
* [[Impedire la chiusura di un Form quando si clicca sulla &amp;quot;X&amp;quot; nell'angolo in alto a destra]]&lt;br /&gt;
&lt;br /&gt;
* [[Inglobare un Form o una finestra in un altro suo Form o finestra del medesimo programma]]&lt;br /&gt;
&lt;br /&gt;
* [[Mantenere il Form di un'applicazione Gambas sempre in primo piano]]&lt;br /&gt;
&lt;br /&gt;
* [[Mostrare una immagine JPEG in una finestra con le funzioni del API di X11 e di Libjpeg]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere un'immagine del Form]]&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 valori e altre risorse da un Form principale a un Form secondario]]&lt;br /&gt;
&lt;br /&gt;
* [[Passare valori e altre risorse da un Form secondario a un Form principale]]&lt;br /&gt;
&lt;br /&gt;
* [[Rapporto fra ShowModal ed il Metodo Form.Close]]&lt;br /&gt;
&lt;br /&gt;
* [[Referenziare in modo appropriato lo spazio all'interno di un Contenitore rispetto ai suoi Oggetti figli]]&lt;br /&gt;
&lt;br /&gt;
* [[Restituire ad un Form un valore passato ad Form secondario]]&lt;br /&gt;
&lt;br /&gt;
* [[Semitrasparenza di un Form]]&lt;br /&gt;
&lt;br /&gt;
* [[Simulare il posizionamento di alcuni ToolButton sulla barra del titolo della finestra]]&lt;br /&gt;
&lt;br /&gt;
* [[Sollevare l'evento _Resize al ridimensionamento di un Form secondario]]&lt;br /&gt;
&lt;br /&gt;
* [[Spostare un Form con il mouse sulla Scrivania]]&lt;br /&gt;
&lt;br /&gt;
* [[Verificare se un Form è attivo]]&lt;br /&gt;
&lt;br /&gt;
== Funzioni ==&lt;br /&gt;
&lt;br /&gt;
* [[Differenza fra Sub, Procedure e Function]]&lt;br /&gt;
&lt;br /&gt;
* [[Emulare i Puntatori a Funzione del linguaggio C mediante gli Oggetti]]&lt;br /&gt;
&lt;br /&gt;
* [[Gestire Funzioni come oggetti]]&lt;br /&gt;
&lt;br /&gt;
* [[Passaggio delle Funzioni di Callback alle Funzioni Callback]]&lt;br /&gt;
&lt;br /&gt;
* [[Passaggio di un argomento per 'indirizzo' ad una Funzione]]&lt;br /&gt;
&lt;br /&gt;
* [[Passare a una funzione un numero imprecisato di argomenti]]&lt;br /&gt;
&lt;br /&gt;
* [[Scrivere una Funzione]]&lt;br /&gt;
&lt;br /&gt;
== Gambas - IDE di Gambas ==&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere la versione di Gambas]]&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere le parole-chiave usate in Gambas]]&lt;br /&gt;
&lt;br /&gt;
* [[Far apparire un commento a una risorsa nella finestrina guida nell'editor del codice]]&lt;br /&gt;
&lt;br /&gt;
* [[Icone messe a disposizione da Gambas]]&lt;br /&gt;
&lt;br /&gt;
* [[Individuare in un file compilato .gambas gli eventuali file esterni in esso allegati]]&lt;br /&gt;
&lt;br /&gt;
* [[Individuare la cartella principale dei file sorgenti di Gambas contenente la sub-cartella di un file immagine]]&lt;br /&gt;
&lt;br /&gt;
* [[La cartella ove sono salvati in copia i file delle informazioni della wiki ufficiale sulle risorse di Gambas]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere l'indirizzo effettivo dei file ospitati in un progetto Gambas]]&lt;br /&gt;
&lt;br /&gt;
* [[Ripristinare nell'IDE di Gambas le voci del Menu se disabilitate]]&lt;br /&gt;
&lt;br /&gt;
* [[Visualizzare tutti gli elementi rilevanti di Gambas contenuti dal codice di un progetto]]&lt;br /&gt;
&lt;br /&gt;
== Gambas con HTML e JavaScript ==&lt;br /&gt;
&lt;br /&gt;
* [[Gambas con HTML e JavaScript - Uso necessario dell'oggetto WebView]]&lt;br /&gt;
&lt;br /&gt;
==== Applicazioni specifiche ====&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 mediante codice HTML]]&lt;br /&gt;
&lt;br /&gt;
* [[Leggere un valore generato da un codice HTML/JavaScript]]&lt;br /&gt;
&lt;br /&gt;
* [[Mostrare una finestra tipo MessageBox mediante codice HTML]]&lt;br /&gt;
&lt;br /&gt;
* [[Testo scorrevole dall'alto verso il basso e viceversa]]&lt;br /&gt;
&lt;br /&gt;
== Gambas e Arduino ==&lt;br /&gt;
&lt;br /&gt;
* [[Far interagire Gambas con Arduino]]&lt;br /&gt;
&lt;br /&gt;
* [[Inviare dati ad Arduino]]&lt;br /&gt;
&lt;br /&gt;
* [[Ricevere dati da Arduino]]&lt;br /&gt;
&lt;br /&gt;
* [[Ricevere da Arduino un tipo di dato di dimensione superiore al Byte]]&lt;br /&gt;
&lt;br /&gt;
* [[Ricevere una Struttura da Arduino]]&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 Basi di Dati ==&lt;br /&gt;
&lt;br /&gt;
* [[Installazione Server PostgreSQL]]&lt;br /&gt;
&lt;br /&gt;
== Gestione dei dati audio e dei file audio ==&lt;br /&gt;
&lt;br /&gt;
* [[Analizzare con le sole risorse di Gambas la frequenza di un audio presente in un file WAV]]&lt;br /&gt;
&lt;br /&gt;
* [[Calcolare i beat per minuto (BpM) di un file audio con le funzioni esterne del API di Libaubio]]&lt;br /&gt;
&lt;br /&gt;
* [[Calcolare la durata di un file MP3 con le sole risorse native di Gambas]]&lt;br /&gt;
&lt;br /&gt;
* [[Calcolare la durata di un file OGG con le sole risorse native di Gambas]]&lt;br /&gt;
&lt;br /&gt;
* [[Calcolare la durata di un file WAV con le sole risorse native di Gambas]]&lt;br /&gt;
&lt;br /&gt;
* [[Calcolare la potenza di picco e di ampiezza di un file WAV con le funzioni esterne del API di Libaudiofile]]&lt;br /&gt;
&lt;br /&gt;
* [[Calcolare la quantità di dati audio grezzi di un file WAV necessari per eseguire tot secondi di audio]]&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere alcune informazioni generali di un file OGG con le sole risorse di Gambas]]&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere il bitrate di un file MP3 con le sole risorse di Gambas]]&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere il bit depth di un file MP3 con le sole risorse di Gambas]]&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere il bit depth di un file OGG con le sole risorse di Gambas]]&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere in tempo reale con &amp;quot;proc...fdinfo&amp;quot; la quantità dei dati elaborati di un file audio]]&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere in tempo reale la quantità di frame audio processati dalla scheda audio]]&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere la frequenza di campionamento di un file MP3 con le sole risorse di Gambas]]&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere la quantità di canali di un file MP3 con le sole risorse di Gambas]]&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere la versione e il layer di un file MP3 con le sole risorse di Gambas]]&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere quale file audio un programma sta eseguendo]]&lt;br /&gt;
&lt;br /&gt;
* [[Convertire un file audio in formato OggVorbis con le funzioni esterne del API di libfishsound, libsndfile e liboggz]]&lt;br /&gt;
&lt;br /&gt;
* [[Convertire un file audio in formato OggVorbis con le funzioni esterne del API di libsndfile]]&lt;br /&gt;
&lt;br /&gt;
* [[Convertire un file audio in testo con le risorse del API di Sndfile]]&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 le funzioni esterne del API di Faac]]&lt;br /&gt;
&lt;br /&gt;
* [[Convertire un file WAV in formato MP3 con le funzioni esterne del API di Lame]]&lt;br /&gt;
&lt;br /&gt;
* [[Convertire un file WAV in formato OggVorbis con le funzioni esterne del API di libvorbisfile, libvorbisenc e libogg]]&lt;br /&gt;
&lt;br /&gt;
* [[Creare il blocco d'intestazione di un file WAV avendo dati audio grezzi]]&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;FONT Color=blue&amp;gt;[[Creare un Client di Jack con le funzioni esterne del API di libjack]]&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* [[Creare un Client di Jack con le funzioni esterne del API di libJack e GStreamer]]&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;
* [[Decomprimere e decodificare 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]]&lt;br /&gt;
&lt;br /&gt;
* [[Eseguire un file audio mediante il Metodo .Open() della Classe Desktop]]&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;B&amp;gt;[[Eseguire un file audio mediante l'oggetto MediaView del componente gb.media.form]]&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* [[Eseguire un file audio mediante le funzioni esterne del API di Alsa e SndFile]]&lt;br /&gt;
&lt;br /&gt;
* [[Eseguire un file audio mediante le funzioni esterne del API di GSound]]&lt;br /&gt;
&lt;br /&gt;
* [[Eseguire un file audio mediante le funzioni esterne del API di libaudiofile e di Alsa]]&lt;br /&gt;
&lt;br /&gt;
* [[Eseguire un file audio mediante le funzioni esterne del API di Mpv]]&lt;br /&gt;
&lt;br /&gt;
* [[Eseguire un file audio mediante le funzioni esterne del API di PortAudio e SndFile]]&lt;br /&gt;
&lt;br /&gt;
* [[Eseguire un file audio mediante le funzioni esterne del API di Rhythmbox]]&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 Flite]]&lt;br /&gt;
&lt;br /&gt;
* [[Eseguire un file WAV mediante le funzioni esterne del API di libaudio e di Alsa]]&lt;br /&gt;
&lt;br /&gt;
* [[Estrarre da un file FLAC i dati dell'immagine contenuta]]&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 dati audio grezzi mediante le sole risorse di Gambas]]&lt;br /&gt;
&lt;br /&gt;
* [[Estrarre i TAG da un file MP3 con le funzioni esterne del API di Id3tag]]&lt;br /&gt;
&lt;br /&gt;
* [[Estrarre i TAG da un file MP3 con le sole funzioni di Gambas]]&lt;br /&gt;
&lt;br /&gt;
* [[Estrarre i TAG da un file OggVorbis con le sole funzioni di Gambas]]&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 audio MOD con le sole risorse di Gambas]]&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 da un file VOC con le sole risorse di Gambas]]&lt;br /&gt;
&lt;br /&gt;
* [[Estrarre informazioni e TAG da file audio con le funzioni esterne del API di Libtag_c]]&lt;br /&gt;
&lt;br /&gt;
* [[Estrarre informazioni e TAG da un file audio con le funzioni esterne del API di SndFile]]&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 generali da un file audio aiff 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 Libaudiofile]]&lt;br /&gt;
&lt;br /&gt;
* [[Estrarre informazioni generali da un file audio flac]]&lt;br /&gt;
&lt;br /&gt;
* [[Estrarre l'immagine contenuta in un file MP3 con le sole risorse di Gambas]]&lt;br /&gt;
&lt;br /&gt;
* [[Fondere insieme due file WAV]]&lt;br /&gt;
&lt;br /&gt;
* [[Generare un'onda sinusoidale]]&lt;br /&gt;
&lt;br /&gt;
* [[Individuare le frequenze presenti in un'onda audio con le funzioni esterne della libreria Libaubio]]&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;B&amp;gt;[[La gestione dei file audio mediante il componente gb.openal]]&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;B&amp;gt;[[La gestione dei file audio mediante il componente gb.sdl2.audio]]&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* [[La gestione dei file audio mediante le funzioni esterne del API di Allegro 5]]&lt;br /&gt;
&lt;br /&gt;
* [[La gestione dei file audio mediante le funzioni esterne del API di Canberra]]&lt;br /&gt;
&lt;br /&gt;
* [[La gestione dei file audio mediante le funzioni esterne del API di GStreamer]]&lt;br /&gt;
&lt;br /&gt;
* [[La gestione dei file audio mediante le funzioni esterne del API di MikMod]]&lt;br /&gt;
&lt;br /&gt;
* [[La gestione dei file audio mediante le funzioni esterne del API di Mpeg3]]&lt;br /&gt;
&lt;br /&gt;
* [[La gestione dei file audio mediante le funzioni esterne del API di mpg123]]&lt;br /&gt;
&lt;br /&gt;
* [[La gestione dei file audio mediante le funzioni esterne del API di Sox]]&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;B&amp;gt;[[La gestione dell'audio e dei file audio mediante il componente gb.media]]&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* [[La gestione dell'audio e dei file audio mediante le funzioni esterne del API di ALSA]]&lt;br /&gt;
&lt;br /&gt;
* [[La gestione dell'audio e dei file audio mediante le funzioni esterne del API di LibAo]]&lt;br /&gt;
&lt;br /&gt;
* [[La gestione dell'audio e dei file audio mediante le funzioni esterne del API di OpenAL]]&lt;br /&gt;
&lt;br /&gt;
* [[La gestione dell'audio e dei file audio mediante le funzioni esterne del API di Opus]]&lt;br /&gt;
&lt;br /&gt;
* [[La gestione dell'audio e dei file audio mediante le funzioni esterne del API di PulseAudio]]&lt;br /&gt;
&lt;br /&gt;
* [[La gestione dell'audio e dei file audio mediante le funzioni esterne del API di SDL2 e di SDL3]]&lt;br /&gt;
&lt;br /&gt;
* [[La gestione dell'audio e dei file audio mediante le funzioni esterne del API di Sndio]]&lt;br /&gt;
&lt;br /&gt;
* [[La gestione dell'audio e dei file audio mediante le funzioni esterne del API di VLC]]&lt;br /&gt;
&lt;br /&gt;
* [[La struttura di un file MPEG]]&lt;br /&gt;
&lt;br /&gt;
* [[Modificare il volume audio di un file WAV mediante le sole risorse di Gambas]]&lt;br /&gt;
&lt;br /&gt;
* [[Modificare il volume e la frequenza di campionamento di file audio WAV e AIFF con l'API di Libaudio]] &lt;br /&gt;
&lt;br /&gt;
* [[Modificare la frequenza di campionamento di un file audio con l'API di Libresample e Libsndfile]]&lt;br /&gt;
&lt;br /&gt;
* [[Modificare la frequenza di campionamento di un file audio con l' API di Libsamplerate e Libsndfile]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere un file WAV da un file Midi con le funzioni esterne del API di FluidSynth]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere un file WAV da un file Midi con le funzioni esterne del API di WildMidi]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere uno spettrogramma audio da file WAV PCM 16bit con le sole funzioni di Gambas]]&lt;br /&gt;
&lt;br /&gt;
* [[Sapere con le funzioni esterne del API di Rhythmbox se un file contiene dati audio e/o video]]&lt;br /&gt;
&lt;br /&gt;
* [[Suddividere in due o più parti coerenti e funzionali un file audio mp3]]&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;
* [[Registrare in tempo reale il flusso di dati audio di una radio WEB con le risorse della Classe HttpClient di Gambas]]&lt;br /&gt;
&lt;br /&gt;
* [[Registrare in tempo reale in un file l'audio di una radio WEB con le funzioni esterne del API di VLC]]&lt;br /&gt;
&lt;br /&gt;
* [[Riproduzione dell'audio di radio WEB con il Componente gb.media]]&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;
* [[Riproduzione e contemporanea registrazione dell'audio di radio WEB mediante il Componente gb.media]]&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;
* [[Conoscere con le funzioni esterne di PortAudio i dispositivi audio presenti nel sistema]]&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere con le funzioni esterne di RtAudio i dispositivi audio presenti nel sistema]]&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere con le funzioni esterne di SDL2 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 con le sole risorse di Gambas]]&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere la durata in secondi del Tempo Delta fra due Eventi Midi]]&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere la lunghezza in byte di ciascuna traccia MTrk di un file Midi]]&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere quale file Midi un programma sta eseguendo]]&lt;br /&gt;
&lt;br /&gt;
* [[Conversione del Tempo Delta fra due eventi Midi dai secondi nel valore esadecimale in formato &amp;quot;a lunghezza variabile&amp;quot;]]&lt;br /&gt;
&lt;br /&gt;
* [[Convertire i dati grezzi delle note del messaggio Midi &amp;quot;NoteOn&amp;quot; nei corrispondenti simboli del protocollo ABC di notazione musicale]]&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;
* [[Emulare con il Midi il suono del bip prodotto dall'altoparlante del PC]]&lt;br /&gt;
&lt;br /&gt;
* [[Eseguire un file MIDI mediante il codice html]]&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;B&amp;gt;[[Eseguire un file MIDI mediante il componente gb.openal]]&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;B&amp;gt;[[Eseguire un file MIDI mediante il componente gb.sdl2.audio]]&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* [[Eseguire un file MIDI mediante il Metodo .Open() della Classe Desktop]]&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;B&amp;gt;[[Eseguire un file MIDI mediante l'oggetto MediaView del componente gb.media.form]]&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* [[Estrarre i dati degli eventi Midi da un file Midi]]&lt;br /&gt;
&lt;br /&gt;
* [[Estrarre i dati Midi dal file audio AIFF con le sole funzioni di Gambas]]&lt;br /&gt;
&lt;br /&gt;
* [[Estrarre il testo da un file Midi]]&lt;br /&gt;
&lt;br /&gt;
* [[Estrarre informazioni da un file Midi con le sole funzioni di Gambas]]&lt;br /&gt;
&lt;br /&gt;
* [[Fondere insieme due file MIDI]]&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;
* [[Intercettare dati Midi grezzi con le funzioni esterne del API di RtMidi]]&lt;br /&gt;
&lt;br /&gt;
* [[Intercettare dati Midi grezzi con le funzioni esterne del API di Sndio]]&lt;br /&gt;
&lt;br /&gt;
* [[Intercettare ed inviare dati Midi grezzi con le funzioni esterne del API di PortMidi]]&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;B&amp;gt;[[La gestione dei dati Midi e dei file MIDI mediante il componente gb.media]]&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* [[La gestione dei dati Midi mediante le funzioni esterne del API di Libsmf]]&lt;br /&gt;
&lt;br /&gt;
* [[La gestione dei dati Midi senza l'uso delle funzioni di Alsa]]&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 GStreamer]]&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 Rhythmbox]]&lt;br /&gt;
&lt;br /&gt;
* [[La gestione dei file MIDI mediante le funzioni esterne del API di SDL2 e di SDL3]]&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;
* [[Mostrare i dati del blocco d'intestazione e delle tracce di un file Midi con le sole risorse di Gambas]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere la frequenza corrispondente ad una nota Midi e viceversa]]&lt;br /&gt;
&lt;br /&gt;
* [[Verificare la corrispondenza fra il numero di tracce dichiarato nel file Midi e quelle effettive]]&lt;br /&gt;
&lt;br /&gt;
* [[Verificare l'integrità dei dati del blocco d'intestazione di un file Midi]]&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 RtMidi 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;
====Gambas, Midi e Arduino====&lt;br /&gt;
&lt;br /&gt;
* [[Inviare dati Midi da Arduino a Gambas]]&lt;br /&gt;
&lt;br /&gt;
====Gestione dei file soundfont bank====&lt;br /&gt;
&lt;br /&gt;
* [[Convertire un file soundfont bank sf2 in un file WAV con le sole risorse di Gambas]]&lt;br /&gt;
&lt;br /&gt;
* [[Estrarre da un file sf2 i dati audio di ciascun suono campionato e creare un file wav]]&lt;br /&gt;
&lt;br /&gt;
* [[Estrarre informazioni generali dai tag di un file soundfont bank sf2 con le sole funzioni di Gambas]]&lt;br /&gt;
&lt;br /&gt;
* [[Individuare i nomi e le rispettive posizioni degli strumenti musicali in un file sf2 con le sole risorse di Gambas]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere un file di dati audio grezzi da un file .pat]]&lt;br /&gt;
&lt;br /&gt;
==== Informazioni e risorse sul Midi ====&lt;br /&gt;
&lt;br /&gt;
* [[Il protocollo Midi]]&lt;br /&gt;
&lt;br /&gt;
* [[La struttura di un file Midi]]&lt;br /&gt;
&lt;br /&gt;
* [[Manuali sul Midi]]&lt;br /&gt;
&lt;br /&gt;
* [[Siti web sul Midi]]&lt;br /&gt;
&lt;br /&gt;
* [[Sulla nuova versione Midi 2.0]]&lt;br /&gt;
&lt;br /&gt;
== Gestione dei file ODT ==&lt;br /&gt;
&lt;br /&gt;
* [[Estrarre il file thumbnail contenuto nel file odt]]&lt;br /&gt;
&lt;br /&gt;
* [[Unire più file ODT in un unico file ODT]]&lt;br /&gt;
&lt;br /&gt;
== Gestione dei file PDF ==&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;B&amp;gt;[[Codice essenziale per mostrare un file PDF con le risorse del Componente gb.poppler]]&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* [[Cercare una parola in una pagina di un file PDF con le risorse del Componente gb.poppler]]&lt;br /&gt;
&lt;br /&gt;
* [[Comprimere un file PDF con le funzioni esterne del API di Ghostscript]]&lt;br /&gt;
&lt;br /&gt;
* [[Convertire in immagine una parte di una pagina PDF con le risorse del Componente gb.poppler]]&lt;br /&gt;
&lt;br /&gt;
* [[Convertire un file PNG in PDF con le funzioni del API di Cairo]]&lt;br /&gt;
&lt;br /&gt;
* [[Convertire una pagina di un file PDF in una immagine con le risorse del Componente gb.poppler]]&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;B&amp;gt;[[Creare un file PDF con la proprietà .OutputFile della Classe Printer]]&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* [[Creare un file PDF con le funzioni esterne del API di Cairo]]&lt;br /&gt;
&lt;br /&gt;
* [[Creare un file PDF con le funzioni esterne del API di Haru]]&lt;br /&gt;
&lt;br /&gt;
* [[Creare un file PDF con le funzioni esterne della libreria PDFGen]]&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;B&amp;gt;[[Creare un file PDF con le risorse del Componente gb.cairo]]&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* [[Creare un file PDF con le risorse di Gambas senza usare Componenti dedicati]]&lt;br /&gt;
&lt;br /&gt;
* [[Creare un file PDF da un file immagine con le risorse del Componente gb.cairo]]&lt;br /&gt;
&lt;br /&gt;
* [[Eliminare i dati immagine da un file PDF]]&lt;br /&gt;
&lt;br /&gt;
* [[Estrarre i dati audio, MIDI e video da un file PDF]]&lt;br /&gt;
&lt;br /&gt;
* [[Estrarre testo e immagini da un file PDF]]&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;B&amp;gt;[[Stampare un file PDF]]&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* [[Struttura di un file PDF]]&lt;br /&gt;
&lt;br /&gt;
== Gestione dei file PS ==&lt;br /&gt;
&lt;br /&gt;
* [[Creare un file PS con le risorse del API di Cairo]]&lt;br /&gt;
&lt;br /&gt;
* [[Creare un file PS con le risorse del Componente gb.cairo]]&lt;br /&gt;
&lt;br /&gt;
== Gestione dei file RTF ==&lt;br /&gt;
&lt;br /&gt;
* [[Documentazione per la gestione dei file di testo RTF]]&lt;br /&gt;
&lt;br /&gt;
== Gestione del CD e del DVD ==&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere il numero di titoli e di capitoli presenti in un DVD video con le funzioni del API di libdvdread]]&lt;br /&gt;
&lt;br /&gt;
* [[Convertire un numero di settori di un CD/DVD in ore,minuti,secondi con le funzioni del API Libdiscid]]&lt;br /&gt;
&lt;br /&gt;
* [[Eseguire una traccia di un CD-Audio con le risorse del API di libvlc]] &lt;br /&gt;
&lt;br /&gt;
* [[Eseguire una traccia di un CD-Audio con le risorse di linux/cdrom.h e le funzioni esterne di ALSA]]&lt;br /&gt;
&lt;br /&gt;
* [[Estrarre i dati presenti in un CD-Audio con le risorse di linux/cdrom.h]]&lt;br /&gt;
&lt;br /&gt;
* [[Individuare in GNOME il percorso contenente i file delle tracce di un CD-audio]]&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;B&amp;gt;[[La gestione del CD e del DVD mediante il Componente gb.media]]&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* [[La gestione del CD e del DVD mediante la funzione esterna 'gst_parse_launch()' di GStreamer]]&lt;br /&gt;
&lt;br /&gt;
* [[La gestione del CD e del DVD mediante le funzioni del API di libcdio]]&lt;br /&gt;
&lt;br /&gt;
* [[La gestione del CD e del DVD mediante le funzioni del API di SDL]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere alcune informazioni di un CD con le funzioni del API di libcdaudio]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere alcune informazioni di un CD con la funzione ioctl()]]&lt;br /&gt;
&lt;br /&gt;
== Gestione della Pen-Drive ==&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere i dispositivi pen-drive usb montati sul sistema]]&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere il contenuto di una pen-drive mediante le sole risorse di Gambas]]&lt;br /&gt;
&lt;br /&gt;
== Gestione delle immagini e dei colori ==&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;B&amp;gt;[[Aggiungere il canale Alfa a un Oggetto Image privo]]&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* [[Assegnare a un Oggetto ''Image'' i valori pixel contenuti in un'area di memoria puntata da un Puntatore]]&lt;br /&gt;
&lt;br /&gt;
* [[Assegnare a un Oggetto ''Image'' i valori pixel contenuti in un vettore]]&lt;br /&gt;
&lt;br /&gt;
* [[Cancellare una immagine in una PictureBox o in una ImageView]]&lt;br /&gt;
&lt;br /&gt;
* [[Caricare in un Controllo grafico i file immagine come Picture]]&lt;br /&gt;
&lt;br /&gt;
* [[Caricare in un Oggetto grafico le icone messe a disposizione da Gambas]]&lt;br /&gt;
&lt;br /&gt;
* [[Caricare un file di formato TIFF e da questo creare un file immagine di altro formato con l'API di GDK_PixBuf]]&lt;br /&gt;
&lt;br /&gt;
* [[Catturare un'immagine con una webcam mediante le funzioni esterne del API di libsane]]&lt;br /&gt;
&lt;br /&gt;
* [[Catturare un'immagine con una webcam mediante le funzioni esterne del API di libv4l2]]&lt;br /&gt;
&lt;br /&gt;
* [[Cliccare in un Oggetto grafico o in una immagine suddivisi in rettangoli]]&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;B&amp;gt;[[Come Gambas gestisce le immagini]]&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* [[Configurazione, organizzazione ed impostazione dell'oggetto Image secondo i sorgenti di Gambas]]&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere i formati immagine disponibili con GTK mediante le funzioni del API di GDK-PixBuf]]&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere in modo sicuro il formato di un file immagine mediante le funzioni esterne del API di SDL2]]&lt;br /&gt;
&lt;br /&gt;
* [[Convertire il formato RGBA di un colore nei corrispondenti valori decimale ed esadecimale]]&lt;br /&gt;
&lt;br /&gt;
* [[Convertire il valore di un colore da RGB in HSV]]&lt;br /&gt;
&lt;br /&gt;
* [[Convertire il valore di un colore in RGBA]]&lt;br /&gt;
&lt;br /&gt;
* [[Convertire immagini RAW di fotocamere digitali mediante le funzioni esterne del API di Libraw]]&lt;br /&gt;
&lt;br /&gt;
* [[Convertire un file immagine di un qualsiasi formato in un file immagine TIFF mediante le funzioni esterne del API di Libgdk_pixbuf]]&lt;br /&gt;
&lt;br /&gt;
* [[Convertire un file immagine PCX in un file immagine PNG mediante le funzioni esterne del API di SDL2]]&lt;br /&gt;
&lt;br /&gt;
* [[Convertire un'immagine a colori in un'immagine a scala di grigi mediante le funzioni esterne del API di Libgdk_pixbuf]]&lt;br /&gt;
&lt;br /&gt;
* [[Convertire un'immagine da un formato ad un altro mediante le funzioni esterne del API di FreeImage]]&lt;br /&gt;
&lt;br /&gt;
* [[Convertire un'immagine da un formato ad un altro mediante le funzioni esterne del API di Imlib2]]&lt;br /&gt;
&lt;br /&gt;
* [[Convertire un'immagine in un file immagine di formato ICO mediante le funzioni esterne del API di Libgdk_pixbuf]]&lt;br /&gt;
&lt;br /&gt;
* [[Convertire un oggetto di tipo &amp;quot;Image&amp;quot; in un file di formato TIFF o ICO con le funzioni esterne del API di Libgdk_pixbuf]]&lt;br /&gt;
&lt;br /&gt;
* [[Creare da codice un'immagine trasparente]]&lt;br /&gt;
&lt;br /&gt;
* [[Creare un file immagine da dati immagine grezzi mediante le funzioni del API di Imlib2]]&lt;br /&gt;
&lt;br /&gt;
* [[Creare un'immagine senza avere dati immagine]]&lt;br /&gt;
&lt;br /&gt;
* [[Curvare la linea di testo in un oggetto Image]]&lt;br /&gt;
&lt;br /&gt;
* [[Decomprimere un file immagine jpeg per ottenerne i dati grezzi mediante le funzioni esterne del API di libjpeg]]&lt;br /&gt;
&lt;br /&gt;
* [[Desaturare un colore]]&lt;br /&gt;
&lt;br /&gt;
* [[Elenco dei nomi dei colori e i corrispondenti valori delle Costanti della Classe Color utilizzati da Gambas]]&lt;br /&gt;
&lt;br /&gt;
* [[Elenco dei nomi dei colori e i corrispondenti valori RGB sotto X Window]]&lt;br /&gt;
&lt;br /&gt;
* [[Fondere due immagini in una sola]]&lt;br /&gt;
&lt;br /&gt;
* [[Gestione delle immagini con le risorse di Gambas ma senza attivazione dei Componenti che fanno riferimento alle librerie grafiche QT e GTK]]&lt;br /&gt;
&lt;br /&gt;
* [[Gestire un oggetto Image agendo direttamente sulle risorse dei sorgenti Gambas]]&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 i colori dei pixel di una immagine]]&lt;br /&gt;
&lt;br /&gt;
* [[Individuare i valori RGBA dei pixel di 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;
* [[Inserire in un'immagine uno sfondo colorato mediante le funzioni esterne del API di Libgdk_pixbuf]]&lt;br /&gt;
&lt;br /&gt;
* [[Inserire un'immagine all'interno di un'altra immagine mediante le funzioni esterne del API di Libgdk_pixbuf]]&lt;br /&gt;
&lt;br /&gt;
* [[Leggere le informazioni di una Image dalle sue risorse dei sorgenti di Gambas]]&lt;br /&gt;
&lt;br /&gt;
* [[Modi di caricare un'immagine di tipo ''Picture'']]&lt;br /&gt;
&lt;br /&gt;
* [[Modificare i colori dei pixel di un'immagine con la proprietà .Data della Classe Image ed i Memory Stream]]&lt;br /&gt;
&lt;br /&gt;
* [[Modificare il colore di un pixel di un'immagine se esso è minore o maggiore di un dato valore]]&lt;br /&gt;
&lt;br /&gt;
* [[Modificare l'opacità di un'immagine]]&lt;br /&gt;
&lt;br /&gt;
* [[Modificare le dimensioni di una Image usando il suo Metodo .Stretch]]&lt;br /&gt;
&lt;br /&gt;
* [[Mostrare un'immagine con funzioni del API di GStreamer]]&lt;br /&gt;
&lt;br /&gt;
* [[Mostrare un'immagine con il Controllo WebView]]&lt;br /&gt;
&lt;br /&gt;
* [[Mostrare un'immagine nella finestra di un Editor di testo con funzioni del API di X11 e Imlib2]]&lt;br /&gt;
&lt;br /&gt;
* [[Mostrare una parte di un'immagine]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere alcune informazioni su file immagine JPEG con le funzioni del API di libjpeg]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere alcune informazioni su un file immagine PNG con le funzioni del API di libpng]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere alcune informazioni sul file immagine con le funzioni del API di libgdk_pixbuf-2.0]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere dati grezzi di un file immagine mediante le funzioni del API di GDK-PixBuf]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere il valore per ciascuno dei canali rosso, verde e blu di un pixel]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere l'effettivo valore del colore del pixel individuato con la Proprietà vettoriale Image.Pixels]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere Metadati Exif da un'immagine JPEG con le risorse del API di libexif]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere un file immagine PNG da un'immagine di formato SVG]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere un file PDF da una Image]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere una schermata (&amp;quot;screenshot&amp;quot;) con Gambas]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere una schermata (screenshot) del desktop con le risorse del API di X11 e di Cairo]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere una schermata (screenshot) del desktop con le risorse del API di X11 e di Imlib2]]&lt;br /&gt;
&lt;br /&gt;
* [[Rendere trasparente una immagine in base ad un colore specifico]]&lt;br /&gt;
&lt;br /&gt;
* [[Ridimensionare e mostrare un'immagine in base al punto ove si è cliccato con il puntatore del mouse]]&lt;br /&gt;
&lt;br /&gt;
* [[Ruotare e ribaltare sul proprio asse una immagine con le funzioni del API di FreeImage]]&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;
* [[Salvare e richiamare i dati di un file immagine con Settings]]&lt;br /&gt;
&lt;br /&gt;
* [[Salvare un file immagine con le funzioni del API di GDK-PixBuf]]&lt;br /&gt;
&lt;br /&gt;
* [[Salvare una Image come file immagine]]&lt;br /&gt;
&lt;br /&gt;
* [[Sapere quanti pixel occupa un testo in un'immagine mediante le funzioni del API di Imlib2]]&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;B&amp;gt;[[Scaricare una immagine da un sito internet]]&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* [[Scaricare una immagine dal sito &amp;quot;Cover Art Archive&amp;quot; mediante le funzioni esterne della libreria libcoverart]]&lt;br /&gt;
&lt;br /&gt;
* [[Spostare con il mouse un'immagine all'interno di una PictureBox]]&lt;br /&gt;
&lt;br /&gt;
* [[Scrivere un testo in un'immagine mediante le funzioni del API di Imlib2]]&lt;br /&gt;
&lt;br /&gt;
=== Gestione delle immagini con CAIRO ===&lt;br /&gt;
&lt;br /&gt;
* [[Caricare un Oggetto ''Image'' direttamente in una ''ImageView'' con gb.cairo]]&lt;br /&gt;
* [[Convertire un file immagine in un file PNG con le risorse del Componente gb.cairo]]&lt;br /&gt;
* [[Convertire un file PNG in PDF con le funzioni del API di Cairo]]&lt;br /&gt;
* [[Convertire un file PNG in SVG con le risorse del Componente gb.cairo]]&lt;br /&gt;
* [[Creare file PNG con le risorse del Componente gb.cairo]]&lt;br /&gt;
* [[Creare file PNG con le funzioni esterne del API di Cairo e di Pango]]&lt;br /&gt;
* [[Creare file PNG con le funzioni esterne del API di Cairo]]&lt;br /&gt;
* [[Creare un file immagine PNG trasparente con le funzioni esterne del API di Cairo]]&lt;br /&gt;
* [[Ridurre le dimensioni di una immagine con il Metodo &amp;quot;.Scale()&amp;quot; del Componente gb.cairo]]&lt;br /&gt;
* [[Spostare il testo con il mouse all'interno dell'area grafica con la Classe Cairo]]&lt;br /&gt;
&lt;br /&gt;
=== Gestione delle immagini con il Componente gb.media ===&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere le dimensioni di una immagine mediante il Componente gb.media]]&lt;br /&gt;
* [[Convertire i formati immagine mediante il Componente gb.media]]&lt;br /&gt;
* [[Effetto caleidoscopico di un'immagine PNG con il Componente gb.media]]&lt;br /&gt;
* [[Estrarre e salvare singole immagini da una ripresa video mediante WebCam effettuata con il Componente gb.media]]&lt;br /&gt;
* [[Estrarre e salvare singole immagini durante l'esecuzione di un file video mediante il Componente gb.media]]&lt;br /&gt;
* [[Leggere codici a barre con una webcam mediante il Componente gb.media]]&lt;br /&gt;
* [[Mostrare un'immagine mediante il Componente gb.media]]&lt;br /&gt;
* [[Trasformare un'immagine in ascii art mediante il Componente gb.media]]&lt;br /&gt;
&lt;br /&gt;
=== Gestione delle immagini con ImageMagick ===&lt;br /&gt;
&lt;br /&gt;
* [[Convertire un file immagine in un altro formato immagine con le funzioni esterne del API di ImageMagick]]&lt;br /&gt;
* [[Modificare la risoluzione in PPI di un'immagine mediante le funzioni esterne del API di ImageMagick]]&lt;br /&gt;
* [[Ridimensionare un'immagine mediante le funzioni esterne del API di ImageMagick]]&lt;br /&gt;
* [[Ruotare un'immagine mediante le funzioni esterne del API di ImageMagick]]&lt;br /&gt;
* [[Sfumare radialmente un'immagine mediante le funzioni esterne del API di ImageMagick]]&lt;br /&gt;
* [[Spostare il contenuto all'interno di un'immagine mediante le funzioni esterne del API di ImageMagick]]&lt;br /&gt;
&lt;br /&gt;
=== Gestione delle immagini e dei file di tipo GIF ===&lt;br /&gt;
&lt;br /&gt;
* [[Convertire un file GIF in un file di formato OGV, Matroska e MP4 mediante il Componente gb.media]]&lt;br /&gt;
* [[Convertire un file immagine in un file immagine di tipo GIF con le funzioni esterne del API di LibFreeImage]]&lt;br /&gt;
* [[Creare file GIF con le funzioni esterne del API di Libplot]]&lt;br /&gt;
* [[Creare una GIF animata con le funzioni esterne del API di Libplot]]&lt;br /&gt;
* [[Creare un file immagine GIF con sfondo colorato mediante le funzioni del API di GIFLIB]]&lt;br /&gt;
* [[Creare un file immagine trasparente di tipo GIF con le funzioni del API di GIFLIB]]&lt;br /&gt;
* [[Disegnare e salvare un'immagine di tipo GIF con le funzioni del API di GifLib]]&lt;br /&gt;
* [[Estrarre i fotogrammi che compongono un file immagine di tipo GIF animata]]&lt;br /&gt;
* [[Estrarre informazioni da una GIF animata relative al tempo di esecuzione dei fotogrammi]]&lt;br /&gt;
* [[Modificare il colore di sfondo di un'immagine GIF con le funzioni del API di GifLib]]&lt;br /&gt;
* [[Ottenere alcune informazioni su file immagine GIF con le funzioni del API di GifLib]]&lt;br /&gt;
* [[Utilizzare una GIF animata]]&lt;br /&gt;
&lt;br /&gt;
=== Gestione delle immagini e dei file di tipo SVG ===&lt;br /&gt;
&lt;br /&gt;
* [[Convertire un file immagine SVG in un file immagine di altro formato con le funzioni esterne delle librerie librsvg e libgdk_pixbuf]]&lt;br /&gt;
* [[Convertire un file PNG in SVG con le risorse del Componente gb.cairo]]&lt;br /&gt;
* [[Creare file SVG con le risorse del Componente gb.cairo]]&lt;br /&gt;
* [[Creare file SVG con le funzioni esterne del API di Cairo]]&lt;br /&gt;
* [[Gestire un file immagine di formato SVG con la Classe SvgImage]]&lt;br /&gt;
* [[Mostrare in un Form un'immagine SVG]]&lt;br /&gt;
* [[Ottenere un file immagine PNG da un'immagine di formato SVG]]&lt;br /&gt;
&lt;br /&gt;
=== Struttura di file immagine particolari ===&lt;br /&gt;
&lt;br /&gt;
* [[Struttura del formato BMP]]&lt;br /&gt;
* [[Struttura del formato GIF]]&lt;br /&gt;
* [[Struttura del formato PNG]]&lt;br /&gt;
* [[Struttura del formato TIFF]]&lt;br /&gt;
* [[Struttura del formato XBM]]&lt;br /&gt;
* [[Struttura del formato XPM]]&lt;br /&gt;
* [[Struttura e gestione del file di tipo PNM]]&lt;br /&gt;
&lt;br /&gt;
== Grafici ==&lt;br /&gt;
&lt;br /&gt;
* [[Creare un grafico con il componente gb.chart]]&lt;br /&gt;
&lt;br /&gt;
* [[Creare un grafico per la console/Terminale]]&lt;br /&gt;
&lt;br /&gt;
== GridView ==&lt;br /&gt;
&lt;br /&gt;
* [[Adattare automaticamente la dimensione del font del testo presente nelle celle di una GridView al loro ridimensionarsi]]&lt;br /&gt;
&lt;br /&gt;
* [[Adattare automaticamente l'altezza e la larghezza di una cella di una GridView al testo contenuto]]&lt;br /&gt;
&lt;br /&gt;
* [[Adattare automaticamente l'altezza e la larghezza di una cella di una GridView all'immagine contenuta]]&lt;br /&gt;
&lt;br /&gt;
* [[Adattare l'altezza e la larghezza della GridView al numero delle righe e delle in essa contenute]]&lt;br /&gt;
&lt;br /&gt;
* [[Aggiungere colonne in una GridView da codice]]&lt;br /&gt;
&lt;br /&gt;
* [[Aggiungere righe in una GridView da codice]]&lt;br /&gt;
&lt;br /&gt;
* [[Cambiare il colore di fondo di una riga cliccata in una GridView e far tornare quello di un'altra al colore iniziale]]&lt;br /&gt;
&lt;br /&gt;
* [[Catturare l'immagine di una GridView con il Componente gb.media]]&lt;br /&gt;
&lt;br /&gt;
* [[Centrare il testo nell'header di una GridView]]&lt;br /&gt;
&lt;br /&gt;
* [[Colorare il bordo delle righe di una GridView]]&lt;br /&gt;
&lt;br /&gt;
* [[Colorare il fondo di una cella di una GridView]]&lt;br /&gt;
&lt;br /&gt;
* [[Colorare il fondo di una riga di una GridView]]&lt;br /&gt;
&lt;br /&gt;
* [[Colorare la griglia della GridView]]&lt;br /&gt;
&lt;br /&gt;
* [[Effettuare una ricerca nelle celle di una GridView]]&lt;br /&gt;
&lt;br /&gt;
* [[Eliminare una riga da una GridView]]&lt;br /&gt;
&lt;br /&gt;
* [[Far combaciare le immagini poste in due celle adiacenti di una GridView]]&lt;br /&gt;
&lt;br /&gt;
* [[Gestire testo, colori e immagini nelle celle della GridView con l'Evento _Data()]]&lt;br /&gt;
&lt;br /&gt;
* [[Header di una GridView contenente due o più righe testuali]]&lt;br /&gt;
&lt;br /&gt;
* [[Impostare due parole ciascuna all'estremità opposta di una cella di una GridView]]&lt;br /&gt;
&lt;br /&gt;
* [[Impostare le righe, le colonne e l'header di una GridView]]&lt;br /&gt;
&lt;br /&gt;
* [[Impostare font, colore dei caratteri e colore di sfondo diversi per ogni cella di una GridView]]&lt;br /&gt;
&lt;br /&gt;
* [[Impostare lo spessore e altre proprietà del bordo delle righe e delle singole celle di una GridView]]&lt;br /&gt;
&lt;br /&gt;
* [[Individuare la cella della GridView nella quale si è cliccato]]&lt;br /&gt;
&lt;br /&gt;
* [[Individuare con quale tasto del mouse si è cliccato in una cella della GridView]]&lt;br /&gt;
&lt;br /&gt;
* [[Inserire un disegno o un'immagine al di sotto della griglia di una GridView]]&lt;br /&gt;
&lt;br /&gt;
* [[Inserire un oggetto in una cella di una GridView]]&lt;br /&gt;
&lt;br /&gt;
* [[Inserire un ulteriore testo in una GridView sempre nell'ultima riga]] &lt;br /&gt;
&lt;br /&gt;
* [[Inserire un'immagine adattandola alle dimensioni della cella di una GridView]]&lt;br /&gt;
&lt;br /&gt;
* [[Mostrare il testo contenuto in una cella di una GridVew al semplice passare del puntatore del mouse]]&lt;br /&gt;
&lt;br /&gt;
* [[Mostrare un Balloon in una GridView in corrispondenza della cella nella quale si è cliccato]]&lt;br /&gt;
&lt;br /&gt;
* [[Nascondere le linee della griglia di una GridView]]&lt;br /&gt;
&lt;br /&gt;
* [[Nascondere tutte le celle di una riga di una GridView]]&lt;br /&gt;
&lt;br /&gt;
* [[Nascondere una Colonna di una GridView]] &lt;br /&gt;
&lt;br /&gt;
* [[Ordinare i valori all'interno di una colonna di una GridView]]&lt;br /&gt;
&lt;br /&gt;
* [[Ordinare in una GridView i valori di più righe in base ad una colonna]]&lt;br /&gt;
&lt;br /&gt;
* [[Ordinare manualmente i valori all'interno di una colonna di una GridView]]&lt;br /&gt;
&lt;br /&gt;
* [[Scambiare il contenuto delle celle di una GridView mediante trascinamento con il mouse ]]&lt;br /&gt;
&lt;br /&gt;
* [[Scrivere con la tastiera nelle celle di una GridView]]&lt;br /&gt;
&lt;br /&gt;
* [[Spostare il testo da una cella a un'altra di una GridView con il Drag&amp;amp;Drop]]&lt;br /&gt;
&lt;br /&gt;
* [[Spostare il testo da una cella a un'altra di una GridView senza Drag&amp;amp;Drop]]&lt;br /&gt;
&lt;br /&gt;
* [[Spostare il testo da una cella di una GridView nella cella di un'altra GridView con il Drag&amp;amp;Drop]]&lt;br /&gt;
&lt;br /&gt;
* [[Spostare il testo da una cella di una GridView nella cella di un'altra GridView senza Drag&amp;amp;Drop]]&lt;br /&gt;
&lt;br /&gt;
* [[Spostare su e giù le righe di una GridView con i tasti &amp;quot;up&amp;quot; e &amp;quot;down&amp;quot;]]&lt;br /&gt;
&lt;br /&gt;
* [[Spostare un Oggetto da una cella a un'altra di una GridView senza Drag&amp;amp;Drop]]&lt;br /&gt;
&lt;br /&gt;
* [[Spostare un'immagine da una cella a un'altra di una GridView con il Drag&amp;amp;Drop]]&lt;br /&gt;
&lt;br /&gt;
* [[Spostare un'immagine da una cella a un'altra di una GridView senza Drag&amp;amp;Drop]]&lt;br /&gt;
&lt;br /&gt;
* [[Spostare un'immagine da una PictureBox a una cella di una GridView con il Drag&amp;amp;Drop]]&lt;br /&gt;
&lt;br /&gt;
* [[Stampare una GridView e il suo contenuto]]&lt;br /&gt;
&lt;br /&gt;
* [[Unire in una GridView le celle in un'unica grande cella]]&lt;br /&gt;
&lt;br /&gt;
== Hard Disk ==&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere numero seriale, modello ed altre informazioni su hard-disk SATA con la funzione esterna ioctl()]]&lt;br /&gt;
&lt;br /&gt;
== Header file dell'ANSI C e Gambas ==&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere la quantità di memoria occupata dai tipi di dati di C e la loro locazione nei file header]]&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;
* [[Ottenere la descrizione del tipo di errore dai file header &amp;quot;errno-base.h&amp;quot; e &amp;quot;errno.h&amp;quot;]]&lt;br /&gt;
&lt;br /&gt;
== ImageStat ==&lt;br /&gt;
&lt;br /&gt;
* [[Uso della classe ImageStat]]&lt;br /&gt;
&lt;br /&gt;
== InputBox ==&lt;br /&gt;
&lt;br /&gt;
* [[Imporre in casi particolari la riapertura dell'InputBox]]&lt;br /&gt;
&lt;br /&gt;
* [[Impostare le coordinate ove far aprire la finestra dell'InputBox]]&lt;br /&gt;
&lt;br /&gt;
* [[Impostare le dimensioni di un InputBox]]&lt;br /&gt;
&lt;br /&gt;
* [[Individuare l'ID della finestra dell'InputBox]]&lt;br /&gt;
&lt;br /&gt;
== Installazione di Gambas3 dai pacchetti binari ==&lt;br /&gt;
&lt;br /&gt;
* [[Installazione di Gambas3 dai pacchetti binari]]&lt;br /&gt;
&lt;br /&gt;
== Interagire con la tastiera ==&lt;br /&gt;
&lt;br /&gt;
* [[Immissione di dati dalla tastiera durante l'esecuzione di un programma]]&lt;br /&gt;
&lt;br /&gt;
* [[Impedire che cliccando su un tasto della tastiera si produca più volte il medesimo effetto]]&lt;br /&gt;
&lt;br /&gt;
* [[Impedire che, mentre si tiene premuto un tasto della tastiera, si produca un effetto cliccando e rilasciando un altro tasto]]&lt;br /&gt;
&lt;br /&gt;
* [[Individuare i tasti premuti della tastiera]]&lt;br /&gt;
&lt;br /&gt;
* [[Individuare mediante le funzioni del API di SDL2 o di SDL3 tutti gli scancode disponibili]]&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;B&amp;gt;[[_KeyPress() - _KeyRelease() - Key]]&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* [[Sapere via codice se il tasto 'Blocco Maiuscole' è attivo]]&lt;br /&gt;
&lt;br /&gt;
* [[Usare gli Eventi _KeyPress() e _KeyRelease() in un programma con interfaccia a linea di comando]]&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 condivise esterne .so ==&lt;br /&gt;
&lt;br /&gt;
===Richiamare funzioni esterne mediante ''EXTERN''===&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;B&amp;gt;[[Extern: richiamare funzioni esterne a Gambas]]&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Gestione in Gambas delle Strutture esterne===&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;B&amp;gt;[[Gestione delle Strutture esterne]]&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;B&amp;gt;[[Gestire con sicurezza le Strutture esterne]]&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* [[Gestire con un Puntatore le Strutture esterne]]&lt;br /&gt;
&lt;br /&gt;
* [[Assegnare un valore ad una Struttura di una libreria esterna scrivendo con i Memory Stream nella sua area di memoria]]&lt;br /&gt;
&lt;br /&gt;
* [[Dereferenziare senza Memory-Stream un Puntatore ad una Struttura, passato da una funzione esterna]]&lt;br /&gt;
&lt;br /&gt;
* [[Utilizzare come Struttura in Gambas una Struttura esterna dichiarata, come proprio membro di tipo Puntatore, da una Struttura principale esterna]]&lt;br /&gt;
&lt;br /&gt;
===Richiamare particolari funzioni esterne delle librerie standard in C===&lt;br /&gt;
&lt;br /&gt;
* [[Richiamo ed uso di particolari funzioni esterne delle librerie standard scritte in C]]&lt;br /&gt;
&lt;br /&gt;
===Ulteriori contributi sulla gestione delle librerie condivise .so e delle funzioni esterne===&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;
* [[Caricare i dati di un vettore scritto in C in un vettore di un'applicazione Gambas]]&lt;br /&gt;
&lt;br /&gt;
* [[Come creare una Libreria condivisa (Shared Library) .so]]&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;B&amp;gt;[[Come creare una Libreria condivisa .so impostando il suo codice sorgente nell'applicazione Gambas]]&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* [[Creare una libreria condivisa .so esterna dai file sorgente presenti in una pagina web e senza installarla o caricarla nel sistema]]  &lt;br /&gt;
&lt;br /&gt;
* [[Emulare in Gambas la funzione fwrite() di C]]&lt;br /&gt;
&lt;br /&gt;
* [[Emulare in Gambas la funzione memcpy() di C]]&lt;br /&gt;
&lt;br /&gt;
* [[Emulare in Gambas le macro _IOC, _IOR, _IOW e _IOWR usate con la funzione ioctl()]]&lt;br /&gt;
&lt;br /&gt;
* [[Gestire una libreria esterna che ritorna una Linked List]]&lt;br /&gt;
&lt;br /&gt;
* [[Inserire nella libreria condivisa esterna .so anche codice Assembly]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere l'indirizzo e il valore di una Costante e di una variabile globale situate in una libreria condivisa]]&lt;br /&gt;
&lt;br /&gt;
* [[Passare a una funzione esterna il Puntatore di una Struttura, scritta in Gambas, ottenuto con la funzione VarPtr()]]&lt;br /&gt;
&lt;br /&gt;
* [[Passare a una funzione esterna un Puntatore che successivamente deve essere passato anche ad altre funzioni esterne]]&lt;br /&gt;
&lt;br /&gt;
* [[Passare un'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;
* [[Richiamare funzioni esterne di librerie scritte in C++]]&lt;br /&gt;
&lt;br /&gt;
* [[Scrivendo particolari librerie esterne in C]]&lt;br /&gt;
&lt;br /&gt;
* [[Un contributo sulle funzioni esterne in Gambas a cura di Doriano B.]]&lt;br /&gt;
&lt;br /&gt;
* [[Verificare quali dati Gambas passa ad una funzione esterna]]&lt;br /&gt;
&lt;br /&gt;
===Altre modalità di chiamata delle funzioni esterne===&lt;br /&gt;
&lt;br /&gt;
* [[Caricamento dinamico di librerie .so con il subsistema 'loadso' di SDL2]]&lt;br /&gt;
* [[Chiamare funzioni esterne mediante le risorse della libreria dlfcn.h]]&lt;br /&gt;
* [[Utilizzare il metodo 'System.GetExternSymbol()' per richiamare funzioni esterne di librerie condivise]]&lt;br /&gt;
&lt;br /&gt;
== Librerie .gambas ==&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;B&amp;gt;[[Creare, importare ed utilizzare librerie .gambas]]&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Librerie della Comunità Gambas-it.org ====&lt;br /&gt;
&lt;br /&gt;
* [[RTFLib.gambas]]&lt;br /&gt;
&lt;br /&gt;
* [[strLib.gambas]]&lt;br /&gt;
&lt;br /&gt;
== ListBox ==&lt;br /&gt;
&lt;br /&gt;
* [[Assegnare ad un oggetto di testo il contenuto di un elemento di una ListBox cliccandovi sopra]]&lt;br /&gt;
&lt;br /&gt;
* [[Assegnare colori allo sfondo ed al testo di una riga selezionata di una ListBox]]&lt;br /&gt;
&lt;br /&gt;
* [[Eliminare uno o più item di una ListBox selezionati con il mouse]]&lt;br /&gt;
&lt;br /&gt;
* [[Far coincidere da codice l'altezza di una ListBox con la somma delle altezze dei suoi Item]]&lt;br /&gt;
&lt;br /&gt;
* [[Far mostrare in una ListBox le ultime voci ogni volta che il loro numero aumenta]]&lt;br /&gt;
&lt;br /&gt;
* [[Individuare il numero d'indice della riga di una ListBox sulla quale si è cliccato con il mouse]]&lt;br /&gt;
&lt;br /&gt;
* [[Inserire un array di dati di tipo stringa in una ListBox]]&lt;br /&gt;
&lt;br /&gt;
* [[Inserire un oggetto in un item di una ListBox]]&lt;br /&gt;
&lt;br /&gt;
* [[Interscambiare la posizione del contenuto degli item di una ListBox mediante trascinamento con il mouse ]]&lt;br /&gt;
&lt;br /&gt;
* [[ListBox con due o più righe per item]]&lt;br /&gt;
&lt;br /&gt;
* [[Riordinare manualmente con il mouse gli elementi di una ListBox]]&lt;br /&gt;
&lt;br /&gt;
* [[Se l'Evento MouseDown() della ListBox non funziona]]&lt;br /&gt;
&lt;br /&gt;
==Liste Lineari==&lt;br /&gt;
&lt;br /&gt;
* [[Emulare in Gambas una Lista Lineare del linguaggio C]]&lt;br /&gt;
&lt;br /&gt;
== ListView ==&lt;br /&gt;
&lt;br /&gt;
* [[Aggiungere una nuova voce nella prima posizione di una Listview]]&lt;br /&gt;
&lt;br /&gt;
* [[Assegnare colori allo sfondo ed al testo di una riga selezionata di una ListView]]&lt;br /&gt;
&lt;br /&gt;
* [[Evitare che appaia il popmenu quando si clicca al di fuori di un elemento di una ListView]]&lt;br /&gt;
&lt;br /&gt;
== Logging ==&lt;br /&gt;
&lt;br /&gt;
* [[Attivare e registrare informazioni un singolo file di log]]&lt;br /&gt;
&lt;br /&gt;
== Map - MapView - Coordinate geografiche - Georeferenziazione ==&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;B&amp;gt;[[Istruzioni essenziali per mostrare una mappa in una MapView]]&amp;lt;/b&amp;gt;&lt;br /&gt;
* [[Arduino: misurare il campo magnetico terrestre con i magnetometri]]&lt;br /&gt;
* [[Calcolare il rilevamento (bearing) in gradi]]&lt;br /&gt;
* [[Calcolare la distanza tra due punti geografici, dei quali si conoscono latitudine e longitudine]]&lt;br /&gt;
* [[Calcolare l'area e il perimetro di poligoni disegnati sulla mappa con le risorse di gb.map]]&lt;br /&gt;
* [[Conoscere la versione più recente di Google Maps satellite]]&lt;br /&gt;
* [[Conoscere le risorse formali contenute da un oggetto della Classe _ShapeItem]]&lt;br /&gt;
* [[Convertire una coordinata dal formato gradi primi secondi del sistema EPSG:4326 WGS 84 al suo formato decimale e viceversa]]&lt;br /&gt;
* [[Convertire una coordinata geografica dal sistema EPSG:4326 WGS 84 al sistema EPSG:3857 e viceversa]]&lt;br /&gt;
* [[Convertire una coordinata geografica dal sistema EPSG:4326 WGS 84 al sistema Gradi e Minuti decimali e viceversa]]&lt;br /&gt;
* [[Convertire una coordinata geografica dal sistema UTM al sistema EPSG:4326 WGS 84 e viceversa]]&lt;br /&gt;
* [[Creare da una carta topografica i file delle tessere di una mappa e utilizzarli con MapView]]&lt;br /&gt;
* [[Disegnare sulla MapView dei cerchi concentrici al punto ove si è cliccato con il puntatore del mouse]]&lt;br /&gt;
* [[Disegnare un cerchio o un punto su una MapView]]&lt;br /&gt;
* [[Disegnare un poligono su una MapView usando l'Oggetto &amp;quot;Figlio&amp;quot; DrawingArea]]&lt;br /&gt;
* [[Disegnare un mirino come cursore del mouse su una MapView]]&lt;br /&gt;
* [[Disegnare un percorso su una MapView e calcolarne la lunghezza]]&lt;br /&gt;
* [[Elenco di raster Tile Server online con rispettive URL]]&lt;br /&gt;
* [[Eliminare un marcatore grafico da una mappa su una MapView]]&lt;br /&gt;
* [[Eseguire un file audio o Midi quando si clicca sulla MapView]]&lt;br /&gt;
* [[Estrarre le coordinate geografiche dai TAG GPS eventualmente presenti in un file immagine JPEG]]&lt;br /&gt;
* [[Estrarre le coordinate geografiche presenti in un file gpx]]&lt;br /&gt;
* [[Georeferenziare specifici punti geografici su carte topografiche 1:25000]]&lt;br /&gt;
* [[Georeferenziare una mappa con QGIS]]&lt;br /&gt;
* [[Individuare i valori x e y della tessera sulla quale si è cliccato]]&lt;br /&gt;
* [[Individuare il punto di intersezione degli angoli di direzione di due elementi geografici rispetto all'osservatore]]&lt;br /&gt;
* [[Individuare su una MapView un punto geografico avendo un punto iniziale, l'angolo di declinazione e la distanza]]&lt;br /&gt;
* [[Inserire del testo su una MapView]]&lt;br /&gt;
* &amp;lt;B&amp;gt;[[Inserire un marcatore di coordinate su una MapView]]&amp;lt;/b&amp;gt;&lt;br /&gt;
* [[Inserire un Oggetto grafico su una MapView]]&lt;br /&gt;
* [[Inserire un'immagine come marcatore di coordinate su una MapView]]&lt;br /&gt;
* [[Mostrare la mappa topografica IGM 1 25000 fornita dal Geoportale Nazionale del Ministero dell'Ambiente]]&lt;br /&gt;
* [[Mostrare nella finestra guida dei simboli, dichiarati nel codice, la mappa topografica IGM 1_25000 fornita dall'ISPRA  ]]&lt;br /&gt;
* [[Mostrare sulla MapView disegni, immagini e Controlli senza l'uso del Metodo Map.AddShape()]]&lt;br /&gt;
* [[Ottenere la distanza piana di due punti su una carta topografica]]&lt;br /&gt;
* [[Ottenere la Latitudine e la Longitudine del punto sulla mappa cliccato con il puntatore del mouse]]&lt;br /&gt;
* [[Ottenere la Longitudine e la Latitudine dell'angolo superiore sinistro dell'immagine di una mappa da un file GEOTIFF con le sole risorse di Gambas]]&lt;br /&gt;
* [[Ottenere le coordinate geografiche dei punti sulla mappa sui quali si passa con il puntatore del mouse]]&lt;br /&gt;
* [[Ottenere informazioni da un file GEOTIFF con l'API di libgeotiff]]&lt;br /&gt;
* [[Ottenere un file pdf dalla mappa mostrata da una MapView]]&lt;br /&gt;
* [[Ottenere un file png dalla mappa mostrata da una MapView]]&lt;br /&gt;
* [[Ottenere una Image dalla mappa mostrata da una MapView]]&lt;br /&gt;
* [[Registrare quanto mostrato da una MapView e farne un video]]&lt;br /&gt;
* [[Rendere trasparente la mappa mostrata da una MapView]]&lt;br /&gt;
* [[Ruotare la mappa]]&lt;br /&gt;
* [[Sapere sulla MapView se il puntatore del mouse è all'interno di una determinata area della mappa]]&lt;br /&gt;
* [[Scalare la dimensione della mappa in una Mapview]]&lt;br /&gt;
* [[Usare il Metodo '.AddPolygon()' di gb.map]]&lt;br /&gt;
* [[Usare il Metodo '.AddPolyLine()' di gb.map]]&lt;br /&gt;
* [[Utilizzando un Oggetto di visualizzazione diverso da una MapView consentire uno spostamento morbido e uniforme della mappa]]&lt;br /&gt;
* [[Utilizzare il Geoportale del Servizio Geologico d'Italia dell'I.S.P.R.A.]]&lt;br /&gt;
* [[Utilizzare il Geoportale Nazionale del Ministero dell'Ambiente]]&lt;br /&gt;
* [[Utilizzare in una MapView mappe fornite secondo lo standard WMS (Web Map Service)]]&lt;br /&gt;
* [[Utilizzare le tessere di una mappa senza connessione a internet]]&lt;br /&gt;
* [[Utilizzare una DrawingArea o una ImageView con gb.map anziché una MapView]]&lt;br /&gt;
* [[Utilizzare una MediaView con gb.map anziché una MapView]]&lt;br /&gt;
* [[Verificare le tessere dei livelli delle Map tiles]]&lt;br /&gt;
&lt;br /&gt;
== Menu ==&lt;br /&gt;
&lt;br /&gt;
* [[Colorare la barra dei Menu]]&lt;br /&gt;
&lt;br /&gt;
* [[Creare Menu da codice e non con l'Editor-Menu]]&lt;br /&gt;
&lt;br /&gt;
* [[Creare Menu popup da codice]]&lt;br /&gt;
&lt;br /&gt;
* [[Creare Menu popup utilizzando l'Editor di 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;
* [[Fare riferimento alle voci del Menu da altri Form]]&lt;br /&gt;
&lt;br /&gt;
* [[Impedire che appaia la finestra del menu predefinito cliccando con il tasto destro del mouse su un Controllo di testo]]&lt;br /&gt;
&lt;br /&gt;
* [[Inserire una linea separatrice in un Menu]]&lt;br /&gt;
&lt;br /&gt;
* [[Intercettare selezione di sotto-voci di un Menu]]&lt;br /&gt;
&lt;br /&gt;
* [[Modifiche delle proprietà dei Menu]]&lt;br /&gt;
&lt;br /&gt;
* [[Mostrare più righe di testo nella voce di un Menu]]&lt;br /&gt;
&lt;br /&gt;
* [[Rilevare quale sotto-voce di menu è stata cliccata]]&lt;br /&gt;
&lt;br /&gt;
== MenuButton ==&lt;br /&gt;
&lt;br /&gt;
* [[Creare Menu a finestra con MenuButton]]&lt;br /&gt;
&lt;br /&gt;
* [[Creare via Editor dalla IDE un Menu con sotto-menu che funzioni come popup in un MenuButton]]&lt;br /&gt;
&lt;br /&gt;
== Message ==&lt;br /&gt;
&lt;br /&gt;
* [[Impostare le dimensioni del Message]]&lt;br /&gt;
&lt;br /&gt;
* [[Individuare l'ID della finestra di un Message]]&lt;br /&gt;
&lt;br /&gt;
* [[Interruzione di riga con ritorno a capo in un Message]]&lt;br /&gt;
&lt;br /&gt;
* [[Mostrare un MessageBox in un programma con interfaccia a 'riga di comando']]&lt;br /&gt;
&lt;br /&gt;
* [[Spostare la finestra di un Message]]&lt;br /&gt;
&lt;br /&gt;
== Miscellanea ==&lt;br /&gt;
&lt;br /&gt;
* [[Controllare la batteria del proprio portatile con le funzioni esterne di SDL2 o di SDL3]]&lt;br /&gt;
&lt;br /&gt;
* [[Convertire i gradi della temperatura da un'unità di scala di misura in un'altra]]&lt;br /&gt;
&lt;br /&gt;
* [[Creare il QR Code con le risorse della libreria esterna libqrencode]]&lt;br /&gt;
&lt;br /&gt;
* [[Mostrare e usare in Gambas i simboli musicali forniti dal sistema UNICODE]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere informazioni sul tempo meteorologico di una città mediante il sito web wttr.in]]&lt;br /&gt;
&lt;br /&gt;
== Monitor - Schermo ==&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere informazioni relative al display video mediante le funzioni del API di SDL2]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere informazioni relative allo schermo mediante la funzione ioctl()]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere informazioni relative allo schermo mediante le funzioni del API di CBX]]&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 le dimensioni del monitor e la sua posizione sullo schermo con le funzioni esterne del API di Allegro 5]]&lt;br /&gt;
&lt;br /&gt;
== Mouse ==&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere le coordinate correnti del mouse sul Form senza tenere premuto un tasto del mouse]]&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere le coordinate correnti del mouse sullo schermo]]&lt;br /&gt;
&lt;br /&gt;
* [[Evento rotellina del mouse]]&lt;br /&gt;
&lt;br /&gt;
* [[Far assumere al puntatore grafico del mouse l'aspetto dell'attesa]]&lt;br /&gt;
&lt;br /&gt;
* [[Intercettare i dati del mouse dal file-device hidraw]]&lt;br /&gt;
&lt;br /&gt;
* [[Intercettare i dati del mouse dai file-device mouse, mice, event]]&lt;br /&gt;
&lt;br /&gt;
* [[Intercettare il tasto premuto del mouse]]&lt;br /&gt;
&lt;br /&gt;
* [[Modificare l'aspetto del puntatore grafico del mouse]]&lt;br /&gt;
&lt;br /&gt;
* [[Reiterare una procedura quando il tasto del mouse viene tenuto premuto su un Controllo]]&lt;br /&gt;
&lt;br /&gt;
* [[Segnalatore del puntatore del mouse sullo schermo usando le funzioni esterne del API di X11]]&lt;br /&gt;
&lt;br /&gt;
* [[Simulare il tasto premuto del mouse usando le funzioni esterne del API di X11]]&lt;br /&gt;
&lt;br /&gt;
* [[Sollevare l'Evento _MouseMove() di un Oggetto grafico spostando su di esso il mouse senza tenere premuto un suo tasto]] &lt;br /&gt;
&lt;br /&gt;
* [[Spostare da codice il mouse sullo schermo]]&lt;br /&gt;
&lt;br /&gt;
== MovieBox ==&lt;br /&gt;
&lt;br /&gt;
* [[Mostrare un'immagine animata in una MovieBox]]&lt;br /&gt;
&lt;br /&gt;
== Oggetti ==&lt;br /&gt;
&lt;br /&gt;
=== Oggetti in generale ===&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;B&amp;gt;[[Assegnare da codice più oggetti ad un Gruppo di eventi]]&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* [[Aggiungere un Evento o anche integrare quelli già posseduti da un Oggetto &amp;quot;Figlio&amp;quot; di un Oggetto più complesso]]&lt;br /&gt;
&lt;br /&gt;
* [[Assegnare un valore a una proprietà di un Oggetto]]&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere il tipo di Oggetto a cui appartiene un identificatore]]&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;B&amp;gt;[[Creare array di oggetti]]&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* [[Distruggere gli Oggetti che non posseggono il Metodo .Delete()]]&lt;br /&gt;
&lt;br /&gt;
* [[Impedire che un oggetto sollevi qualsiasi evento]]&lt;br /&gt;
&lt;br /&gt;
* [[Istanziare un oggetto mediante la Classe &amp;quot;Object&amp;quot;]]&lt;br /&gt;
&lt;br /&gt;
* [[Leggere nell'area di memoria occupata da un oggetto]]&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;
* [[Ottenere l'indirizzo dei dati di un Oggetto]]&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;
* [[Sapere il nome del Componente al quale appartiene la Classe di un oggetto utilizzato]]&lt;br /&gt;
&lt;br /&gt;
* [[Sapere la quantità di memoria occupata da un oggetto]]&lt;br /&gt;
&lt;br /&gt;
* [[Sapere l'oggetto che ha scatenato l'evento]]&lt;br /&gt;
&lt;br /&gt;
* [[Sapere quante istanze di una Classe sono state create]]&lt;br /&gt;
&lt;br /&gt;
* [[Sapere se un oggetto è un'istanza di una determinata Classe]]&lt;br /&gt;
&lt;br /&gt;
* [[Utilizzare la proprietà .Tag come un array di tipo Variant]]&lt;br /&gt;
&lt;br /&gt;
=== Oggetti grafici, Controlli e Widget===&lt;br /&gt;
&lt;br /&gt;
* [[Adattare la dimensione del font in un Oggetto grafico se il testo occupa una lunghezza o un'altezza superiore a quella dell'Oggetto]]&lt;br /&gt;
&lt;br /&gt;
* [[Adattare la dimensione di un Oggetto grafico al testo contenuto]]&lt;br /&gt;
&lt;br /&gt;
* [[Assegnare un Gruppo di Eventi a più Controlli modificando manualmente il file sorgente del programma Gambas]]  &lt;br /&gt;
&lt;br /&gt;
* [[Centrare un oggetto grafico all'interno di un Contenitore]]&lt;br /&gt;
&lt;br /&gt;
* [[Cliccare in un oggetto grafico qualsiasi o in una immagine suddivisi in rettangoli]]&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere gli oggetti grafici 'figli' costituenti l'oggetto 'padre']]&lt;br /&gt;
&lt;br /&gt;
* [[Copiare uno o più caratteri di un testo da una Label o da una TextLabel e incollarli in un altro Controllo di testo]]&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 un file immagine dagli oggetti presenti in un Contenitore]]&lt;br /&gt;
&lt;br /&gt;
* [[Creare widget di Controlli grafici]]&lt;br /&gt;
&lt;br /&gt;
* [[Differenza fra la proprietà &amp;quot;.Children&amp;quot; e la proprietà &amp;quot;.Controls&amp;quot; di un oggetto]]&lt;br /&gt;
&lt;br /&gt;
* [[Distruggere i Controlli grafici posti in un Contenitore]]&lt;br /&gt;
&lt;br /&gt;
* [[Far mostrare il simbolo &amp;quot;&amp;amp;&amp;quot; su un Controllo grafico fornito della Proprietà .Text]]&lt;br /&gt;
&lt;br /&gt;
* [[Fissare la distanza di un Controllo grafico in modo costante rispetto ai bordi del Form durante il ridimensionamento di questo]]&lt;br /&gt;
&lt;br /&gt;
* [[Individuare il numero d'indice di Controlli appartenenti al medesimo gruppo di Eventi senza servirsi di sue specifiche proprietà]]&lt;br /&gt;
&lt;br /&gt;
* [[Individuare una Classe di Oggetti grafici fra molti posti in un Contenitore]]&lt;br /&gt;
&lt;br /&gt;
* [[Individuare uno specifico Controllo con Last in base alla sua Proprietà &amp;quot;.Id&amp;quot;]]&lt;br /&gt;
&lt;br /&gt;
* [[Individuare uno specifico Controllo in base alla sua Proprietà &amp;quot;.Name&amp;quot;]]&lt;br /&gt;
&lt;br /&gt;
* [[Metodo di pseudo indirizzamento ad Oggetti grafici]]&lt;br /&gt;
&lt;br /&gt;
* [[Modificare la dimensione di un Oggetto grafico con il mouse impostando i punti di contatto intorno al suo perimetro]]&lt;br /&gt;
&lt;br /&gt;
* [[Modificare la dimensione di un Oggetto grafico ruotando la rotellina del mouse]]&lt;br /&gt;
&lt;br /&gt;
* [[Mostrare in un Oggetto di testo il contenuto di un file trascinandolo e rilasciandolo senza l'uso delle specifiche risorse di Gambas del Drag&amp;amp;Drop]]&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;B&amp;gt;[[Oggetti grafici e di testo che supportano il codice HTML]]&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* [[Oggetti scorrevoli]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere l'immagine di un Controllo grafico]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere risultati diversi in base alla parte del Controllo premuta dal mouse]]&lt;br /&gt;
&lt;br /&gt;
* [[Porre sotto osservazione un Oggetto grafico]]&lt;br /&gt;
&lt;br /&gt;
* [[Posizione equidistante di un Oggetto rispetto al margine destro del suo Contenitore e ad un punto alla sua sinistra]]&lt;br /&gt;
&lt;br /&gt;
* [[Proxy: la Proprietà per sollevare Eventi del mouse e della tastiera contemporaneamente in due Controlli]]&lt;br /&gt;
&lt;br /&gt;
* [[Raggiungere e gestire gli oggetti di FMain da una classe secondaria]]&lt;br /&gt;
&lt;br /&gt;
* [[Riposizionare in modo circolare più oggetti posti in pila]]&lt;br /&gt;
&lt;br /&gt;
* [[Sapere se un oggetto, spostato sul Form con il mouse, è al di sopra di un altro oggetto]]&lt;br /&gt;
&lt;br /&gt;
* [[Selezionare con lo spostamento del mouse un'area di un oggetto]]&lt;br /&gt;
&lt;br /&gt;
* [[Sollevare l'Evento _MouseMove() di un Oggetto grafico spostando su di esso il mouse senza tenere premuto un suo tasto]]&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;B&amp;gt;[[Spostare Oggetti grafici con il mouse all'interno di un contenitore senza Drag &amp;amp; Drop]]&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* [[Spostare o ridimensionare un oggetto a seconda del punto ove si clicca]]&lt;br /&gt;
&lt;br /&gt;
* [[Uso di Unicode con gli oggetti di testo]]&lt;br /&gt;
&lt;br /&gt;
* [[Utilizzare anche in altre subroutine un Oggetto grafico dichiarato localmente]]&lt;br /&gt;
&lt;br /&gt;
* [[Verificare l'esistenza di un Controllo in un Contenitore]]&lt;br /&gt;
&lt;br /&gt;
== ODBC ==&lt;br /&gt;
&lt;br /&gt;
* [[ODBC]]&lt;br /&gt;
&lt;br /&gt;
== OpenGL ==&lt;br /&gt;
&lt;br /&gt;
* [[Gambas e Opengl]]&lt;br /&gt;
&lt;br /&gt;
* [[OpenGL: lezioni di Grafica Interattiva]]&lt;br /&gt;
&lt;br /&gt;
* [[Textures]]&lt;br /&gt;
&lt;br /&gt;
===Esempi pratici===&lt;br /&gt;
&lt;br /&gt;
* [[Creare con OpenGL un ambiente virtuale 3D]]&lt;br /&gt;
* [[Ruotare un cubo sul suo asse Y usando OpenGL]]&lt;br /&gt;
* [[Ruotare un cubo sui suoi assi X e Y usando OpenGL]]&lt;br /&gt;
* [[Ruotare un cubo sui suoi assi X, Y e Z usando OpenGL]]&lt;br /&gt;
* [[Ruotare un triangolo intorno alla propria altezza usando OpenGL]]&lt;br /&gt;
* [[Ruotare una piramide sul suo asse Y usando OpenGL]]&lt;br /&gt;
* [[Ruotare una piramide sui suoi assi X, Y e Z usando OpenGL]]&lt;br /&gt;
* [[Ruotare una sfera usando OpenGL]]&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;
* [[Invio di posta elettronica con SMTP e SSL mediante le funzioni esterne del API di Libcurl]]&lt;br /&gt;
&lt;br /&gt;
* [[Leggere la posta elettronica con IMAP e SSL mediante le funzioni esterne del API di Libcurl]]&lt;br /&gt;
&lt;br /&gt;
* [[Leggere la posta elettronica con POP3 e SSL mediante le funzioni esterne del API di Libcurl]]&lt;br /&gt;
&lt;br /&gt;
* [[Leggere la posta elettronica mediante le sole risorse di Gambas]]&lt;br /&gt;
&lt;br /&gt;
== Processi ==&lt;br /&gt;
&lt;br /&gt;
=== Gestione dei Processi in genere ===&lt;br /&gt;
&lt;br /&gt;
* [[Cambiare in esecuzione la directory di lavoro di un processo Gambas con la funzione esterna chdir()]]&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere in tempo reale il numero dell'ultimo processo appena aperto]]&lt;br /&gt;
&lt;br /&gt;
=== Gestione dei Processi mediante la Classe &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 mediante Process]]&lt;br /&gt;
&lt;br /&gt;
* [[Sapere se esiste un Processo con un ID specifico]]&lt;br /&gt;
&lt;br /&gt;
* [[Terminare automaticamente un Processo dopo un periodo di tempo dalla sua apertura con Process]]&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;
* [[Attivare la finestra di un programma con le funzioni del API di X11]]&lt;br /&gt;
&lt;br /&gt;
* [[Avviare un'applicazione Gambas in un determinato desktop]]&lt;br /&gt;
&lt;br /&gt;
* [[Avviare un progetto Gambas dalla sua cartella]]&lt;br /&gt;
&lt;br /&gt;
* [[Catturare con il Componente gb.media quanto mostrato dalla finestra di un programma o sulla Scrivania e farne un file video]]&lt;br /&gt;
&lt;br /&gt;
* [[Catturare immagini di una finestra di un programma e farne un file audio-video OGG-Theora con le funzioni esterne del API di GStreamer]]&lt;br /&gt;
&lt;br /&gt;
* [[Catturare l'immagine della finestra di un programma mediante le risorse della Classe DesktopWindow e le funzioni esterne del API di X11]]&lt;br /&gt;
&lt;br /&gt;
* [[Chiudere la finestra di un programma Gambas premendo i tasti Ctrl e 'c' della tastiera]]&lt;br /&gt;
&lt;br /&gt;
* [[Chiudere le finestre secondarie di un programma Gambas lasciando aperto il solo Form principale]]&lt;br /&gt;
&lt;br /&gt;
* [[Chiudere programmi esterni]]&lt;br /&gt;
&lt;br /&gt;
* [[Chiudere un programma Gambas se si clicca all'esterno della sua finestra principale]]&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere con le risorse del API di libglib-2.0 il percorso assoluto di un programma]]&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere i valori della dimensione dei quattro margini delle finestre presenti sul Desktop]]&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere la directory in cui sono memorizzati i file temporanei del processo corrente di un programma Gambas]]&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;
* [[Creare una cartella delle preferenze di un programma Gambas con le funzioni esterne del API di SDL2 o di SDL3]]&lt;br /&gt;
&lt;br /&gt;
* [[Elencare il PID ed il corrispondente nome di ciascun processo attivo]]&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;
* [[Impedire la chiusura di un programma Gambas se si clicca sul tastino con la X in alto a destra della sua finestra principale]]&lt;br /&gt;
&lt;br /&gt;
* [[Individuare con certezza un file presente nella cartella di un progetto Gambas]]&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 ID e nome delle finestre attive con le risorse del Componente gb.desktop]]&lt;br /&gt;
&lt;br /&gt;
* [[Individuare ID e nome delle finestre attive, nonché il PID dei loro programmi con le risorse del Componente gb.desktop.x11]]&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 Gambas]]&lt;br /&gt;
&lt;br /&gt;
* [[Individuare il percorso ove risiede la cartella del progetto Gambas]]&lt;br /&gt;
&lt;br /&gt;
* [[Individuare l'ID ed il nome della finestra attiva mediante le funzioni del API di X11]]&lt;br /&gt;
&lt;br /&gt;
* [[Individuare l'ID ed il nome di una finestra nonché il PID del programma mediante le funzioni del API di X11]]&lt;br /&gt;
&lt;br /&gt;
* [[Inglobare in un programma Gambas la finestra di un altro programma Gambas mediante le funzioni del API di X11]]&lt;br /&gt;
&lt;br /&gt;
* [[Lanciare da un'applicazione Gambas il Terminale e far partire da esso un programma]]&lt;br /&gt;
&lt;br /&gt;
* [[Lanciare un programma esterno conoscendo soltanto il nome del suo file eseguibile presente nel sistema]]&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;
* [[Modificare le dimensioni della finestra di un programma con le funzioni del API di X11]]&lt;br /&gt;
&lt;br /&gt;
* [[Muovere e modificare le dimensioni della finestra di un programma con le funzioni del API di X11]]&lt;br /&gt;
&lt;br /&gt;
* [[Muovere la finestra di un programma con le funzioni del API di X11]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere informazioni sulle applicazioni client in esecuzione su un display con le funzioni del API di X11]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere la directory di lavoro corrente dell'applicazione Gambas]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere l'immagine della finestra di un programma]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere la schermata (screenshot) della finestra di un programma]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere le dimensioni della finestra di un programma esterno]]&lt;br /&gt;
&lt;br /&gt;
* [[Passare dati in runtime ad un programma 'a linea di comando']]&lt;br /&gt;
&lt;br /&gt;
* [[Porre la finestra di un programma esterno in primo piano]]&lt;br /&gt;
&lt;br /&gt;
* [[Salvare un file nella Directory di Lavoro di un programma Gambas]]&lt;br /&gt;
&lt;br /&gt;
* [[Sapere quando il puntatore del mouse si trova sulla finestra di un programma esterno]]&lt;br /&gt;
&lt;br /&gt;
* [[Sapere quanto tempo è passato dall'inizio del programma]]&lt;br /&gt;
&lt;br /&gt;
* [[Sapere se un programma esterno è già in funzione]]&lt;br /&gt;
&lt;br /&gt;
* [[Sapere se il programma Gambas sta funzionando come progetto dall'IDE oppure come eseguibile .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;
* [[Uscire da un'applicazione Gambas premendo un tasto mediante le funzioni del API di X11]]&lt;br /&gt;
&lt;br /&gt;
===Trasmissione di dati fra due programmi Gambas o fra un programma esterno e un programma Gambas===&lt;br /&gt;
&lt;br /&gt;
* [[Indirizzare dati da un programma a un altro e a un Terminale]]&lt;br /&gt;
&lt;br /&gt;
* [[Intercettare i dati inviati allo standard output da un programma C]]&lt;br /&gt;
&lt;br /&gt;
* [[Inviare dati da un programma Gambas ad un altro mediante le risorse del Componente DBus]]&lt;br /&gt;
&lt;br /&gt;
* [[Inviare dati stringa da un programma Gambas a un programma esterno avente un'area di testo o a un Terminale]]&lt;br /&gt;
&lt;br /&gt;
* [[Ricevere dati da un programma esterno mediante un file]]&lt;br /&gt;
&lt;br /&gt;
* [[Ricevere un 'segnale' da un programma C]]&lt;br /&gt;
&lt;br /&gt;
* [[Trasmissione di dati fra due o più programmi Gambas mediante la Classe Socket del Componente gb.net]]&lt;br /&gt;
&lt;br /&gt;
* [[Trasmissione di dati fra due o più programmi Gambas mediante la Classe UdpSocket del Componente gb.net]]&lt;br /&gt;
&lt;br /&gt;
* [[Usare ALSA per far comunicare due o più programmi Gambas]]&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 uno pseudoterminale per far comunicare bidirezionalmente due programmi]]&lt;br /&gt;
&lt;br /&gt;
== ProgressBar e simulazioni di ProgressBar==&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere una simil-ProgressBar da una LCDLabel]]&lt;br /&gt;
&lt;br /&gt;
* [[Pseudo-ProgressBar in un'applicazione 'a riga di comando']]&lt;br /&gt;
&lt;br /&gt;
* [[Simulare una ProgressBar mediante una DrawingArea]]&lt;br /&gt;
&lt;br /&gt;
* [[Spostare la barra indicatrice di una ProgressBar con il mouse]]&lt;br /&gt;
&lt;br /&gt;
== Puntatori - Memory Stream ==&lt;br /&gt;
&lt;br /&gt;
====Puntatori====&lt;br /&gt;
* [[Assegnare ad un Puntatore la rappresentazione numerica di un indirizzo di memoria contenuto da un altro Puntatore]]&lt;br /&gt;
&lt;br /&gt;
* [[Assegnare ad un Puntatore un'area di memoria riservata con Alloc()]]&lt;br /&gt;
&lt;br /&gt;
* [[Assegnare un Puntatore ad una Struttura per dereferenziarlo]]&lt;br /&gt;
&lt;br /&gt;
* [[Assegnare un vettore ad una variabile di tipo Puntatore]]&lt;br /&gt;
&lt;br /&gt;
* [[Cambiare la dimensione di un'area di memoria mediante Realloc()]]&lt;br /&gt;
&lt;br /&gt;
* [[Deallocare un'area di memoria precedentemente allocata con alloc() e assicurarsi che il Puntatore non punti a un indirizzo rilevante di memoria]]&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;B&amp;gt;[[Dereferenziare un Puntatore con le funzioni specifiche di dereferenziazione e con i Memory Stream]]&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* [[Dereferenziare un Puntatore con un vettore]]&lt;br /&gt;
&lt;br /&gt;
* [[Dereferenziare un Puntatore di Puntatore con le funzioni specifiche di dereferenziazione e con i Memory Stream]]&lt;br /&gt;
&lt;br /&gt;
* [[Differenza fra Assegnazione a un Puntatore di un indirizzo di memoria e Dereferenziazione di un Puntatore]]&lt;br /&gt;
&lt;br /&gt;
* [[Gestire un Puntatore con le funzioni esterne del API di libglib-2.0]]&lt;br /&gt;
&lt;br /&gt;
* [[Modificare il valore di una variabile Integer puntata da un Puntatore e sua dereferenziazione con le funzioni esterne del API di SDL2]]&lt;br /&gt;
&lt;br /&gt;
* [[Opportunità di azzerare tutti i byte di un'area di memoria riservata seppur senza deallocarla]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere il puntatore a una variabile vettoriale]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere il puntatore di una variabile di tipo Image]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere il puntatore di una variabile di tipo Struttura]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere il valore numerico dell'indirizzo di memoria contenuto dal Puntatore]]&lt;br /&gt;
&lt;br /&gt;
* [[Passaggio di un argomento per 'indirizzo' ad una Funzione]]&lt;br /&gt;
&lt;br /&gt;
* [[Porre a zero i valori contenuti dall'area di memoria puntata da un Puntatore]]&lt;br /&gt;
&lt;br /&gt;
* [[Scrivere i valori contenuti da un file in un'area riservata di memoria]]&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;B&amp;gt;[[Scrivere nell'area di memoria puntata da un Puntatore]]&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* [[Vedere e modificare con i Puntatori un byte costituente il valore di una variabile]]&lt;br /&gt;
&lt;br /&gt;
==== Memory Stream ====&lt;br /&gt;
&lt;br /&gt;
* [[Definizione ed uso dei Memory Stream]]&lt;br /&gt;
&lt;br /&gt;
* [[Creare con i Memory Stream un'area di memoria simile ad una Struttura avente come membro un'altra Struttura]]&lt;br /&gt;
&lt;br /&gt;
== RadioButton==&lt;br /&gt;
&lt;br /&gt;
* [[Adattare la lunghezza del RadioButton al testo contenuto]]&lt;br /&gt;
&lt;br /&gt;
== Report (gb.report2) ==&lt;br /&gt;
&lt;br /&gt;
* [[Creare report con il componente gb.report2]]&lt;br /&gt;
&lt;br /&gt;
== Scanner ==&lt;br /&gt;
&lt;br /&gt;
* [[Eseguire una scansione con lo Scanner mediante le funzioni esterne di libsane]]&lt;br /&gt;
&lt;br /&gt;
* [[Eseguire una scansione e riconoscimento caratteri (OCR) con l'API di Sane, Tesseract e Leptonica]]&lt;br /&gt;
&lt;br /&gt;
* [[Usare le risorse del Componente gb.scanner di Gambas]]&lt;br /&gt;
&lt;br /&gt;
== Scripting ==&lt;br /&gt;
&lt;br /&gt;
* [[Scripting con Gambas]]&lt;br /&gt;
&lt;br /&gt;
==ScrollArea==&lt;br /&gt;
&lt;br /&gt;
* [[Usare la ScrollArea]]&lt;br /&gt;
&lt;br /&gt;
==ScrollView==&lt;br /&gt;
&lt;br /&gt;
* [[Usare la ScrollView]]&lt;br /&gt;
&lt;br /&gt;
== Settings ==&lt;br /&gt;
&lt;br /&gt;
* [[Uso della classe Settings]]&lt;br /&gt;
&lt;br /&gt;
== Sistema operativo - Dispositivi - Interfacce - Reti ==&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere con la funzione esterna getrlimit() i valori limite che il kernel impone per alcune risorse]]&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere  con le risorse del API di libglib-2.0 la directory unica per l'utente corrente sul sistema locale]]&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere con le sole risorse di Gambas i dispositivi esterni SCSI o SATA montati]]&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere i dispositivi usb di memorizzazione di massa con le funzioni esterne di libudev]]&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere il nome delle interfacce di rete presenti nel proprio sistema]]&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere il file-devide pts associato ad un Terminale o console con la funzione esterna ttyname()]]&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere il fuso orario (TimeZone) impostato nel proprio sistema]]&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere il nome del file-device del Terminale di controllo del processo con la funzione esterna ctermid()]]&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere l'hostname impostato nel proprio sistema]]&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere la dimensione del Dispositivo a blocchi]]&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere la distribuzione Linux montata]]&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere la valuta monetaria locale utilizzata dal sistema operativo]]&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere le impostazioni del separatore decimale nel sistema]]&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere le impostazioni per il separatore delle migliaia]]&lt;br /&gt;
&lt;br /&gt;
* [[Effettuare il PING]]&lt;br /&gt;
&lt;br /&gt;
* [[Identificare univocamente un computer]]&lt;br /&gt;
&lt;br /&gt;
* [[La cartella ove sono depositate le icone fornite dal sistema operativo Linux]]&lt;br /&gt;
&lt;br /&gt;
* [[Leggere il file fstab per avere informazioni sui vari filesystem montati]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere gli indirizzi IP di ogni interfaccia presente sulla medesima macchina]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere i valori di baud rates del flusso in entrata ed in uscita dei file-device terminali]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere la distribuzione di Linux montata, il tipo di architettura e la versione del kernel]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere il nome dell'host corrispondente ad un indirizzo IP e viceversa]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere il solo nome del proprio sistema operativo]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere informazioni dal proprio dispositivo wireless con le risorse del API di libiw]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere informazioni generali sui dispositivi network mediante le risorse del API di Libnm-glib]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere informazioni sulle statistiche di sistema globali con la funzione esterna sysinfo()]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere la lista di tutte le variabili d'ambiente nel proprio sistema mediante le risorse del API di libglib-2.0]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere la lista di tutti i dispositivi PCI presenti nel sistema]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere mediante le funzioni esterne del API di Libusb la lista di tutti i dispositivi USB attivi nel sistema]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere mediante le funzioni esterne del API di Libgusb la lista di tutti i dispositivi USB attivi nel sistema]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere mediante le funzioni esterne della libreria Libudev un elenco degli oggetti hidraw collegati al sistema]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere un Identificativo Univoco Universale - UUID]]&lt;br /&gt;
&lt;br /&gt;
* [[Visualizzare il tempo trascorso dall'ultimo avvio del sistema]]&lt;br /&gt;
&lt;br /&gt;
== Slider ==&lt;br /&gt;
&lt;br /&gt;
* [[Creare uno pseudo-slider]]&lt;br /&gt;
&lt;br /&gt;
* [[Creare uno pseudo-slider con uno o più cursori posti fra un valore minimo e uno massimo variabili]]&lt;br /&gt;
&lt;br /&gt;
* [[Mostrare il segna-valori 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;
== SpinBar ==&lt;br /&gt;
* [[Adattare la SpinBar a valori in virgola mobile con più di tre decimali]]&lt;br /&gt;
&lt;br /&gt;
== SpinBox ==&lt;br /&gt;
* [[Variare il valore di uno SpinBox 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;
==Sqlite==&lt;br /&gt;
* [[Creare un DataBase sqlite3]]&lt;br /&gt;
* [[Utilizzo base di Gambas e Sqlite3]]&lt;br /&gt;
&lt;br /&gt;
== Stampa - Printer==&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;B&amp;gt;[[Stampare in Gambas]]&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* [[Individuare le stampanti presenti nel proprio sistema]]&lt;br /&gt;
&lt;br /&gt;
* [[Stampare il contenuto grafico di una PictureBox]]&lt;br /&gt;
&lt;br /&gt;
* [[Stampare il testo presente in oggetti di testo]]&lt;br /&gt;
&lt;br /&gt;
* [[Stampare un Controllo grafico posto sul Form]]&lt;br /&gt;
&lt;br /&gt;
* [[Stampare un file con le funzioni del API di cups]]&lt;br /&gt;
&lt;br /&gt;
* [[Verifica ed eliminazione dei processi di stampa mediante le funzioni del API di CUPS]]&lt;br /&gt;
&lt;br /&gt;
== Stringhe, caratteri, testo e file di testo ==&lt;br /&gt;
&lt;br /&gt;
* [[Accedere ai caratteri contenuti da una variabile di tipo stringa come se questa fosse una vettore]]&lt;br /&gt;
&lt;br /&gt;
* [[Aggiungere una riga di caratteri alla fine di un file di 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;
* [[Associare una stringa a un identificatore unico numerico mediante le funzioni Quarks del API di libglib-2.0]]&lt;br /&gt;
&lt;br /&gt;
* [[Cercare la seconda occorrenza di una lettera fra tre o più]]&lt;br /&gt;
&lt;br /&gt;
* [[Cercare una parola in una stringa]]&lt;br /&gt;
&lt;br /&gt;
* [[Concatenare due stringhe]]&lt;br /&gt;
&lt;br /&gt;
* [[Confrontare due stringhe]]&lt;br /&gt;
&lt;br /&gt;
* [[Confrontare i caratteri di due stringhe]]&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere con le sole risorse di Gambas il numero di occorrenze in una stringa]]&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere il numero di occorrenze in una stringa con la funzione esterna PyUnicode_Count() della libreria libpython3]]&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere il numero e la posizione di tutte le occorrenze di una sottostringa in una stringa]]&lt;br /&gt;
&lt;br /&gt;
* [[Conversione di due valori, costituenti un carattere speciale, nella sua rappresentazione grafica]]&lt;br /&gt;
&lt;br /&gt;
* [[Convertire due unità numeriche stringa graficamente rappresentanti un valore esadecimale nel corrispondente valore decimale effettivo]]&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;
* [[Convertire in un tipo di dati numerico un valore letto in formato Stringa da un file]]&lt;br /&gt;
&lt;br /&gt;
* [[Convertire un carattere maiuscolo in minuscolo senza la funzione LCase()]]&lt;br /&gt;
&lt;br /&gt;
* [[Convertire un codice Unicode in carattere UTF-8 con la funzione g_unichar_to_utf8() della libreria libglib-2.0]]&lt;br /&gt;
&lt;br /&gt;
* [[Convertire un numero di tipo stringa in un valore di tipo Float con la funzione g_strtod() della libreria glib-2.0]]&lt;br /&gt;
&lt;br /&gt;
* [[Convertire un numero di tipo stringa in un valore di tipo Float con la funzione  PyOS_string_to_double() della libreria libpython3]]&lt;br /&gt;
&lt;br /&gt;
* [[Convertire un numero in un carattere ASCII]]&lt;br /&gt;
&lt;br /&gt;
* [[Creare un collegamento ipertestuale]]&lt;br /&gt;
&lt;br /&gt;
* [[Filtrare i caratteri invalidi UTF8 ed ASCII da una stringa con le funzioni esterne del API di PulseAudio]]&lt;br /&gt;
&lt;br /&gt;
* [[Funzione simile a String()]]&lt;br /&gt;
&lt;br /&gt;
* [[Funzione simile a String.Len()]]&lt;br /&gt;
&lt;br /&gt;
* [[Individuare i valori costituenti i caratteri tipo UTF-8 di lettere localizzate]]&lt;br /&gt;
&lt;br /&gt;
* [[Individuare in un testo i caratteri non alfanumerici e la loro posizione]]&lt;br /&gt;
&lt;br /&gt;
* [[Individuare in una stringa i caratteri ricorrenti e loro posizioni]]&lt;br /&gt;
&lt;br /&gt;
* [[Inserire in una stringa caratteri ASCII non stampabili]]&lt;br /&gt;
&lt;br /&gt;
* [[Inserire un testo in diagonale in un Controllo grafico]]&lt;br /&gt;
&lt;br /&gt;
* [[Modificare in maiuscolo il primo carattere di una stringa]]&lt;br /&gt;
&lt;br /&gt;
* [[Modificare un 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 del testo con caratteri ruotati orizzontalmente e verticalmente]]&lt;br /&gt;
&lt;br /&gt;
* [[Mostrare il simbolo dell'Euro]]&lt;br /&gt;
&lt;br /&gt;
* [[Mostrare in una stringa le virgolette]]&lt;br /&gt;
&lt;br /&gt;
* [[Mostrare con il punto anziché con la virgola un numero in virgola mobile rappresentato in formato stringa]]&lt;br /&gt;
&lt;br /&gt;
* [[Non visualizzare i caratteri non-stampabili di una stringa che inizia con caratteri stampabili]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere con l'API di Libglib-2.0 il codice UNICODE di un carattere UTF-8]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere da un testo una parte delimitata da due parole]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere da un valore numerico i caratteri ASCII corrispondenti a ciascun byte componente il numero]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere il valore ASCII di un carattere]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere un file RTF da un file UTF8 e viceversa con le funzioni esterne del API di Librtfcomp]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere un'unica stringa dalle stringhe contenute dagli elementi di un vettore di tipo Stringa]] &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;
* [[Rappresentare in formato stringa un numero avente i punti delle migliaia e la virgola dei decimali]]&lt;br /&gt;
&lt;br /&gt;
* [[Ribaltare i caratteri e invertire il testo in un Controllo grafico che supporta il RichText]]&lt;br /&gt;
&lt;br /&gt;
* [[Rimuovere da una stringa tutti i caratteri non-stampabili eventualmente presenti]]&lt;br /&gt;
&lt;br /&gt;
* [[Rimuovere da una stringa uno o più caratteri del codice ASCII esteso]]&lt;br /&gt;
&lt;br /&gt;
* [[Rimuovere tot caratteri da una stringa mediante le funzioni esterne del API di Libglib-2.0]]&lt;br /&gt;
&lt;br /&gt;
* [[Riposizionare in modo casuale i caratteri di una stringa con la funzione esterna strfry()]]&lt;br /&gt;
&lt;br /&gt;
* [[Sapere con l'API di Libglib-2.0 se un carattere è stampabile]]&lt;br /&gt;
&lt;br /&gt;
* [[Sapere con l'API di Libglib-2.0 se un codice UNICODE corrisponde ad un carattere alfabetico]]&lt;br /&gt;
&lt;br /&gt;
* [[Sapere se una stringa è formata soltanto da caratteri alfanumerici]]&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;
* [[Sovrascrivere una stringa con uno o più caratteri]]&lt;br /&gt;
&lt;br /&gt;
* [[Testo verticale]]&lt;br /&gt;
&lt;br /&gt;
* [[Utilizzare in una Costante un numero esadecimale per rappresentare un carattere ASCII]]&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;
* [[Verificare con le funzioni del API di Libglib-2.0 se una stringa inizia con un prefisso o termina con un siffisso]]&lt;br /&gt;
&lt;br /&gt;
* [[Verificare con le risorse del API di PulseAudio se una stringa contiene solo caratteri UTF8 validi]]&lt;br /&gt;
&lt;br /&gt;
* [[Verificare se in una stringa vi sono caratteri non stampabili]]&lt;br /&gt;
&lt;br /&gt;
== Strutture ==&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;B&amp;gt;[[Strutture: dichiarazione ed uso]]&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* [[Assegnare a una Struttura i valori contenuti in un'area di memoria creata con la funzione Alloc()]]&lt;br /&gt;
&lt;br /&gt;
* [[Assegnare direttamente i valori di dimensione conosciuta, letti da un file, ad una Struttura]]&lt;br /&gt;
&lt;br /&gt;
* [[Assegnare i valori di un file ad una Struttura mediante un Puntatore]]&lt;br /&gt;
&lt;br /&gt;
* [[Assegnare una Struttura a un Puntatore]]&lt;br /&gt;
&lt;br /&gt;
* [[Configurazione, organizzazione ed impostazione dell'oggetto Struttura secondo i sorgenti di Gambas]]&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere i nomi identificatori dei membri di una Struttura]]&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere la dimensione di una Struttura]]&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere via codice il nome di una Struttura]]&lt;br /&gt;
&lt;br /&gt;
* [[Leggere e scrivere direttamente nell'area di memoria di una Struttura accedendovi con la classe Object]]&lt;br /&gt;
&lt;br /&gt;
* [[Nascondere un valore in una Struttura]]&lt;br /&gt;
&lt;br /&gt;
* [[Ordinare gli elementi di un vettore di Strutture in base ad un loro medesimo membro]]&lt;br /&gt;
&lt;br /&gt;
* [[Ordinare gli elementi dei membri vettoriali di una Struttura in base ad uno di loro]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere il puntatore di una variabile di tipo Struttura]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere il puntatore direttamente ai dati associati a una Struttura]]&lt;br /&gt;
&lt;br /&gt;
* [[Passare una Struttura con Event]]&lt;br /&gt;
&lt;br /&gt;
* [[Scrivere i dati dei membri di una Struttura in un file direttamente]]&lt;br /&gt;
&lt;br /&gt;
* [[Strutture e Funzioni esterne]]&lt;br /&gt;
&lt;br /&gt;
* [[Uso delle Strutture tra Classi e Moduli]]&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;
== TableView ==&lt;br /&gt;
&lt;br /&gt;
* [[Assegnare i dati di una TextArea a una TableView]]&lt;br /&gt;
&lt;br /&gt;
* [[Inserire un oggetto in una cella di una TableView]]&lt;br /&gt;
&lt;br /&gt;
* [[Modificare il contenuto di una cella di una TableView cliccandoci dentro]]&lt;br /&gt;
&lt;br /&gt;
* [[Selezionare una intera riga di una TableView]]&lt;br /&gt;
&lt;br /&gt;
* [[Utilizzare il tasto Tab della tastiera per spostare il cursore del mouse fra le celle di una TableView]]&lt;br /&gt;
&lt;br /&gt;
* [[Visualizzare automaticamente una specifica riga di una TableView senza dover agire sulla ScrollBar laterale]]&lt;br /&gt;
&lt;br /&gt;
== TabPanel ==&lt;br /&gt;
&lt;br /&gt;
* [[Cancellare il testo presente in uno o più Controlli di testo posti su una TabPanel]]&lt;br /&gt;
&lt;br /&gt;
* [[Impostare l'immagine ed il colore del titolo delle tabelle di una TabPanel]]&lt;br /&gt;
&lt;br /&gt;
* [[Inserire tabelle ed oggetti all'interno di una TabPanel]]&lt;br /&gt;
&lt;br /&gt;
== TabStrip ==&lt;br /&gt;
&lt;br /&gt;
* [[Aggiungere Controlli su una determinata scheda di una TabStrip successivamente alla sua creazione]]&lt;br /&gt;
&lt;br /&gt;
* [[Aggiungere schede in una TabStrip successivamente alla sua creazione]]&lt;br /&gt;
&lt;br /&gt;
* [[Eliminare una scheda da una TabStrip]]&lt;br /&gt;
&lt;br /&gt;
* [[Estrarre i dati dagli oggetti presenti sulle schede di una TabStrip]]&lt;br /&gt;
&lt;br /&gt;
* [[Inserire più schede e Controlli in una TabStrip nel momento della sua creazione]]&lt;br /&gt;
&lt;br /&gt;
* [[Modificare il valore delle proprietà degli oggetti posti sulla scheda in primo piano di una TabStrip]]&lt;br /&gt;
&lt;br /&gt;
* [[Nascondere una scheda di una TabStrip]]&lt;br /&gt;
&lt;br /&gt;
== Tavoletta grafica e Gambas ==&lt;br /&gt;
&lt;br /&gt;
* [[Leggere l'azione di una penna su una Tavoletta grafica]]&lt;br /&gt;
&lt;br /&gt;
== Tempo, Date e Temporizzazioni ==&lt;br /&gt;
&lt;br /&gt;
* [[Calcolare il numero di giorni compresi fra due date]]&lt;br /&gt;
&lt;br /&gt;
* [[Calcolare il tempo trascorso mediante le funzioni esterne del sub-sistema Timers del API di libglib-2.0]]&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere il fuso orario (TimeZone) impostato nel proprio sistema]]&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere il giorno della settimana di una data mediante le risorse della libreria standard C &amp;quot;time.h&amp;quot;]]&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere il numero di giorni posseduti da un mese]]&lt;br /&gt;
&lt;br /&gt;
* [[Convertire data ed orario da formato Date in un numero]]&lt;br /&gt;
&lt;br /&gt;
* [[Convertire i giorni in formato anni:mesi:giorni]]&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;
* [[Creare un metronomo per console]]&lt;br /&gt;
&lt;br /&gt;
* [[Creare un Timer con le funzioni esterne delle librerie standard C 'signal.h' e 'time.h']]&lt;br /&gt;
&lt;br /&gt;
* [[Formattare &amp;quot;hh:nn:ss&amp;quot; dai soli secondi]]&lt;br /&gt;
&lt;br /&gt;
* [[Funzione di attesa in millisecondi con la libreria esterna libpulsecore]]&lt;br /&gt;
&lt;br /&gt;
* [[Gestione del tempo mediante le funzioni esterne del API di Libcsfml]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere con le risorse della libreria Libc.so.6 il tempo impiegato per eseguire un programma]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere con le risorse della libreria standard C 'time.h' la data nella forma 'giorno-della-settimana mese giorno ora:min:sec anno']]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere il tempo trascorso dall'inizializzazione della libreria SDL2 o della libreria SDL3]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere l'orario locale comprensivo dei microsecondi con la funzione esterna g_date_time_get_microsecond() del API di libglib-2.0]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere l'orario locale comprensivo dei nanosecondi con le risorse di alcune librerie standard C]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere la differenza temporale fra due orari]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere una data e-o l'orario comprensivo dei millisecondi]]&lt;br /&gt;
&lt;br /&gt;
* [[Porre in pausa il programma per un dato numero di microsecondi con la funzione esterna g_usleep() del API di libglib-2.0]]&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;B&amp;gt;[[Rappresentazione stringa localizzata e non-localizzata di una data]]&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* [[Sapere di quanti giorni è formato un determinato anno]]&lt;br /&gt;
&lt;br /&gt;
* [[Sapere di quanti giorni è formato il mese corrente]]&lt;br /&gt;
&lt;br /&gt;
* [[Sapere quanto tempo è passato dall'inizio del programma]]&lt;br /&gt;
&lt;br /&gt;
* [[Sapere quanti microsecondi sono passati dalla data iniziale del tempo Unix sino alla data e all'orario correnti]]&lt;br /&gt;
&lt;br /&gt;
* [[Sapere quanti millisecondi sono passati dalla data iniziale del tempo Unix sino alla data e all'orario correnti]]&lt;br /&gt;
&lt;br /&gt;
* [[Sapere quanti nanosecondi sono passati dalla data iniziale del tempo Unix sino alla data e all'orario correnti]]&lt;br /&gt;
&lt;br /&gt;
* [[Sapere quanti secondi bisogna aggiungere all'orario locale per ottenere l'orario UTC]]&lt;br /&gt;
&lt;br /&gt;
* [[Sapere quanti secondi sono passati dalla data iniziale del tempo Unix sino alla data e all'orario correnti]]&lt;br /&gt;
&lt;br /&gt;
* [[Sapere quanti secondi sono passati dall'inizio del giorno corrente]]&lt;br /&gt;
&lt;br /&gt;
* [[Sapere quanti giorni sono passati dall'inizio dell'anno corrente]]&lt;br /&gt;
&lt;br /&gt;
* [[Sapere quanti secondi sono passati dall'inizio dell'anno corrente]]&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;
* [[Aprire un Terminale con Desktop.OpenTerminal e passargli una riga di comando]]&lt;br /&gt;
&lt;br /&gt;
* [[Aprire un Terminale e passargli una riga di comando mediante le funzioni esterne del API di X11]]&lt;br /&gt;
&lt;br /&gt;
* [[Attendere in un'applicazione 'a riga di comando' la pressione del tasto 'Invio']]&lt;br /&gt;
&lt;br /&gt;
* [[Colorare testo e sfondo in Console o Terminale]]&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere il numero di linee e di colonne costituenti la corrente dimensione di un terminale o console]]&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere in tempo reale il file-device &amp;quot;pts&amp;quot; dell'ultimo Terminale appena aperto]]&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;
* [[Formattare il testo da mostrare in console o in terminale]]&lt;br /&gt;
&lt;br /&gt;
* [[Intercettare i dati inviati allo standard output da un programma C]]&lt;br /&gt;
&lt;br /&gt;
* [[Intercettare il risultato restituito ad intervalli temporali di un comando bash]]&lt;br /&gt;
&lt;br /&gt;
* [[Intercettare la stringa di caratteri immessi dall'utente nella console o Terminale]]&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;
* [[Lanciare da un'applicazione Gambas il Terminale e far partire da esso un programma]]&lt;br /&gt;
&lt;br /&gt;
* [[Lanciare da un'applicazione Gambas un comando bash e far scrivere il risultato in un Terminale]]&lt;br /&gt;
&lt;br /&gt;
* [[Modificare il prompt bash]]&lt;br /&gt;
&lt;br /&gt;
* [[Passare in runtime il numero del file-device 'pts' di un Terminale]]&lt;br /&gt;
&lt;br /&gt;
* [[Pulire il Terminale o la console via codice]]&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 console (standard output) di Gambas]]&lt;br /&gt;
&lt;br /&gt;
* [[Scrivere nella finestra di un Terminale distinto dal programma Gambas]]&lt;br /&gt;
&lt;br /&gt;
* [[Scrivere nello Standard Input di un Terminale con un programma Gambas 'a riga di comando']]&lt;br /&gt;
&lt;br /&gt;
* [[Spostare il cursore in un Terminale lungo una riga di caratteri]]&lt;br /&gt;
&lt;br /&gt;
* [[Stampare un qualsiasi carattere nella console o nel Terminale alle coordinate x, y]]&lt;br /&gt;
&lt;br /&gt;
* [[Stampare una stringa in console con allineamento a destra o a sinistra]]&lt;br /&gt;
&lt;br /&gt;
* [[Stampare una stringa in console sempre su una medesima riga]]&lt;br /&gt;
&lt;br /&gt;
== TextArea ==&lt;br /&gt;
&lt;br /&gt;
* [[Inserire un testo da un Controllo all'interno del testo di una TextArea senza l'uso del Drag&amp;amp;Drop]]&lt;br /&gt;
&lt;br /&gt;
* [[Verificare che siano stati aggiunti uno o più caratteri a una TextArea con l'opzione &amp;quot;Incolla&amp;quot;]]&lt;br /&gt;
&lt;br /&gt;
== TextBox ==&lt;br /&gt;
&lt;br /&gt;
* [[Scrivere in un TextBox dalla posizione manualmente mutata del cursore]]&lt;br /&gt;
&lt;br /&gt;
* [[Sovrascrivere mediante nuovi caratteri i caratteri già presenti in un TextBox]]&lt;br /&gt;
&lt;br /&gt;
== ToolTip ==&lt;br /&gt;
&lt;br /&gt;
* [[Chiudere un ToolTip anticipatamente]]&lt;br /&gt;
&lt;br /&gt;
* [[Modificare il colore e la dimensione del font del testo del ToolTip]]&lt;br /&gt;
&lt;br /&gt;
* [[Modificare la dimensione del ToolTip]]&lt;br /&gt;
&lt;br /&gt;
== Valori numerici, Operazioni matematiche ==&lt;br /&gt;
&lt;br /&gt;
* [[Arrotondamento di un numero con virgola mobile]]&lt;br /&gt;
&lt;br /&gt;
* [[Arrotondare un Intero al più prossimo valore inferiore multiplo di 2, 4, 8, 16, 32 e 64]]&lt;br /&gt;
&lt;br /&gt;
* [[Arrotondare un Intero al successivo multiplo di 2, 4, 8, 16, 32 e 64]]&lt;br /&gt;
&lt;br /&gt;
* [[Cercare un valore all'interno di un file aperto come un flusso di dati di tipo File]]&lt;br /&gt;
&lt;br /&gt;
* [[Cercare un valore all'interno di un file aperto come un flusso di dati di tipo Stringa]]&lt;br /&gt;
&lt;br /&gt;
* [[Calcolare i numeri di Fibonacci]]&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere di un numero il multiplo posto immediatamente dopo un altro numero]]&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere gli angoli acuti di un triangolo rettangolo dai cateti noti]]&lt;br /&gt;
&lt;br /&gt;
* [[Conversione da Base64]]&lt;br /&gt;
&lt;br /&gt;
* [[Conversione di un angolo da valori sessagesimali in decimali e viceversa]]&lt;br /&gt;
&lt;br /&gt;
* [[Conversione in Base64]]&lt;br /&gt;
&lt;br /&gt;
* [[Convertire in un tipo di dati numerico un valore letto in formato Stringa da un file]]&lt;br /&gt;
&lt;br /&gt;
* [[Convertire un numero da Decimale in Binario]]&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 a Esadecimale]]&lt;br /&gt;
&lt;br /&gt;
* [[Convertire un numero da rappresentazione Decimale a Ottale]]&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 esadecimale in binaria]]&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;
* [[Convertire un valore di tipo Float in una stringa con la funzione PyOS_double_to_string() della libreria libpython3]]&lt;br /&gt;
&lt;br /&gt;
* [[Convertire un valore numerico di tipo Float in una stringa di caratteri ASCII]]&lt;br /&gt;
&lt;br /&gt;
* [[Distinguere ogni byte della rappresentazione esadecimale di un valore decimale]]&lt;br /&gt;
&lt;br /&gt;
* [[Elevamento a potenza]]&lt;br /&gt;
&lt;br /&gt;
* [[Esempio di utilizzo delle funzioni esterne del API di GMP]]&lt;br /&gt;
&lt;br /&gt;
* [[Esponente di una potenza]]&lt;br /&gt;
&lt;br /&gt;
* [[Generare numeri casuali con le funzioni esterne del API di libglib-2.0]]&lt;br /&gt;
&lt;br /&gt;
* [[Generare numeri casuali con le funzioni esterne srand() e rand() di stdlib.h]]&lt;br /&gt;
&lt;br /&gt;
* [[Gestire numeri superiori al limite massimo supportato dal tipo Long]]&lt;br /&gt;
&lt;br /&gt;
* [[Invertire le cifre di un numero intero]]&lt;br /&gt;
&lt;br /&gt;
* [[Massimo Comun Divisore di due numeri con le sole risorse di Gambas]]&lt;br /&gt;
&lt;br /&gt;
* [[Minimo Comune Multiplo di due numeri con le sole risorse di Gambas]]&lt;br /&gt;
&lt;br /&gt;
* [[Notazione scientifica e notazione esponenziale in Gambas]]&lt;br /&gt;
&lt;br /&gt;
* [[Operazioni con precisione quadrupla a 128-bit con numeri in virgola mobile mediante la libreria quadmath.h]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere da un valore numerico i caratteri ASCII corrispondenti a ciascun byte componente il numero]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere dai suoi singoli dati-byte un valore numerico di tipo superiore al Byte]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere di un numero in virgola mobile la rappresentazione del separatore con il punto anziché con la virgola]]&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 numero più piccolo e quello più grande fra tre o più numeri mediante le funzioni esterne del API di libgsl]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere il resto da due operandi di tipo Float di una divisione con le risorse del API di Libm.so.6]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere la parte intera e quella decimale di un numero in virgola mobile]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere la rappresentazione come stringa in memoria di un valore numerico]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere numeri casuali di ambito Byte dai file-device /dev/random e /dev/urandom]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere un numero dalla sua memorizzazione in formato Big-Endian]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere un numero dalla sua memorizzazione in formato Little-Endian]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere un valore sempre compreso tra un numero massimo e un numero minimo stabiliti]] &lt;br /&gt;
&lt;br /&gt;
* [[Ottenere un valore numerico dalla rappresentazione in memoria come stringa]]&lt;br /&gt;
&lt;br /&gt;
* [[Rappresentare un numero in alcune basi numeriche]]&lt;br /&gt;
&lt;br /&gt;
* [[Rendere la sola parte decimale di un numero in virgola mobile come un numero di tipo Intero]]&lt;br /&gt;
&lt;br /&gt;
* [[Sapere il tipo di dato più piccolo in Gambas capace di contenere e rappresentare un numero]]&lt;br /&gt;
&lt;br /&gt;
* [[Sapere se la cifra delle unità di un numero è zero]]&lt;br /&gt;
&lt;br /&gt;
* [[Sapere se un numero è pari o dispari]]&lt;br /&gt;
&lt;br /&gt;
* [[Sapere se un numero rientra in un ambito definito di due valori]]&lt;br /&gt;
&lt;br /&gt;
* [[Scambiare i rispettivi valori fra due variabili]]&lt;br /&gt;
&lt;br /&gt;
* [[Troncare alcune cifre decimali in un valore in virgola mobile]]&lt;br /&gt;
&lt;br /&gt;
* [[Verificare se un numero è una potenza di 2]]&lt;br /&gt;
&lt;br /&gt;
== ValueBox ==&lt;br /&gt;
&lt;br /&gt;
* [[Modificare l'allineamento del valore numerico in un ValueBox]]&lt;br /&gt;
&lt;br /&gt;
* [[Rappresentare in un ValueBox un numero avente i punti delle migliaia e la virgola dei decimali]]&lt;br /&gt;
&lt;br /&gt;
* [[Scrivere testo in un ValueBox]]&lt;br /&gt;
&lt;br /&gt;
* [[Utilizzare in un ValueBox vari tipi di valori]]&lt;br /&gt;
&lt;br /&gt;
* [[Utilizzare l'evento _Change() in un ValueBox]]&lt;br /&gt;
&lt;br /&gt;
== Variabili in particolare ==&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere il nome di una variabile 'Pubblica']]&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere in runtime il numero identificatore di un tipo di dato di una variabile presente nel codice]]&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere via codice la quantità di memoria occupata da una variabile]]&lt;br /&gt;
&lt;br /&gt;
* [[Contenere valori di diverso tipo]]&lt;br /&gt;
&lt;br /&gt;
* [[Rendere esplicitamente una variabile quale elemento di un vettore]]&lt;br /&gt;
&lt;br /&gt;
* [[Usare come identificatore di variabile il nome di una parola chiave o di una funzione ovvero un carattere non consentito]]&lt;br /&gt;
&lt;br /&gt;
* [[Verificare l'indirizzo di memoria di una variabile]]&lt;br /&gt;
&lt;br /&gt;
== Video ==&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere con 'proc...fdinfo' la quantità dei dati elaborati di un file video]]&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere quale file video un programma sta eseguendo]]&lt;br /&gt;
&lt;br /&gt;
* [[Eseguire in streaming un video da youtube mediante l'oggetto WebView]]&lt;br /&gt;
&lt;br /&gt;
* [[Eseguire un file Video con il codice HTML]]&lt;br /&gt;
&lt;br /&gt;
* [[Eseguire un file Video con le funzioni esterne del API di Libmpv]]&lt;br /&gt;
&lt;br /&gt;
* [[Eseguire un file Video mediante il Metodo .Open() della Classe Desktop]]&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;B&amp;gt;[[La gestione dei dati video con la Classe MediaView del componente gb.media.form]]&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;B&amp;gt;[[La gestione del video e dei file video con il componente gb.media]]&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* [[La gestione del video e dei file video  con le funzioni esterne del API di GStreamer]]&lt;br /&gt;
&lt;br /&gt;
* [[La gestione del video e dei file video con le funzioni esterne del API di VLC]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere informazioni generali su flussi multimediali con le funzioni esterne del API di Quvi]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere informazioni generali sull'audio e sul video con le funzioni esterne del API di Libquicktime]]&lt;br /&gt;
&lt;br /&gt;
* [[Sapere con le funzioni esterne del API di Rhythmbox se un file contiene dati audio e/o video]]&lt;br /&gt;
&lt;br /&gt;
====i/o video====&lt;br /&gt;
&lt;br /&gt;
* [[Conoscere i driver video disponibili nel sistema mediante le funzioni esterne del API di SDL2 o di SDL3]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere alcune informazioni sul dispositivo video di una webcam con le funzioni esterne del API di libv4l2]]&lt;br /&gt;
&lt;br /&gt;
== Watcher ==&lt;br /&gt;
&lt;br /&gt;
* [[Uso della classe Watcher]]&lt;br /&gt;
&lt;br /&gt;
== Web ==&lt;br /&gt;
&lt;br /&gt;
* [[Acquisire il codice HTML di una pagina web]]&lt;br /&gt;
&lt;br /&gt;
* [[Caricare una pagina web]]&lt;br /&gt;
&lt;br /&gt;
* [[Controllare i link contenuti da una pagina web]]&lt;br /&gt;
&lt;br /&gt;
* [[Decodificare con le risorse del API di Libidn i nomi di dominio internazionalizzati]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere il valore del colore di un pixel di una pagina web aperta con l'Oggetto WebView]]&lt;br /&gt;
&lt;br /&gt;
* [[Ottenere l'immagine di una pagina web]]&lt;br /&gt;
&lt;br /&gt;
* [[Sapere se un indirizzo web è valido]]&lt;br /&gt;
&lt;br /&gt;
== WorkSpace ==&lt;br /&gt;
&lt;br /&gt;
* [[Uso della Classe WorkSpace]]&lt;/div&gt;</summary>
		<author><name>Vuott</name></author>
	</entry>
	<entry>
		<id>https://www.gambas-it.org/wiki/index.php?title=Uso_della_classe_DesktopWindow&amp;diff=42754</id>
		<title>Uso della classe DesktopWindow</title>
		<link rel="alternate" type="text/html" href="https://www.gambas-it.org/wiki/index.php?title=Uso_della_classe_DesktopWindow&amp;diff=42754"/>
		<updated>2025-11-09T21:27:03Z</updated>

		<summary type="html">&lt;p&gt;Vuott: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;La classe &amp;lt;b&amp;gt;DesktopWindow&amp;lt;/b&amp;gt; è usata, attivando i Componenti ''gb.desktop'' e ''gb.desktop.x11'', per rappresentare una finestra di primo livello.&lt;br /&gt;
&lt;br /&gt;
In particolare, questa Classe può essere usata per ottenere e gestire la finestra attiva di un programma.&lt;br /&gt;
&lt;br /&gt;
Mostriamo qualche esempio pratico:&lt;br /&gt;
 Public Sub Form_Open()&lt;br /&gt;
 &lt;br /&gt;
  Dim i As Integer[]&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;font color=gray&amp;gt;' &amp;lt;i&amp;gt;Poiché DesktopWindow è una Classe, gli si associa una variabile del tipo di quella Classe, ossia si crea un'istanza, un Oggetto della Classe &amp;quot;DesktopWindow&amp;quot;:&amp;lt;/i&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
  Dim dw As DesktopWindow&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;FONT Color=gray&amp;gt;' ''Individuiamo il nome della finestra del programma, e lo passiamo al Metodo &amp;quot;Desktop.FindWindow()&amp;quot; per ottenere il numero identificativo della finestra da gestire successivamente mediante l'Oggetto di tipo della Classe &amp;quot;DesktopWindow&amp;quot;:&amp;lt;/font&amp;gt;&lt;br /&gt;
  i = Desktop.FindWindow(&amp;quot;&amp;lt;font color=gray&amp;gt;Nome_della_finestra&amp;lt;/font&amp;gt;&amp;quot;)   &amp;lt;font color=gray&amp;gt;'&amp;lt;/font&amp;gt; &amp;lt;SUP&amp;gt;&amp;amp;#091;[[#Note|'''nota 1''']]&amp;amp;#093;&amp;lt;/sup&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
  With dw = New DesktopWindow(i[0])&lt;br /&gt;
 &amp;lt;font color=gray&amp;gt;' &amp;lt;i&amp;gt;Otteniamo informazioni dalla finestra individuata e la gestiamo:&amp;lt;/i&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
    Print Hex(.Id), .Name, .Width, .Height&lt;br /&gt;
    .Move(100, 200, .Width + 200, .Height + 200)&lt;br /&gt;
  End With&lt;br /&gt;
  &lt;br /&gt;
 End&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Se la finestra è il ''Form'' principale dell'applicazione, allora il suo Id si individuerà facilmente:&lt;br /&gt;
 Public Sub Form_Open()&lt;br /&gt;
 &lt;br /&gt;
  Dim dw As DesktopWindow&lt;br /&gt;
 &lt;br /&gt;
  Me.Show&lt;br /&gt;
 &lt;br /&gt;
  With dw = New DesktopWindow(Me.Id)&lt;br /&gt;
    Print Hex(.Id), .Name, .Width, .Height&lt;br /&gt;
    .Move(100, 200, .Width + 200, .Height + 200)&lt;br /&gt;
  End With&lt;br /&gt;
 &lt;br /&gt;
 End&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
E' possibile individuare tutte le finestre aperte sulla Scrivania:&lt;br /&gt;
 Public Sub Button1_Click()&lt;br /&gt;
  &lt;br /&gt;
  Dim dw As DesktopWindow&lt;br /&gt;
 &lt;br /&gt;
  For Each dw In Desktop.Windows&lt;br /&gt;
    Print &amp;quot;Nome finestra: &amp;quot;; Quote(dw.Name), &amp;quot;X = &amp;quot;; Quote(dw.X), &amp;quot;Y = &amp;quot;; Quote(dw.Y)&lt;br /&gt;
  Next &lt;br /&gt;
 &lt;br /&gt;
 End&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
La Classe &amp;lt;i&amp;gt;DesktopWindow&amp;lt;/i&amp;gt; può rappresentare anche una finestra creata virtualmente con una variabile di tipo &amp;quot;Window&amp;quot;:&lt;br /&gt;
 Public Sub Form_Open()&lt;br /&gt;
 &lt;br /&gt;
  Dim dw As DesktopWindow&lt;br /&gt;
  Dim w As Window&lt;br /&gt;
  &lt;br /&gt;
  With w = New Window&lt;br /&gt;
 &amp;lt;font color=gray&amp;gt;' ''Assegna un nome di comodo alla finestra (non è indispensabile, e &amp;lt;span style=&amp;quot;text-decoration:underline&amp;quot;&amp;gt;non&amp;lt;/span&amp;gt; modificherà il nome visibile in testa alla finestra):''&amp;lt;/font&amp;gt;&lt;br /&gt;
    .Window.Name = &amp;quot;&amp;lt;i&amp;gt;Nome_finestra&amp;lt;/i&amp;gt;&amp;quot;&lt;br /&gt;
 &amp;lt;font color=gray&amp;gt;' ''Se invece si pone solo: &amp;lt;b&amp;gt;.Name&amp;lt;/b&amp;gt; senza assegnazione, allora il nome sarà quello della finestra del programma.''&amp;lt;/font&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;font color=gray&amp;gt;' ''Carica un'immagine, che sarà poi mostrata appresso in dw:''&amp;lt;/font&amp;gt;&lt;br /&gt;
    .Icon = Picture.Load(&amp;quot;&amp;lt;FONT Color=gray&amp;gt;''/percorso/dell'immagine''&amp;lt;/font&amp;gt;&amp;quot;)&lt;br /&gt;
 &amp;lt;font color=gray&amp;gt;' ''Mostra nella &amp;quot;TextLabel&amp;quot; il nome fittizio precedentemente assegnato alla finestra:''&amp;lt;/font&amp;gt;&lt;br /&gt;
    TextLabel1.Text = .Name&lt;br /&gt;
  End With&lt;br /&gt;
  &lt;br /&gt;
  dw = New DesktopWindow(w.Handle) &amp;lt;font color=gray&amp;gt;' ''&amp;quot;w.Handle&amp;quot; è il numero identificativo dell'handle della finestra rappresentata dalla variabile &amp;quot;w&amp;quot;''&amp;lt;/font&amp;gt;&lt;br /&gt;
 &amp;lt;font color=gray&amp;gt;' ''Mostra l'immagine assegnata alla Proprietà &amp;quot;.Icon&amp;quot; della finestra :''&amp;lt;/font&amp;gt;&lt;br /&gt;
  PictureBox1.Picture = dw.Icon&lt;br /&gt;
 &lt;br /&gt;
 End&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
La Classe &amp;lt;i&amp;gt;DesktopWindow&amp;lt;/i&amp;gt; può rappresentare anche la finestra &amp;quot;attiva&amp;quot; di un programma in quel momento:&lt;br /&gt;
 Public Sub Form_Open()&lt;br /&gt;
 &lt;br /&gt;
  Dim dw As DesktopWindow&lt;br /&gt;
 &lt;br /&gt;
  With dw = New DesktopWindow(Desktop.ActiveWindow) &amp;lt;font color=gray&amp;gt;' ''&amp;quot;Desktop.ActiveWindow&amp;quot; è la finestra &amp;quot;attiva&amp;quot; di un programma in quel momento:''&amp;lt;/font&amp;gt;&lt;br /&gt;
    Print .Desktop&lt;br /&gt;
    Print .FullScreen&lt;br /&gt;
    Print .Height&lt;br /&gt;
    Print .Id&lt;br /&gt;
    Print .Maximized&lt;br /&gt;
    Print .Name&lt;br /&gt;
    Print .SkipTaskbar&lt;br /&gt;
    Print .VisibleName&lt;br /&gt;
 &amp;lt;font color=gray&amp;gt;' ''Mostra l'eventuale icona della finestra del programma:''&amp;lt;/font&amp;gt;&lt;br /&gt;
    PictureBox1.Picture = .Icon&lt;br /&gt;
  End With&lt;br /&gt;
 &lt;br /&gt;
 End&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Assegnare un Form a una specifica Scrivania==&lt;br /&gt;
Per assegnare un Form a una specifica Scrivania (Desktop) si userà la Proprietà &amp;quot;.Desktop&amp;quot;:&lt;br /&gt;
 Public Sub Button1_Click()&lt;br /&gt;
  &lt;br /&gt;
  Dim dw As DesktopWindow&lt;br /&gt;
   &lt;br /&gt;
  With dw = New DesktopWindow(Me.Id)&lt;br /&gt;
 &amp;lt;font color=gray&amp;gt;' ''Spostiamo il Form principale della nostra applicazione sul terzo desktop (indice 2):''&amp;lt;/font&amp;gt;&lt;br /&gt;
    .Desktop = 2&lt;br /&gt;
  End With&lt;br /&gt;
    &lt;br /&gt;
 End&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Note=&lt;br /&gt;
[1] Vedere al riguardo la seguente pagina: [[Individuare ID e nome delle finestre attive con le risorse del Componente gb.desktop]]&lt;/div&gt;</summary>
		<author><name>Vuott</name></author>
	</entry>
	<entry>
		<id>https://www.gambas-it.org/wiki/index.php?title=Uso_della_classe_DesktopWindow&amp;diff=42753</id>
		<title>Uso della classe DesktopWindow</title>
		<link rel="alternate" type="text/html" href="https://www.gambas-it.org/wiki/index.php?title=Uso_della_classe_DesktopWindow&amp;diff=42753"/>
		<updated>2025-11-09T21:24:50Z</updated>

		<summary type="html">&lt;p&gt;Vuott: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;La classe &amp;lt;b&amp;gt;DesktopWindow&amp;lt;/b&amp;gt; è usata, attivando i Componenti ''gb.desktop'' e ''gb.desktop.x11'', per rappresentare una finestra di primo livello.&lt;br /&gt;
&lt;br /&gt;
In particolare, questa Classe può essere usata per ottenere e gestire la finestra attiva di un programma.&lt;br /&gt;
&lt;br /&gt;
Mostriamo qualche esempio pratico:&lt;br /&gt;
 Public Sub Form_Open()&lt;br /&gt;
 &lt;br /&gt;
  Dim i As Integer[]&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;font color=gray&amp;gt;' &amp;lt;i&amp;gt;Poiché DesktopWindow è una Classe, gli si associa una variabile del tipo di quella Classe, ossia si crea un'istanza, un Oggetto della Classe &amp;quot;DesktopWindow&amp;quot;:&amp;lt;/i&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
  Dim dw As DesktopWindow&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;FONT Color=gray&amp;gt;' ''Individuiamo il nome della finestra del programma, e lo passiamo al Metodo &amp;quot;Desktop.FindWindow()&amp;quot; per ottenere il numero identificativo della finestra da gestire successivamente mediante l'Oggetto di tipo della Classe &amp;quot;DesktopWindow&amp;quot;:&amp;lt;/font&amp;gt;&lt;br /&gt;
  i = Desktop.FindWindow(&amp;quot;&amp;lt;font color=gray&amp;gt;Nome_della_finestra&amp;lt;/font&amp;gt;&amp;quot;)   &amp;lt;font color=gray&amp;gt;'&amp;lt;/font&amp;gt; &amp;lt;SUP&amp;gt;&amp;amp;#091;[[#Note|'''nota 1''']]&amp;amp;#093;&amp;lt;/sup&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
  With dw = New DesktopWindow(i[0])&lt;br /&gt;
 &amp;lt;font color=gray&amp;gt;' &amp;lt;i&amp;gt;Otteniamo informazioni dalla finestra individuata e la gestiamo:&amp;lt;/i&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
    Print Hex(.Id), .Name, .Width, .Height&lt;br /&gt;
    .Move(100, 200, .Width + 200, .Height + 200)&lt;br /&gt;
  End With&lt;br /&gt;
  &lt;br /&gt;
 End&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Se la finestra è il ''Form'' principale dell'applicazione, allora il suo Id si individuerà facilmente:&lt;br /&gt;
 Public Sub Form_Open()&lt;br /&gt;
 &lt;br /&gt;
  Dim dw As DesktopWindow&lt;br /&gt;
 &lt;br /&gt;
  Me.Show&lt;br /&gt;
 &lt;br /&gt;
  With dw = New DesktopWindow(Me.Id)&lt;br /&gt;
    Print Hex(.Id), .Name, .Width, .Height&lt;br /&gt;
    .Move(100, 200, .Width + 200, .Height + 200)&lt;br /&gt;
  End With&lt;br /&gt;
 &lt;br /&gt;
 End&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
E' possibile individuare tutte le finestre aperte sulla Scrivania:&lt;br /&gt;
 Public Sub Button1_Click()&lt;br /&gt;
  &lt;br /&gt;
  Dim dw As DesktopWindow&lt;br /&gt;
 &lt;br /&gt;
  For Each dw In Desktop.Windows&lt;br /&gt;
    Print &amp;quot;Nome finestra: &amp;quot;; Quote(dw.Name), &amp;quot;X = &amp;quot;; Quote(dw.X), &amp;quot;Y = &amp;quot;; Quote(dw.Y)&lt;br /&gt;
  Next &lt;br /&gt;
 &lt;br /&gt;
 End&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
La Classe &amp;lt;i&amp;gt;DesktopWindow&amp;lt;/i&amp;gt; può rappresentare anche una finestra creata virtualmente con una variabile di tipo &amp;quot;Window&amp;quot;:&lt;br /&gt;
 Public Sub Form_Open()&lt;br /&gt;
 &lt;br /&gt;
  Dim dw As DesktopWindow&lt;br /&gt;
  Dim w As Window&lt;br /&gt;
  &lt;br /&gt;
  With w = New Window&lt;br /&gt;
 &amp;lt;font color=gray&amp;gt;' ''Assegna un nome di comodo alla finestra (non è indispensabile, e &amp;lt;span style=&amp;quot;text-decoration:underline&amp;quot;&amp;gt;non&amp;lt;/span&amp;gt; modificherà il nome visibile in testa alla finestra):''&amp;lt;/font&amp;gt;&lt;br /&gt;
    .Window.Name = &amp;quot;&amp;lt;i&amp;gt;Nome_finestra&amp;lt;/i&amp;gt;&amp;quot;&lt;br /&gt;
 &amp;lt;font color=gray&amp;gt;' ''Se invece si pone solo: &amp;lt;b&amp;gt;.Name&amp;lt;/b&amp;gt; senza assegnazione, allora il nome sarà quello della finestra del programma.''&amp;lt;/font&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;font color=gray&amp;gt;' ''Carica un'immagine, che sarà poi mostrata appresso in dw:''&amp;lt;/font&amp;gt;&lt;br /&gt;
    .Icon = Picture.Load(&amp;quot;&amp;lt;FONT Color=gray&amp;gt;''/percorso/dell'immagine''&amp;lt;/font&amp;gt;&amp;quot;)&lt;br /&gt;
 &amp;lt;font color=gray&amp;gt;' ''Mostra nella &amp;quot;TextLabel&amp;quot; il nome fittizio precedentemente assegnato alla finestra:''&amp;lt;/font&amp;gt;&lt;br /&gt;
    TextLabel1.Text = .Name&lt;br /&gt;
  End With&lt;br /&gt;
  &lt;br /&gt;
  dw = New DesktopWindow(w.Handle) &amp;lt;font color=gray&amp;gt;' ''&amp;quot;w.Handle&amp;quot; è il numero identificativo dell'handle della finestra rappresentata dalla variabile &amp;quot;w&amp;quot;''&amp;lt;/font&amp;gt;&lt;br /&gt;
 &amp;lt;font color=gray&amp;gt;' ''Mostra l'immagine assegnata alla Proprietà &amp;quot;.Icon&amp;quot; della finestra :''&amp;lt;/font&amp;gt;&lt;br /&gt;
  PictureBox1.Picture = dw.Icon&lt;br /&gt;
 &lt;br /&gt;
 End&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
La Classe &amp;lt;i&amp;gt;DesktopWindow&amp;lt;/i&amp;gt; può rappresentare anche la finestra &amp;quot;attiva&amp;quot; di un programma in quel momento:&lt;br /&gt;
 Public Sub Form_Open()&lt;br /&gt;
 &lt;br /&gt;
  Dim dw As DesktopWindow&lt;br /&gt;
 &lt;br /&gt;
  With dw = New DesktopWindow(Desktop.ActiveWindow) &amp;lt;font color=gray&amp;gt;' ''&amp;quot;Desktop.ActiveWindow&amp;quot; è la finestra &amp;quot;attiva&amp;quot; di un programma in quel momento:''&amp;lt;/font&amp;gt;&lt;br /&gt;
    Print .Desktop&lt;br /&gt;
    Print .FullScreen&lt;br /&gt;
    Print .Height&lt;br /&gt;
    Print .Id&lt;br /&gt;
    Print .Maximized&lt;br /&gt;
    Print .Name&lt;br /&gt;
    Print .SkipTaskbar&lt;br /&gt;
    Print .VisibleName&lt;br /&gt;
 &amp;lt;font color=gray&amp;gt;' ''Mostra l'eventuale icona della finestra del programma:''&amp;lt;/font&amp;gt;&lt;br /&gt;
    PictureBox1.Picture = .Icon&lt;br /&gt;
  End With&lt;br /&gt;
 &lt;br /&gt;
 End&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Assegnare un Form a una specifica Scrivania==&lt;br /&gt;
Per assegnare un Form a una specifica Scrivania (Desktop) si userà la Proprietà &amp;quot;.Desktop&amp;quot;:&lt;br /&gt;
 Public Sub Button1_Click()&lt;br /&gt;
  &lt;br /&gt;
  Dim dw As DesktopWindow&lt;br /&gt;
   &lt;br /&gt;
  With dw = New DesktopWindow(Me.Id)&lt;br /&gt;
 &amp;lt;font color=gray&amp;gt;' ''Spostiamo il Form principale della nostra applicazione sul terzo desktop (indice 2):''&amp;lt;/font&amp;gt;&lt;br /&gt;
    .Desktop = 2&lt;br /&gt;
  End With&lt;br /&gt;
    &lt;br /&gt;
 End&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Note=&lt;br /&gt;
[1] Vedere al riguardo la seguente pagina: https://www.gambas-it.org/wiki/index.php/Individuare_ID_e_nome_delle_finestre_attive_con_le_risorse_del_Componente_gb.desktop&lt;/div&gt;</summary>
		<author><name>Vuott</name></author>
	</entry>
	<entry>
		<id>https://www.gambas-it.org/wiki/index.php?title=Uso_della_classe_DesktopWindow&amp;diff=42752</id>
		<title>Uso della classe DesktopWindow</title>
		<link rel="alternate" type="text/html" href="https://www.gambas-it.org/wiki/index.php?title=Uso_della_classe_DesktopWindow&amp;diff=42752"/>
		<updated>2025-11-09T21:23:31Z</updated>

		<summary type="html">&lt;p&gt;Vuott: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;La classe &amp;lt;b&amp;gt;DesktopWindow&amp;lt;/b&amp;gt; è usata, attivando i Componenti ''gb.desktop'' e ''gb.desktop.x11'', per rappresentare una finestra di primo livello.&lt;br /&gt;
&lt;br /&gt;
In particolare, questa Classe può essere usata per ottenere e gestire la finestra attiva di un programma.&lt;br /&gt;
&lt;br /&gt;
Mostriamo qualche esempio pratico:&lt;br /&gt;
 Public Sub Form_Open()&lt;br /&gt;
 &lt;br /&gt;
  Dim i As Integer[]&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;font color=gray&amp;gt;' &amp;lt;i&amp;gt;Poiché DesktopWindow è una Classe, gli si associa una variabile del tipo di quella Classe, ossia si crea un'istanza, un Oggetto della Classe &amp;quot;DesktopWindow&amp;quot;:&amp;lt;/i&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
  Dim dw As DesktopWindow&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;FONT Color=gray&amp;gt;' ''Individuiamo il nome della finestra del programma, e lo passiamo al Metodo &amp;quot;Desktop.FindWindow()&amp;quot; per ottenere il numero identificativo della finestra, da gestire successivamente mediante l'Oggetto di tipo della Classe &amp;quot;DesktopWindow&amp;quot;:&amp;lt;/font&amp;gt;&lt;br /&gt;
  i = Desktop.FindWindow(&amp;quot;&amp;lt;font color=gray&amp;gt;Nome_della_finestra&amp;lt;/font&amp;gt;&amp;quot;)   &amp;lt;font color=gray&amp;gt;'&amp;lt;/font&amp;gt; &amp;lt;SUP&amp;gt;&amp;amp;#091;[[#Note|'''nota 1''']]&amp;amp;#093;&amp;lt;/sup&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
  With dw = New DesktopWindow(i[0])&lt;br /&gt;
 &amp;lt;font color=gray&amp;gt;' &amp;lt;i&amp;gt;Otteniamo informazioni dalla finestra individuata, e la gestiamo:&amp;lt;/i&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
    Print Hex(.Id), .Name, .Width, .Height&lt;br /&gt;
    .Move(100, 200, .Width + 200, .Height + 200)&lt;br /&gt;
  End With&lt;br /&gt;
  &lt;br /&gt;
 End&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Se la finestra è il ''Form'' principale dell'applicazione, allora il suo Id si individuerà facilmente:&lt;br /&gt;
 Public Sub Form_Open()&lt;br /&gt;
 &lt;br /&gt;
  Dim dw As DesktopWindow&lt;br /&gt;
 &lt;br /&gt;
  Me.Show&lt;br /&gt;
 &lt;br /&gt;
  With dw = New DesktopWindow(Me.Id)&lt;br /&gt;
    Print Hex(.Id), .Name, .Width, .Height&lt;br /&gt;
    .Move(100, 200, .Width + 200, .Height + 200)&lt;br /&gt;
  End With&lt;br /&gt;
 &lt;br /&gt;
 End&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
E' possibile individuare tutte le finestre aperte sulla Scrivania:&lt;br /&gt;
 Public Sub Button1_Click()&lt;br /&gt;
  &lt;br /&gt;
  Dim dw As DesktopWindow&lt;br /&gt;
 &lt;br /&gt;
  For Each dw In Desktop.Windows&lt;br /&gt;
    Print &amp;quot;Nome finestra: &amp;quot;; Quote(dw.Name), &amp;quot;X = &amp;quot;; Quote(dw.X), &amp;quot;Y = &amp;quot;; Quote(dw.Y)&lt;br /&gt;
  Next &lt;br /&gt;
 &lt;br /&gt;
 End&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
La Classe &amp;lt;i&amp;gt;DesktopWindow&amp;lt;/i&amp;gt; può rappresentare anche una finestra creata virtualmente con una variabile di tipo &amp;quot;Window&amp;quot;:&lt;br /&gt;
 Public Sub Form_Open()&lt;br /&gt;
 &lt;br /&gt;
  Dim dw As DesktopWindow&lt;br /&gt;
  Dim w As Window&lt;br /&gt;
  &lt;br /&gt;
  With w = New Window&lt;br /&gt;
 &amp;lt;font color=gray&amp;gt;' ''Assegna un nome di comodo alla finestra (non è indispensabile, e &amp;lt;span style=&amp;quot;text-decoration:underline&amp;quot;&amp;gt;non&amp;lt;/span&amp;gt; modificherà il nome visibile in testa alla finestra):''&amp;lt;/font&amp;gt;&lt;br /&gt;
    .Window.Name = &amp;quot;&amp;lt;i&amp;gt;Nome_finestra&amp;lt;/i&amp;gt;&amp;quot;&lt;br /&gt;
 &amp;lt;font color=gray&amp;gt;' ''Se invece si pone solo: &amp;lt;b&amp;gt;.Name&amp;lt;/b&amp;gt; senza assegnazione, allora il nome sarà quello della finestra del programma.''&amp;lt;/font&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;font color=gray&amp;gt;' ''Carica un'immagine, che sarà poi mostrata appresso in dw:''&amp;lt;/font&amp;gt;&lt;br /&gt;
    .Icon = Picture.Load(&amp;quot;&amp;lt;FONT Color=gray&amp;gt;''/percorso/dell'immagine''&amp;lt;/font&amp;gt;&amp;quot;)&lt;br /&gt;
 &amp;lt;font color=gray&amp;gt;' ''Mostra nella &amp;quot;TextLabel&amp;quot; il nome fittizio precedentemente assegnato alla finestra:''&amp;lt;/font&amp;gt;&lt;br /&gt;
    TextLabel1.Text = .Name&lt;br /&gt;
  End With&lt;br /&gt;
  &lt;br /&gt;
  dw = New DesktopWindow(w.Handle) &amp;lt;font color=gray&amp;gt;' ''&amp;quot;w.Handle&amp;quot; è il numero identificativo dell'handle della finestra rappresentata dalla variabile &amp;quot;w&amp;quot;''&amp;lt;/font&amp;gt;&lt;br /&gt;
 &amp;lt;font color=gray&amp;gt;' ''Mostra l'immagine assegnata alla Proprietà &amp;quot;.Icon&amp;quot; della finestra :''&amp;lt;/font&amp;gt;&lt;br /&gt;
  PictureBox1.Picture = dw.Icon&lt;br /&gt;
 &lt;br /&gt;
 End&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
La Classe &amp;lt;i&amp;gt;DesktopWindow&amp;lt;/i&amp;gt; può rappresentare anche la finestra &amp;quot;attiva&amp;quot; di un programma in quel momento:&lt;br /&gt;
 Public Sub Form_Open()&lt;br /&gt;
 &lt;br /&gt;
  Dim dw As DesktopWindow&lt;br /&gt;
 &lt;br /&gt;
  With dw = New DesktopWindow(Desktop.ActiveWindow) &amp;lt;font color=gray&amp;gt;' ''&amp;quot;Desktop.ActiveWindow&amp;quot; è la finestra &amp;quot;attiva&amp;quot; di un programma in quel momento:''&amp;lt;/font&amp;gt;&lt;br /&gt;
    Print .Desktop&lt;br /&gt;
    Print .FullScreen&lt;br /&gt;
    Print .Height&lt;br /&gt;
    Print .Id&lt;br /&gt;
    Print .Maximized&lt;br /&gt;
    Print .Name&lt;br /&gt;
    Print .SkipTaskbar&lt;br /&gt;
    Print .VisibleName&lt;br /&gt;
 &amp;lt;font color=gray&amp;gt;' ''Mostra l'eventuale icona della finestra del programma:''&amp;lt;/font&amp;gt;&lt;br /&gt;
    PictureBox1.Picture = .Icon&lt;br /&gt;
  End With&lt;br /&gt;
 &lt;br /&gt;
 End&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Assegnare un Form a una specifica Scrivania==&lt;br /&gt;
Per assegnare un Form a una specifica Scrivania (Desktop) si userà la Proprietà &amp;quot;.Desktop&amp;quot;:&lt;br /&gt;
 Public Sub Button1_Click()&lt;br /&gt;
  &lt;br /&gt;
  Dim dw As DesktopWindow&lt;br /&gt;
   &lt;br /&gt;
  With dw = New DesktopWindow(Me.Id)&lt;br /&gt;
 &amp;lt;font color=gray&amp;gt;' ''Spostiamo il Form principale della nostra applicazione sul terzo desktop (indice 2):''&amp;lt;/font&amp;gt;&lt;br /&gt;
    .Desktop = 2&lt;br /&gt;
  End With&lt;br /&gt;
    &lt;br /&gt;
 End&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Note=&lt;br /&gt;
[1] Vedere al riguardo la seguente pagina: https://www.gambas-it.org/wiki/index.php/Individuare_ID_e_nome_delle_finestre_attive_con_le_risorse_del_Componente_gb.desktop&lt;/div&gt;</summary>
		<author><name>Vuott</name></author>
	</entry>
	<entry>
		<id>https://www.gambas-it.org/wiki/index.php?title=Uso_della_classe_DesktopWindow&amp;diff=42750</id>
		<title>Uso della classe DesktopWindow</title>
		<link rel="alternate" type="text/html" href="https://www.gambas-it.org/wiki/index.php?title=Uso_della_classe_DesktopWindow&amp;diff=42750"/>
		<updated>2025-10-28T20:13:37Z</updated>

		<summary type="html">&lt;p&gt;Vuott: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;La classe &amp;lt;b&amp;gt;DesktopWindow&amp;lt;/b&amp;gt; è usata, attivando i Componenti ''gb.desktop'' e ''gb.desktop.x11'', per rappresentare una finestra di primo livello.&lt;br /&gt;
&lt;br /&gt;
In particolare, questa Classe può essere usata per ottenere e gestire la finestra attiva di un programma.&lt;br /&gt;
&lt;br /&gt;
Mostriamo qualche esempio pratico:&lt;br /&gt;
 Public Sub Form_Open()&lt;br /&gt;
 &lt;br /&gt;
  Dim i As Integer[]&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;font color=gray&amp;gt;' &amp;lt;i&amp;gt;Poiché DesktopWindow è una classe, gli si associa una variabile del tipo di quella Classe:&amp;lt;/i&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
  Dim dw As DesktopWindow&lt;br /&gt;
 &lt;br /&gt;
  i = Desktop.FindWindow(&amp;quot;&amp;lt;font color=gray&amp;gt;Nome_della_finestra&amp;lt;/font&amp;gt;&amp;quot;)   &amp;lt;font color=gray&amp;gt;'&amp;lt;/font&amp;gt; &amp;lt;SUP&amp;gt;&amp;amp;#091;[[#Note|'''nota 1''']]&amp;amp;#093;&amp;lt;/sup&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
  With dw = New DesktopWindow(i[0])&lt;br /&gt;
 &amp;lt;font color=gray&amp;gt;' &amp;lt;i&amp;gt;Otteniamo informazioni dalla finestra individuata, e la gestiamo:&amp;lt;/i&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
    Print Hex(.Id), .Name, .Width, .Height&lt;br /&gt;
    .Move(100, 200, .Width + 200, .Height + 200)&lt;br /&gt;
  End With&lt;br /&gt;
  &lt;br /&gt;
 End&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Se la finestra è il ''Form'' principale dell'applicazione, allora il suo Id si individuerà facilmente:&lt;br /&gt;
 Public Sub Form_Open()&lt;br /&gt;
 &lt;br /&gt;
  Dim dw As DesktopWindow&lt;br /&gt;
 &lt;br /&gt;
  Me.Show&lt;br /&gt;
 &lt;br /&gt;
  With dw = New DesktopWindow(Me.Id)&lt;br /&gt;
    Print Hex(.Id), .Name, .Width, .Height&lt;br /&gt;
    .Move(100, 200, 100, 300)&lt;br /&gt;
  End With&lt;br /&gt;
 &lt;br /&gt;
 End&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
E' possibile individuare tutte le finestre aperte sulla Scrivania:&lt;br /&gt;
 Public Sub Button1_Click()&lt;br /&gt;
  &lt;br /&gt;
  Dim dw As DesktopWindow&lt;br /&gt;
 &lt;br /&gt;
  For Each dw In Desktop.Windows&lt;br /&gt;
    Print &amp;quot;Nome finestra: &amp;quot;; Quote(dw.Name), &amp;quot;X = &amp;quot;; Quote(dw.X), &amp;quot;Y = &amp;quot;; Quote(dw.Y)&lt;br /&gt;
  Next &lt;br /&gt;
 &lt;br /&gt;
 End&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
La Classe &amp;lt;i&amp;gt;DesktopWindow&amp;lt;/i&amp;gt; può rappresentare anche una finestra creata virtualmente con una variabile di tipo &amp;quot;Window&amp;quot;:&lt;br /&gt;
 Public Sub Form_Open()&lt;br /&gt;
 &lt;br /&gt;
  Dim dw As DesktopWindow&lt;br /&gt;
  Dim w As New Window&lt;br /&gt;
  &lt;br /&gt;
  With w&lt;br /&gt;
 &amp;lt;font color=gray&amp;gt;' ''Assegna un nome di comodo alla finestra (non è indispensabile, e &amp;lt;span style=&amp;quot;text-decoration:underline&amp;quot;&amp;gt;non&amp;lt;/span&amp;gt; modificherà il nome visibile in testa alla finestra):''&amp;lt;/font&amp;gt;&lt;br /&gt;
    .Window.Name = &amp;quot;&amp;lt;i&amp;gt;Nome_finestra&amp;lt;/i&amp;gt;&amp;quot;&lt;br /&gt;
 &amp;lt;font color=gray&amp;gt;' ''Se invece si pone solo: &amp;lt;b&amp;gt;.Name&amp;lt;/b&amp;gt; senza assegnazione, allora il nome sarà quello della finestra del programma.''&amp;lt;/font&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;font color=gray&amp;gt;' ''Carica un'immagine, che sarà poi mostrata appresso in dw:''&amp;lt;/font&amp;gt;&lt;br /&gt;
    .Icon = Picture.Load(&amp;quot;&amp;lt;FONT Color=gray&amp;gt;''/percorso/dell'immagine''&amp;lt;/font&amp;gt;&amp;quot;)&lt;br /&gt;
 &amp;lt;font color=gray&amp;gt;' ''Mostra nella &amp;quot;TextLabel&amp;quot; il nome fittizio precedentemente assegnato alla finestra:''&amp;lt;/font&amp;gt;&lt;br /&gt;
    TextLabel1.Text = .Name&lt;br /&gt;
  End With&lt;br /&gt;
  &lt;br /&gt;
  dw = New DesktopWindow(w.Handle) &amp;lt;font color=gray&amp;gt;' ''&amp;quot;w.Handle&amp;quot; è il numero identificativo dell'handle della finestra rappresentata dalla variabile &amp;quot;w&amp;quot;''&amp;lt;/font&amp;gt;&lt;br /&gt;
 &amp;lt;font color=gray&amp;gt;' ''Mostra l'immagine assegnata alla Proprietà &amp;quot;.Icon&amp;quot; della finestra :''&amp;lt;/font&amp;gt;&lt;br /&gt;
  PictureBox1.Picture = dw.Icon&lt;br /&gt;
 &lt;br /&gt;
 End&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
La Classe &amp;lt;i&amp;gt;DesktopWindow&amp;lt;/i&amp;gt; può rappresentare anche la finestra &amp;quot;attiva&amp;quot; di un programma in quel momento:&lt;br /&gt;
 Public Sub Form_Open()&lt;br /&gt;
 &lt;br /&gt;
  Dim dw As DesktopWindow&lt;br /&gt;
 &lt;br /&gt;
  With dw = New DesktopWindow(Desktop.ActiveWindow) &amp;lt;font color=gray&amp;gt;' ''&amp;quot;Desktop.ActiveWindow&amp;quot; è la finestra &amp;quot;attiva&amp;quot; di un programma in quel momento:''&amp;lt;/font&amp;gt;&lt;br /&gt;
    Print .Desktop&lt;br /&gt;
    Print .FullScreen&lt;br /&gt;
    Print .Height&lt;br /&gt;
    Print .Id&lt;br /&gt;
    Print .Maximized&lt;br /&gt;
    Print .Name&lt;br /&gt;
    Print .SkipTaskbar&lt;br /&gt;
    Print .VisibleName&lt;br /&gt;
 &amp;lt;font color=gray&amp;gt;' ''Mostra l'eventuale icona della finestra del programma:''&amp;lt;/font&amp;gt;&lt;br /&gt;
    PictureBox1.Picture = .Icon&lt;br /&gt;
  End With&lt;br /&gt;
 &lt;br /&gt;
 End&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Assegnare un Form ad uno specifico schermo==&lt;br /&gt;
Per assegnare un Form ad uno specifico schermo si userà la Proprietà &amp;quot;.Desktop&amp;quot;:&lt;br /&gt;
 Public Sub Button1_Click()&lt;br /&gt;
  &lt;br /&gt;
  Dim dw As DesktopWindow&lt;br /&gt;
   &lt;br /&gt;
  With dw = New DesktopWindow(Me.Id)&lt;br /&gt;
 &amp;lt;font color=gray&amp;gt;' ''Spostiamo il Form principale della nostra applicazione sul terzo desktop (indice 2):''&amp;lt;/font&amp;gt;&lt;br /&gt;
    .Desktop = 2&lt;br /&gt;
  End With&lt;br /&gt;
    &lt;br /&gt;
 End&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Note=&lt;br /&gt;
[1] Vedere al riguardo la seguente pagina: https://www.gambas-it.org/wiki/index.php/Individuare_ID_e_nome_delle_finestre_attive_con_le_risorse_del_Componente_gb.desktop&lt;/div&gt;</summary>
		<author><name>Vuott</name></author>
	</entry>
	<entry>
		<id>https://www.gambas-it.org/wiki/index.php?title=Uso_della_classe_DesktopWindow&amp;diff=42749</id>
		<title>Uso della classe DesktopWindow</title>
		<link rel="alternate" type="text/html" href="https://www.gambas-it.org/wiki/index.php?title=Uso_della_classe_DesktopWindow&amp;diff=42749"/>
		<updated>2025-10-28T20:12:39Z</updated>

		<summary type="html">&lt;p&gt;Vuott: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;La classe &amp;lt;b&amp;gt;DesktopWindow&amp;lt;/b&amp;gt; è usata, attivando i Componenti ''gb.desktop'' e ''gb.desktop.x11'', per rappresentare una finestra di primo livello.&lt;br /&gt;
&lt;br /&gt;
In particolare, questa Classe può essere usata per ottenere e gestire la finestra attiva di un programma.&lt;br /&gt;
&lt;br /&gt;
Mostriamo qualche esempio pratico:&lt;br /&gt;
 Public Sub Form_Open()&lt;br /&gt;
 &lt;br /&gt;
  Dim i As Integer[]&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;font color=gray&amp;gt;' &amp;lt;i&amp;gt;Poiché DesktopWindow è una classe, gli si associa una variabile del tipo di quella Classe:&amp;lt;/i&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
  Dim dw As DesktopWindow&lt;br /&gt;
 &lt;br /&gt;
  i = Desktop.FindWindow(&amp;quot;&amp;lt;font color=gray&amp;gt;Nome_della_finestra&amp;lt;/font&amp;gt;&amp;quot;)   &amp;lt;font color=gray&amp;gt;'&amp;lt;/font&amp;gt; &amp;lt;SUP&amp;gt;&amp;amp;#091;[[#Note|'''nota 1''']]&amp;amp;#093;&amp;lt;/sup&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
  With dw = New DesktopWindow(i[0])&lt;br /&gt;
 &amp;lt;font color=gray&amp;gt;' &amp;lt;i&amp;gt;Otteniamo informazioni dalla finestra individuata, e la gestiamo:&amp;lt;/i&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
    Print Hex(.Id), .Name, .Width, .Height&lt;br /&gt;
    .Move(100, 200, 700, 400)&lt;br /&gt;
  End With&lt;br /&gt;
  &lt;br /&gt;
 End&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Se la finestra è il ''Form'' principale dell'applicazione, allora il suo Id si individuerà facilmente:&lt;br /&gt;
 Public Sub Form_Open()&lt;br /&gt;
 &lt;br /&gt;
  Dim dw As DesktopWindow&lt;br /&gt;
 &lt;br /&gt;
  Me.Show&lt;br /&gt;
 &lt;br /&gt;
  With dw = New DesktopWindow(Me.Id)&lt;br /&gt;
    Print Hex(.Id), .Name, .Width, .Height&lt;br /&gt;
    .Move(100, 200, 100, 300)&lt;br /&gt;
  End With&lt;br /&gt;
 &lt;br /&gt;
 End&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
E' possibile individuare tutte le finestre aperte sulla Scrivania:&lt;br /&gt;
 Public Sub Button1_Click()&lt;br /&gt;
  &lt;br /&gt;
  Dim dw As DesktopWindow&lt;br /&gt;
 &lt;br /&gt;
  For Each dw In Desktop.Windows&lt;br /&gt;
    Print &amp;quot;Nome finestra: &amp;quot;; Quote(dw.Name), &amp;quot;X = &amp;quot;; Quote(dw.X), &amp;quot;Y = &amp;quot;; Quote(dw.Y)&lt;br /&gt;
  Next &lt;br /&gt;
 &lt;br /&gt;
 End&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
La Classe &amp;lt;i&amp;gt;DesktopWindow&amp;lt;/i&amp;gt; può rappresentare anche una finestra creata virtualmente con una variabile di tipo &amp;quot;Window&amp;quot;:&lt;br /&gt;
 Public Sub Form_Open()&lt;br /&gt;
 &lt;br /&gt;
  Dim dw As DesktopWindow&lt;br /&gt;
  Dim w As New Window&lt;br /&gt;
  &lt;br /&gt;
  With w&lt;br /&gt;
 &amp;lt;font color=gray&amp;gt;' ''Assegna un nome di comodo alla finestra (non è indispensabile, e &amp;lt;span style=&amp;quot;text-decoration:underline&amp;quot;&amp;gt;non&amp;lt;/span&amp;gt; modificherà il nome visibile in testa alla finestra):''&amp;lt;/font&amp;gt;&lt;br /&gt;
    .Window.Name = &amp;quot;&amp;lt;i&amp;gt;Nome_finestra&amp;lt;/i&amp;gt;&amp;quot;&lt;br /&gt;
 &amp;lt;font color=gray&amp;gt;' ''Se invece si pone solo: &amp;lt;b&amp;gt;.Name&amp;lt;/b&amp;gt; senza assegnazione, allora il nome sarà quello della finestra del programma.''&amp;lt;/font&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;font color=gray&amp;gt;' ''Carica un'immagine, che sarà poi mostrata appresso in dw:''&amp;lt;/font&amp;gt;&lt;br /&gt;
    .Icon = Picture.Load(&amp;quot;&amp;lt;FONT Color=gray&amp;gt;''/percorso/dell'immagine''&amp;lt;/font&amp;gt;&amp;quot;)&lt;br /&gt;
 &amp;lt;font color=gray&amp;gt;' ''Mostra nella &amp;quot;TextLabel&amp;quot; il nome fittizio precedentemente assegnato alla finestra:''&amp;lt;/font&amp;gt;&lt;br /&gt;
    TextLabel1.Text = .Name&lt;br /&gt;
  End With&lt;br /&gt;
  &lt;br /&gt;
  dw = New DesktopWindow(w.Handle) &amp;lt;font color=gray&amp;gt;' ''&amp;quot;w.Handle&amp;quot; è il numero identificativo dell'handle della finestra rappresentata dalla variabile &amp;quot;w&amp;quot;''&amp;lt;/font&amp;gt;&lt;br /&gt;
 &amp;lt;font color=gray&amp;gt;' ''Mostra l'immagine assegnata alla Proprietà &amp;quot;.Icon&amp;quot; della finestra :''&amp;lt;/font&amp;gt;&lt;br /&gt;
  PictureBox1.Picture = dw.Icon&lt;br /&gt;
 &lt;br /&gt;
 End&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
La Classe &amp;lt;i&amp;gt;DesktopWindow&amp;lt;/i&amp;gt; può rappresentare anche la finestra &amp;quot;attiva&amp;quot; di un programma in quel momento:&lt;br /&gt;
 Public Sub Form_Open()&lt;br /&gt;
 &lt;br /&gt;
  Dim dw As DesktopWindow&lt;br /&gt;
 &lt;br /&gt;
  With dw = New DesktopWindow(Desktop.ActiveWindow) &amp;lt;font color=gray&amp;gt;' ''&amp;quot;Desktop.ActiveWindow&amp;quot; è la finestra &amp;quot;attiva&amp;quot; di un programma in quel momento:''&amp;lt;/font&amp;gt;&lt;br /&gt;
    Print .Desktop&lt;br /&gt;
    Print .FullScreen&lt;br /&gt;
    Print .Height&lt;br /&gt;
    Print .Id&lt;br /&gt;
    Print .Maximized&lt;br /&gt;
    Print .Name&lt;br /&gt;
    Print .SkipTaskbar&lt;br /&gt;
    Print .VisibleName&lt;br /&gt;
 &amp;lt;font color=gray&amp;gt;' ''Mostra l'eventuale icona della finestra del programma:''&amp;lt;/font&amp;gt;&lt;br /&gt;
    PictureBox1.Picture = .Icon&lt;br /&gt;
  End With&lt;br /&gt;
 &lt;br /&gt;
 End&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Assegnare un Form ad uno specifico schermo==&lt;br /&gt;
Per assegnare un Form ad uno specifico schermo si userà la Proprietà &amp;quot;.Desktop&amp;quot;:&lt;br /&gt;
 Public Sub Button1_Click()&lt;br /&gt;
  &lt;br /&gt;
  Dim dw As DesktopWindow&lt;br /&gt;
   &lt;br /&gt;
  With dw = New DesktopWindow(Me.Id)&lt;br /&gt;
 &amp;lt;font color=gray&amp;gt;' ''Spostiamo il Form principale della nostra applicazione sul terzo desktop (indice 2):''&amp;lt;/font&amp;gt;&lt;br /&gt;
    .Desktop = 2&lt;br /&gt;
  End With&lt;br /&gt;
    &lt;br /&gt;
 End&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Note=&lt;br /&gt;
[1] Vedere al riguardo la seguente pagina: https://www.gambas-it.org/wiki/index.php/Individuare_ID_e_nome_delle_finestre_attive_con_le_risorse_del_Componente_gb.desktop&lt;/div&gt;</summary>
		<author><name>Vuott</name></author>
	</entry>
	<entry>
		<id>https://www.gambas-it.org/wiki/index.php?title=Uso_della_classe_DesktopWindow&amp;diff=42748</id>
		<title>Uso della classe DesktopWindow</title>
		<link rel="alternate" type="text/html" href="https://www.gambas-it.org/wiki/index.php?title=Uso_della_classe_DesktopWindow&amp;diff=42748"/>
		<updated>2025-10-28T20:08:46Z</updated>

		<summary type="html">&lt;p&gt;Vuott: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;La classe &amp;lt;b&amp;gt;DesktopWindow&amp;lt;/b&amp;gt; è usata, attivando i Componenti ''gb.desktop'' e ''gb.desktop.x11'', per rappresentare una finestra di primo livello.&lt;br /&gt;
&lt;br /&gt;
In particolare, questa Classe può essere usata per ottenere e gestire la finestra attiva di un programma.&lt;br /&gt;
&lt;br /&gt;
Mostriamo qualche esempio pratico:&lt;br /&gt;
 Public Sub Form_Open()&lt;br /&gt;
 &lt;br /&gt;
  Dim i As Integer[]&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;font color=gray&amp;gt;' &amp;lt;i&amp;gt;Poiché DesktopWindow è una classe, gli si associa una variabile del tipo di quella Classe:&amp;lt;/i&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
  Dim dw As DesktopWindow&lt;br /&gt;
 &lt;br /&gt;
  i = Desktop.FindWindow(&amp;quot;&amp;lt;font color=gray&amp;gt;Nome_della_finestra&amp;lt;/font&amp;gt;&amp;quot;)   &amp;lt;font color=gray&amp;gt;'&amp;lt;/font&amp;gt; &amp;lt;SUP&amp;gt;&amp;amp;#091;[[#Note|'''nota 1''']]&amp;amp;#093;&amp;lt;/sup&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
  With dw = New DesktopWindow(i[0])&lt;br /&gt;
 &amp;lt;font color=gray&amp;gt;' &amp;lt;i&amp;gt;Otteniamo informazioni dalla finestra individuata, e la gestiamo:&amp;lt;/i&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
    Print Hex(.Id), .Name, .Width, .Height&lt;br /&gt;
    .Move(100, 200, 100, 300)&lt;br /&gt;
  End With&lt;br /&gt;
  &lt;br /&gt;
 End&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Se la finestra è il ''Form'' principale dell'applicazione, allora il suo Id si individuerà facilmente:&lt;br /&gt;
 Public Sub Form_Open()&lt;br /&gt;
 &lt;br /&gt;
  Dim dw As DesktopWindow&lt;br /&gt;
 &lt;br /&gt;
  Me.Show&lt;br /&gt;
 &lt;br /&gt;
  With dw = New DesktopWindow(Me.Id)&lt;br /&gt;
    Print Hex(.Id), .Name, .Width, .Height&lt;br /&gt;
    .Move(100, 200, 100, 300)&lt;br /&gt;
  End With&lt;br /&gt;
 &lt;br /&gt;
 End&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
E' possibile individuare tutte le finestre aperte sulla Scrivania:&lt;br /&gt;
 Public Sub Button1_Click()&lt;br /&gt;
  &lt;br /&gt;
  Dim dw As DesktopWindow&lt;br /&gt;
 &lt;br /&gt;
  For Each dw In Desktop.Windows&lt;br /&gt;
    Print &amp;quot;Nome finestra: &amp;quot;; Quote(dw.Name), &amp;quot;X = &amp;quot;; Quote(dw.X), &amp;quot;Y = &amp;quot;; Quote(dw.Y)&lt;br /&gt;
  Next &lt;br /&gt;
 &lt;br /&gt;
 End&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
La Classe &amp;lt;i&amp;gt;DesktopWindow&amp;lt;/i&amp;gt; può rappresentare anche una finestra creata virtualmente con una variabile di tipo &amp;quot;Window&amp;quot;:&lt;br /&gt;
 Public Sub Form_Open()&lt;br /&gt;
 &lt;br /&gt;
  Dim dw As DesktopWindow&lt;br /&gt;
  Dim w As New Window&lt;br /&gt;
  &lt;br /&gt;
  With w&lt;br /&gt;
 &amp;lt;font color=gray&amp;gt;' ''Assegna un nome di comodo alla finestra (non è indispensabile, e &amp;lt;span style=&amp;quot;text-decoration:underline&amp;quot;&amp;gt;non&amp;lt;/span&amp;gt; modificherà il nome visibile in testa alla finestra):''&amp;lt;/font&amp;gt;&lt;br /&gt;
    .Window.Name = &amp;quot;&amp;lt;i&amp;gt;Nome_finestra&amp;lt;/i&amp;gt;&amp;quot;&lt;br /&gt;
 &amp;lt;font color=gray&amp;gt;' ''Se invece si pone solo: &amp;lt;b&amp;gt;.Name&amp;lt;/b&amp;gt; senza assegnazione, allora il nome sarà quello della finestra del programma.''&amp;lt;/font&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;font color=gray&amp;gt;' ''Carica un'immagine, che sarà poi mostrata appresso in dw:''&amp;lt;/font&amp;gt;&lt;br /&gt;
    .Icon = Picture.Load(&amp;quot;&amp;lt;FONT Color=gray&amp;gt;''/percorso/dell'immagine''&amp;lt;/font&amp;gt;&amp;quot;)&lt;br /&gt;
 &amp;lt;font color=gray&amp;gt;' ''Mostra nella &amp;quot;TextLabel&amp;quot; il nome fittizio precedentemente assegnato alla finestra:''&amp;lt;/font&amp;gt;&lt;br /&gt;
    TextLabel1.Text = .Name&lt;br /&gt;
  End With&lt;br /&gt;
  &lt;br /&gt;
  dw = New DesktopWindow(w.Handle) &amp;lt;font color=gray&amp;gt;' ''&amp;quot;w.Handle&amp;quot; è il numero identificativo dell'handle della finestra rappresentata dalla variabile &amp;quot;w&amp;quot;''&amp;lt;/font&amp;gt;&lt;br /&gt;
 &amp;lt;font color=gray&amp;gt;' ''Mostra l'immagine assegnata alla Proprietà &amp;quot;.Icon&amp;quot; della finestra :''&amp;lt;/font&amp;gt;&lt;br /&gt;
  PictureBox1.Picture = dw.Icon&lt;br /&gt;
 &lt;br /&gt;
 End&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
La Classe &amp;lt;i&amp;gt;DesktopWindow&amp;lt;/i&amp;gt; può rappresentare anche la finestra &amp;quot;attiva&amp;quot; di un programma in quel momento:&lt;br /&gt;
 Public Sub Form_Open()&lt;br /&gt;
 &lt;br /&gt;
  Dim dw As DesktopWindow&lt;br /&gt;
 &lt;br /&gt;
  With dw = New DesktopWindow(Desktop.ActiveWindow) &amp;lt;font color=gray&amp;gt;' ''&amp;quot;Desktop.ActiveWindow&amp;quot; è la finestra &amp;quot;attiva&amp;quot; di un programma in quel momento:''&amp;lt;/font&amp;gt;&lt;br /&gt;
    Print .Desktop&lt;br /&gt;
    Print .FullScreen&lt;br /&gt;
    Print .Height&lt;br /&gt;
    Print .Id&lt;br /&gt;
    Print .Maximized&lt;br /&gt;
    Print .Name&lt;br /&gt;
    Print .SkipTaskbar&lt;br /&gt;
    Print .VisibleName&lt;br /&gt;
 &amp;lt;font color=gray&amp;gt;' ''Mostra l'eventuale icona della finestra del programma:''&amp;lt;/font&amp;gt;&lt;br /&gt;
    PictureBox1.Picture = .Icon&lt;br /&gt;
  End With&lt;br /&gt;
 &lt;br /&gt;
 End&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Assegnare un Form ad uno specifico schermo==&lt;br /&gt;
Per assegnare un Form ad uno specifico schermo si userà la Proprietà &amp;quot;.Desktop&amp;quot;:&lt;br /&gt;
 Public Sub Button1_Click()&lt;br /&gt;
  &lt;br /&gt;
  Dim dw As DesktopWindow&lt;br /&gt;
   &lt;br /&gt;
  With dw = New DesktopWindow(Me.Id)&lt;br /&gt;
 &amp;lt;font color=gray&amp;gt;' ''Spostiamo il Form principale della nostra applicazione sul terzo desktop (indice 2):''&amp;lt;/font&amp;gt;&lt;br /&gt;
    .Desktop = 2&lt;br /&gt;
  End With&lt;br /&gt;
    &lt;br /&gt;
 End&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Note=&lt;br /&gt;
[1] Vedere al riguardo la seguente pagina: https://www.gambas-it.org/wiki/index.php/Individuare_ID_e_nome_delle_finestre_attive_con_le_risorse_del_Componente_gb.desktop&lt;/div&gt;</summary>
		<author><name>Vuott</name></author>
	</entry>
	<entry>
		<id>https://www.gambas-it.org/wiki/index.php?title=Uso_della_classe_DesktopWindow&amp;diff=42747</id>
		<title>Uso della classe DesktopWindow</title>
		<link rel="alternate" type="text/html" href="https://www.gambas-it.org/wiki/index.php?title=Uso_della_classe_DesktopWindow&amp;diff=42747"/>
		<updated>2025-10-28T20:07:00Z</updated>

		<summary type="html">&lt;p&gt;Vuott: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;La classe &amp;lt;b&amp;gt;DesktopWindow&amp;lt;/b&amp;gt; è usata, attivando i Componenti ''gb.desktop'' e ''gb.desktop.x11'', per rappresentare una finestra di primo livello.&lt;br /&gt;
&lt;br /&gt;
In particolare, questa Classe può essere usata per ottenere e gestire la finestra attiva di un programma.&lt;br /&gt;
&lt;br /&gt;
Mostriamo qualche esempio pratico:&lt;br /&gt;
 Public Sub Form_Open()&lt;br /&gt;
 &lt;br /&gt;
  Dim i As Integer[]&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;font color=gray&amp;gt;' &amp;lt;i&amp;gt;Poiché DesktopWindow è una classe, gli si associa una variabile del tipo di quella Classe:&amp;lt;/i&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
  Dim dw As DesktopWindow&lt;br /&gt;
 &lt;br /&gt;
  i = Desktop.FindWindow(&amp;quot;&amp;lt;font color=gray&amp;gt;Nome_della_finestra&amp;lt;/font&amp;gt;&amp;quot;)   &amp;lt;font color=gray&amp;gt;'&amp;lt;/font&amp;gt; &amp;lt;SUP&amp;gt;&amp;amp;#091;[[#Note|'''nota 1''']]&amp;amp;#093;&amp;lt;/sup&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
  With dw = New DesktopWindow(i[0])&lt;br /&gt;
 &amp;lt;font color=gray&amp;gt;' &amp;lt;i&amp;gt;Otteniamo informazioni dalla finestra individuata, e la gestiamo:&amp;lt;/i&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
    Print Hex(.Id), .VisibleName, .Width, .Height&lt;br /&gt;
    .Move(100, 200, 100, 300)&lt;br /&gt;
  End With&lt;br /&gt;
  &lt;br /&gt;
 End&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Se la finestra è il ''Form'' principale dell'applicazione, allora il suo Id si individuerà facilmente:&lt;br /&gt;
 Public Sub Form_Open()&lt;br /&gt;
 &lt;br /&gt;
  Dim dw As DesktopWindow&lt;br /&gt;
 &lt;br /&gt;
  Me.Show&lt;br /&gt;
 &lt;br /&gt;
  With dw = New DesktopWindow(Me.Id)&lt;br /&gt;
    Print Hex(.Id), .VisibleName, .Width, .Height&lt;br /&gt;
    .Move(100, 200, 100, 300)&lt;br /&gt;
  End With&lt;br /&gt;
 &lt;br /&gt;
 End&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
E' possibile individuare tutte le finestre aperte sulla Scrivania:&lt;br /&gt;
 Public Sub Button1_Click()&lt;br /&gt;
  &lt;br /&gt;
  Dim dw As DesktopWindow&lt;br /&gt;
 &lt;br /&gt;
  For Each dw In Desktop.Windows&lt;br /&gt;
    Print &amp;quot;Nome finestra: &amp;quot;; Quote(dw.Name), &amp;quot;X = &amp;quot;; Quote(dw.X), &amp;quot;Y = &amp;quot;; Quote(dw.Y)&lt;br /&gt;
  Next &lt;br /&gt;
 &lt;br /&gt;
 End&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
La Classe &amp;lt;i&amp;gt;DesktopWindow&amp;lt;/i&amp;gt; può rappresentare anche una finestra creata virtualmente con una variabile di tipo &amp;quot;Window&amp;quot;:&lt;br /&gt;
 Public Sub Form_Open()&lt;br /&gt;
 &lt;br /&gt;
  Dim dw As DesktopWindow&lt;br /&gt;
  Dim w As New Window&lt;br /&gt;
  &lt;br /&gt;
  With w&lt;br /&gt;
 &amp;lt;font color=gray&amp;gt;' ''Assegna un nome di comodo alla finestra (non è indispensabile, e &amp;lt;span style=&amp;quot;text-decoration:underline&amp;quot;&amp;gt;non&amp;lt;/span&amp;gt; modificherà il nome visibile in testa alla finestra):''&amp;lt;/font&amp;gt;&lt;br /&gt;
    .Window.Name = &amp;quot;&amp;lt;i&amp;gt;Nome_finestra&amp;lt;/i&amp;gt;&amp;quot;&lt;br /&gt;
 &amp;lt;font color=gray&amp;gt;' ''Se invece si pone solo: &amp;lt;b&amp;gt;.Name&amp;lt;/b&amp;gt; senza assegnazione, allora il nome sarà quello della finestra del programma.''&amp;lt;/font&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;font color=gray&amp;gt;' ''Carica un'immagine, che sarà poi mostrata appresso in dw:''&amp;lt;/font&amp;gt;&lt;br /&gt;
    .Icon = Picture.Load(&amp;quot;&amp;lt;FONT Color=gray&amp;gt;''/percorso/dell'immagine''&amp;lt;/font&amp;gt;&amp;quot;)&lt;br /&gt;
 &amp;lt;font color=gray&amp;gt;' ''Mostra nella &amp;quot;TextLabel&amp;quot; il nome fittizio precedentemente assegnato alla finestra:''&amp;lt;/font&amp;gt;&lt;br /&gt;
    TextLabel1.Text = .Name&lt;br /&gt;
  End With&lt;br /&gt;
  &lt;br /&gt;
  dw = New DesktopWindow(w.Handle) &amp;lt;font color=gray&amp;gt;' ''&amp;quot;w.Handle&amp;quot; è il numero identificativo dell'handle della finestra rappresentata dalla variabile &amp;quot;w&amp;quot;''&amp;lt;/font&amp;gt;&lt;br /&gt;
 &amp;lt;font color=gray&amp;gt;' ''Mostra l'immagine assegnata alla Proprietà &amp;quot;.Icon&amp;quot; della finestra :''&amp;lt;/font&amp;gt;&lt;br /&gt;
  PictureBox1.Picture = dw.Icon&lt;br /&gt;
 &lt;br /&gt;
 End&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
La Classe &amp;lt;i&amp;gt;DesktopWindow&amp;lt;/i&amp;gt; può rappresentare anche la finestra &amp;quot;attiva&amp;quot; di un programma in quel momento:&lt;br /&gt;
 Public Sub Form_Open()&lt;br /&gt;
 &lt;br /&gt;
  Dim dw As DesktopWindow&lt;br /&gt;
 &lt;br /&gt;
  With dw = New DesktopWindow(Desktop.ActiveWindow) &amp;lt;font color=gray&amp;gt;' ''&amp;quot;Desktop.ActiveWindow&amp;quot; è la finestra &amp;quot;attiva&amp;quot; di un programma in quel momento:''&amp;lt;/font&amp;gt;&lt;br /&gt;
    Print .Desktop&lt;br /&gt;
    Print .FullScreen&lt;br /&gt;
    Print .Height&lt;br /&gt;
    Print .Id&lt;br /&gt;
    Print .Maximized&lt;br /&gt;
    Print .Name&lt;br /&gt;
    Print .SkipTaskbar&lt;br /&gt;
    Print .VisibleName&lt;br /&gt;
 &amp;lt;font color=gray&amp;gt;' ''Mostra l'eventuale icona della finestra del programma:''&amp;lt;/font&amp;gt;&lt;br /&gt;
    PictureBox1.Picture = .Icon&lt;br /&gt;
  End With&lt;br /&gt;
 &lt;br /&gt;
 End&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Assegnare un Form ad uno specifico schermo==&lt;br /&gt;
Per assegnare un Form ad uno specifico schermo si userà la Proprietà &amp;quot;.Desktop&amp;quot;:&lt;br /&gt;
 Public Sub Button1_Click()&lt;br /&gt;
  &lt;br /&gt;
  Dim dw As DesktopWindow&lt;br /&gt;
   &lt;br /&gt;
  With dw = New DesktopWindow(Me.Id)&lt;br /&gt;
 &amp;lt;font color=gray&amp;gt;' ''Spostiamo il Form principale della nostra applicazione sul terzo desktop (indice 2):''&amp;lt;/font&amp;gt;&lt;br /&gt;
    .Desktop = 2&lt;br /&gt;
  End With&lt;br /&gt;
    &lt;br /&gt;
 End&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Note=&lt;br /&gt;
[1] Vedere al riguardo la seguente pagina: https://www.gambas-it.org/wiki/index.php/Individuare_ID_e_nome_delle_finestre_attive_con_le_risorse_del_Componente_gb.desktop&lt;/div&gt;</summary>
		<author><name>Vuott</name></author>
	</entry>
	<entry>
		<id>https://www.gambas-it.org/wiki/index.php?title=Uso_della_classe_ColorInfo&amp;diff=42746</id>
		<title>Uso della classe ColorInfo</title>
		<link rel="alternate" type="text/html" href="https://www.gambas-it.org/wiki/index.php?title=Uso_della_classe_ColorInfo&amp;diff=42746"/>
		<updated>2025-10-28T19:47:11Z</updated>

		<summary type="html">&lt;p&gt;Vuott: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;La Classe '''ColorInfo''' restituisce informazioni dettagliate sui colori.&lt;br /&gt;
&lt;br /&gt;
In particolare seziona un colore nei suoi componenti, e li ritorna come un oggetto di ''ColorInfo''.&lt;br /&gt;
&lt;br /&gt;
La Classe ''ColorInfo'' non è creabile.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Esempi===&lt;br /&gt;
 Public Sub Form_Open()&lt;br /&gt;
 &lt;br /&gt;
  Dim ci As ColorInfo&lt;br /&gt;
 &lt;br /&gt;
  With ci = Color[Color.Violet]&lt;br /&gt;
    Print .Red&lt;br /&gt;
    Print .Green&lt;br /&gt;
    Print .Blue&lt;br /&gt;
    Print .Alpha&lt;br /&gt;
    Print Hex(.Color, 6)&lt;br /&gt;
    Print .Hue&lt;br /&gt;
    Print .Saturation&lt;br /&gt;
    Print .Value   &amp;lt;FONT Color=gray&amp;gt;' ''Questo si riferisce al valore del componente &amp;quot;V&amp;quot; della rappresentazione HSV del colore''&amp;lt;/font&amp;gt;&lt;br /&gt;
    Print .Luminance&lt;br /&gt;
  End With&lt;br /&gt;
 &lt;br /&gt;
 End&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ovviamente è possibile anche &amp;quot;impostare&amp;quot; le proprietà della Classe ''ColorInfo'':&lt;br /&gt;
 Public Sub Form_Open()&lt;br /&gt;
 &lt;br /&gt;
  Dim ci As ColorInfo&lt;br /&gt;
  &lt;br /&gt;
  With ci = Color[Color.Violet]&lt;br /&gt;
    .Red = 255&lt;br /&gt;
    .Blue = 0&lt;br /&gt;
    Print Hex(.Color, 6)   &amp;lt;FONT Color=gray&amp;gt;' ''...e così il pixel è diventato di colore rosso''&amp;lt;/font&amp;gt;&lt;br /&gt;
  End With&lt;br /&gt;
 &lt;br /&gt;
 End&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In questo esempio pratico abbiamo una immagine formata da 4x4 pixel di colore blu. Cambieremo il colore dell'immagine in celeste.&lt;br /&gt;
 Public Sub Form_Open()&lt;br /&gt;
 &lt;br /&gt;
  Dim im As Image&lt;br /&gt;
  Dim ci As ColorInfo&lt;br /&gt;
 &lt;br /&gt;
  im = New Image(4, 4, Color.&amp;lt;FONT Color=blue&amp;gt;Blue&amp;lt;/font&amp;gt;, Image.Standard)&lt;br /&gt;
 &lt;br /&gt;
  With ci = Color[im.Pixels[0]]&lt;br /&gt;
    Print Hex(.Color, 6)&lt;br /&gt;
 &amp;lt;FONT Color=gray&amp;gt;' ''Viene modificato un componente del colore dei pixel:''&amp;lt;/font&amp;gt;&lt;br /&gt;
   .Green = 255&lt;br /&gt;
 &amp;lt;FONT Color=gray&amp;gt;' ''E' possibile anche impostare l'intero numero del colore del pixel:''&lt;br /&gt;
   .Color = &amp;amp;00FFFF&amp;lt;/font&amp;gt;&lt;br /&gt;
  End With&lt;br /&gt;
 &lt;br /&gt;
  PictureBox1.Image = im.Colorize(ci.Color)&lt;br /&gt;
 &lt;br /&gt;
 End&lt;/div&gt;</summary>
		<author><name>Vuott</name></author>
	</entry>
	<entry>
		<id>https://www.gambas-it.org/wiki/index.php?title=Evento_rotellina_del_mouse&amp;diff=42745</id>
		<title>Evento rotellina del mouse</title>
		<link rel="alternate" type="text/html" href="https://www.gambas-it.org/wiki/index.php?title=Evento_rotellina_del_mouse&amp;diff=42745"/>
		<updated>2025-10-28T19:44:42Z</updated>

		<summary type="html">&lt;p&gt;Vuott: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Per sollevare l'Evento ''rotellina'', &amp;quot;_MouseWheel()&amp;quot;, del mouse &amp;lt;SUP&amp;gt;&amp;amp;#091;[[#Note|nota 1]]&amp;amp;#093;&amp;lt;/sup&amp;gt;, quando si agisce appunto sulla rotellina (ruotandola) del mouse, è sufficiente utilizzare il seguente codice:&lt;br /&gt;
 Public Sub Form_MouseWheel()&lt;br /&gt;
 &lt;br /&gt;
  Select Case Mouse.Delta&lt;br /&gt;
    Case '''1'''&lt;br /&gt;
      Print &amp;quot;Ruotata la rotellina del mouse in avanti&amp;quot;&lt;br /&gt;
    Case '''-1'''   &amp;lt;FONT Color=gray&amp;gt;' ''...oppure '''''Case Else'''''&amp;lt;/font&amp;gt;&lt;br /&gt;
      Print &amp;quot;Ruotata la rotellina del mouse indietro&amp;quot;&lt;br /&gt;
  End Select&lt;br /&gt;
 &lt;br /&gt;
 End&lt;br /&gt;
Si terrà conto del valore ''Delta'' &amp;lt;SUP&amp;gt;&amp;amp;#091;[[#Note|nota 2]]&amp;amp;#093;&amp;lt;/sup&amp;gt; dell'Evento &amp;quot;_MouseWheel()&amp;quot;: un valore ''positivo'' ritornato indica che la rotellina è stata ruotata in ''avanti'', mentre un valore ''negativo'' restituito indica che la rotellina è stata ruotata ''indietro''.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Note=&lt;br /&gt;
[1] Vedere anche la pagina [[Variare il valore dello Slider ruotando la rotellina del mouse]] relativa alla variazione della Proprietà &amp;quot;.Value&amp;quot; dello ''Slider'' mediante l'evento &amp;quot;_MouseWheel()&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
[2] La proprietà ''delta'' è la direzione che indica lo spostamento della rotellina del mouse verso l'alto (in avanti) o verso il basso (indietro). Se il ''delta'' è un numero intero positivo, allora la rotellina del mouse è stata spostata verso l'alto (ruotata in avanti), se negativo è stata spostata verso il basso (ruotata indietro).&lt;/div&gt;</summary>
		<author><name>Vuott</name></author>
	</entry>
	<entry>
		<id>https://www.gambas-it.org/wiki/index.php?title=Evento_rotellina_del_mouse&amp;diff=42744</id>
		<title>Evento rotellina del mouse</title>
		<link rel="alternate" type="text/html" href="https://www.gambas-it.org/wiki/index.php?title=Evento_rotellina_del_mouse&amp;diff=42744"/>
		<updated>2025-10-28T19:42:28Z</updated>

		<summary type="html">&lt;p&gt;Vuott: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Per sollevare l'Evento ''rotellina'', &amp;quot;_MouseWheel()&amp;quot;, del mouse &amp;lt;SUP&amp;gt;&amp;amp;#091;[[#Note|nota 1]]&amp;amp;#093;&amp;lt;/sup&amp;gt;, quando si agisce appunto sulla rotellina (ruotandola) del mouse, è sufficiente utilizzare il seguente codice:&lt;br /&gt;
 Public Sub Form_MouseWheel()&lt;br /&gt;
 &lt;br /&gt;
  Select Case Mouse.Delta&lt;br /&gt;
    Case '''1'''&lt;br /&gt;
      Print &amp;quot;Ruotata la rotellina del mouse in avanti&amp;quot;&lt;br /&gt;
    Case '''-1'''&lt;br /&gt;
      Print &amp;quot;Ruotata la rotellina del mouse indietro&amp;quot;&lt;br /&gt;
  End Select&lt;br /&gt;
 &lt;br /&gt;
 End&lt;br /&gt;
Si terrà conto del valore ''Delta'' &amp;lt;SUP&amp;gt;&amp;amp;#091;[[#Note|nota 2]]&amp;amp;#093;&amp;lt;/sup&amp;gt; dell'Evento &amp;quot;_MouseWheel()&amp;quot;: un valore ''positivo'' ritornato indica che la rotellina è stata ruotata in ''avanti'', mentre un valore ''negativo'' restituito indica che la rotellina è stata ruotata ''indietro''.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Note=&lt;br /&gt;
[1] Vedere anche la pagina [[Variare il valore dello Slider ruotando la rotellina del mouse]] relativa alla variazione della Proprietà &amp;quot;.Value&amp;quot; dello ''Slider'' mediante l'evento &amp;quot;_MouseWheel()&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
[2] La proprietà ''delta'' è la direzione che indica lo spostamento della rotellina del mouse verso l'alto (in avanti) o verso il basso (indietro). Se il ''delta'' è un numero intero positivo, allora la rotellina del mouse è stata spostata verso l'alto (ruotata in avanti), se negativo è stata spostata verso il basso (ruotata indietro).&lt;/div&gt;</summary>
		<author><name>Vuott</name></author>
	</entry>
	<entry>
		<id>https://www.gambas-it.org/wiki/index.php?title=Evento_rotellina_del_mouse&amp;diff=42743</id>
		<title>Evento rotellina del mouse</title>
		<link rel="alternate" type="text/html" href="https://www.gambas-it.org/wiki/index.php?title=Evento_rotellina_del_mouse&amp;diff=42743"/>
		<updated>2025-10-28T19:40:48Z</updated>

		<summary type="html">&lt;p&gt;Vuott: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Per sollevare l'Evento ''rotellina'', &amp;quot;_MouseWheel()&amp;quot;, del mouse &amp;lt;SUP&amp;gt;&amp;amp;#091;[[#Note|nota 1]]&amp;amp;#093;&amp;lt;/sup&amp;gt;, quando si agisce appunto sulla rotellina del mouse, è sufficiente utilizzare il seguente codice:&lt;br /&gt;
 Public Sub Form_MouseWheel()&lt;br /&gt;
 &lt;br /&gt;
  Select Case Mouse.Delta&lt;br /&gt;
    Case '''1'''&lt;br /&gt;
      Print &amp;quot;Ruotata la rotellina del mouse in avanti&amp;quot;&lt;br /&gt;
    Case '''-1'''&lt;br /&gt;
      Print &amp;quot;Ruotata la rotellina del mouse indietro&amp;quot;&lt;br /&gt;
  End Select&lt;br /&gt;
 &lt;br /&gt;
 End&lt;br /&gt;
Si terrà conto del valore ''Delta'' &amp;lt;SUP&amp;gt;&amp;amp;#091;[[#Note|nota 2]]&amp;amp;#093;&amp;lt;/sup&amp;gt; dell'Evento &amp;quot;_MouseWheel()&amp;quot;: un valore ''positivo'' ritornato indica che la rotellina è stata ruotata in ''avanti'', mentre un valore ''negativo'' restituito indica che la rotellina è stata ruotata ''indietro''.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Note=&lt;br /&gt;
[1] Vedere anche la pagina [[Variare il valore dello Slider ruotando la rotellina del mouse]] relativa alla variazione della Proprietà &amp;quot;.Value&amp;quot; dello ''Slider'' mediante l'evento &amp;quot;_MouseWheel()&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
[2] La proprietà ''delta'' è la direzione che indica lo spostamento della rotellina del mouse verso l'alto (in avanti) o verso il basso (indietro). Se il ''delta'' è un numero intero positivo, allora la rotellina del mouse è stata spostata verso l'alto (ruotata in avanti), se negativo è stata spostata verso il basso (ruotata indietro).&lt;/div&gt;</summary>
		<author><name>Vuott</name></author>
	</entry>
	<entry>
		<id>https://www.gambas-it.org/wiki/index.php?title=Uso_della_classe_DesktopWindow&amp;diff=42742</id>
		<title>Uso della classe DesktopWindow</title>
		<link rel="alternate" type="text/html" href="https://www.gambas-it.org/wiki/index.php?title=Uso_della_classe_DesktopWindow&amp;diff=42742"/>
		<updated>2025-10-28T19:38:56Z</updated>

		<summary type="html">&lt;p&gt;Vuott: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;La classe &amp;lt;b&amp;gt;DesktopWindow&amp;lt;/b&amp;gt; è usata, attivando i Componenti ''gb.desktop'' e ''gb.desktop.x11'', per rappresentare una finestra di primo livello.&lt;br /&gt;
&lt;br /&gt;
In particolare, questa Classe può essere usata per ottenere e gestire la finestra attiva di un programma.&lt;br /&gt;
&lt;br /&gt;
Mostriamo qualche esempio pratico:&lt;br /&gt;
 Public Sub Form_Open()&lt;br /&gt;
 &lt;br /&gt;
  Dim i As Integer[]&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;font color=gray&amp;gt;' &amp;lt;i&amp;gt;Poiché DesktopWindow è una classe, gli si associa una variabile del tipo di quella Classe:&amp;lt;/i&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
  Dim dw As DesktopWindow&lt;br /&gt;
 &lt;br /&gt;
  i = Desktop.FindWindow(&amp;quot;&amp;lt;font color=gray&amp;gt;Nome_della_finestra&amp;lt;/font&amp;gt;&amp;quot;)&lt;br /&gt;
 &lt;br /&gt;
  With dw = New DesktopWindow(i[0])&lt;br /&gt;
 &amp;lt;font color=gray&amp;gt;' &amp;lt;i&amp;gt;Otteniamo informazioni dalla finestra individuata, e la gestiamo:&amp;lt;/i&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
    Print Hex(.Id), .VisibleName, .Width, .Height&lt;br /&gt;
    .Move(100, 200, 100, 300)&lt;br /&gt;
  End With&lt;br /&gt;
  &lt;br /&gt;
 End&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Se la finestra è il ''Form'' principale dell'applicazione, allora il suo Id si individuerà facilmente:&lt;br /&gt;
 Public Sub Form_Open()&lt;br /&gt;
 &lt;br /&gt;
  Dim dw As DesktopWindow&lt;br /&gt;
 &lt;br /&gt;
  Me.Show&lt;br /&gt;
 &lt;br /&gt;
  With dw = New DesktopWindow(Me.Id)&lt;br /&gt;
    Print Hex(.Id), .VisibleName, .Width, .Height&lt;br /&gt;
    .Move(100, 200, 100, 300)&lt;br /&gt;
  End With&lt;br /&gt;
 &lt;br /&gt;
 End&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
E' possibile individuare tutte le finestre aperte sulla Scrivania:&lt;br /&gt;
 Public Sub Button1_Click()&lt;br /&gt;
  &lt;br /&gt;
  Dim dw As DesktopWindow&lt;br /&gt;
 &lt;br /&gt;
  For Each dw In Desktop.Windows&lt;br /&gt;
    Print &amp;quot;Nome finestra: &amp;quot;; Quote(dw.Name), &amp;quot;X = &amp;quot;; Quote(dw.X), &amp;quot;Y = &amp;quot;; Quote(dw.Y)&lt;br /&gt;
  Next &lt;br /&gt;
 &lt;br /&gt;
 End&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
La Classe &amp;lt;i&amp;gt;DesktopWindow&amp;lt;/i&amp;gt; può rappresentare anche una finestra creata virtualmente con una variabile di tipo &amp;quot;Window&amp;quot;:&lt;br /&gt;
 Public Sub Form_Open()&lt;br /&gt;
 &lt;br /&gt;
  Dim dw As DesktopWindow&lt;br /&gt;
  Dim w As New Window&lt;br /&gt;
  &lt;br /&gt;
  With w&lt;br /&gt;
 &amp;lt;font color=gray&amp;gt;' ''Assegna un nome di comodo alla finestra (non è indispensabile, e &amp;lt;span style=&amp;quot;text-decoration:underline&amp;quot;&amp;gt;non&amp;lt;/span&amp;gt; modificherà il nome visibile in testa alla finestra):''&amp;lt;/font&amp;gt;&lt;br /&gt;
    .Window.Name = &amp;quot;&amp;lt;i&amp;gt;Nome_finestra&amp;lt;/i&amp;gt;&amp;quot;&lt;br /&gt;
 &amp;lt;font color=gray&amp;gt;' ''Se invece si pone solo: &amp;lt;b&amp;gt;.Name&amp;lt;/b&amp;gt; senza assegnazione, allora il nome sarà quello della finestra del programma.''&amp;lt;/font&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;font color=gray&amp;gt;' ''Carica un'immagine, che sarà poi mostrata appresso in dw:''&amp;lt;/font&amp;gt;&lt;br /&gt;
    .Icon = Picture.Load(&amp;quot;&amp;lt;FONT Color=gray&amp;gt;''/percorso/dell'immagine''&amp;lt;/font&amp;gt;&amp;quot;)&lt;br /&gt;
 &amp;lt;font color=gray&amp;gt;' ''Mostra nella &amp;quot;TextLabel&amp;quot; il nome fittizio precedentemente assegnato alla finestra:''&amp;lt;/font&amp;gt;&lt;br /&gt;
    TextLabel1.Text = .Name&lt;br /&gt;
  End With&lt;br /&gt;
  &lt;br /&gt;
  dw = New DesktopWindow(w.Handle) &amp;lt;font color=gray&amp;gt;' ''&amp;quot;w.Handle&amp;quot; è il numero identificativo dell'handle della finestra rappresentata dalla variabile &amp;quot;w&amp;quot;''&amp;lt;/font&amp;gt;&lt;br /&gt;
 &amp;lt;font color=gray&amp;gt;' ''Mostra l'immagine assegnata alla Proprietà &amp;quot;.Icon&amp;quot; della finestra :''&amp;lt;/font&amp;gt;&lt;br /&gt;
  PictureBox1.Picture = dw.Icon&lt;br /&gt;
 &lt;br /&gt;
 End&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
La Classe &amp;lt;i&amp;gt;DesktopWindow&amp;lt;/i&amp;gt; può rappresentare anche la finestra &amp;quot;attiva&amp;quot; di un programma in quel momento:&lt;br /&gt;
 Public Sub Form_Open()&lt;br /&gt;
 &lt;br /&gt;
  Dim dw As DesktopWindow&lt;br /&gt;
 &lt;br /&gt;
  With dw = New DesktopWindow(Desktop.ActiveWindow) &amp;lt;font color=gray&amp;gt;' ''&amp;quot;Desktop.ActiveWindow&amp;quot; è la finestra &amp;quot;attiva&amp;quot; di un programma in quel momento:''&amp;lt;/font&amp;gt;&lt;br /&gt;
    Print .Desktop&lt;br /&gt;
    Print .FullScreen&lt;br /&gt;
    Print .Height&lt;br /&gt;
    Print .Id&lt;br /&gt;
    Print .Maximized&lt;br /&gt;
    Print .Name&lt;br /&gt;
    Print .SkipTaskbar&lt;br /&gt;
    Print .VisibleName&lt;br /&gt;
 &amp;lt;font color=gray&amp;gt;' ''Mostra l'eventuale icona della finestra del programma:''&amp;lt;/font&amp;gt;&lt;br /&gt;
    PictureBox1.Picture = .Icon&lt;br /&gt;
  End With&lt;br /&gt;
 &lt;br /&gt;
 End&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Assegnare un Form ad uno specifico schermo==&lt;br /&gt;
Per assegnare un Form ad uno specifico schermo si userà la Proprietà &amp;quot;.Desktop&amp;quot;:&lt;br /&gt;
 Public Sub Button1_Click()&lt;br /&gt;
  &lt;br /&gt;
  Dim dw As DesktopWindow&lt;br /&gt;
   &lt;br /&gt;
  With dw = New DesktopWindow(Me.Id)&lt;br /&gt;
 &amp;lt;font color=gray&amp;gt;' ''Spostiamo il Form principale della nostra applicazione sul terzo desktop (indice 2):''&amp;lt;/font&amp;gt;&lt;br /&gt;
    .Desktop = 2&lt;br /&gt;
  End With&lt;br /&gt;
    &lt;br /&gt;
 End&lt;/div&gt;</summary>
		<author><name>Vuott</name></author>
	</entry>
	<entry>
		<id>https://www.gambas-it.org/wiki/index.php?title=Eseguire_un_file_Video_mediante_il_Metodo_.Open()_della_Classe_Desktop&amp;diff=42741</id>
		<title>Eseguire un file Video mediante il Metodo .Open() della Classe Desktop</title>
		<link rel="alternate" type="text/html" href="https://www.gambas-it.org/wiki/index.php?title=Eseguire_un_file_Video_mediante_il_Metodo_.Open()_della_Classe_Desktop&amp;diff=42741"/>
		<updated>2025-10-28T19:28:03Z</updated>

		<summary type="html">&lt;p&gt;Vuott: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Per eseguire un qualsiasi file video, è possibile utilizzare il Metodo &amp;quot;.Open()&amp;quot; della Classe ''Desktop'' .&lt;br /&gt;
&amp;lt;BR&amp;gt;In particolare il Metodo &amp;quot;.Open()&amp;quot; in tal caso apre il file video &amp;lt;U&amp;gt;mediante il programma predefinito&amp;lt;/u&amp;gt; nel sistema dall'utente per l'esecuzione dei file video.&lt;br /&gt;
&lt;br /&gt;
E' necessario attivare nel progetto Gambas il Componente ''gb.desktop'' .&lt;br /&gt;
&lt;br /&gt;
Mostriamo un semplice esempio:&lt;br /&gt;
 Public Sub Button1_Click()&lt;br /&gt;
  &lt;br /&gt;
   Desktop.Open(&amp;quot;&amp;lt;FONT Color=darkgreen&amp;gt;''/percorso/del/file/video''&amp;lt;/font&amp;gt;&amp;quot;)&lt;br /&gt;
   &lt;br /&gt;
 End&lt;br /&gt;
E' possibile anche eseguire un file video presente in un ''indirizzo'' web.&lt;/div&gt;</summary>
		<author><name>Vuott</name></author>
	</entry>
	<entry>
		<id>https://www.gambas-it.org/wiki/index.php?title=Eseguire_un_file_Video_mediante_il_Metodo_.Open()_della_Classe_Desktop&amp;diff=42740</id>
		<title>Eseguire un file Video mediante il Metodo .Open() della Classe Desktop</title>
		<link rel="alternate" type="text/html" href="https://www.gambas-it.org/wiki/index.php?title=Eseguire_un_file_Video_mediante_il_Metodo_.Open()_della_Classe_Desktop&amp;diff=42740"/>
		<updated>2025-10-28T19:27:03Z</updated>

		<summary type="html">&lt;p&gt;Vuott: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Per eseguire un qualsiasi file video, è possibile utilizzare il Metodo &amp;quot;.Open()&amp;quot; della Classe ''Desktop'' .&lt;br /&gt;
&amp;lt;BR&amp;gt;In particolare il Metodo &amp;quot;.Open()&amp;quot; in tal caso apre il file video mediante il programma predefinito nel sistema dall'utente per l'esecuzione dei file video.&lt;br /&gt;
&lt;br /&gt;
E' necessario attivare nel progetto Gambas il Componente ''gb.desktop'' .&lt;br /&gt;
&lt;br /&gt;
Mostriamo un semplice esempio:&lt;br /&gt;
 Public Sub Button1_Click()&lt;br /&gt;
  &lt;br /&gt;
   Desktop.Open(&amp;quot;&amp;lt;FONT Color=darkgreen&amp;gt;''/percorso/del/file/video''&amp;lt;/font&amp;gt;&amp;quot;)&lt;br /&gt;
   &lt;br /&gt;
 End&lt;br /&gt;
E' possibile anche eseguire un file video presente in un ''indirizzo'' web.&lt;/div&gt;</summary>
		<author><name>Vuott</name></author>
	</entry>
	<entry>
		<id>https://www.gambas-it.org/wiki/index.php?title=Sostituire_gli_operatori_logici_di_spostamento_dei_bit_con_semplici_operazioni&amp;diff=42739</id>
		<title>Sostituire gli operatori logici di spostamento dei bit con semplici operazioni</title>
		<link rel="alternate" type="text/html" href="https://www.gambas-it.org/wiki/index.php?title=Sostituire_gli_operatori_logici_di_spostamento_dei_bit_con_semplici_operazioni&amp;diff=42739"/>
		<updated>2025-10-28T09:20:58Z</updated>

		<summary type="html">&lt;p&gt;Vuott: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Come è noto, nel linguaggio '''C''' fra gli operatori cosiddetti ''bitwise'', ossia quegli operatori capaci di operare sui singoli bit, vi sono anche gli operatori di ''spostamento'' (''shift'' ) dei bit, che effettuano un spostamento a &amp;lt;U&amp;gt;sinistra&amp;lt;/u&amp;gt; di un bit:&lt;br /&gt;
 primo_operando '''&amp;lt;&amp;lt;''' secondo_operando&lt;br /&gt;
oppure uno spostamento a &amp;lt;U&amp;gt;destra&amp;lt;/u&amp;gt;:&lt;br /&gt;
 primo_operando '''&amp;gt;&amp;gt;''' secondo_operando&lt;br /&gt;
&amp;lt;U&amp;gt;Lo spostamento di ciascun bit del primo operando avviene di un numero di posizioni uguale al valore del secondo operando&amp;lt;/u&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Dinamica dei bit in un esempio di spostamento a sinistra====&lt;br /&gt;
Così, ad esempio, il valore 16 è il primo operando, mentre 2 è il secondo operando:&lt;br /&gt;
 16 &amp;lt;&amp;lt; 2&lt;br /&gt;
&amp;lt;FONT Color=#B22222&amp;gt;i bit del valore 16 sono spostati a sinistra di 2 posizioni&amp;lt;/font&amp;gt;.&lt;br /&gt;
&amp;lt;BR&amp;gt;Contestualmente i bit così liberati sono riempiti da bit posti a destra con valore &amp;lt;U&amp;gt;zero&amp;lt;/u&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Pertanto se in questo esempio il primo operando è rappresentato inizialmente dal valore 16:&lt;br /&gt;
 00010000&lt;br /&gt;
dopo lo spostamento di due posizioni il primo operando assumerà il valore 64:&lt;br /&gt;
    &amp;lt;FONT Size=4&amp;gt;↶↶&amp;lt;/font&amp;gt;&lt;br /&gt;
 0'''1'''00000← 0←&lt;br /&gt;
&lt;br /&gt;
====Dinamica dei bit in un esempio di spostamento a destra====&lt;br /&gt;
Analogamente nello spostamento a destra, se ad esempio il primo operando è rappresentato inizialmente dal valore 129:&lt;br /&gt;
 129 &amp;gt;&amp;gt; 2&lt;br /&gt;
con la seguente rappresentazione in formato binario:&lt;br /&gt;
 10000001&lt;br /&gt;
dopo lo spostamento di due posizioni il primo operando (in origine 129) assumerà il valore 32:&lt;br /&gt;
 &amp;lt;FONT Size=4&amp;gt;  ↷↷&amp;lt;/font&amp;gt;&lt;br /&gt;
 →0 →0'''1'''00000 &amp;lt;FONT Color=gray&amp;gt;''Come si nota, il primo bit a destra a causa dello spostamento viene estromesso e perduto''&amp;lt;/font&amp;gt;&lt;br /&gt;
Anche qui i bit spostati saranno sostituiti da bit posti ovviamente a sinistra con valore zero.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Lo ''spostamento'' in Gambas==&lt;br /&gt;
In Gambas, come si sa, esistono alcune funzioni specifiche per effettuare lo spostamento dei bit a sinistra.&lt;br /&gt;
&amp;lt;BR&amp;gt;Due che &amp;lt;U&amp;gt;salvaguardano&amp;lt;/u&amp;gt; il ''segno'' del valore gestito:&lt;br /&gt;
 Shl(valore, spostamento)&lt;br /&gt;
o a destra:&lt;br /&gt;
 Shr(valore, spostamento)&lt;br /&gt;
e due che &amp;lt;U&amp;gt;ignorano&amp;lt;/u&amp;gt; il ''segno'' del valore gestito:&lt;br /&gt;
 Lsl(valore, spostamento)&lt;br /&gt;
o a destra:&lt;br /&gt;
 Lsr(valore, spostamento)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Spostamento dei bit senza uso delle specifiche funzioni di Gambas==&lt;br /&gt;
Possiamo, però, ottenere lo stesso risultato, restituito dalle predette specifiche funzioni di Gambas, effettuando semplici operazioni.&lt;br /&gt;
&lt;br /&gt;
===Operazione per lo spostamento a ''sinistra''===&lt;br /&gt;
Per ottenere lo spostamento a ''sinistra'' di un bit si effettuerà una moltiplicazione del valore del bit da spostare per 2 elevato alla potenza determinata dal valore del secondo operando &amp;lt;SUP&amp;gt;&amp;amp;#091;[[#Note|nota 1]]&amp;amp;#093;&amp;lt;/sup&amp;gt;, ossia del numero dello spostamento delle posizioni da effettuarsi:&lt;br /&gt;
 a &amp;lt;&amp;lt; b  →  a * 2&amp;lt;SUP&amp;gt;b&amp;lt;/sup&amp;gt;&lt;br /&gt;
Esempio:&lt;br /&gt;
 6 &amp;lt;&amp;lt; 3  →  6 * 2&amp;lt;SUP&amp;gt;3&amp;lt;/sup&amp;gt;  →  6 * 8  →  48&lt;br /&gt;
&lt;br /&gt;
In Gambas la sintassi è:&lt;br /&gt;
 Risultato = Numero * CInt(2 ^ Spostamento)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Operazione per lo spostamento a ''destra''===&lt;br /&gt;
Per ottenere lo spostamento a ''destra'' di un bit si effettuerà una divisione del valore del bit da spostare per 2 elevato alla potenza determinata dal valore del secondo operando, ossia del numero dello spostamento delle posizioni da effettuarsi:&lt;br /&gt;
 a &amp;gt;&amp;gt; b  →  a \ 2&amp;lt;SUP&amp;gt;b&amp;lt;/sup&amp;gt;&lt;br /&gt;
Esempio:&lt;br /&gt;
 16 &amp;gt;&amp;gt; 3  →  16 \ 2&amp;lt;SUP&amp;gt;3&amp;lt;/sup&amp;gt;  →  16 \ 8  →  2&lt;br /&gt;
&lt;br /&gt;
In Gambas la sintassi è:&lt;br /&gt;
 Risultato = Numero \ CInt(2 ^ Spostamento)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Note=&lt;br /&gt;
[1] Si moltiplica per due, poiché il valore del numero binario viene costruito moltiplicando le cifre di tale numero per le potenze di 2.&amp;lt;BR&amp;gt;Esempio:&lt;br /&gt;
 10101010 = 1*2^7 + 0*2^6 + 1*2^5 + 0*2^4 + 1*2^3 + 0*2^2 + 1*2^1 + 0*2^0  = 170&lt;/div&gt;</summary>
		<author><name>Vuott</name></author>
	</entry>
	<entry>
		<id>https://www.gambas-it.org/wiki/index.php?title=Sostituire_gli_operatori_logici_di_spostamento_dei_bit_con_semplici_operazioni&amp;diff=42738</id>
		<title>Sostituire gli operatori logici di spostamento dei bit con semplici operazioni</title>
		<link rel="alternate" type="text/html" href="https://www.gambas-it.org/wiki/index.php?title=Sostituire_gli_operatori_logici_di_spostamento_dei_bit_con_semplici_operazioni&amp;diff=42738"/>
		<updated>2025-10-27T11:55:16Z</updated>

		<summary type="html">&lt;p&gt;Vuott: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Come è noto, nel linguaggio '''C''' fra gli operatori cosiddetti ''bitwise'', ossia quegli operatori capaci di operare sui singoli bit, vi sono anche gli operatori di ''spostamento'' (''shift'' ) dei bit, che effettuano un spostamento a &amp;lt;U&amp;gt;sinistra&amp;lt;/u&amp;gt; di un bit:&lt;br /&gt;
 primo_operando '''&amp;lt;&amp;lt;''' secondo_operando&lt;br /&gt;
oppure uno spostamento a &amp;lt;U&amp;gt;destra&amp;lt;/u&amp;gt;:&lt;br /&gt;
 primo_operando '''&amp;gt;&amp;gt;''' secondo_operando&lt;br /&gt;
&amp;lt;U&amp;gt;Lo spostamento di ciascun bit del primo operando avviene di un numero di posizioni uguale al valore del secondo operando&amp;lt;/u&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Dinamica dei bit in un esempio di spostamento a sinistra====&lt;br /&gt;
Così, ad esempio, il valore 16 è il primo operando, mentre 2 è il secondo operando:&lt;br /&gt;
 16 &amp;lt;&amp;lt; 2&lt;br /&gt;
&amp;lt;FONT Color=#B22222&amp;gt;i bit del valore 16 sono spostati a sinistra di 2 posizioni&amp;lt;/font&amp;gt;.&lt;br /&gt;
&amp;lt;BR&amp;gt;Contestualmente i bit così liberati sono riempiti da bit posti a destra con valore &amp;lt;U&amp;gt;zero&amp;lt;/u&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Pertanto se in questo esempio il primo operando è rappresentato inizialmente dal valore 16:&lt;br /&gt;
 00010000&lt;br /&gt;
dopo lo spostamento di due posizioni il primo operando assumerà il valore 64:&lt;br /&gt;
    &amp;lt;FONT Size=4&amp;gt;↶↶&amp;lt;/font&amp;gt;&lt;br /&gt;
 0'''1'''00000← 0←&lt;br /&gt;
&lt;br /&gt;
====Dinamica dei bit in un esempio di spostamento a destra====&lt;br /&gt;
Analogamente nello spostamento a destra, se ad esempio il primo operando è rappresentato inizialmente dal valore 129:&lt;br /&gt;
 129 &amp;gt;&amp;gt; 2&lt;br /&gt;
con la seguente rappresentazione in formato binario:&lt;br /&gt;
 10000001&lt;br /&gt;
dopo lo spostamento di due posizioni il primo operando (in origine 129) assumerà il valore 32:&lt;br /&gt;
 &amp;lt;FONT Size=4&amp;gt;  ↷↷&amp;lt;/font&amp;gt;&lt;br /&gt;
 →0 →0'''1'''00000 &amp;lt;FONT Color=gray&amp;gt;''Come si nota, il primo bit a destra a causa dello spostamento viene estromesso e perduto''&amp;lt;/font&amp;gt;&lt;br /&gt;
Anche qui i bit spostati saranno sostituiti da bit posti ovviamente a sinistra con valore zero.&lt;br /&gt;
&lt;br /&gt;
===Lo ''spostamento'' in Gambas===&lt;br /&gt;
In Gambas, come si sa, esistono alcune funzioni specifiche per effettuare lo spostamento dei bit a sinistra.&lt;br /&gt;
&amp;lt;BR&amp;gt;Due che &amp;lt;U&amp;gt;salvaguardano&amp;lt;/u&amp;gt; il ''segno'' del valore gestito:&lt;br /&gt;
 Shl(valore, spostamento)&lt;br /&gt;
o a destra:&lt;br /&gt;
 Shr(valore, spostamento)&lt;br /&gt;
e due che &amp;lt;U&amp;gt;ignorano&amp;lt;/u&amp;gt; il ''segno'' del valore gestito:&lt;br /&gt;
 Lsl(valore, spostamento)&lt;br /&gt;
o a destra:&lt;br /&gt;
 Lsr(valore, spostamento)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Spostamento dei bit senza uso delle specifiche funzioni di Gambas==&lt;br /&gt;
Possiamo, però, ottenere lo stesso risultato, restituito dalle predette specifiche funzioni di Gambas, effettuando semplici operazioni.&lt;br /&gt;
&lt;br /&gt;
===Operazione per lo spostamento a ''sinistra''===&lt;br /&gt;
Per ottenere lo spostamento a ''sinistra'' di un bit si effettuerà una moltiplicazione del valore del bit da spostare per 2 elevato alla potenza determinata dal valore del secondo operando &amp;lt;SUP&amp;gt;&amp;amp;#091;[[#Note|nota 1]]&amp;amp;#093;&amp;lt;/sup&amp;gt;, ossia del numero dello spostamento delle posizioni da effettuarsi:&lt;br /&gt;
 a &amp;lt;&amp;lt; b  →  a * 2&amp;lt;SUP&amp;gt;b&amp;lt;/sup&amp;gt;&lt;br /&gt;
Esempio:&lt;br /&gt;
 6 &amp;lt;&amp;lt; 3  →  6 * 2&amp;lt;SUP&amp;gt;3&amp;lt;/sup&amp;gt;  →  6 * 8  →  48&lt;br /&gt;
&lt;br /&gt;
In Gambas la sintassi è:&lt;br /&gt;
 Risultato = Numero * CInt(2 ^ Spostamento)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Operazione per lo spostamento a ''destra''===&lt;br /&gt;
Per ottenere lo spostamento a ''destra'' di un bit si effettuerà una divisione del valore del bit da spostare per 2 elevato alla potenza determinata dal valore del secondo operando, ossia del numero dello spostamento delle posizioni da effettuarsi:&lt;br /&gt;
 a &amp;gt;&amp;gt; b  →  a \ 2&amp;lt;SUP&amp;gt;b&amp;lt;/sup&amp;gt;&lt;br /&gt;
Esempio:&lt;br /&gt;
 16 &amp;gt;&amp;gt; 3  →  16 \ 2&amp;lt;SUP&amp;gt;3&amp;lt;/sup&amp;gt;  →  16 \ 8  →  2&lt;br /&gt;
&lt;br /&gt;
In Gambas la sintassi è:&lt;br /&gt;
 Risultato = Numero \ CInt(2 ^ Spostamento)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Note=&lt;br /&gt;
[1] Si moltiplica per due, poiché il valore del numero binario viene costruito moltiplicando le cifre di tale numero per le potenze di 2.&amp;lt;BR&amp;gt;Esempio:&lt;br /&gt;
 10101010 = 1*2^7 + 0*2^6 + 1*2^5 + 0*2^4 + 1*2^3 + 0*2^2 + 1*2^1 + 0*2^0  = 170&lt;/div&gt;</summary>
		<author><name>Vuott</name></author>
	</entry>
	<entry>
		<id>https://www.gambas-it.org/wiki/index.php?title=Conoscere_la_durata_di_un_file_Midi_mediante_le_funzioni_esterne_del_API_di_WildMidi&amp;diff=42737</id>
		<title>Conoscere la durata di un file Midi mediante le funzioni esterne del API di WildMidi</title>
		<link rel="alternate" type="text/html" href="https://www.gambas-it.org/wiki/index.php?title=Conoscere_la_durata_di_un_file_Midi_mediante_le_funzioni_esterne_del_API_di_WildMidi&amp;diff=42737"/>
		<updated>2025-10-27T08:48:30Z</updated>

		<summary type="html">&lt;p&gt;Vuott: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;La libreria ''WildMidi'' consente, fra l'altro, di conoscere (anche se talvolta in modo approssimativo) la durata di un file Midi.&lt;br /&gt;
&lt;br /&gt;
Per poter fruire in Gambas delle risorse dell'API di ''WildMidi'', è necessario avere installata e richiamare la libreria condivisa: &amp;quot;''libWildMidi.so.2.1.0'' &amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Poiché per inizializzare l'interfaccia di ''WildMidi'' è necessario richiamare un file (''freepats.cfg'' oppure ''wildmidi.cfg'') di configurazione dei campioni audio degli strumenti musicali, qualora non sia presente alcuno dei due file ''patch'' nel nostro sistema, ne verrà creato uno fittizio, primo di dati al suo interno. Sarà ugualmente accettato dalla funzione esterna ''WildMidi_Init()'', alla quale dovrà essere passato nel suo secondo argomento.&lt;br /&gt;
&lt;br /&gt;
Mostriamo un semplice esempio:&lt;br /&gt;
 Library &amp;quot;libWildMidi:2.1.0&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 Public Struct _WM_Info&lt;br /&gt;
   copyright As Pointer&lt;br /&gt;
   current_sample As Integer&lt;br /&gt;
   approx_total_samples As Integer&lt;br /&gt;
   mixer_options As Short&lt;br /&gt;
   total_midi_time As Integer&lt;br /&gt;
 End Struct&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;FONT Color=gray&amp;gt;' ''int WildMidi_Init  (const char *config_file, unsigned short int rate, unsigned short int options):''&lt;br /&gt;
 ' ''Intializes &amp;quot;libWildMidi&amp;quot; in preparation for playback.''&amp;lt;/font&amp;gt;&lt;br /&gt;
 Private Extern WildMidi_Init(config_file As String, rate As Integer, options As Short) As Integer&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;FONT Color=gray&amp;gt;' ''midi *WildMidi_Open (const char *midifile)''&lt;br /&gt;
 ' ''Open  a MIDI file pointed to by midifile for processing.''&amp;lt;/font&amp;gt;&lt;br /&gt;
 Private Extern WildMidi_Open(midifile As String) As Pointer&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;FONT Color=gray&amp;gt;' ''struct _WM_Info * WildMidi_GetInfo (midi *handle)''&lt;br /&gt;
 ' ''Get information on a midi.''&amp;lt;/font&amp;gt;&lt;br /&gt;
 Private Extern WildMidi_GetInfo(handle As Pointer) As _WM_Info&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;FONT Color=gray&amp;gt;' ''void WildMidi_Shutdown(void)''&lt;br /&gt;
 ' ''Shuts  down  the wildmidi library, resetting data and freeing up memory used by the library.''&amp;lt;/font&amp;gt;&lt;br /&gt;
 Private Extern WildMidi_Shutdown()&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 Public Sub Main()&lt;br /&gt;
  &lt;br /&gt;
  Dim frequenza, err As Integer&lt;br /&gt;
  Dim info As _WM_Info&lt;br /&gt;
  Dim midi As Pointer&lt;br /&gt;
  &lt;br /&gt;
 &amp;lt;FONT Color=gray&amp;gt;' '''''Crea un file fittizio di impostazione di campioni audio degli strumenti musicali, per poter inizializzare comunque la libreria &amp;quot;libWildMidi&amp;quot;''':''&amp;lt;/font&amp;gt;&lt;br /&gt;
  File.Save(&amp;quot;/tmp/freepats.cfg&amp;quot;, Null)&lt;br /&gt;
   &lt;br /&gt;
  frequenza = 44100&lt;br /&gt;
   &lt;br /&gt;
  err = WildMidi_Init(&amp;quot;/tmp/freepats.cfg&amp;quot;, frequenza, 0)&lt;br /&gt;
  If err &amp;lt; 0 Then Error.Raise(&amp;quot;Impossibile inizializzare la libreria 'libWildMidi' !&amp;quot;)&lt;br /&gt;
   &lt;br /&gt;
  midi = WildMidi_Open(&amp;quot;&amp;lt;FONT Color=darkgreen&amp;gt;''/percorso/del/file.mid''&amp;lt;/font&amp;gt;&amp;quot;)&lt;br /&gt;
   &lt;br /&gt;
  info = WildMidi_GetInfo(midi)&lt;br /&gt;
   &lt;br /&gt;
  Print &amp;quot;Durata del file Midi: \e[31m&amp;quot;, Time(0, 0, 0, info.total_midi_time)&lt;br /&gt;
  &lt;br /&gt;
  WildMidi_Shutdown()&lt;br /&gt;
   &lt;br /&gt;
 End&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Riferimenti=&lt;br /&gt;
* http://wildmidi.sourceforge.net/?id=about&lt;br /&gt;
* http://sourcecodebrowser.com/wildmidi/0.2.2/index.html&lt;br /&gt;
* http://manpages.ubuntu.com/manpages/saucy/man5/wildmidi.cfg.5.html&lt;/div&gt;</summary>
		<author><name>Vuott</name></author>
	</entry>
	<entry>
		<id>https://www.gambas-it.org/wiki/index.php?title=Conoscere_la_durata_di_un_file_Midi_mediante_le_funzioni_esterne_del_API_di_WildMidi&amp;diff=42736</id>
		<title>Conoscere la durata di un file Midi mediante le funzioni esterne del API di WildMidi</title>
		<link rel="alternate" type="text/html" href="https://www.gambas-it.org/wiki/index.php?title=Conoscere_la_durata_di_un_file_Midi_mediante_le_funzioni_esterne_del_API_di_WildMidi&amp;diff=42736"/>
		<updated>2025-10-27T08:47:00Z</updated>

		<summary type="html">&lt;p&gt;Vuott: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;La libreria ''WildMidi'' consente, fra l'altro, di conoscere (anche se talvolta in modo approssimativo) la durata di un file Midi.&lt;br /&gt;
&lt;br /&gt;
Per poter fruire in Gambas delle risorse dell'API di ''WildMidi'', è necessario avere installata e richiamare la libreria condivisa: &amp;quot;''libWildMidi.so.2.1.0'' &amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Poiché per inizializzare l'interfaccia di ''WildMidi'' è necessario richiamare un file (''freepats.cfg'' oppure ''wildmidi.cfg'') di configurazione dei campioni audio degli strumenti musicali, qualora non sia presente alcuno dei due file ''patch'' nel nostro sistema, ne verrà creato uno fittizio, primo di dati al suo interno. Sarà ugualmente accettato dalla funzione esterna ''WildMidi_Init()'', alla quale dovrà essere passato nel suo secondo argomento.&lt;br /&gt;
&lt;br /&gt;
Mostriamo un semplice esempio:&lt;br /&gt;
 Library &amp;quot;libWildMidi:2.1.0&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 Public Struct _WM_Info&lt;br /&gt;
   copyright As Pointer&lt;br /&gt;
   current_sample As Integer&lt;br /&gt;
   approx_total_samples As Integer&lt;br /&gt;
   mixer_options As Short&lt;br /&gt;
   total_midi_time As Integer&lt;br /&gt;
 End Struct&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;FONT Color=gray&amp;gt;' ''int WildMidi_Init  (const char *config_file, unsigned short int rate, unsigned short int options):''&lt;br /&gt;
 ' ''Intializes &amp;quot;libWildMidi&amp;quot; in preparation for playback.''&amp;lt;/font&amp;gt;&lt;br /&gt;
 Private Extern WildMidi_Init(config_file As String, rate As Integer, options As Short) As Integer&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;FONT Color=gray&amp;gt;' ''midi *WildMidi_Open (const char *midifile)''&lt;br /&gt;
 ' ''Open  a MIDI file pointed to by midifile for processing.''&amp;lt;/font&amp;gt;&lt;br /&gt;
 Private Extern WildMidi_Open(midifile As String) As Pointer&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;FONT Color=gray&amp;gt;' ''struct _WM_Info * WildMidi_GetInfo (midi *handle)''&lt;br /&gt;
 ' ''Get information on a midi.''&amp;lt;/font&amp;gt;&lt;br /&gt;
 Private Extern WildMidi_GetInfo(handle As Pointer) As _WM_Info&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;FONT Color=gray&amp;gt;' ''void WildMidi_Shutdown(void)''&lt;br /&gt;
 ' ''Shuts  down  the wildmidi library, resetting data and freeing up memory used by the library.''&amp;lt;/font&amp;gt;&lt;br /&gt;
 Private Extern WildMidi_Shutdown()&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 Public Sub Main()&lt;br /&gt;
  &lt;br /&gt;
  Dim frequenza, err As Integer&lt;br /&gt;
  Dim info As _WM_Info&lt;br /&gt;
  Dim midi As Pointer&lt;br /&gt;
  &lt;br /&gt;
 &amp;lt;FONT Color=gray&amp;gt;' '''''Crea un file fittizio di impostazione di campioni audio degli strumenti musicali, per poter inizializzare comunque la libreria &amp;quot;libWildMidi&amp;quot;''':''&amp;lt;/font&amp;gt;&lt;br /&gt;
  File.Save(&amp;quot;/tmp/freepats.cfg&amp;quot;, Null)&lt;br /&gt;
   &lt;br /&gt;
  frequenza = 44100&lt;br /&gt;
   &lt;br /&gt;
  err = WildMidi_Init(&amp;quot;/tmp/freepats.cfg&amp;quot;, frequenza, 0)&lt;br /&gt;
  If err &amp;lt; 0 Then Error.Raise(&amp;quot;Impossibile inizializzare la libreria 'libWildMidi' !&amp;quot;)&lt;br /&gt;
   &lt;br /&gt;
  midi = WildMidi_Open(&amp;quot;&amp;lt;FONT Color=darkgreen&amp;gt;''/percorso/del/file.mid''&amp;lt;/font&amp;gt;&amp;quot;)&lt;br /&gt;
   &lt;br /&gt;
  info = WildMidi_GetInfo(midi)&lt;br /&gt;
   &lt;br /&gt;
  Print &amp;quot;Durata del file Midi: \e[31m&amp;quot;, Time(0, 0, 0, (info.total_midi_time)&lt;br /&gt;
  &lt;br /&gt;
  WildMidi_Shutdown()&lt;br /&gt;
   &lt;br /&gt;
 End&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Riferimenti=&lt;br /&gt;
* http://wildmidi.sourceforge.net/?id=about&lt;br /&gt;
* http://sourcecodebrowser.com/wildmidi/0.2.2/index.html&lt;br /&gt;
* http://manpages.ubuntu.com/manpages/saucy/man5/wildmidi.cfg.5.html&lt;/div&gt;</summary>
		<author><name>Vuott</name></author>
	</entry>
	<entry>
		<id>https://www.gambas-it.org/wiki/index.php?title=Ottenere_un_file_Midi_da_un_file_XMI_con_le_funzioni_esterne_del_API_di_WildMidi&amp;diff=42735</id>
		<title>Ottenere un file Midi da un file XMI con le funzioni esterne del API di WildMidi</title>
		<link rel="alternate" type="text/html" href="https://www.gambas-it.org/wiki/index.php?title=Ottenere_un_file_Midi_da_un_file_XMI_con_le_funzioni_esterne_del_API_di_WildMidi&amp;diff=42735"/>
		<updated>2025-10-27T08:46:32Z</updated>

		<summary type="html">&lt;p&gt;Vuott: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;La libreria ''WildMidi'' consente attraverso l'uso della sua funzione &amp;quot;''WildMidi_ConvertToMidi( )''&amp;quot; di convertire un file XMI nei dati di un file MIDI.&lt;br /&gt;
&amp;lt;BR&amp;gt;In particolare detta funzione esterna elabora un file simil-MIDI (XMI) e cerca di rilevare, convertire e scrivere i dati in un buffer di memoria in formato MIDI.&lt;br /&gt;
&lt;br /&gt;
Per poter fruire della risorsa ''WildMidi'', è necessario avere installata nel sistema e richiamare in Gambas la libreria condivisa: &amp;quot;''libWildMidi.so.2.0.1'' &amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Poiché per inizializzare l'interfaccia di ''WildMidi'' è necessario richiamare un file (''freepats.cfg'' oppure ''wildmidi.cfg'') di configurazione dei campioni audio degli strumenti musicali, qualora non sia presente alcuno dei due file ''patch'' nel nostro sistema, ne verrà creato uno fittizio, primo di dati al suo interno. Sarà ugualmente accettato dalla funzione esterna ''WildMidi_Init()'', alla quale dovrà essere passato nel suo secondo argomento.&lt;br /&gt;
&lt;br /&gt;
Mostriamo un semplice esempio:&lt;br /&gt;
 Library &amp;quot;libWildMidi:2.1.0&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 Public Struct _WM_Info&lt;br /&gt;
   copyright As Pointer&lt;br /&gt;
   current_sample As Integer&lt;br /&gt;
   approx_total_samples As Integer&lt;br /&gt;
   mixer_options As Short&lt;br /&gt;
   total_midi_time As Integer&lt;br /&gt;
 End Struct&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;FONT Color=gray&amp;gt;' ''WildMidi_Init  (const char *config_file, unsigned short int rate, unsigned short int options)''&lt;br /&gt;
 ' ''Intializes &amp;quot;libWildMidi&amp;quot; in preparation for playback.''&amp;lt;/font&amp;gt;&lt;br /&gt;
 Private Extern WildMidi_Init(config_file As String, rate As Integer, options As Short) As Integer&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;FONT Color=gray&amp;gt;' ''int WildMidi_ConvertToMidi(const char * file, uint8_t * * out, uint32_t * size)''&lt;br /&gt;
 ' ''Convert a MIDI-like file into a new MIDI file.''&amp;lt;/font&amp;gt;&lt;br /&gt;
 Private Extern WildMidi_ConvertToMidi(__file As String, out As Pointer, size As Pointer) As Integer&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;FONT Color=gray&amp;gt;' ''midi *WildMidi_Open (const char *midifile)''&lt;br /&gt;
 ' ''Open  a MIDI file pointed to by midifile for processing.''&amp;lt;/font&amp;gt;&lt;br /&gt;
 Private Extern WildMidi_Open(midifile As String) As Pointer&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;FONT Color=gray&amp;gt;' ''struct _WM_Info * WildMidi_GetInfo (midi *handle)''&lt;br /&gt;
 ' ''Get information on a midi.''&amp;lt;/font&amp;gt;&lt;br /&gt;
 Private Extern WildMidi_GetInfo(handle As Pointer) As _WM_Info&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;FONT Color=gray&amp;gt;' ''int WildMidi_Close (midi *handle)''&lt;br /&gt;
 ' ''Finish processing MIDI data or file.''&amp;lt;/font&amp;gt;&lt;br /&gt;
 Private Extern WildMidi_Close(handle As Pointer) As Integer&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;FONT Color=gray&amp;gt;' ''void WildMidi_Shutdown(void)''&lt;br /&gt;
 ' ''Shuts down the wildmidi library, resetting data and freeing up memory used by the library.''&amp;lt;/font&amp;gt;&lt;br /&gt;
 Private Extern WildMidi_Shutdown()&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 Public Sub Main()&lt;br /&gt;
  &lt;br /&gt;
  Dim i, sz As Integer&lt;br /&gt;
  Dim midi As Pointer&lt;br /&gt;
  Dim xmi As String&lt;br /&gt;
  Dim fl As File&lt;br /&gt;
  Dim info As _WM_Info&lt;br /&gt;
  &lt;br /&gt;
 &amp;lt;FONT Color=gray&amp;gt;' '''''Crea un file fittizio di impostazione di campioni audio degli strumenti musicali, per poter inizializzare comunque la libreria &amp;quot;libWildMidi&amp;quot;''':''&amp;lt;/font&amp;gt;&lt;br /&gt;
  File.Save(&amp;quot;/tmp/freepats.cfg&amp;quot;, Null)&lt;br /&gt;
  &lt;br /&gt;
 &amp;lt;FONT Color=gray&amp;gt;' ''Inizializza la libreria 'libWildMidi':''&amp;lt;/font&amp;gt;&lt;br /&gt;
  i = WildMidi_Init(&amp;quot;/tmp/freepats.cfg&amp;quot;, 44100, 0)&lt;br /&gt;
  If i &amp;lt; 0 Then Error.Raise(&amp;quot;Errore nell'inizializzazione dell'interfaccia 'libWildMidi' !&amp;quot;)&lt;br /&gt;
  &lt;br /&gt;
 &amp;lt;FONT Color=gray&amp;gt;' ''Alloca una porzione di memoria adeguata per contenere un file Midi:''&amp;lt;/font&amp;gt;&lt;br /&gt;
  midi = Alloc(SizeOf(gb.Byte), 500000)&lt;br /&gt;
  &lt;br /&gt;
 &amp;lt;FONT Color=gray&amp;gt;' ''Carica un file XMI in memoria:''&amp;lt;/font&amp;gt;&lt;br /&gt;
  xmi = &amp;quot;&amp;lt;FONT Color=darkgreen&amp;gt;''/percorso/del/file.xmi''&amp;lt;/font&amp;gt;&amp;quot;&lt;br /&gt;
  &lt;br /&gt;
 &amp;lt;FONT Color=gray&amp;gt;' ''Converte i dati del file XMI nei dati di un file Midi:''&amp;lt;/font&amp;gt;&lt;br /&gt;
  i = &amp;lt;FONT Color=#B22222&amp;gt;WildMidi_ConvertToMidi&amp;lt;/font&amp;gt;(xmi, midi, VarPtr(sz))&lt;br /&gt;
  If i &amp;lt; 0 Then Error.Raise(&amp;quot;Errore&amp;quot;)&lt;br /&gt;
  &lt;br /&gt;
 &amp;lt;FONT Color=gray&amp;gt;' ''Mostra in console tutti i dati midi ricostruiti:''&amp;lt;/font&amp;gt;&lt;br /&gt;
  For i = 0 To sz - 1&lt;br /&gt;
    Print i, Hex(Byte@(Pointer@(midi) + i), 2)&lt;br /&gt;
  Next&lt;br /&gt;
  Print&lt;br /&gt;
  &lt;br /&gt;
 &amp;lt;FONT Color=gray&amp;gt;' ''Salva il file midi dai dati ottenuti:''&amp;lt;/font&amp;gt;&lt;br /&gt;
  fl = Open File.Dir(xmi) &amp;amp;/ File.BaseName(xmi) &amp;amp; &amp;quot;.mid&amp;quot; For Create&lt;br /&gt;
  Write #fl, Pointer@(midi), sz&lt;br /&gt;
  &lt;br /&gt;
  Free(midi)&lt;br /&gt;
  &lt;br /&gt;
 &amp;lt;FONT Color=gray&amp;gt;' ''Apre il file Midi appena creato:''&amp;lt;/font&amp;gt;&lt;br /&gt;
  midi = WildMidi_Open(fl.Dir(xmi) &amp;amp;/ fl.Name(xmi))&lt;br /&gt;
  If midi == 0 Then Error.Raise(&amp;quot;Impossibile aprire il file Midi !&amp;quot;)&lt;br /&gt;
  &lt;br /&gt;
 &amp;lt;FONT Color=gray&amp;gt;' ''Ottiene alcune informazioni sul file Midi caricato:''&amp;lt;/font&amp;gt;&lt;br /&gt;
  info = WildMidi_GetInfo(midi)&lt;br /&gt;
  &lt;br /&gt;
  Print &amp;quot;File Midi: &amp;quot;; fl.Dir(xmi) &amp;amp;/ fl.Name(xmi)&lt;br /&gt;
  Print &amp;quot;Durata:    &amp;quot;; &amp;quot;\e[31m&amp;quot;; Time(0, 0, 0, info.total_midi_time)&lt;br /&gt;
  &lt;br /&gt;
 &amp;lt;FONT Color=gray&amp;gt;' ''Infine libera la memoria precedentemente occupata:''&amp;lt;/font&amp;gt;&lt;br /&gt;
  fl.Close&lt;br /&gt;
  WildMidi_Close(midi)&lt;br /&gt;
  WildMidi_Shutdown()&lt;br /&gt;
   &lt;br /&gt;
 End&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Riferimenti=&lt;br /&gt;
* http://manpages.ubuntu.com/manpages/cosmic/man3/WildMidi_ConvertToMidi.3.html&lt;br /&gt;
* http://fileformats.archiveteam.org/wiki/XMI_(Extended_MIDI)&lt;br /&gt;
* http://www.shikadi.net/moddingwiki/XMI_Format&lt;br /&gt;
* http://www.vgmpf.com/Wiki/index.php?title=XMI&lt;/div&gt;</summary>
		<author><name>Vuott</name></author>
	</entry>
	<entry>
		<id>https://www.gambas-it.org/wiki/index.php?title=Ottenere_un_file_WAV_da_un_file_Midi_con_le_funzioni_esterne_del_API_di_WildMidi&amp;diff=42734</id>
		<title>Ottenere un file WAV da un file Midi con le funzioni esterne del API di WildMidi</title>
		<link rel="alternate" type="text/html" href="https://www.gambas-it.org/wiki/index.php?title=Ottenere_un_file_WAV_da_un_file_Midi_con_le_funzioni_esterne_del_API_di_WildMidi&amp;diff=42734"/>
		<updated>2025-10-27T08:45:31Z</updated>

		<summary type="html">&lt;p&gt;Vuott: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Come è noto, non è possibile parlare di una vera e propria ''conversione'' di dati da Midi a formato ''audio''. E' possibile, però, ''ottenere'' un file audio, ad esempio WAV, da dati Midi.&lt;br /&gt;
&lt;br /&gt;
Il presupposto essenziale, per fare ciò, è avere una funzione che ''ricavi'', produca dati audio grezzi dal file Midi, e che ''restituisca'' i dati audio grezzi ricavati, affinché possano essere salvati in un file. Tali dati audio grezzi potranno, così, essere salvati in un file audio di tipo .WAV, avendo, però, l'accortezza di premettere ad essi i dati del ''chunk'' iniziale che contraddistingue i file audio WAV.&lt;br /&gt;
&lt;br /&gt;
Le risorse dell'[http://wildmidi.sourceforge.net/?id=manpages API di WildMidi] consentono di generare un flusso di dati audio corrispondenti ad un file Midi. Faremo uso, dunque, in Gambas delle funzioni esterne della libreria condivisa: &amp;quot;''libWildMidi.so.2.1.0'' &amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Di seguito mostreremo un paio di semplici esempi.&lt;br /&gt;
&lt;br /&gt;
===1° esempio===&lt;br /&gt;
In questo esempio oltre ad utilizzare la libreria di ''WildMidi'', utilizzeremo anche due funzioni esterne della libreria di C per leggere e scrivere in un file.&lt;br /&gt;
 Library &amp;quot;libWildMidi:2.1.0&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;FONT color=gray&amp;gt;' ''WildMidi_Init  (const char *config_file, unsigned short int rate, unsigned short int options):''&lt;br /&gt;
 ' ''Intializes &amp;quot;libWildMidi&amp;quot; in preparation for playback.''&amp;lt;/font&amp;gt;&lt;br /&gt;
 Private Extern WildMidi_Init(config_file As String, rate As Integer, options As Short) As Integer&lt;br /&gt;
  &lt;br /&gt;
 &amp;lt;FONT color=gray&amp;gt;' ''midi *WildMidi_Open (const char *midifile):''&lt;br /&gt;
 ' ''Open  a MIDI file pointed to by midifile for processing. This file must be in standard midi format.''&lt;br /&gt;
 ' ''It returns a handle for the midi file opened. This handle is used by most functions in libWildMidi to identify which midi file we are refering to.''&amp;lt;/font&amp;gt;&lt;br /&gt;
 Private Extern WildMidi_Open(midifile As String) As Pointer&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;FONT color=gray&amp;gt;' ''int  WildMidi_GetOutput  (midi *handle, char *buffer, unsigned long insize)''&lt;br /&gt;
 ' ''Places size bytes of audio data from a  handle,  previously  opened  by WildMidi_Open() or WildMidi_OpenBuffer(), into a buffer pointer to by buffer.''&lt;br /&gt;
 ' ''Buffer must be atleast size bytes, with size being a multiple of 4 as the data is stored in 16 bit interleaved stereo format.''&amp;lt;/font&amp;gt;&lt;br /&gt;
 Private Extern WildMidi_GetOutput(handle As Pointer, buffer As Pointer, insize As Long) As Integer&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;FONT color=gray&amp;gt;' ''int WildMidi_Close (midi *handle)''&lt;br /&gt;
 ' ''Finish processing MIDI data or file. &amp;quot;handle&amp;quot; the indentifier obtained from opening a midi file with &amp;quot;WildMidi_Open()&amp;quot;.''&amp;lt;/font&amp;gt;&lt;br /&gt;
 Private Extern WildMidi_Close(handle As Pointer) As Integer&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;FONT color=gray&amp;gt;' ''void WildMidi_Shutdown(void)''&lt;br /&gt;
 ' ''Shuts  down  the wildmidi library, resetting data and freeing up memory used by the library.''&amp;lt;/font&amp;gt;&lt;br /&gt;
 Private Extern WildMidi_Shutdown()&lt;br /&gt;
  &lt;br /&gt;
 &lt;br /&gt;
 Public Sub Main()&lt;br /&gt;
 &lt;br /&gt;
  Dim err, &amp;lt;FONT color=darkorange&amp;gt;quantum&amp;lt;/font&amp;gt; As Integer&lt;br /&gt;
  Dim wav As File&lt;br /&gt;
  Dim midi, &amp;lt;FONT color=blue&amp;gt;buffer&amp;lt;/font&amp;gt; As Pointer&lt;br /&gt;
  Dim frequenza As Integer = 44100&lt;br /&gt;
  Dim fileMIDI, temporaneo As String&lt;br /&gt;
  &lt;br /&gt;
  fileMIDI = &amp;quot;&amp;lt;FONT color=darkgreen&amp;gt;''/percorso/del/file.mid''&amp;lt;/font&amp;gt;&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
  temporaneo = Temp(&amp;quot;mid&amp;quot;)&lt;br /&gt;
   &lt;br /&gt;
 &amp;lt;FONT color=gray&amp;gt;' ''Apre in scrittura il file iniziale temporaneo contenente i soli dati audio grezzi ricavati dal file Midi:''&amp;lt;/font&amp;gt;&lt;br /&gt;
  wav = Open temporaneo For Create&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;FONT color=gray&amp;gt;' ''Inizializza la libreria di &amp;quot;WildMidi&amp;quot;.&lt;br /&gt;
 ' ''Il primo parametro richiama il file che contiene la configurazione degli strumenti musicali che sarà utilizzata dalla libreria.''&lt;br /&gt;
 ' ''Il file di configurazione potrà essere: &amp;quot;/etc/timidity/freepats.cfg&amp;quot; o &amp;quot;/etc/wildmidi/wildmidi.cfg&amp;quot;, oppure &amp;quot;/etc/timidity/eawpats.cfg&amp;quot;:''&amp;lt;/font&amp;gt;&lt;br /&gt;
  err = WildMidi_Init(&amp;quot;/etc/timidity/freepats.cfg&amp;quot;, frequenza, 0)&lt;br /&gt;
  If err &amp;lt; 0 Then Error.Raise(&amp;quot;Errore nell'inizializzazione dell'interfaccia libWildMidi !&amp;quot;)&lt;br /&gt;
    &lt;br /&gt;
 &amp;lt;FONT color=gray&amp;gt;' ''Apre il file Midi, dal quale si dovrà ottenere un file WAV:''&amp;lt;/font&amp;gt;&lt;br /&gt;
  midi = WildMidi_Open(fileMIDI)&lt;br /&gt;
  If midi == 0 Then Error.Raise(&amp;quot;Impossibile aprire il file Midi !&amp;quot;)&lt;br /&gt;
  &lt;br /&gt;
 &amp;lt;FONT color=gray&amp;gt;' ''Alloca un'area di memoria che sarà puntata da una variabile di tipo &amp;quot;Puntatore&amp;quot;:''&amp;lt;/font&amp;gt;&lt;br /&gt;
  &amp;lt;FONT color=blue&amp;gt;buffer&amp;lt;/font&amp;gt; = Alloc(SizeOf(gb.Byte), &amp;lt;FONT color=maroon&amp;gt;128&amp;lt;/font&amp;gt;)&lt;br /&gt;
 &lt;br /&gt;
  Repeat&lt;br /&gt;
  &lt;br /&gt;
 &amp;lt;FONT color=gray&amp;gt;' ''Ad ogni giro viene riempita l'area allocata con un certo numero di dati Midi convertiti in dati audio da scrivere successivamente nel file WAV.''&lt;br /&gt;
 ' ''(In particolare, ad Alsa sarà passata la variabile di tipo &amp;quot;puntatore&amp;quot; - qui chiamata &amp;quot;buffer&amp;quot; - che ora viene riempita di dati):&amp;lt;/font&amp;gt;&lt;br /&gt;
    &amp;lt;FONT color=darkorange&amp;gt;quantum&amp;lt;/font&amp;gt; = WildMidi_GetOutput(midi, &amp;lt;FONT color=blue&amp;gt;buffer&amp;lt;/font&amp;gt;, &amp;lt;FONT color=maroon&amp;gt;128&amp;lt;/font&amp;gt;)&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;FONT color=gray&amp;gt;' ''Viene scritta nel file, puntato dalla varibile &amp;quot;wav&amp;quot;, una sola quantità di dati per ogni giro, presenti nell'area di memoria allocata e puntata dalla variabile &amp;quot;buffer&amp;quot;, pari al valore contenuto dalla variabile &amp;quot;quantum&amp;quot;:''&amp;lt;/font&amp;gt;&lt;br /&gt;
    write #wav, &amp;lt;FONT color=blue&amp;gt;buffer&amp;lt;/font&amp;gt;, &amp;lt;FONT color=darkorange&amp;gt;quantum&amp;lt;/font&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
  Until &amp;lt;FONT color=darkorange&amp;gt;quantum&amp;lt;/font&amp;gt; == 0&lt;br /&gt;
 &lt;br /&gt;
  Free(&amp;lt;FONT color=blue&amp;gt;buffer&amp;lt;/font&amp;gt;)&lt;br /&gt;
  wav.Close&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;FONT color=gray&amp;gt;' ''A questo punto, nel file iniziale temporaneo vi sono soltanto i dati grezzi audio utili per creare un vero file WAV''&lt;br /&gt;
 ' ''Ora bisognerà aggiungere a tali dati grezzi un blocco iniziale per identificare e caratterizzare il file WAV finale.''&lt;br /&gt;
 ' ''Procederemo a questa operazione in una sotto-procedura specifica a parte che ora andiamo a richiamare:''&amp;lt;/font&amp;gt;&lt;br /&gt;
  generaWAV(temporaneo)&lt;br /&gt;
  &lt;br /&gt;
  Print &amp;quot;\e[31mCreazione del file audio WAV terminata !&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;FONT color=gray&amp;gt;' ''Chiude l'elaborazione dei dati Midi da parte di &amp;quot;WildMidi&amp;quot;:''&amp;lt;/font&amp;gt;&lt;br /&gt;
  err = WildMidi_Close(midi)&lt;br /&gt;
  If err &amp;lt; 0 Then Error.Raise(&amp;quot;Errore nella chiusura del processo dei dati Midi !&amp;quot;)&lt;br /&gt;
    &lt;br /&gt;
 &amp;lt;FONT color=gray&amp;gt;' ''Chiude la libreria di &amp;quot;WildMidi&amp;quot;:''&amp;lt;/font&amp;gt;&lt;br /&gt;
  WildMidi_Shutdown()&lt;br /&gt;
  &lt;br /&gt;
 End&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 Private Procedure generaWAV(fltemp As String)&lt;br /&gt;
 &lt;br /&gt;
  Dim Ipw, dim_file, m8 As Integer&lt;br /&gt;
  Dim j As Byte&lt;br /&gt;
  Dim bb As New Byte[]&lt;br /&gt;
  Dim little_endian, primo_chunk, $prewav As String&lt;br /&gt;
  &lt;br /&gt;
 &amp;lt;FONT color=gray&amp;gt;' ''Si procede finalmente a creare il file WAV finale.&lt;br /&gt;
 ' ''La procedura è abbastanza complessa: si tratta di creare, come già detto sopra, il blocco iniziale distintivo del formato audio WAV, e di unirlo successivamente ai dati audio grezzi, ormai ripuliti dagli eventuali valori zero iniziali.''&amp;lt;/font&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;FONT color=gray&amp;gt;' ''Ricaviamo la dimensione del file temporaneo contenente i dati audio grezzi:''&amp;lt;/font&amp;gt;&lt;br /&gt;
  Ipw = Stat(fltemp).Size&lt;br /&gt;
  &lt;br /&gt;
 &amp;lt;FONT color=gray&amp;gt;' ''Ricaviamo la dimensione totale del futuro file. Essa sarà, dunque, data dai byte del primo blocco (&amp;quot;Chunk&amp;quot;) - contenente le informazioni sul file WAV ed i dati che lo distinguono ed identificano - pari a 44 byte più i dati audio grezzi del file temporaneo, i quali così vengono a formare il secondo blocco di dati del futuro file WAV.''&amp;lt;/font&amp;gt;&lt;br /&gt;
  dim_file = 44 + Ipw&lt;br /&gt;
  &lt;br /&gt;
 &amp;lt;FONT color=gray&amp;gt;' ''Ricaviamo il formato &amp;quot;little-endian&amp;quot; dellla dimensione del file meno gli otto byte iniziali. Il risultato sarà inserito dal 5° all'8° byte:''&amp;lt;/font&amp;gt;&lt;br /&gt;
  m8 = dim_file - 8&lt;br /&gt;
    &lt;br /&gt;
  little_endian = Hex(((m8 \ CLong(2 ^ 24)) And &amp;amp;FF) Or ((m8 * CLong(2 ^ 8)) And &amp;amp;FF0000) Or ((m8 \ CLong(2 ^ 8)) And &amp;amp;FF00&amp;amp;) Or ((m8 * CLong(2 ^ 24)) And &amp;amp;FF000000), 8)&lt;br /&gt;
    &lt;br /&gt;
  For j = 0 To 3&lt;br /&gt;
    bb.Push(CByte(Val(&amp;quot;&amp;amp;&amp;quot; &amp;amp; Mid(little_endian, (2 * j) + 1, 2))))&lt;br /&gt;
  Next&lt;br /&gt;
  &lt;br /&gt;
 &amp;lt;FONT color=gray&amp;gt;' ''Quindi ricaviamo il formato &amp;quot;little-endian&amp;quot; della dimensione del file temporaneo dei dati audio grezzi.''&lt;br /&gt;
 ' ''Il risultato sarà inserito alla fine del primo blocco (chunk):''&amp;lt;/font&amp;gt;&lt;br /&gt;
  little_endian = Hex(((Ipw \ CLong(2 ^ 24)) And &amp;amp;FF) Or ((Ipw * CLong(2 ^ 8)) And &amp;amp;FF0000) Or ((Ipw \ CLong(2 ^ 8)) And &amp;amp;FF00&amp;amp;) Or ((Ipw * CLong(2 ^ 24)) And &amp;amp;FF000000), 8)&lt;br /&gt;
  &lt;br /&gt;
  For j = 0 To 3&lt;br /&gt;
    bb.Push(CByte(Val(&amp;quot;&amp;amp;&amp;quot; &amp;amp; Mid(little_endian, (2 * j) + 1, 2))))&lt;br /&gt;
  Next&lt;br /&gt;
  &lt;br /&gt;
 &amp;lt;FONT color=gray&amp;gt;' ''Impostiamo i dati appartenenti al primo blocco del futuro file WAV&amp;quot;:''&amp;lt;/font&amp;gt;&lt;br /&gt;
  primo_chunk = &amp;quot;RIFF&amp;quot; &amp;amp; bb.ToString(0, 4) &amp;amp; &amp;quot;WAVEfmt &amp;quot; &amp;amp; Chr(&amp;amp;10) &amp;amp; Chr(&amp;amp;00) &amp;amp; Chr(&amp;amp;00) &amp;amp; Chr(&amp;amp;00) &amp;amp;&lt;br /&gt;
                Chr(&amp;amp;01) &amp;amp; Chr(&amp;amp;00) &amp;amp; Chr(&amp;amp;02) &amp;amp; Chr(&amp;amp;00) &amp;amp; Chr(&amp;amp;44) &amp;amp; Chr(&amp;amp;AC) &amp;amp; Chr(&amp;amp;00) &amp;amp; Chr(&amp;amp;00) &amp;amp; Chr(&amp;amp;10) &amp;amp;&lt;br /&gt;
                Chr(&amp;amp;B1) &amp;amp; Chr(&amp;amp;02) &amp;amp; Chr(&amp;amp;00) &amp;amp; Chr(&amp;amp;04) &amp;amp; Chr(&amp;amp;00) &amp;amp; Chr(&amp;amp;10) &amp;amp; Chr(&amp;amp;00) &amp;amp; &amp;quot;data&amp;quot; &amp;amp; bb.ToString(4, 4)&lt;br /&gt;
  &lt;br /&gt;
 &amp;lt;FONT color=gray&amp;gt;' ''Carichiamo i dati audio grezzi del file temporaneo&amp;quot;:''&amp;lt;/font&amp;gt;&lt;br /&gt;
  $prewav = File.Load(fltemp)&lt;br /&gt;
  &lt;br /&gt;
 &amp;lt;FONT color=gray&amp;gt;' ''Ecco, dunque, creiamo il file WAV finale unendo il primo blocco dei dati informativi e caratterizzanti il file WAV con i dati audio grezzi del file temporaneo&amp;quot;:''&amp;lt;/font&amp;gt;&lt;br /&gt;
  File.Save(&amp;quot;&amp;lt;FONT color=darkgreen&amp;gt;''/percorso/del/definitivo/file.wav''&amp;lt;/font&amp;gt;&amp;quot;, primo_chunk &amp;amp; $prewav)&lt;br /&gt;
 &lt;br /&gt;
 End&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===2° esempio===&lt;br /&gt;
In quest'altro esempio, mentre viene effettuata la registrazione dei dati audio ottenuti dal Midi, contemporaneamente si avrà l'ascolto dell'audio che si va registrando. Si utilizzerà sia la libreria &amp;quot;''libWildMidi''&amp;quot; che la libreria di Alsa &amp;quot;''libasound''&amp;quot;.&lt;br /&gt;
&amp;lt;BR&amp;gt;Inoltre, per l'accumulo dei dati audio (che saranno così registrati ed anche eseguiti) ottenuti dai dati Midi, si utilizzerà un vettore di tipo ''Byte[]'', anziché una variabile di tipo ''Puntatore'' come nell'esempio precedente:&lt;br /&gt;
 Library &amp;quot;libWildMidi:2.1.0&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;FONT color=gray&amp;gt;' ''WildMidi_Init  (const char *config_file, unsigned short int rate, unsigned short int options):''&lt;br /&gt;
 ' ''Intializes &amp;quot;libWildMidi&amp;quot; in preparation for playback.''&amp;lt;/font&amp;gt;&lt;br /&gt;
 Private Extern WildMidi_Init(config_file As String, rate As Integer, options As Short) As Integer&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;FONT color=gray&amp;gt;' ''int WildMidi_MasterVolume (unsigned char master_volume)''&lt;br /&gt;
 ' ''Sets the overall audio level of the library.''&amp;lt;/font&amp;gt;&lt;br /&gt;
 Private Extern WildMidi_MasterVolume(master_volume As Byte) as Integer&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;FONT color=gray&amp;gt;' ''midi *WildMidi_Open (const char *midifile):''&lt;br /&gt;
 ' ''Open  a MIDI file pointed to by midifile for processing. This file must be in standard midi format.''&lt;br /&gt;
 ' ''It returns a handle for the midi file opened. This handle is used by most functions in libWildMidi to identify which midi file we are refering to.''&amp;lt;/font&amp;gt;&lt;br /&gt;
 Private Extern WildMidi_Open(midifile As String) As Pointer&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;FONT color=gray&amp;gt;' ''int  WildMidi_GetOutput  (midi *handle, char *buffer, unsigned long insize)''&lt;br /&gt;
 ' ''Places size bytes of audio data from a  handle,  previously  opened  by WildMidi_Open() or WildMidi_OpenBuffer(), into a buffer pointer to by buffer.''&lt;br /&gt;
 ' ''Buffer must be atleast size bytes, with size being a multiple of 4 as the data is stored in 16 bit interleaved stereo format.''&amp;lt;/font&amp;gt;&lt;br /&gt;
 Private Extern WildMidi_GetOutput(handle As Pointer, buffer As Pointer, insize As Long) As Integer&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;FONT color=gray&amp;gt;' ''int WildMidi_Close (midi *handle)''&lt;br /&gt;
 ' ''Finish processing MIDI data or file. &amp;quot;handle&amp;quot; the indentifier obtained from opening a midi file with &amp;quot;WildMidi_Open()&amp;quot;.''&amp;lt;/font&amp;gt;&lt;br /&gt;
 Private Extern WildMidi_Close(handle As Pointer) As Integer&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;FONT color=gray&amp;gt;' ''void WildMidi_Shutdown(void)''&lt;br /&gt;
 ' ''Shuts  down  the wildmidi library, resetting data and freeing up memory used by the library.''&amp;lt;/font&amp;gt;&lt;br /&gt;
 Private Extern WildMidi_Shutdown()&lt;br /&gt;
  &lt;br /&gt;
 &lt;br /&gt;
 Library &amp;quot;libasound:2&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;FONT color=gray&amp;gt;' ''int snd_pcm_open(snd_pcm_t **pcm, const char *name, snd_pcm_stream_t stream, int mode)''&lt;br /&gt;
 ' ''Opens a PCM.''&amp;lt;/font&amp;gt;&lt;br /&gt;
 Private Extern snd_pcm_open(pcmP As Pointer, nome As String, stream As Integer, mode As Integer) As Integer&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;FONT color=gray&amp;gt;' ''const char * snd_strerror (int errnum)''&lt;br /&gt;
 ' ''Returns the message for an error code.''&amp;lt;/font&amp;gt;&lt;br /&gt;
 Private Extern snd_strerror(errnum As Integer) As String&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;FONT color=gray&amp;gt;' ''int snd_pcm_set_params (snd_pcm_t *pcm, snd_pcm_format_t format, snd_pcm_access_t access, unsigned int canali, unsigned int rate, int soft_resample, unsigned int latency)''&lt;br /&gt;
 ' ''Set the hardware and software parameters in a simple way.''&amp;lt;/font&amp;gt;&lt;br /&gt;
 Private Extern snd_pcm_set_params(pcmP As Pointer, formatB As Byte, accessB As Byte, canali As Integer, rate As Integer, soft_resample As Integer, latency As Integer) As Integer&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;FONT color=gray&amp;gt;' ''snd_pcm_sframes_t snd_pcm_writei(snd_pcm_t *pcm, const void *buffer, snd_pcm_uframes_t size)''&lt;br /&gt;
 ' ''Write interleaved frames to a PCM.''&amp;lt;/font&amp;gt;&lt;br /&gt;
 Private Extern snd_pcm_writei(pcmP As Pointer, buffP As Byte[], uframes As Long) As Integer&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;FONT color=gray&amp;gt;' ''int snd_pcm_close(snd_pcm_t *pcm)''&lt;br /&gt;
 ' ''Close PCM handle.''&amp;lt;/font&amp;gt;&lt;br /&gt;
 Private Extern snd_pcm_close(pcmP As Pointer) As Integer&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 Public Sub Main()&lt;br /&gt;
 &lt;br /&gt;
  Dim err, somma As Integer&lt;br /&gt;
  Dim midi, handle As Pointer&lt;br /&gt;
  Dim frequenza As Integer = 44100&lt;br /&gt;
  Dim buf As New Byte[128]&lt;br /&gt;
  Dim wave As New Byte[]&lt;br /&gt;
  Dim fileMid As String&lt;br /&gt;
  &lt;br /&gt;
  fileMid = &amp;quot;&amp;lt;FONT color=darkgreen&amp;gt;''/percorso/del/file.mid''&amp;lt;/font&amp;gt;&amp;quot;&lt;br /&gt;
  &lt;br /&gt;
 &amp;lt;FONT color=gray&amp;gt;' ''Va ad inizializzare l'interfaccia PCM di Alsa:''&amp;lt;/font&amp;gt;&lt;br /&gt;
  handle = inizializzaAlsa(frequenza)&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;FONT color=gray&amp;gt;' ''Inizializza la libreria di &amp;quot;WildMidi&amp;quot;.&lt;br /&gt;
 ' ''Il primo parametro richiama il file che contiene la configurazione degli strumenti musicali che sarà utilizzata dalla libreria.''&lt;br /&gt;
 ' ''Il file di configurazione potrà essere: &amp;quot;/etc/timidity/freepats.cfg&amp;quot; o &amp;quot;/etc/wildmidi/wildmidi.cfg&amp;quot;, oppure &amp;quot;/etc/timidity/eawpats.cfg&amp;quot;:''&amp;lt;/font&amp;gt;&lt;br /&gt;
  err = WildMidi_Init(&amp;quot;/etc/timidity/freepats.cfg&amp;quot;, frequenza, 0)&lt;br /&gt;
  If err &amp;lt; 0 Then Error.Raise(&amp;quot;Errore nell'inizializzazione dell'interfaccia libWildMidi !&amp;quot;)&lt;br /&gt;
 &lt;br /&gt;
  err = WildMidi_MasterVolume(100)&lt;br /&gt;
  If err &amp;lt; 0 Then Error.Raise(&amp;quot;Errore nell'impostazione del Volume Generale !&amp;quot;)&lt;br /&gt;
  &lt;br /&gt;
  midi = WildMidi_Open(fileMid)&lt;br /&gt;
  If midi == 0 Then Error.Raise(&amp;quot;Impossibile aprire il file Midi !&amp;quot;)&lt;br /&gt;
 &lt;br /&gt;
  Print &amp;quot;Esecuzione del brano Midi: &amp;quot;; File.Name(fileMid); &amp;quot;\n&amp;quot;&lt;br /&gt;
  &lt;br /&gt;
  Repeat&lt;br /&gt;
    err = WildMidi_GetOutput(midi, buf.Data, 128)&lt;br /&gt;
    &lt;br /&gt;
 &amp;lt;FONT color=gray&amp;gt;' ''Ad ogni ciclo aggiunge nel vettore &amp;quot;wave&amp;quot; i dati presenti nel vettore &amp;quot;buf&amp;quot;:''&amp;lt;/font&amp;gt;&lt;br /&gt;
    wave.Insert(buf)&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;FONT color=gray&amp;gt;' ''Ad ogni ciclo vengono scritti i dati audio nel sub-sistema PCM di ALsa, per consentire l'esecuzione audio di tali dati:''&amp;lt;/font&amp;gt;&lt;br /&gt;
    snd_pcm_writei(handle, buf, 128 / SizeOf(gb.Integer))&lt;br /&gt;
     &lt;br /&gt;
 &amp;lt;FONT color=gray&amp;gt;' ''Mostra il tempo trascorso dall'inizio dell'esecuzione del file wav:''&amp;lt;/font&amp;gt;&lt;br /&gt;
    somma += (buf.Count \ SizeOf(gb.Integer))&lt;br /&gt;
    Write &amp;quot;\rTempo trascorso: &amp;quot; &amp;amp; Time(0, 0, 0, (somma / frequenza) * 1000)&lt;br /&gt;
 &lt;br /&gt;
  Until err == 0&lt;br /&gt;
 &lt;br /&gt;
  Print &amp;quot;\n\nFine esecuzione audio !&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
  generaWAV(wave, fileMid)&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;FONT color=gray&amp;gt;' ''Va in chiusura:''&amp;lt;/font&amp;gt;&lt;br /&gt;
  err = WildMidi_Close(midi)&lt;br /&gt;
  If err &amp;lt; 0 Then Error.Raise(&amp;quot;Errore nella chiusura del processo dei dati Midi !&amp;quot;)&lt;br /&gt;
    &lt;br /&gt;
  WildMidi_Shutdown()&lt;br /&gt;
  snd_pcm_close(handle)&lt;br /&gt;
  &lt;br /&gt;
  Print &amp;quot;Librerie chiuse !&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
  Print &amp;quot;************************\n\n&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 End&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 Private Function inizializzaAlsa(frequenza As Integer) As Pointer&lt;br /&gt;
 &lt;br /&gt;
  Dim err As Integer&lt;br /&gt;
  Dim handle As Pointer&lt;br /&gt;
  Dim nomen As String = &amp;quot;default&amp;quot;&lt;br /&gt;
  Dim SND_PCM_STREAM_PLAYBACK As Byte = 0&lt;br /&gt;
  Dim SND_PCM_ACCESS_RW_INTERLEAVED As Byte = 3&lt;br /&gt;
  Dim canali As Byte = 2&lt;br /&gt;
  &lt;br /&gt;
 &amp;lt;FONT color=gray&amp;gt;' ''Apre il sub-sistema PCM di Alsa creando un apposito &amp;quot;handle&amp;quot;:''&amp;lt;/font&amp;gt;&lt;br /&gt;
  err = snd_pcm_open(VarPtr(handle), nomen, SND_PCM_STREAM_PLAYBACK, 0)&lt;br /&gt;
  If err &amp;lt; 0 Then Error.Raise(&amp;quot;Playback open error: &amp;quot; &amp;amp; snd_strerror(err))&lt;br /&gt;
  &lt;br /&gt;
 &amp;lt;FONT color=gray&amp;gt;' ''Imposta i parametri hardware/software dell'interfaccia PCM di ALsa:''&amp;lt;/font&amp;gt;&lt;br /&gt;
  err = snd_pcm_set_params(handle, 2, SND_PCM_ACCESS_RW_INTERLEAVED, canali, frequenza, 1, 500000)&lt;br /&gt;
  If err &amp;lt; 0 Then Error.Raise(&amp;quot;Playback open error: &amp;quot; &amp;amp; snd_strerror(err))&lt;br /&gt;
  &lt;br /&gt;
  Return handle&lt;br /&gt;
   &lt;br /&gt;
 End&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 Private Procedure generaWAV(wavArr As Byte[], percorsoFileMID As String)  &amp;lt;FONT color=gray&amp;gt;' ''Procedura per generare il file WAV''&amp;lt;/font&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
  Dim s1, s2, nomeFileWAV As String&lt;br /&gt;
  &lt;br /&gt;
  s1 = &amp;lt;FONT color=#B22222&amp;gt;creaChunkIniziale(wavArr)&amp;lt;/font&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
  s2 = wavArr.ToString(0, wavArr.Max)&lt;br /&gt;
     &lt;br /&gt;
  Print &amp;quot;\nDimensione dati grezzi audio = &amp;quot;; Len(s2); &amp;quot; byte&amp;quot;&lt;br /&gt;
  Print &amp;quot;Dimensione file audio = &amp;quot;; Len(s2) + 40; &amp;quot; byte&amp;quot;&lt;br /&gt;
  Print &amp;quot;Durata del brano audio = &amp;quot;; Format(((Len(s2) * 8) / 705600) / 2, &amp;quot;#.00&amp;quot;); &amp;quot; sec.\n&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
  nomeFileWAV = File.BaseName(percorsoFileMID)&lt;br /&gt;
     &lt;br /&gt;
  File.Save(&amp;quot;/tmp&amp;quot; &amp;amp;/ nomeFileWAV &amp;amp; &amp;quot;.wav&amp;quot;, s1 &amp;amp; s2)&lt;br /&gt;
          &lt;br /&gt;
  Print &amp;quot;Termine creazione del file audio: &amp;quot;; nomeFileWAV; &amp;quot;.wav&amp;quot;&lt;br /&gt;
   &lt;br /&gt;
 End&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 Private Function creaChunkIniziale(wavArr As Byte[]) As String  &amp;lt;FONT color=gray&amp;gt;' ''Procedura per generare il chunk iniziale del file WAV finale''&amp;lt;/font&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
  Dim dim_prewav, totale_dimensione, meno_otto As Integer&lt;br /&gt;
  Dim chunk, cvr As String&lt;br /&gt;
  Dim bb As New Byte[]&lt;br /&gt;
  Dim b As Byte&lt;br /&gt;
    &lt;br /&gt;
  dim_prewav = wavArr.Count&lt;br /&gt;
  &lt;br /&gt;
  totale_dimensione = 44 + dim_prewav&lt;br /&gt;
 &lt;br /&gt;
  meno_otto = totale_dimensione - 8&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;FONT color=gray&amp;gt;' ''Si ricava il formato &amp;quot;little-Endian&amp;quot; del valore di &amp;quot;meno_otto&amp;quot;:''&amp;lt;/font&amp;gt;&lt;br /&gt;
  cvr = Hex(((meno_otto \ CLong(2 ^ 24)) And &amp;amp;FF) Or ((meno_otto * CLong(2 ^ 8)) And &amp;amp;FF0000) Or ((meno_otto \ CLong(2 ^ 8)) And &amp;amp;FF00&amp;amp;) Or ((meno_otto * CLong(2 ^ 24)) And &amp;amp;FF000000), 8)&lt;br /&gt;
  &lt;br /&gt;
  For b = 0 To 3&lt;br /&gt;
    bb.Push(CByte(Val(&amp;quot;&amp;amp;&amp;quot; &amp;amp; Mid(cvr, (2 * b) + 1, 2))))&lt;br /&gt;
  Next&lt;br /&gt;
  &lt;br /&gt;
  cvr = Hex(((dim_prewav \ CLong(2 ^ 24)) And &amp;amp;FF) Or ((dim_prewav * CLong(2 ^ 8)) And &amp;amp;FF0000) Or ((dim_prewav \ CLong(2 ^ 8)) And &amp;amp;FF00&amp;amp;) Or ((dim_prewav * CLong(2 ^ 24)) And &amp;amp;FF000000), 8)&lt;br /&gt;
 &lt;br /&gt;
  For b = 0 To 3&lt;br /&gt;
    bb.Push(CByte(Val(&amp;quot;&amp;amp;&amp;quot; &amp;amp; Mid(cvr, (2 * b) + 1, 2))))&lt;br /&gt;
  Next&lt;br /&gt;
  &lt;br /&gt;
  chunk = &amp;quot;RIFF&amp;quot; &amp;amp; bb.ToString(0, 4) &amp;amp; &amp;quot;WAVEfmt &amp;quot; &amp;amp; Chr(&amp;amp;10) &amp;amp; Chr(&amp;amp;00) &amp;amp; Chr(&amp;amp;00) &amp;amp; Chr(&amp;amp;00) &amp;amp;&lt;br /&gt;
          Chr(&amp;amp;01) &amp;amp; Chr(&amp;amp;00) &amp;amp; Chr(&amp;amp;02) &amp;amp; Chr(&amp;amp;00) &amp;amp; Chr(&amp;amp;44) &amp;amp; Chr(&amp;amp;AC) &amp;amp; Chr(&amp;amp;00) &amp;amp; Chr(&amp;amp;00) &amp;amp; Chr(&amp;amp;10) &amp;amp;&lt;br /&gt;
          Chr(&amp;amp;B1) &amp;amp; Chr(&amp;amp;02) &amp;amp; Chr(&amp;amp;00) &amp;amp; Chr(&amp;amp;04) &amp;amp; Chr(&amp;amp;00) &amp;amp; Chr(&amp;amp;10) &amp;amp; Chr(&amp;amp;00) &amp;amp; &amp;quot;data&amp;quot; &amp;amp; bb.ToString(4, 4)&lt;br /&gt;
  &lt;br /&gt;
  Return chunk&lt;br /&gt;
  &lt;br /&gt;
 End&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Riferimenti=&lt;br /&gt;
* https://natonelbronx.wordpress.com/2007/07/12/ascoltare-midi-su-linux-debianubuntu/&lt;/div&gt;</summary>
		<author><name>Vuott</name></author>
	</entry>
	<entry>
		<id>https://www.gambas-it.org/wiki/index.php?title=Ottenere_un_file_WAV_da_un_file_Midi_con_le_funzioni_esterne_del_API_di_WildMidi&amp;diff=42733</id>
		<title>Ottenere un file WAV da un file Midi con le funzioni esterne del API di WildMidi</title>
		<link rel="alternate" type="text/html" href="https://www.gambas-it.org/wiki/index.php?title=Ottenere_un_file_WAV_da_un_file_Midi_con_le_funzioni_esterne_del_API_di_WildMidi&amp;diff=42733"/>
		<updated>2025-10-27T08:44:28Z</updated>

		<summary type="html">&lt;p&gt;Vuott: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Come è noto, non è possibile parlare di una vera e propria ''conversione'' di dati da Midi a formato ''audio''. E' possibile, però, ''ottenere'' un file audio, ad esempio WAV, da dati Midi.&lt;br /&gt;
&lt;br /&gt;
Il presupposto essenziale, per fare ciò, è avere una funzione che ''ricavi'', produca dati audio grezzi dal file Midi, e che ''restituisca'' i dati audio grezzi ricavati, affinché possano essere salvati in un file. Tali dati audio grezzi potranno, così, essere salvati in un file audio di tipo .WAV, avendo, però, l'accortezza di premettere ad essi i dati del ''chunk'' iniziale che contraddistingue i file audio WAV.&lt;br /&gt;
&lt;br /&gt;
Le risorse dell'[http://wildmidi.sourceforge.net/?id=manpages API di WildMidi] consentono di generare un flusso di dati audio corrispondenti ad un file Midi. Faremo uso, dunque, in Gambas delle funzioni esterne della libreria condivisa: &amp;quot;''libWildMidi.so.2.1.0'' &amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Di seguito mostreremo un paio di semplici esempi.&lt;br /&gt;
&lt;br /&gt;
===1° esempio===&lt;br /&gt;
In questo esempio oltre ad utilizzare la libreria di ''WildMidi'', utilizzeremo anche due funzioni esterne della libreria di C per leggere e scrivere in un file.&lt;br /&gt;
 Library &amp;quot;libWildMidi:2.1.0&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;FONT color=gray&amp;gt;' ''WildMidi_Init  (const char *config_file, unsigned short int rate, unsigned short int options):''&lt;br /&gt;
 ' ''Intializes &amp;quot;libWildMidi&amp;quot; in preparation for playback.''&amp;lt;/font&amp;gt;&lt;br /&gt;
 Private Extern WildMidi_Init(config_file As String, rate As Integer, options As Short) As Integer&lt;br /&gt;
  &lt;br /&gt;
 &amp;lt;FONT color=gray&amp;gt;' ''midi *WildMidi_Open (const char *midifile):''&lt;br /&gt;
 ' ''Open  a MIDI file pointed to by midifile for processing. This file must be in standard midi format.''&lt;br /&gt;
 ' ''It returns a handle for the midi file opened. This handle is used by most functions in libWildMidi to identify which midi file we are refering to.''&amp;lt;/font&amp;gt;&lt;br /&gt;
 Private Extern WildMidi_Open(midifile As String) As Pointer&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;FONT color=gray&amp;gt;' ''int  WildMidi_GetOutput  (midi *handle, char *buffer, unsigned long insize)''&lt;br /&gt;
 ' ''Places size bytes of audio data from a  handle,  previously  opened  by WildMidi_Open() or WildMidi_OpenBuffer(), into a buffer pointer to by buffer.''&lt;br /&gt;
 ' ''Buffer must be atleast size bytes, with size being a multiple of 4 as the data is stored in 16 bit interleaved stereo format.''&amp;lt;/font&amp;gt;&lt;br /&gt;
 Private Extern WildMidi_GetOutput(handle As Pointer, buffer As Pointer, insize As Long) As Integer&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;FONT color=gray&amp;gt;' ''int WildMidi_Close (midi *handle)''&lt;br /&gt;
 ' ''Finish processing MIDI data or file. &amp;quot;handle&amp;quot; the indentifier obtained from opening a midi file with &amp;quot;WildMidi_Open()&amp;quot;.''&amp;lt;/font&amp;gt;&lt;br /&gt;
 Private Extern WildMidi_Close(handle As Pointer) As Integer&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;FONT color=gray&amp;gt;' ''void WildMidi_Shutdown(void)''&lt;br /&gt;
 ' ''Shuts  down  the wildmidi library, resetting data and freeing up memory used by the library.''&amp;lt;/font&amp;gt;&lt;br /&gt;
 Private Extern WildMidi_Shutdown()&lt;br /&gt;
  &lt;br /&gt;
 &lt;br /&gt;
 Public Sub Main()&lt;br /&gt;
 &lt;br /&gt;
  Dim err, &amp;lt;FONT color=darkorange&amp;gt;quantum&amp;lt;/font&amp;gt; As Integer&lt;br /&gt;
  Dim wav As File&lt;br /&gt;
  Dim midi, &amp;lt;FONT color=blue&amp;gt;buffer&amp;lt;/font&amp;gt; As Pointer&lt;br /&gt;
  Dim frequenza As Integer = 44100&lt;br /&gt;
  Dim fileMIDI, temporaneo As String&lt;br /&gt;
  &lt;br /&gt;
  fileMIDI = &amp;quot;&amp;lt;FONT color=darkgreen&amp;gt;''/percorso/del/file.mid''&amp;lt;/font&amp;gt;&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
  temporaneo = Temp(&amp;quot;mid&amp;quot;)&lt;br /&gt;
   &lt;br /&gt;
 &amp;lt;FONT color=gray&amp;gt;' ''Apre in scrittura il file iniziale temporaneo contenente i soli dati audio grezzi ricavati dal file Midi:''&amp;lt;/font&amp;gt;&lt;br /&gt;
  wav = Open temporaneo For Create&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;FONT color=gray&amp;gt;' ''Inizializza la libreria di &amp;quot;WildMidi&amp;quot;.&lt;br /&gt;
 ' ''Il primo parametro richiama il file che contiene la configurazione degli strumenti musicali che sarà utilizzata dalla libreria.''&lt;br /&gt;
 ' ''Il file di configurazione potrà essere: &amp;quot;/etc/timidity/freepats.cfg&amp;quot; o &amp;quot;/etc/wildmidi/wildmidi.cfg&amp;quot;, oppure &amp;quot;/etc/timidity/eawpats.cfg&amp;quot;:''&amp;lt;/font&amp;gt;&lt;br /&gt;
  err = WildMidi_Init(&amp;quot;/etc/timidity/freepats.cfg&amp;quot;, frequenza, 0)&lt;br /&gt;
  If err &amp;lt; 0 Then Error.Raise(&amp;quot;Errore nell'inizializzazione dell'interfaccia libWildMidi !&amp;quot;)&lt;br /&gt;
    &lt;br /&gt;
 &amp;lt;FONT color=gray&amp;gt;' ''Apre il file Midi, dal quale si dovrà ottenere un file WAV:''&amp;lt;/font&amp;gt;&lt;br /&gt;
  midi = WildMidi_Open(fileMIDI)&lt;br /&gt;
  If midi == 0 Then Error.Raise(&amp;quot;Impossibile aprire il file Midi !&amp;quot;)&lt;br /&gt;
  &lt;br /&gt;
 &amp;lt;FONT color=gray&amp;gt;' ''Alloca un'area di memoria che sarà puntata da una variabile di tipo &amp;quot;Puntatore&amp;quot;:''&amp;lt;/font&amp;gt;&lt;br /&gt;
  &amp;lt;FONT color=blue&amp;gt;buffer&amp;lt;/font&amp;gt; = Alloc(SizeOf(gb.Byte), &amp;lt;FONT color=maroon&amp;gt;128&amp;lt;/font&amp;gt;)&lt;br /&gt;
 &lt;br /&gt;
  Repeat&lt;br /&gt;
  &lt;br /&gt;
 &amp;lt;FONT color=gray&amp;gt;' ''Ad ogni giro viene riempita l'area allocata con un certo numero di dati Midi convertiti in dati audio da scrivere successivamente nel file WAV.''&lt;br /&gt;
 ' ''(In particolare, ad Alsa sarà passata la variabile di tipo &amp;quot;puntatore&amp;quot; - qui chiamata &amp;quot;buffer&amp;quot; - che ora viene riempita di dati):&amp;lt;/font&amp;gt;&lt;br /&gt;
    &amp;lt;FONT color=darkorange&amp;gt;quantum&amp;lt;/font&amp;gt; = WildMidi_GetOutput(midi, &amp;lt;FONT color=blue&amp;gt;buffer&amp;lt;/font&amp;gt;, &amp;lt;FONT color=maroon&amp;gt;128&amp;lt;/font&amp;gt;)&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;FONT color=gray&amp;gt;' ''Viene scritta nel file, puntato dalla varibile &amp;quot;wav&amp;quot;, una sola quantità di dati per ogni giro, presenti nell'area di memoria allocata e puntata dalla variabile &amp;quot;buffer&amp;quot;, pari al valore contenuto dalla variabile &amp;quot;quantum&amp;quot;:''&amp;lt;/font&amp;gt;&lt;br /&gt;
    write #wav, &amp;lt;FONT color=blue&amp;gt;buffer&amp;lt;/font&amp;gt;, &amp;lt;FONT color=darkorange&amp;gt;quantum&amp;lt;/font&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
  Until &amp;lt;FONT color=darkorange&amp;gt;quantum&amp;lt;/font&amp;gt; == 0&lt;br /&gt;
 &lt;br /&gt;
  Free(&amp;lt;FONT color=blue&amp;gt;buffer&amp;lt;/font&amp;gt;)&lt;br /&gt;
  wav.Close&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;FONT color=gray&amp;gt;' ''A questo punto, nel file iniziale temporaneo vi sono soltanto i dati grezzi audio utili per creare un vero file WAV''&lt;br /&gt;
 ' ''Ora bisognerà aggiungere a tali dati grezzi un blocco iniziale per identificare e caratterizzare il file WAV finale.''&lt;br /&gt;
 ' ''Procederemo a questa operazione in una sotto-procedura specifica a parte che ora andiamo a richiamare:''&amp;lt;/font&amp;gt;&lt;br /&gt;
  generaWAV(temporaneo)&lt;br /&gt;
  &lt;br /&gt;
  Print &amp;quot;\e[31mCreazione del file audio WAV terminata !&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;FONT color=gray&amp;gt;' ''Chiude l'elaborazione dei dati Midi da parte di &amp;quot;WildMidi&amp;quot;:''&amp;lt;/font&amp;gt;&lt;br /&gt;
  err = WildMidi_Close(midi)&lt;br /&gt;
  If err &amp;lt; 0 Then Error.Raise(&amp;quot;Errore nella chiusura del processo dei dati Midi !&amp;quot;)&lt;br /&gt;
    &lt;br /&gt;
 &amp;lt;FONT color=gray&amp;gt;' ''Chiude la libreria di &amp;quot;WildMidi&amp;quot;:''&amp;lt;/font&amp;gt;&lt;br /&gt;
  WildMidi_Shutdown()&lt;br /&gt;
  &lt;br /&gt;
 End&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 Private Procedure generaWAV(fltemp As String)&lt;br /&gt;
 &lt;br /&gt;
  Dim Ipw, dim_file, m8 As Integer&lt;br /&gt;
  Dim j As Byte&lt;br /&gt;
  Dim bb As New Byte[]&lt;br /&gt;
  Dim little_endian, primo_chunk, $prewav As String&lt;br /&gt;
  &lt;br /&gt;
 &amp;lt;FONT color=gray&amp;gt;' ''Si procede finalmente a creare il file WAV finale.&lt;br /&gt;
 ' ''La procedura è abbastanza complessa: si tratta di creare, come già detto sopra, il blocco iniziale distintivo del formato audio WAV, e di unirlo successivamente ai dati audio grezzi, ormai ripuliti dagli eventuali valori zero iniziali.''&amp;lt;/font&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;FONT color=gray&amp;gt;' ''Ricaviamo la dimensione del file temporaneo contenente i dati audio grezzi:''&amp;lt;/font&amp;gt;&lt;br /&gt;
  Ipw = Stat(fltemp).Size&lt;br /&gt;
  &lt;br /&gt;
 &amp;lt;FONT color=gray&amp;gt;' ''Ricaviamo la dimensione totale del futuro file. Essa sarà, dunque, data dai byte del primo blocco (&amp;quot;Chunk&amp;quot;) - contenente le informazioni sul file WAV ed i dati che lo distinguono ed identificano - pari a 44 byte più i dati audio grezzi del file temporaneo, i quali così vengono a formare il secondo blocco di dati del futuro file WAV.''&amp;lt;/font&amp;gt;&lt;br /&gt;
  dim_file = 44 + Ipw&lt;br /&gt;
  &lt;br /&gt;
 &amp;lt;FONT color=gray&amp;gt;' ''Ricaviamo il formato &amp;quot;little-endian&amp;quot; dellla dimensione del file meno gli otto byte iniziali. Il risultato sarà inserito dal 5° all'8° byte:''&amp;lt;/font&amp;gt;&lt;br /&gt;
  m8 = dim_file - 8&lt;br /&gt;
    &lt;br /&gt;
  little_endian = Hex(((m8 \ CLong(2 ^ 24)) And &amp;amp;FF) Or ((m8 * CLong(2 ^ 8)) And &amp;amp;FF0000) Or ((m8 \ CLong(2 ^ 8)) And &amp;amp;FF00&amp;amp;) Or ((m8 * CLong(2 ^ 24)) And &amp;amp;FF000000), 8)&lt;br /&gt;
    &lt;br /&gt;
  For j = 0 To 3&lt;br /&gt;
    bb.Push(CByte(Val(&amp;quot;&amp;amp;&amp;quot; &amp;amp; Mid(little_endian, (2 * j) + 1, 2))))&lt;br /&gt;
  Next&lt;br /&gt;
  &lt;br /&gt;
 &amp;lt;FONT color=gray&amp;gt;' ''Quindi ricaviamo il formato &amp;quot;little-endian&amp;quot; della dimensione del file temporaneo dei dati audio grezzi.''&lt;br /&gt;
 ' ''Il risultato sarà inserito alla fine del primo blocco (chunk):''&amp;lt;/font&amp;gt;&lt;br /&gt;
  little_endian = Hex(((Ipw \ CLong(2 ^ 24)) And &amp;amp;FF) Or ((Ipw * CLong(2 ^ 8)) And &amp;amp;FF0000) Or ((Ipw \ CLong(2 ^ 8)) And &amp;amp;FF00&amp;amp;) Or ((Ipw * CLong(2 ^ 24)) And &amp;amp;FF000000), 8)&lt;br /&gt;
  &lt;br /&gt;
  For j = 0 To 3&lt;br /&gt;
    bb.Push(CByte(Val(&amp;quot;&amp;amp;&amp;quot; &amp;amp; Mid(little_endian, (2 * j) + 1, 2))))&lt;br /&gt;
  Next&lt;br /&gt;
  &lt;br /&gt;
 &amp;lt;FONT color=gray&amp;gt;' ''Impostiamo i dati appartenenti al primo blocco del futuro file WAV&amp;quot;:''&amp;lt;/font&amp;gt;&lt;br /&gt;
  primo_chunk = &amp;quot;RIFF&amp;quot; &amp;amp; bb.ToString(0, 4) &amp;amp; &amp;quot;WAVEfmt &amp;quot; &amp;amp; Chr(&amp;amp;10) &amp;amp; Chr(&amp;amp;00) &amp;amp; Chr(&amp;amp;00) &amp;amp; Chr(&amp;amp;00) &amp;amp;&lt;br /&gt;
                Chr(&amp;amp;01) &amp;amp; Chr(&amp;amp;00) &amp;amp; Chr(&amp;amp;02) &amp;amp; Chr(&amp;amp;00) &amp;amp; Chr(&amp;amp;44) &amp;amp; Chr(&amp;amp;AC) &amp;amp; Chr(&amp;amp;00) &amp;amp; Chr(&amp;amp;00) &amp;amp; Chr(&amp;amp;10) &amp;amp;&lt;br /&gt;
                Chr(&amp;amp;B1) &amp;amp; Chr(&amp;amp;02) &amp;amp; Chr(&amp;amp;00) &amp;amp; Chr(&amp;amp;04) &amp;amp; Chr(&amp;amp;00) &amp;amp; Chr(&amp;amp;10) &amp;amp; Chr(&amp;amp;00) &amp;amp; &amp;quot;data&amp;quot; &amp;amp; bb.ToString(4, 4)&lt;br /&gt;
  &lt;br /&gt;
 &amp;lt;FONT color=gray&amp;gt;' ''Carichiamo i dati audio grezzi del file temporaneo&amp;quot;:''&amp;lt;/font&amp;gt;&lt;br /&gt;
  $prewav = File.Load(fltemp)&lt;br /&gt;
  &lt;br /&gt;
 &amp;lt;FONT color=gray&amp;gt;' ''Ecco, dunque, creiamo il file WAV finale unendo il primo blocco dei dati informativi e caratterizzanti il file WAV con i dati audio grezzi del file temporaneo&amp;quot;:''&amp;lt;/font&amp;gt;&lt;br /&gt;
  File.Save(&amp;quot;&amp;lt;FONT color=darkgreen&amp;gt;''/percorso/del/definitivo/file.wav''&amp;lt;/font&amp;gt;&amp;quot;, primo_chunk &amp;amp; $prewav)&lt;br /&gt;
 &lt;br /&gt;
 End&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===2° esempio===&lt;br /&gt;
In quest'altro esempio, mentre viene effettuata la registrazione dei dati audio ottenuti dal Midi, contemporaneamente si avrà l'ascolto dell'audio che si va registrando. Si utilizzerà sia la libreria &amp;quot;''libWildMidi''&amp;quot; che la libreria di Alsa &amp;quot;''libasound''&amp;quot;.&lt;br /&gt;
&amp;lt;BR&amp;gt;Inoltre, per l'accumulo dei dati audio (che saranno così registrati ed anche eseguiti) ottenuti dai dati Midi, si utilizzerà un vettore di tipo ''Byte[]'', anziché una variabile di tipo ''Puntatore'' come nell'esempio precedente:&lt;br /&gt;
 Library &amp;quot;libWildMidi:2.1.0&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;FONT color=gray&amp;gt;' ''WildMidi_Init  (const char *config_file, unsigned short int rate, unsigned short int options):''&lt;br /&gt;
 ' ''Intializes &amp;quot;libWildMidi&amp;quot; in preparation for playback.''&amp;lt;/font&amp;gt;&lt;br /&gt;
 Private Extern WildMidi_Init(config_file As String, rate As Integer, options As Short) As Integer&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;FONT color=gray&amp;gt;' ''int WildMidi_MasterVolume (unsigned char master_volume)''&lt;br /&gt;
 ' ''Sets the overall audio level of the library.''&amp;lt;/font&amp;gt;&lt;br /&gt;
 Private Extern WildMidi_MasterVolume(master_volume As Byte) as Integer&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;FONT color=gray&amp;gt;' ''midi *WildMidi_Open (const char *midifile):''&lt;br /&gt;
 ' ''Open  a MIDI file pointed to by midifile for processing. This file must be in standard midi format.''&lt;br /&gt;
 ' ''It returns a handle for the midi file opened. This handle is used by most functions in libWildMidi to identify which midi file we are refering to.''&amp;lt;/font&amp;gt;&lt;br /&gt;
 Private Extern WildMidi_Open(midifile As String) As Pointer&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;FONT color=gray&amp;gt;' ''int  WildMidi_GetOutput  (midi *handle, char *buffer, unsigned long insize)''&lt;br /&gt;
 ' ''Places size bytes of audio data from a  handle,  previously  opened  by WildMidi_Open() or WildMidi_OpenBuffer(), into a buffer pointer to by buffer.''&lt;br /&gt;
 ' ''Buffer must be atleast size bytes, with size being a multiple of 4 as the data is stored in 16 bit interleaved stereo format.''&amp;lt;/font&amp;gt;&lt;br /&gt;
 Private Extern WildMidi_GetOutput(handle As Pointer, buffer As Pointer, insize As Long) As Integer&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;FONT color=gray&amp;gt;' ''int WildMidi_Close (midi *handle)''&lt;br /&gt;
 ' ''Finish processing MIDI data or file. &amp;quot;handle&amp;quot; the indentifier obtained from opening a midi file with &amp;quot;WildMidi_Open()&amp;quot;.''&amp;lt;/font&amp;gt;&lt;br /&gt;
 Private Extern WildMidi_Close(handle As Pointer) As Integer&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;FONT color=gray&amp;gt;' ''void WildMidi_Shutdown(void)''&lt;br /&gt;
 ' ''Shuts  down  the wildmidi library, resetting data and freeing up memory used by the library.''&amp;lt;/font&amp;gt;&lt;br /&gt;
 Private Extern WildMidi_Shutdown()&lt;br /&gt;
  &lt;br /&gt;
 &lt;br /&gt;
 Library &amp;quot;libasound:2&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;FONT color=gray&amp;gt;' ''int snd_pcm_open(snd_pcm_t **pcm, const char *name, snd_pcm_stream_t stream, int mode)''&lt;br /&gt;
 ' ''Opens a PCM.''&amp;lt;/font&amp;gt;&lt;br /&gt;
 Private Extern snd_pcm_open(pcmP As Pointer, nome As String, stream As Integer, mode As Integer) As Integer&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;FONT color=gray&amp;gt;' ''const char * snd_strerror (int errnum)''&lt;br /&gt;
 ' ''Returns the message for an error code.''&amp;lt;/font&amp;gt;&lt;br /&gt;
 Private Extern snd_strerror(errnum As Integer) As String&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;FONT color=gray&amp;gt;' ''int snd_pcm_set_params (snd_pcm_t *pcm, snd_pcm_format_t format, snd_pcm_access_t access, unsigned int canali, unsigned int rate, int soft_resample, unsigned int latency)''&lt;br /&gt;
 ' ''Set the hardware and software parameters in a simple way.''&amp;lt;/font&amp;gt;&lt;br /&gt;
 Private Extern snd_pcm_set_params(pcmP As Pointer, formatB As Byte, accessB As Byte, canali As Integer, rate As Integer, soft_resample As Integer, latency As Integer) As Integer&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;FONT color=gray&amp;gt;' ''snd_pcm_sframes_t snd_pcm_writei(snd_pcm_t *pcm, const void *buffer, snd_pcm_uframes_t size)''&lt;br /&gt;
 ' ''Write interleaved frames to a PCM.''&amp;lt;/font&amp;gt;&lt;br /&gt;
 Private Extern snd_pcm_writei(pcmP As Pointer, buffP As Byte[], uframes As Long) As Integer&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;FONT color=gray&amp;gt;' ''int snd_pcm_close(snd_pcm_t *pcm)''&lt;br /&gt;
 ' ''Close PCM handle.''&amp;lt;/font&amp;gt;&lt;br /&gt;
 Private Extern snd_pcm_close(pcmP As Pointer) As Integer&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 Public Sub Main()&lt;br /&gt;
 &lt;br /&gt;
  Dim err, somma As Integer&lt;br /&gt;
  Dim midi, handle As Pointer&lt;br /&gt;
  Dim frequenza As Integer = 44100&lt;br /&gt;
  Dim buf As New Byte[128]&lt;br /&gt;
  Dim wave As New Byte[]&lt;br /&gt;
  Dim fileMid As String&lt;br /&gt;
  &lt;br /&gt;
  fileMid = &amp;quot;&amp;lt;FONT color=darkgreen&amp;gt;''/percorso/del/file.mid''&amp;lt;/font&amp;gt;&amp;quot;&lt;br /&gt;
  &lt;br /&gt;
 &amp;lt;FONT color=gray&amp;gt;' ''Va ad inizializzare l'interfaccia PCM di Alsa:''&amp;lt;/font&amp;gt;&lt;br /&gt;
  handle = inizializzaAlsa(frequenza)&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;FONT color=gray&amp;gt;' ''Inizializza la libreria di &amp;quot;WildMidi&amp;quot;.&lt;br /&gt;
 ' ''Il primo parametro richiama il file che contiene la configurazione degli strumenti musicali che sarà utilizzata dalla libreria.''&lt;br /&gt;
 ' ''Il file di configurazione potrà essere: &amp;quot;/etc/timidity/freepats.cfg&amp;quot; o &amp;quot;/etc/wildmidi/wildmidi.cfg&amp;quot;, oppure &amp;quot;/etc/timidity/eawpats.cfg&amp;quot;:''&amp;lt;/font&amp;gt;&lt;br /&gt;
  err = WildMidi_Init(&amp;quot;/etc/timidity/freepats.cfg&amp;quot;, frequenza, 0)&lt;br /&gt;
  If err &amp;lt; 0 Then Error.Raise(&amp;quot;Errore nell'inizializzazione dell'interfaccia libWildMidi !&amp;quot;)&lt;br /&gt;
 &lt;br /&gt;
  err = WildMidi_MasterVolume(100)&lt;br /&gt;
  If err &amp;lt; 0 Then Error.Raise(&amp;quot;Errore nell'impostazione del Volume Generale !&amp;quot;)&lt;br /&gt;
  &lt;br /&gt;
  midi = WildMidi_Open(fileMid)&lt;br /&gt;
  If midi == 0 Then Error.Raise(&amp;quot;Impossibile aprire il file Midi !&amp;quot;)&lt;br /&gt;
 &lt;br /&gt;
  Print &amp;quot;Esecuzione del brano Midi: &amp;quot;; File.Name(fileMid); &amp;quot;\n&amp;quot;&lt;br /&gt;
  &lt;br /&gt;
  Repeat&lt;br /&gt;
    err = WildMidi_GetOutput(midi, buf.Data, 128)&lt;br /&gt;
    &lt;br /&gt;
 &amp;lt;FONT color=gray&amp;gt;' ''Ad ogni ciclo aggiunge nel vettore &amp;quot;wave&amp;quot; i dati presenti nel vettore &amp;quot;buf&amp;quot;:''&amp;lt;/font&amp;gt;&lt;br /&gt;
    wave.Insert(buf)&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;FONT color=gray&amp;gt;' ''Ad ogni ciclo vengono scritti i dati audio nel sub-sistema PCM di ALsa, per consentire l'esecuzione audio di tali dati:''&amp;lt;/font&amp;gt;&lt;br /&gt;
    snd_pcm_writei(handle, buf, 128 / SizeOf(gb.Integer))&lt;br /&gt;
     &lt;br /&gt;
 &amp;lt;FONT color=gray&amp;gt;' ''Mostra il tempo trascorso dall'inizio dell'esecuzione del file wav:''&amp;lt;/font&amp;gt;&lt;br /&gt;
    somma += (buf.Count \ SizeOf(gb.Integer))&lt;br /&gt;
    Write &amp;quot;\rTempo trascorso: &amp;quot; &amp;amp; Time(0, 0, 0, (somma / frequenza) * 1000)&lt;br /&gt;
 &lt;br /&gt;
  Until err == 0&lt;br /&gt;
 &lt;br /&gt;
  Print &amp;quot;\n\nFine esecuzione audio !&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
  generaWAV(wave, fileMid)&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;FONT color=gray&amp;gt;' ''Va in chiusura:''&amp;lt;/font&amp;gt;&lt;br /&gt;
  err = WildMidi_Close(midi)&lt;br /&gt;
  If err &amp;lt; 0 Then Error.Raise(&amp;quot;Errore nella chiusura del processo dei dati Midi !&amp;quot;)&lt;br /&gt;
    &lt;br /&gt;
  WildMidi_Shutdown()&lt;br /&gt;
  snd_pcm_close(handle)&lt;br /&gt;
  &lt;br /&gt;
  Print &amp;quot;Librerie chiuse !&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
  Print &amp;quot;************************\n\n&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 End&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 Private Function inizializzaAlsa(frequenza As Integer) As Pointer&lt;br /&gt;
 &lt;br /&gt;
  Dim err As Integer&lt;br /&gt;
  Dim handle As Pointer&lt;br /&gt;
  Dim nomen As String = &amp;quot;default&amp;quot;&lt;br /&gt;
  Dim SND_PCM_STREAM_PLAYBACK As Byte = 0&lt;br /&gt;
  Dim SND_PCM_ACCESS_RW_INTERLEAVED As Byte = 3&lt;br /&gt;
  Dim canali As Byte = 2&lt;br /&gt;
  &lt;br /&gt;
 &amp;lt;FONT color=gray&amp;gt;' ''Apre il sub-sistema PCM di Alsa creando un apposito &amp;quot;handle&amp;quot;:''&amp;lt;/font&amp;gt;&lt;br /&gt;
  err = snd_pcm_open(VarPtr(handle), nomen, SND_PCM_STREAM_PLAYBACK, 0)&lt;br /&gt;
  If err &amp;lt; 0 Then Error.Raise(&amp;quot;Playback open error: &amp;quot; &amp;amp; snd_strerror(err))&lt;br /&gt;
  &lt;br /&gt;
 &amp;lt;FONT color=gray&amp;gt;' ''Imposta i parametri hardware/software dell'interfaccia PCM di ALsa:''&amp;lt;/font&amp;gt;&lt;br /&gt;
  err = snd_pcm_set_params(handle, 2, SND_PCM_ACCESS_RW_INTERLEAVED, canali, frequenza, 1, 500000)&lt;br /&gt;
  If err &amp;lt; 0 Then Error.Raise(&amp;quot;Playback open error: &amp;quot; &amp;amp; snd_strerror(err))&lt;br /&gt;
  &lt;br /&gt;
  Return handle&lt;br /&gt;
   &lt;br /&gt;
 End&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 Private Procedure generaWAV(wavArr As Byte[], percorsoFileMID As String)  &amp;lt;FONT color=gray&amp;gt;' ''Procedura per generare il file WAV''&amp;lt;/font&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
  Dim s1, s2, nomeFileWAV As String&lt;br /&gt;
  &lt;br /&gt;
  s1 = &amp;lt;FONT color=#B22222&amp;gt;creaChunkIniziale(wavArr)&amp;lt;/font&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
  s2 = wavArr.ToString(0, wavArr.Max)&lt;br /&gt;
     &lt;br /&gt;
  Print &amp;quot;\nDimensione dati grezzi audio = &amp;quot;; Len(s2); &amp;quot; byte&amp;quot;&lt;br /&gt;
  Print &amp;quot;Dimensione file audio = &amp;quot;; Len(s2) + 40; &amp;quot; byte&amp;quot;&lt;br /&gt;
  Print &amp;quot;Durata del brano audio = &amp;quot;; Format(((Len(s2) * 8) / 705600) / 2, &amp;quot;#.00&amp;quot;); &amp;quot; sec.\n&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
  nomeFileWAV = File.BaseName(percorsoFileMID)&lt;br /&gt;
     &lt;br /&gt;
  File.Save(&amp;quot;&amp;lt;FONT color=darkgreen&amp;gt;''/tmp''&amp;lt;/font&amp;gt;&amp;quot; &amp;amp;/ nomeFileWAV &amp;amp; &amp;quot;&amp;lt;FONT color=gray&amp;gt;''.wav''&amp;lt;/font&amp;gt;&amp;quot;, s1 &amp;amp; s2)&lt;br /&gt;
          &lt;br /&gt;
  Print &amp;quot;Termine creazione del file audio: &amp;quot;; nomeFileWAV; &amp;quot;.wav&amp;quot;&lt;br /&gt;
   &lt;br /&gt;
 End&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 Private Function creaChunkIniziale(wavArr As Byte[]) As String  &amp;lt;FONT color=gray&amp;gt;' ''Procedura per generare il chunk iniziale del file WAV finale''&amp;lt;/font&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
  Dim dim_prewav, totale_dimensione, meno_otto As Integer&lt;br /&gt;
  Dim chunk, cvr As String&lt;br /&gt;
  Dim bb As New Byte[]&lt;br /&gt;
  Dim b As Byte&lt;br /&gt;
    &lt;br /&gt;
  dim_prewav = wavArr.Count&lt;br /&gt;
  &lt;br /&gt;
  totale_dimensione = 44 + dim_prewav&lt;br /&gt;
 &lt;br /&gt;
  meno_otto = totale_dimensione - 8&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;FONT color=gray&amp;gt;' ''Si ricava il formato &amp;quot;little-Endian&amp;quot; del valore di &amp;quot;meno_otto&amp;quot;:''&amp;lt;/font&amp;gt;&lt;br /&gt;
  cvr = Hex(((meno_otto \ CLong(2 ^ 24)) And &amp;amp;FF) Or ((meno_otto * CLong(2 ^ 8)) And &amp;amp;FF0000) Or ((meno_otto \ CLong(2 ^ 8)) And &amp;amp;FF00&amp;amp;) Or ((meno_otto * CLong(2 ^ 24)) And &amp;amp;FF000000), 8)&lt;br /&gt;
  &lt;br /&gt;
  For b = 0 To 3&lt;br /&gt;
    bb.Push(CByte(Val(&amp;quot;&amp;amp;&amp;quot; &amp;amp; Mid(cvr, (2 * b) + 1, 2))))&lt;br /&gt;
  Next&lt;br /&gt;
  &lt;br /&gt;
  cvr = Hex(((dim_prewav \ CLong(2 ^ 24)) And &amp;amp;FF) Or ((dim_prewav * CLong(2 ^ 8)) And &amp;amp;FF0000) Or ((dim_prewav \ CLong(2 ^ 8)) And &amp;amp;FF00&amp;amp;) Or ((dim_prewav * CLong(2 ^ 24)) And &amp;amp;FF000000), 8)&lt;br /&gt;
 &lt;br /&gt;
  For b = 0 To 3&lt;br /&gt;
    bb.Push(CByte(Val(&amp;quot;&amp;amp;&amp;quot; &amp;amp; Mid(cvr, (2 * b) + 1, 2))))&lt;br /&gt;
  Next&lt;br /&gt;
  &lt;br /&gt;
  chunk = &amp;quot;RIFF&amp;quot; &amp;amp; bb.ToString(0, 4) &amp;amp; &amp;quot;WAVEfmt &amp;quot; &amp;amp; Chr(&amp;amp;10) &amp;amp; Chr(&amp;amp;00) &amp;amp; Chr(&amp;amp;00) &amp;amp; Chr(&amp;amp;00) &amp;amp;&lt;br /&gt;
          Chr(&amp;amp;01) &amp;amp; Chr(&amp;amp;00) &amp;amp; Chr(&amp;amp;02) &amp;amp; Chr(&amp;amp;00) &amp;amp; Chr(&amp;amp;44) &amp;amp; Chr(&amp;amp;AC) &amp;amp; Chr(&amp;amp;00) &amp;amp; Chr(&amp;amp;00) &amp;amp; Chr(&amp;amp;10) &amp;amp;&lt;br /&gt;
          Chr(&amp;amp;B1) &amp;amp; Chr(&amp;amp;02) &amp;amp; Chr(&amp;amp;00) &amp;amp; Chr(&amp;amp;04) &amp;amp; Chr(&amp;amp;00) &amp;amp; Chr(&amp;amp;10) &amp;amp; Chr(&amp;amp;00) &amp;amp; &amp;quot;data&amp;quot; &amp;amp; bb.ToString(4, 4)&lt;br /&gt;
  &lt;br /&gt;
  Return chunk&lt;br /&gt;
  &lt;br /&gt;
 End&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Riferimenti=&lt;br /&gt;
* https://natonelbronx.wordpress.com/2007/07/12/ascoltare-midi-su-linux-debianubuntu/&lt;/div&gt;</summary>
		<author><name>Vuott</name></author>
	</entry>
	<entry>
		<id>https://www.gambas-it.org/wiki/index.php?title=Ottenere_un_file_WAV_da_un_file_Midi_con_le_funzioni_esterne_del_API_di_WildMidi&amp;diff=42732</id>
		<title>Ottenere un file WAV da un file Midi con le funzioni esterne del API di WildMidi</title>
		<link rel="alternate" type="text/html" href="https://www.gambas-it.org/wiki/index.php?title=Ottenere_un_file_WAV_da_un_file_Midi_con_le_funzioni_esterne_del_API_di_WildMidi&amp;diff=42732"/>
		<updated>2025-10-27T08:34:38Z</updated>

		<summary type="html">&lt;p&gt;Vuott: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Come è noto, non è possibile parlare di una vera e propria ''conversione'' di dati da Midi a formato ''audio''. E' possibile, però, ''ottenere'' un file audio, ad esempio WAV, da dati Midi.&lt;br /&gt;
&lt;br /&gt;
Il presupposto essenziale, per fare ciò, è avere una funzione che ''ricavi'', produca dati audio grezzi dal file Midi, e che ''restituisca'' i dati audio grezzi ricavati, affinché possano essere salvati in un file. Tali dati audio grezzi potranno, così, essere salvati in un file audio di tipo .WAV, avendo, però, l'accortezza di premettere ad essi i dati del ''chunk'' iniziale che contraddistingue i file audio WAV.&lt;br /&gt;
&lt;br /&gt;
Le risorse dell'[http://wildmidi.sourceforge.net/?id=manpages API di WildMidi] consentono di generare un flusso di dati audio corrispondenti ad un file Midi. Faremo uso, dunque, in Gambas delle funzioni esterne della libreria condivisa: &amp;quot;''libWildMidi.so.2.1.0'' &amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Di seguito mostreremo un paio di semplici esempi.&lt;br /&gt;
&lt;br /&gt;
===1° esempio===&lt;br /&gt;
In questo esempio oltre ad utilizzare la libreria di ''WildMidi'', utilizzeremo anche due funzioni esterne della libreria di C per leggere e scrivere in un file.&lt;br /&gt;
 Library &amp;quot;libWildMidi:2.1.0&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;FONT color=gray&amp;gt;' ''WildMidi_Init  (const char *config_file, unsigned short int rate, unsigned short int options):''&lt;br /&gt;
 ' ''Intializes &amp;quot;libWildMidi&amp;quot; in preparation for playback.''&amp;lt;/font&amp;gt;&lt;br /&gt;
 Private Extern WildMidi_Init(config_file As String, rate As Integer, options As Short) As Integer&lt;br /&gt;
  &lt;br /&gt;
 &amp;lt;FONT color=gray&amp;gt;' ''midi *WildMidi_Open (const char *midifile):''&lt;br /&gt;
 ' ''Open  a MIDI file pointed to by midifile for processing. This file must be in standard midi format.''&lt;br /&gt;
 ' ''It returns a handle for the midi file opened. This handle is used by most functions in libWildMidi to identify which midi file we are refering to.''&amp;lt;/font&amp;gt;&lt;br /&gt;
 Private Extern WildMidi_Open(midifile As String) As Pointer&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;FONT color=gray&amp;gt;' ''int  WildMidi_GetOutput  (midi *handle, char *buffer, unsigned long insize)''&lt;br /&gt;
 ' ''Places size bytes of audio data from a  handle,  previously  opened  by WildMidi_Open() or WildMidi_OpenBuffer(), into a buffer pointer to by buffer.''&lt;br /&gt;
 ' ''Buffer must be atleast size bytes, with size being a multiple of 4 as the data is stored in 16 bit interleaved stereo format.''&amp;lt;/font&amp;gt;&lt;br /&gt;
 Private Extern WildMidi_GetOutput(handle As Pointer, buffer As Pointer, insize As Long) As Integer&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;FONT color=gray&amp;gt;' ''int WildMidi_Close (midi *handle)''&lt;br /&gt;
 ' ''Finish processing MIDI data or file. &amp;quot;handle&amp;quot; the indentifier obtained from opening a midi file with &amp;quot;WildMidi_Open()&amp;quot;.''&amp;lt;/font&amp;gt;&lt;br /&gt;
 Private Extern WildMidi_Close(handle As Pointer) As Integer&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;FONT color=gray&amp;gt;' ''void WildMidi_Shutdown(void)''&lt;br /&gt;
 ' ''Shuts  down  the wildmidi library, resetting data and freeing up memory used by the library.''&amp;lt;/font&amp;gt;&lt;br /&gt;
 Private Extern WildMidi_Shutdown()&lt;br /&gt;
  &lt;br /&gt;
 &lt;br /&gt;
 Public Sub Main()&lt;br /&gt;
 &lt;br /&gt;
  Dim err, &amp;lt;FONT color=darkorange&amp;gt;quantum&amp;lt;/font&amp;gt; As Integer&lt;br /&gt;
  Dim wav As File&lt;br /&gt;
  Dim midi, &amp;lt;FONT color=blue&amp;gt;buffer&amp;lt;/font&amp;gt; As Pointer&lt;br /&gt;
  Dim frequenza As Integer = 44100&lt;br /&gt;
  Dim fileMIDI, temporaneo As String&lt;br /&gt;
  &lt;br /&gt;
  fileMIDI = &amp;quot;&amp;lt;FONT color=darkgreen&amp;gt;''/percorso/del/file.mid''&amp;lt;/font&amp;gt;&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
  temporaneo = Temp(&amp;quot;mid&amp;quot;)&lt;br /&gt;
   &lt;br /&gt;
 &amp;lt;FONT color=gray&amp;gt;' ''Apre in scrittura il file iniziale temporaneo contenente i soli dati audio grezzi ricavati dal file Midi:''&amp;lt;/font&amp;gt;&lt;br /&gt;
  wav = Open temporaneo For Create&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;FONT color=gray&amp;gt;' ''Inizializza la libreria di &amp;quot;WildMidi&amp;quot;.&lt;br /&gt;
 ' ''Il primo parametro richiama il file che contiene la configurazione degli strumenti musicali che sarà utilizzata dalla libreria.''&lt;br /&gt;
 ' ''Il file di configurazione potrà essere: &amp;quot;/etc/timidity/freepats.cfg&amp;quot; o &amp;quot;/etc/wildmidi/wildmidi.cfg&amp;quot;, oppure &amp;quot;/etc/timidity/eawpats.cfg&amp;quot;:''&amp;lt;/font&amp;gt;&lt;br /&gt;
  err = WildMidi_Init(&amp;quot;/etc/timidity/freepats.cfg&amp;quot;, frequenza, 0)&lt;br /&gt;
  If err &amp;lt; 0 Then Error.Raise(&amp;quot;Errore nell'inizializzazione dell'interfaccia libWildMidi !&amp;quot;)&lt;br /&gt;
    &lt;br /&gt;
 &amp;lt;FONT color=gray&amp;gt;' ''Apre il file Midi, dal quale si dovrà ottenere un file WAV:''&amp;lt;/font&amp;gt;&lt;br /&gt;
  midi = WildMidi_Open(fileMIDI)&lt;br /&gt;
  If midi == 0 Then Error.Raise(&amp;quot;Impossibile aprire il file Midi !&amp;quot;)&lt;br /&gt;
  &lt;br /&gt;
 &amp;lt;FONT color=gray&amp;gt;' ''Alloca un'area di memoria che sarà puntata da una variabile di tipo &amp;quot;Puntatore&amp;quot;:''&amp;lt;/font&amp;gt;&lt;br /&gt;
  &amp;lt;FONT color=blue&amp;gt;buffer&amp;lt;/font&amp;gt; = Alloc(SizeOf(gb.Byte), &amp;lt;FONT color=maroon&amp;gt;128&amp;lt;/font&amp;gt;)&lt;br /&gt;
 &lt;br /&gt;
  Repeat&lt;br /&gt;
  &lt;br /&gt;
 &amp;lt;FONT color=gray&amp;gt;' ''Ad ogni giro viene riempita l'area allocata con un certo numero di dati Midi convertiti in dati audio da scrivere successivamente nel file WAV.''&lt;br /&gt;
 ' ''(In particolare, ad Alsa sarà passata la variabile di tipo &amp;quot;puntatore&amp;quot; - qui chiamata &amp;quot;buffer&amp;quot; - che ora viene riempita di dati):&amp;lt;/font&amp;gt;&lt;br /&gt;
    &amp;lt;FONT color=darkorange&amp;gt;quantum&amp;lt;/font&amp;gt; = WildMidi_GetOutput(midi, &amp;lt;FONT color=blue&amp;gt;buffer&amp;lt;/font&amp;gt;, &amp;lt;FONT color=maroon&amp;gt;128&amp;lt;/font&amp;gt;)&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;FONT color=gray&amp;gt;' ''Viene scritta nel file, puntato dalla varibile &amp;quot;wav&amp;quot;, una sola quantità di dati per ogni giro, presenti nell'area di memoria allocata e puntata dalla variabile &amp;quot;buffer&amp;quot;, pari al valore contenuto dalla variabile &amp;quot;quantum&amp;quot;:''&amp;lt;/font&amp;gt;&lt;br /&gt;
    write #wav, &amp;lt;FONT color=blue&amp;gt;buffer&amp;lt;/font&amp;gt;, &amp;lt;FONT color=darkorange&amp;gt;quantum&amp;lt;/font&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
  Until &amp;lt;FONT color=darkorange&amp;gt;quantum&amp;lt;/font&amp;gt; == 0&lt;br /&gt;
 &lt;br /&gt;
  Free(&amp;lt;FONT color=blue&amp;gt;buffer&amp;lt;/font&amp;gt;)&lt;br /&gt;
  wav.Close&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;FONT color=gray&amp;gt;' ''A questo punto, nel file iniziale temporaneo vi sono soltanto i dati grezzi audio utili per creare un vero file WAV''&lt;br /&gt;
 ' ''Ora bisognerà aggiungere a tali dati grezzi un blocco iniziale per identificare e caratterizzare il file WAV finale.''&lt;br /&gt;
 ' ''Procederemo a questa operazione in una sotto-procedura specifica a parte che ora andiamo a richiamare:''&amp;lt;/font&amp;gt;&lt;br /&gt;
  generaWAV(temporaneo)&lt;br /&gt;
  &lt;br /&gt;
  Print &amp;quot;\e[31mCreazione del file audio WAV terminata !&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;FONT color=gray&amp;gt;' ''Chiude l'elaborazione dei dati Midi da parte di &amp;quot;WildMidi&amp;quot;:''&amp;lt;/font&amp;gt;&lt;br /&gt;
  err = WildMidi_Close(midi)&lt;br /&gt;
  If err &amp;lt; 0 Then Error.Raise(&amp;quot;Errore nella chiusura del processo dei dati Midi !&amp;quot;)&lt;br /&gt;
    &lt;br /&gt;
 &amp;lt;FONT color=gray&amp;gt;' ''Chiude la libreria di &amp;quot;WildMidi&amp;quot;:''&amp;lt;/font&amp;gt;&lt;br /&gt;
  WildMidi_Shutdown()&lt;br /&gt;
  &lt;br /&gt;
 End&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 Private Procedure generaWAV(fltemp As String)&lt;br /&gt;
 &lt;br /&gt;
  Dim Ipw, dim_file, m8 As Integer&lt;br /&gt;
  Dim j As Byte&lt;br /&gt;
  Dim bb As New Byte[]&lt;br /&gt;
  Dim little_endian, primo_chunk, $prewav As String&lt;br /&gt;
  &lt;br /&gt;
 &amp;lt;FONT color=gray&amp;gt;' ''Si procede finalmente a creare il file WAV finale.&lt;br /&gt;
 ' ''La procedura è abbastanza complessa: si tratta di creare, come già detto sopra, il blocco iniziale distintivo del formato audio WAV, e di unirlo successivamente ai dati audio grezzi, ormai ripuliti dagli eventuali valori zero iniziali.''&amp;lt;/font&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;FONT color=gray&amp;gt;' ''Ricaviamo la dimensione del file temporaneo contenente i dati audio grezzi:''&amp;lt;/font&amp;gt;&lt;br /&gt;
  Ipw = Stat(fltemp).Size&lt;br /&gt;
  &lt;br /&gt;
 &amp;lt;FONT color=gray&amp;gt;' ''Ricaviamo la dimensione totale del futuro file. Essa sarà, dunque, data dai byte del primo blocco (&amp;quot;Chunk&amp;quot;) - contenente le informazioni sul file WAV ed i dati che lo distinguono ed identificano - pari a 44 byte più i dati audio grezzi del file temporaneo, i quali così vengono a formare il secondo blocco di dati del futuro file WAV.''&amp;lt;/font&amp;gt;&lt;br /&gt;
  dim_file = 44 + Ipw&lt;br /&gt;
  &lt;br /&gt;
 &amp;lt;FONT color=gray&amp;gt;' ''Ricaviamo il formato &amp;quot;little-endian&amp;quot; dellla dimensione del file meno gli otto byte iniziali. Il risultato sarà inserito dal 5° all'8° byte:''&amp;lt;/font&amp;gt;&lt;br /&gt;
  m8 = dim_file - 8&lt;br /&gt;
    &lt;br /&gt;
  little_endian = Hex(((m8 \ CLong(2 ^ 24)) And &amp;amp;FF) Or ((m8 * CLong(2 ^ 8)) And &amp;amp;FF0000) Or ((m8 \ CLong(2 ^ 8)) And &amp;amp;FF00&amp;amp;) Or ((m8 * CLong(2 ^ 24)) And &amp;amp;FF000000), 8)&lt;br /&gt;
    &lt;br /&gt;
  For j = 0 To 3&lt;br /&gt;
    bb.Push(CByte(Val(&amp;quot;&amp;amp;&amp;quot; &amp;amp; Mid(little_endian, (2 * j) + 1, 2))))&lt;br /&gt;
  Next&lt;br /&gt;
  &lt;br /&gt;
 &amp;lt;FONT color=gray&amp;gt;' ''Quindi ricaviamo il formato &amp;quot;little-endian&amp;quot; della dimensione del file temporaneo dei dati audio grezzi.''&lt;br /&gt;
 ' ''Il risultato sarà inserito alla fine del primo blocco (chunk):''&amp;lt;/font&amp;gt;&lt;br /&gt;
  little_endian = Hex(((Ipw \ CLong(2 ^ 24)) And &amp;amp;FF) Or ((Ipw * CLong(2 ^ 8)) And &amp;amp;FF0000) Or ((Ipw \ CLong(2 ^ 8)) And &amp;amp;FF00&amp;amp;) Or ((Ipw * CLong(2 ^ 24)) And &amp;amp;FF000000), 8)&lt;br /&gt;
  &lt;br /&gt;
  For j = 0 To 3&lt;br /&gt;
    bb.Push(CByte(Val(&amp;quot;&amp;amp;&amp;quot; &amp;amp; Mid(little_endian, (2 * j) + 1, 2))))&lt;br /&gt;
  Next&lt;br /&gt;
  &lt;br /&gt;
 &amp;lt;FONT color=gray&amp;gt;' ''Impostiamo i dati appartenenti al primo blocco del futuro file WAV&amp;quot;:''&amp;lt;/font&amp;gt;&lt;br /&gt;
  primo_chunk = &amp;quot;RIFF&amp;quot; &amp;amp; bb.ToString(0, 4) &amp;amp; &amp;quot;WAVEfmt &amp;quot; &amp;amp; Chr(&amp;amp;10) &amp;amp; Chr(&amp;amp;00) &amp;amp; Chr(&amp;amp;00) &amp;amp; Chr(&amp;amp;00) &amp;amp;&lt;br /&gt;
                Chr(&amp;amp;01) &amp;amp; Chr(&amp;amp;00) &amp;amp; Chr(&amp;amp;02) &amp;amp; Chr(&amp;amp;00) &amp;amp; Chr(&amp;amp;44) &amp;amp; Chr(&amp;amp;AC) &amp;amp; Chr(&amp;amp;00) &amp;amp; Chr(&amp;amp;00) &amp;amp; Chr(&amp;amp;10) &amp;amp;&lt;br /&gt;
                Chr(&amp;amp;B1) &amp;amp; Chr(&amp;amp;02) &amp;amp; Chr(&amp;amp;00) &amp;amp; Chr(&amp;amp;04) &amp;amp; Chr(&amp;amp;00) &amp;amp; Chr(&amp;amp;10) &amp;amp; Chr(&amp;amp;00) &amp;amp; &amp;quot;data&amp;quot; &amp;amp; bb.ToString(4, 4)&lt;br /&gt;
  &lt;br /&gt;
 &amp;lt;FONT color=gray&amp;gt;' ''Carichiamo i dati audio grezzi del file temporaneo&amp;quot;:''&amp;lt;/font&amp;gt;&lt;br /&gt;
  $prewav = File.Load(fltemp)&lt;br /&gt;
  &lt;br /&gt;
 &amp;lt;FONT color=gray&amp;gt;' ''Ecco, dunque, creiamo il file WAV finale unendo il primo blocco dei dati informativi e caratterizzanti il file WAV con i dati audio grezzi del file temporaneo&amp;quot;:''&amp;lt;/font&amp;gt;&lt;br /&gt;
  File.Save(&amp;quot;&amp;lt;FONT color=darkgreen&amp;gt;''/percorso/del/definitivo/file.wav''&amp;lt;/font&amp;gt;&amp;quot;, primo_chunk &amp;amp; $prewav)&lt;br /&gt;
 &lt;br /&gt;
 End&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===2° esempio===&lt;br /&gt;
In quest'altro esempio, mentre viene effettuata la registrazione dei dati audio ottenuti dal Midi, contemporaneamente si avrà l'ascolto dell'audio che si va registrando. Si utilizzerà sia la libreria &amp;quot;''libWildMidi''&amp;quot; che la libreria di Alsa &amp;quot;''libasound''&amp;quot;.&lt;br /&gt;
&amp;lt;BR&amp;gt;Inoltre, per l'accumulo dei dati audio (che saranno così registrati ed anche eseguiti) ottenuti dai dati Midi, si utilizzerà un vettore di tipo ''Byte[]'', anziché una variabile di tipo ''Puntatore'' come nell'esempio precedente:&lt;br /&gt;
 Library &amp;quot;libWildMidi:2.1.0&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;FONT color=gray&amp;gt;' ''WildMidi_Init  (const char *config_file, unsigned short int rate, unsigned short int options):''&lt;br /&gt;
 ' ''Intializes &amp;quot;libWildMidi&amp;quot; in preparation for playback.''&amp;lt;/font&amp;gt;&lt;br /&gt;
 Private Extern WildMidi_Init(config_file As String, rate As Integer, options As Short) As Integer&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;FONT color=gray&amp;gt;' ''int WildMidi_MasterVolume (unsigned char master_volume)''&lt;br /&gt;
 ' ''Sets the overall audio level of the library.''&amp;lt;/font&amp;gt;&lt;br /&gt;
 Private Extern WildMidi_MasterVolume(master_volume As Byte) as Integer&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;FONT color=gray&amp;gt;' ''midi *WildMidi_Open (const char *midifile):''&lt;br /&gt;
 ' ''Open  a MIDI file pointed to by midifile for processing. This file must be in standard midi format.''&lt;br /&gt;
 ' ''It returns a handle for the midi file opened. This handle is used by most functions in libWildMidi to identify which midi file we are refering to.''&amp;lt;/font&amp;gt;&lt;br /&gt;
 Private Extern WildMidi_Open(midifile As String) As Pointer&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;FONT color=gray&amp;gt;' ''int  WildMidi_GetOutput  (midi *handle, char *buffer, unsigned long insize)''&lt;br /&gt;
 ' ''Places size bytes of audio data from a  handle,  previously  opened  by WildMidi_Open() or WildMidi_OpenBuffer(), into a buffer pointer to by buffer.''&lt;br /&gt;
 ' ''Buffer must be atleast size bytes, with size being a multiple of 4 as the data is stored in 16 bit interleaved stereo format.''&amp;lt;/font&amp;gt;&lt;br /&gt;
 Private Extern WildMidi_GetOutput(handle As Pointer, buffer As Pointer, insize As Long) As Integer&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;FONT color=gray&amp;gt;' ''int WildMidi_Close (midi *handle)''&lt;br /&gt;
 ' ''Finish processing MIDI data or file. &amp;quot;handle&amp;quot; the indentifier obtained from opening a midi file with &amp;quot;WildMidi_Open()&amp;quot;.''&amp;lt;/font&amp;gt;&lt;br /&gt;
 Private Extern WildMidi_Close(handle As Pointer) As Integer&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;FONT color=gray&amp;gt;' ''void WildMidi_Shutdown(void)''&lt;br /&gt;
 ' ''Shuts  down  the wildmidi library, resetting data and freeing up memory used by the library.''&amp;lt;/font&amp;gt;&lt;br /&gt;
 Private Extern WildMidi_Shutdown()&lt;br /&gt;
  &lt;br /&gt;
 &lt;br /&gt;
 Library &amp;quot;libasound:2&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;FONT color=gray&amp;gt;' ''int snd_pcm_open(snd_pcm_t **pcm, const char *name, snd_pcm_stream_t stream, int mode)''&lt;br /&gt;
 ' ''Opens a PCM.''&amp;lt;/font&amp;gt;&lt;br /&gt;
 Private Extern snd_pcm_open(pcmP As Pointer, nome As String, stream As Integer, mode As Integer) As Integer&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;FONT color=gray&amp;gt;' ''const char * snd_strerror (int errnum)''&lt;br /&gt;
 ' ''Returns the message for an error code.''&amp;lt;/font&amp;gt;&lt;br /&gt;
 Private Extern snd_strerror(errnum As Integer) As String&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;FONT color=gray&amp;gt;' ''int snd_pcm_set_params (snd_pcm_t *pcm, snd_pcm_format_t format, snd_pcm_access_t access, unsigned int canali, unsigned int rate, int soft_resample, unsigned int latency)''&lt;br /&gt;
 ' ''Set the hardware and software parameters in a simple way.''&amp;lt;/font&amp;gt;&lt;br /&gt;
 Private Extern snd_pcm_set_params(pcmP As Pointer, formatB As Byte, accessB As Byte, canali As Integer, rate As Integer, soft_resample As Integer, latency As Integer) As Integer&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;FONT color=gray&amp;gt;' ''snd_pcm_sframes_t snd_pcm_writei(snd_pcm_t *pcm, const void *buffer, snd_pcm_uframes_t size)''&lt;br /&gt;
 ' ''Write interleaved frames to a PCM.''&amp;lt;/font&amp;gt;&lt;br /&gt;
 Private Extern snd_pcm_writei(pcmP As Pointer, buffP As Byte[], uframes As Long) As Integer&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;FONT color=gray&amp;gt;' ''int snd_pcm_close(snd_pcm_t *pcm)''&lt;br /&gt;
 ' ''Close PCM handle.''&amp;lt;/font&amp;gt;&lt;br /&gt;
 Private Extern snd_pcm_close(pcmP As Pointer) As Integer&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 Public Sub Main()&lt;br /&gt;
 &lt;br /&gt;
  Dim err, somma As Integer&lt;br /&gt;
  Dim midi, handle As Pointer&lt;br /&gt;
  Dim frequenza As Integer = 44100&lt;br /&gt;
  Dim buf As New Byte[128]&lt;br /&gt;
  Dim wave As New Byte[]&lt;br /&gt;
  Dim fileMid As String&lt;br /&gt;
  &lt;br /&gt;
  fileMid = &amp;quot;&amp;lt;FONT color=darkgreen&amp;gt;''/percorso/del/file.mid''&amp;lt;/font&amp;gt;&amp;quot;&lt;br /&gt;
  &lt;br /&gt;
 &amp;lt;FONT color=gray&amp;gt;' ''Va ad inizializzare l'interfaccia PCM di Alsa:''&amp;lt;/font&amp;gt;&lt;br /&gt;
  handle = inizializzaAlsa(frequenza)&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;FONT color=gray&amp;gt;' ''Inizializza la libreria di &amp;quot;WildMidi&amp;quot;.&lt;br /&gt;
 ' ''Il primo parametro richiama il file che contiene la configurazione degli strumenti musicali che sarà utilizzata dalla libreria.''&lt;br /&gt;
 ' ''Il file di configurazione potrà essere: &amp;quot;/etc/timidity/freepats.cfg&amp;quot; o &amp;quot;/etc/wildmidi/wildmidi.cfg&amp;quot;, oppure &amp;quot;/etc/timidity/eawpats.cfg&amp;quot;:''&amp;lt;/font&amp;gt;&lt;br /&gt;
  err = WildMidi_Init(&amp;quot;/etc/timidity/freepats.cfg&amp;quot;, frequenza, 0)&lt;br /&gt;
  If err &amp;lt; 0 Then Error.Raise(&amp;quot;Errore nell'inizializzazione dell'interfaccia libWildMidi !&amp;quot;)&lt;br /&gt;
 &lt;br /&gt;
  err = WildMidi_MasterVolume(100)&lt;br /&gt;
  If err &amp;lt; 0 Then Error.Raise(&amp;quot;Errore nell'impostazione del Volume Generale !&amp;quot;)&lt;br /&gt;
  &lt;br /&gt;
  midi = WildMidi_Open(fileMid)&lt;br /&gt;
  If midi == 0 Then Error.Raise(&amp;quot;Impossibile aprire il file Midi !&amp;quot;)&lt;br /&gt;
 &lt;br /&gt;
  Print &amp;quot;Esecuzione del brano Midi: &amp;quot;; File.Name(fileMid); &amp;quot;\n&amp;quot;&lt;br /&gt;
  &lt;br /&gt;
  Repeat&lt;br /&gt;
    err = WildMidi_GetOutput(midi, buf.Data, 128)&lt;br /&gt;
    &lt;br /&gt;
 &amp;lt;FONT color=gray&amp;gt;' ''Ad ogni ciclo aggiunge nel vettore &amp;quot;wave&amp;quot; i dati presenti nel vettore &amp;quot;buf&amp;quot;:''&amp;lt;/font&amp;gt;&lt;br /&gt;
    wave.Insert(buf)&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;FONT color=gray&amp;gt;' ''Ad ogni ciclo vengono scritti i dati audio nel sub-sistema PCM di ALsa, per consentire l'esecuzione audio di tali dati:''&amp;lt;/font&amp;gt;&lt;br /&gt;
    snd_pcm_writei(handle, buf, 128 / SizeOf(gb.Integer))&lt;br /&gt;
     &lt;br /&gt;
 &amp;lt;FONT color=gray&amp;gt;' ''Mostra il tempo trascorso dall'inizio dell'esecuzione del file wav:''&amp;lt;/font&amp;gt;&lt;br /&gt;
    somma += (buf.Count \ SizeOf(gb.Integer))&lt;br /&gt;
    Write &amp;quot;\rTempo trascorso: &amp;quot; &amp;amp; Time(0, 0, 0, (somma / frequenza) * 1000)&lt;br /&gt;
 &lt;br /&gt;
  Until err == 0&lt;br /&gt;
 &lt;br /&gt;
  Print &amp;quot;\n\nFine esecuzione audio !&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
  generaWAV(wave, fileMid)&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;FONT color=gray&amp;gt;' ''Va in chiusura:''&amp;lt;/font&amp;gt;&lt;br /&gt;
  err = WildMidi_Close(midi)&lt;br /&gt;
  If err &amp;lt; 0 Then Error.Raise(&amp;quot;Errore nella chiusura del processo dei dati Midi !&amp;quot;)&lt;br /&gt;
    &lt;br /&gt;
  WildMidi_Shutdown()&lt;br /&gt;
  snd_pcm_close(handle)&lt;br /&gt;
  &lt;br /&gt;
  Print &amp;quot;Librerie chiuse !&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
  Print &amp;quot;************************\n\n&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 End&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 Private Function inizializzaAlsa(frequenza As Integer) As Pointer&lt;br /&gt;
 &lt;br /&gt;
  Dim err As Integer&lt;br /&gt;
  Dim handle As Pointer&lt;br /&gt;
  Dim nomen As String = &amp;quot;default&amp;quot;&lt;br /&gt;
  Dim SND_PCM_STREAM_PLAYBACK As Byte = 0&lt;br /&gt;
  Dim SND_PCM_ACCESS_RW_INTERLEAVED As Byte = 3&lt;br /&gt;
  Dim canali As Byte = 2&lt;br /&gt;
  &lt;br /&gt;
 &amp;lt;FONT color=gray&amp;gt;' ''Apre il sub-sistema PCM di Alsa creando un apposito &amp;quot;handle&amp;quot;:''&amp;lt;/font&amp;gt;&lt;br /&gt;
  err = snd_pcm_open(VarPtr(handle), nomen, SND_PCM_STREAM_PLAYBACK, 0)&lt;br /&gt;
  If err &amp;lt; 0 Then Error.Raise(&amp;quot;Playback open error: &amp;quot; &amp;amp; snd_strerror(err))&lt;br /&gt;
  &lt;br /&gt;
 &amp;lt;FONT color=gray&amp;gt;' ''Imposta i parametri hardware/software dell'interfaccia PCM di ALsa:''&amp;lt;/font&amp;gt;&lt;br /&gt;
  err = snd_pcm_set_params(handle, 2, SND_PCM_ACCESS_RW_INTERLEAVED, canali, frequenza, 1, 500000)&lt;br /&gt;
  If err &amp;lt; 0 Then Error.Raise(&amp;quot;Playback open error: &amp;quot; &amp;amp; snd_strerror(err))&lt;br /&gt;
  &lt;br /&gt;
  Return handle&lt;br /&gt;
   &lt;br /&gt;
 End&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 Private Procedure generaWAV(wavArr As Byte[], percorsoFileMID As String)  &amp;lt;FONT color=gray&amp;gt;' ''Procedura per generare il file WAV''&amp;lt;/font&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
  Dim s1, s2, nomeFileWAV As String&lt;br /&gt;
  &lt;br /&gt;
  s1 = &amp;lt;FONT color=#B22222&amp;gt;creaChunkIniziale(wavArr)&amp;lt;/font&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
  s2 = wavArr.ToString(0, wavArr.Max)&lt;br /&gt;
     &lt;br /&gt;
  Print &amp;quot;\nDimensione dati grezzi audio = &amp;quot;; Len(s2); &amp;quot; byte&amp;quot;&lt;br /&gt;
  Print &amp;quot;Dimensione file audio = &amp;quot;; Len(s2) + 40; &amp;quot; byte&amp;quot;&lt;br /&gt;
  Print &amp;quot;Durata del brano audio = &amp;quot;; Format(((Len(s2) * 8) / 705600) / 2, &amp;quot;#.00&amp;quot;); &amp;quot; sec.\n&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
  nomeFileWAV = File.BaseName(percorsoFileMID)&lt;br /&gt;
     &lt;br /&gt;
  File.Save(&amp;quot;&amp;lt;FONT color=darkgreen&amp;gt;''/percorso/del/finale/file''&amp;lt;/font&amp;gt;&amp;quot; &amp;amp;/ nomeFileWAV &amp;amp; &amp;quot;&amp;lt;FONT color=gray&amp;gt;''.wav''&amp;lt;/font&amp;gt;&amp;quot;, s1 &amp;amp; s2)&lt;br /&gt;
          &lt;br /&gt;
  Print &amp;quot;Termine creazione del file audio: &amp;quot;; nomeFileWAV; &amp;quot;.wav&amp;quot;&lt;br /&gt;
   &lt;br /&gt;
 End&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 Private Function creaChunkIniziale(wavArr As Byte[]) As String  &amp;lt;FONT color=gray&amp;gt;' ''Procedura per generare il chunk iniziale del file WAV finale''&amp;lt;/font&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
  Dim dim_prewav, totale_dimensione, meno_otto As Integer&lt;br /&gt;
  Dim chunk, cvr As String&lt;br /&gt;
  Dim bb As New Byte[]&lt;br /&gt;
  Dim b As Byte&lt;br /&gt;
    &lt;br /&gt;
  dim_prewav = wavArr.Count&lt;br /&gt;
  &lt;br /&gt;
  totale_dimensione = 44 + dim_prewav&lt;br /&gt;
 &lt;br /&gt;
  meno_otto = totale_dimensione - 8&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;FONT color=gray&amp;gt;' ''Si ricava il formato &amp;quot;little-Endian&amp;quot; del valore di &amp;quot;meno_otto&amp;quot;:''&amp;lt;/font&amp;gt;&lt;br /&gt;
  cvr = Hex(((meno_otto \ CLong(2 ^ 24)) And &amp;amp;FF) Or ((meno_otto * CLong(2 ^ 8)) And &amp;amp;FF0000) Or ((meno_otto \ CLong(2 ^ 8)) And &amp;amp;FF00&amp;amp;) Or ((meno_otto * CLong(2 ^ 24)) And &amp;amp;FF000000), 8)&lt;br /&gt;
  &lt;br /&gt;
  For b = 0 To 3&lt;br /&gt;
    bb.Push(CByte(Val(&amp;quot;&amp;amp;&amp;quot; &amp;amp; Mid(cvr, (2 * b) + 1, 2))))&lt;br /&gt;
  Next&lt;br /&gt;
  &lt;br /&gt;
  cvr = Hex(((dim_prewav \ CLong(2 ^ 24)) And &amp;amp;FF) Or ((dim_prewav * CLong(2 ^ 8)) And &amp;amp;FF0000) Or ((dim_prewav \ CLong(2 ^ 8)) And &amp;amp;FF00&amp;amp;) Or ((dim_prewav * CLong(2 ^ 24)) And &amp;amp;FF000000), 8)&lt;br /&gt;
 &lt;br /&gt;
  For b = 0 To 3&lt;br /&gt;
    bb.Push(CByte(Val(&amp;quot;&amp;amp;&amp;quot; &amp;amp; Mid(cvr, (2 * b) + 1, 2))))&lt;br /&gt;
  Next&lt;br /&gt;
  &lt;br /&gt;
  chunk = &amp;quot;RIFF&amp;quot; &amp;amp; bb.ToString(0, 4) &amp;amp; &amp;quot;WAVEfmt &amp;quot; &amp;amp; Chr(&amp;amp;10) &amp;amp; Chr(&amp;amp;00) &amp;amp; Chr(&amp;amp;00) &amp;amp; Chr(&amp;amp;00) &amp;amp;&lt;br /&gt;
          Chr(&amp;amp;01) &amp;amp; Chr(&amp;amp;00) &amp;amp; Chr(&amp;amp;02) &amp;amp; Chr(&amp;amp;00) &amp;amp; Chr(&amp;amp;44) &amp;amp; Chr(&amp;amp;AC) &amp;amp; Chr(&amp;amp;00) &amp;amp; Chr(&amp;amp;00) &amp;amp; Chr(&amp;amp;10) &amp;amp;&lt;br /&gt;
          Chr(&amp;amp;B1) &amp;amp; Chr(&amp;amp;02) &amp;amp; Chr(&amp;amp;00) &amp;amp; Chr(&amp;amp;04) &amp;amp; Chr(&amp;amp;00) &amp;amp; Chr(&amp;amp;10) &amp;amp; Chr(&amp;amp;00) &amp;amp; &amp;quot;data&amp;quot; &amp;amp; bb.ToString(4, 4)&lt;br /&gt;
  &lt;br /&gt;
  Return chunk&lt;br /&gt;
  &lt;br /&gt;
 End&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Riferimenti=&lt;br /&gt;
* https://natonelbronx.wordpress.com/2007/07/12/ascoltare-midi-su-linux-debianubuntu/&lt;/div&gt;</summary>
		<author><name>Vuott</name></author>
	</entry>
	<entry>
		<id>https://www.gambas-it.org/wiki/index.php?title=Ottenere_un_file_WAV_da_un_file_Midi_con_le_funzioni_esterne_del_API_di_WildMidi&amp;diff=42731</id>
		<title>Ottenere un file WAV da un file Midi con le funzioni esterne del API di WildMidi</title>
		<link rel="alternate" type="text/html" href="https://www.gambas-it.org/wiki/index.php?title=Ottenere_un_file_WAV_da_un_file_Midi_con_le_funzioni_esterne_del_API_di_WildMidi&amp;diff=42731"/>
		<updated>2025-10-27T08:32:16Z</updated>

		<summary type="html">&lt;p&gt;Vuott: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Come è noto, non è possibile parlare di una vera e propria ''conversione'' di dati da Midi a formato ''audio''. E' possibile, però, ''ottenere'' un file audio, ad esempio WAV, da dati Midi.&lt;br /&gt;
&lt;br /&gt;
Il presupposto essenziale, per fare ciò, è avere una funzione che ''ricavi'', produca dati audio grezzi dal file Midi, e che ''restituisca'' i dati audio grezzi ricavati, affinché possano essere salvati in un file. Tali dati audio grezzi potranno, così, essere salvati in un file audio di tipo .WAV, avendo, però, l'accortezza di premettere ad essi i dati del ''chunk'' iniziale che contraddistingue i file audio WAV.&lt;br /&gt;
&lt;br /&gt;
Le risorse dell'[http://wildmidi.sourceforge.net/?id=manpages API di WildMidi] consentono di generare un flusso di dati audio corrispondenti ad un file Midi. Faremo uso, dunque, in Gambas delle funzioni esterne della libreria condivisa: &amp;quot;''libWildMidi.so.2.1.0'' &amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Di seguito mostreremo un paio di semplici esempi.&lt;br /&gt;
&lt;br /&gt;
===1° esempio===&lt;br /&gt;
In questo esempio oltre ad utilizzare la libreria di ''WildMidi'', utilizzeremo anche due funzioni esterne della libreria di C per leggere e scrivere in un file.&lt;br /&gt;
 Library &amp;quot;libWildMidi:2.1.0&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;FONT color=gray&amp;gt;' ''WildMidi_Init  (const char *config_file, unsigned short int rate, unsigned short int options):''&lt;br /&gt;
 ' ''Intializes &amp;quot;libWildMidi&amp;quot; in preparation for playback.''&amp;lt;/font&amp;gt;&lt;br /&gt;
 Private Extern WildMidi_Init(config_file As String, rate As Integer, options As Short) As Integer&lt;br /&gt;
  &lt;br /&gt;
 &amp;lt;FONT color=gray&amp;gt;' ''midi *WildMidi_Open (const char *midifile):''&lt;br /&gt;
 ' ''Open  a MIDI file pointed to by midifile for processing. This file must be in standard midi format.''&lt;br /&gt;
 ' ''It returns a handle for the midi file opened. This handle is used by most functions in libWildMidi to identify which midi file we are refering to.''&amp;lt;/font&amp;gt;&lt;br /&gt;
 Private Extern WildMidi_Open(midifile As String) As Pointer&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;FONT color=gray&amp;gt;' ''int  WildMidi_GetOutput  (midi *handle, char *buffer, unsigned long insize)''&lt;br /&gt;
 ' ''Places size bytes of audio data from a  handle,  previously  opened  by WildMidi_Open() or WildMidi_OpenBuffer(), into a buffer pointer to by buffer.''&lt;br /&gt;
 ' ''Buffer must be atleast size bytes, with size being a multiple of 4 as the data is stored in 16 bit interleaved stereo format.''&amp;lt;/font&amp;gt;&lt;br /&gt;
 Private Extern WildMidi_GetOutput(handle As Pointer, buffer As Pointer, insize As Long) As Integer&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;FONT color=gray&amp;gt;' ''int WildMidi_Close (midi *handle)''&lt;br /&gt;
 ' ''Finish processing MIDI data or file. &amp;quot;handle&amp;quot; the indentifier obtained from opening a midi file with &amp;quot;WildMidi_Open()&amp;quot;.''&amp;lt;/font&amp;gt;&lt;br /&gt;
 Private Extern WildMidi_Close(handle As Pointer) As Integer&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;FONT color=gray&amp;gt;' ''void WildMidi_Shutdown(void)''&lt;br /&gt;
 ' ''Shuts  down  the wildmidi library, resetting data and freeing up memory used by the library.''&amp;lt;/font&amp;gt;&lt;br /&gt;
 Private Extern WildMidi_Shutdown()&lt;br /&gt;
  &lt;br /&gt;
 &lt;br /&gt;
 Public Sub Main()&lt;br /&gt;
 &lt;br /&gt;
  Dim err, &amp;lt;FONT color=darkorange&amp;gt;quantum&amp;lt;/font&amp;gt; As Integer&lt;br /&gt;
  Dim wav As File&lt;br /&gt;
  Dim midi, &amp;lt;FONT color=blue&amp;gt;buffer&amp;lt;/font&amp;gt; As Pointer&lt;br /&gt;
  Dim frequenza As Integer = 44100&lt;br /&gt;
  Dim fileMIDI, temporaneo As String&lt;br /&gt;
  &lt;br /&gt;
  fileMIDI = &amp;quot;&amp;lt;FONT color=darkgreen&amp;gt;''/percorso/del/file.mid''&amp;lt;/font&amp;gt;&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
  temporaneo = Temp(&amp;quot;mid&amp;quot;)&lt;br /&gt;
   &lt;br /&gt;
 &amp;lt;FONT color=gray&amp;gt;' ''Apre in scrittura il file iniziale temporaneo contenente i soli dati audio grezzi ricavati dal file Midi:''&amp;lt;/font&amp;gt;&lt;br /&gt;
  wav = Open temporaneo For Create&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;FONT color=gray&amp;gt;' ''Inizializza la libreria di &amp;quot;WildMidi&amp;quot;.&lt;br /&gt;
 ' ''Il primo parametro richiama il file che contiene la configurazione degli strumenti musicali che sarà utilizzata dalla libreria.''&lt;br /&gt;
 ' ''Il file di configurazione potrà essere: &amp;quot;/etc/timidity/freepats.cfg&amp;quot; o &amp;quot;/etc/wildmidi/wildmidi.cfg&amp;quot;, oppure &amp;quot;/etc/timidity/eawpats.cfg&amp;quot;:''&amp;lt;/font&amp;gt;&lt;br /&gt;
  err = WildMidi_Init(&amp;quot;/etc/timidity/freepats.cfg&amp;quot;, frequenza, 0)&lt;br /&gt;
  If err &amp;lt; 0 Then Error.Raise(&amp;quot;Errore nell'inizializzazione dell'interfaccia libWildMidi !&amp;quot;)&lt;br /&gt;
    &lt;br /&gt;
 &amp;lt;FONT color=gray&amp;gt;' ''Apre il file Midi, dal quale si dovrà ottenere un file WAV:''&amp;lt;/font&amp;gt;&lt;br /&gt;
  midi = WildMidi_Open(fileMIDI)&lt;br /&gt;
  If midi == 0 Then Error.Raise(&amp;quot;Impossibile aprire il file Midi !&amp;quot;)&lt;br /&gt;
  &lt;br /&gt;
 &amp;lt;FONT color=gray&amp;gt;' ''Alloca un'area di memoria che sarà puntata da una variabile di tipo &amp;quot;Puntatore&amp;quot;:''&amp;lt;/font&amp;gt;&lt;br /&gt;
  &amp;lt;FONT color=blue&amp;gt;buffer&amp;lt;/font&amp;gt; = Alloc(SizeOf(gb.Byte), &amp;lt;FONT color=maroon&amp;gt;128&amp;lt;/font&amp;gt;)&lt;br /&gt;
 &lt;br /&gt;
  Repeat&lt;br /&gt;
  &lt;br /&gt;
 &amp;lt;FONT color=gray&amp;gt;' ''Ad ogni giro viene riempita l'area allocata con un certo numero di dati Midi convertiti in dati audio da scrivere successivamente nel file WAV.''&lt;br /&gt;
 ' ''(In particolare, ad Alsa sarà passata la variabile di tipo &amp;quot;puntatore&amp;quot; - qui chiamata &amp;quot;buffer&amp;quot; - che ora viene riempita di dati):&amp;lt;/font&amp;gt;&lt;br /&gt;
    &amp;lt;FONT color=darkorange&amp;gt;quantum&amp;lt;/font&amp;gt; = WildMidi_GetOutput(midi, &amp;lt;FONT color=blue&amp;gt;buffer&amp;lt;/font&amp;gt;, &amp;lt;FONT color=maroon&amp;gt;128&amp;lt;/font&amp;gt;)&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;FONT color=gray&amp;gt;' ''Viene scritta nel file, puntato dalla varibile &amp;quot;wav&amp;quot;, una sola quantità di dati per ogni giro, presenti nell'area di memoria allocata e puntata dalla variabile &amp;quot;buffer&amp;quot;, pari al valore contenuto dalla variabile &amp;quot;quantum&amp;quot;:''&amp;lt;/font&amp;gt;&lt;br /&gt;
    write #wav, &amp;lt;FONT color=blue&amp;gt;buffer&amp;lt;/font&amp;gt;, &amp;lt;FONT color=darkorange&amp;gt;quantum&amp;lt;/font&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
  Until &amp;lt;FONT color=darkorange&amp;gt;quantum&amp;lt;/font&amp;gt; == 0&lt;br /&gt;
 &lt;br /&gt;
  Free(&amp;lt;FONT color=blue&amp;gt;buffer&amp;lt;/font&amp;gt;)&lt;br /&gt;
  wav.Close&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;FONT color=gray&amp;gt;' ''A questo punto, nel file iniziale temporaneo vi sono soltanto i dati grezzi audio utili per creare un vero file WAV''&lt;br /&gt;
 ' ''Ora bisognerà aggiungere a tali dati grezzi un blocco iniziale per identificare e caratterizzare il file WAV finale.''&lt;br /&gt;
 ' ''Procederemo a questa operazione in una sotto-procedura specifica a parte che ora andiamo a richiamare:''&amp;lt;/font&amp;gt;&lt;br /&gt;
  generaWAV(temporaneo)&lt;br /&gt;
  &lt;br /&gt;
  Print &amp;quot;\e[31mCreazione del file audio WAV terminata !&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;FONT color=gray&amp;gt;' ''Chiude l'elaborazione dei dati Midi da parte di &amp;quot;WildMidi&amp;quot;:''&amp;lt;/font&amp;gt;&lt;br /&gt;
  err = WildMidi_Close(midi)&lt;br /&gt;
  If err &amp;lt; 0 Then Error.Raise(&amp;quot;Errore nella chiusura del processo dei dati Midi !&amp;quot;)&lt;br /&gt;
    &lt;br /&gt;
 &amp;lt;FONT color=gray&amp;gt;' ''Chiude la libreria di &amp;quot;WildMidi&amp;quot;:''&amp;lt;/font&amp;gt;&lt;br /&gt;
  WildMidi_Shutdown()&lt;br /&gt;
  &lt;br /&gt;
 End&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 Private Procedure generaWAV(fltemp As String)&lt;br /&gt;
 &lt;br /&gt;
  Dim Ipw, dim_file, m8 As Integer&lt;br /&gt;
  Dim j As Byte&lt;br /&gt;
  Dim bb As New Byte[]&lt;br /&gt;
  Dim little_endian, primo_chunk, $prewav As String&lt;br /&gt;
  &lt;br /&gt;
 &amp;lt;FONT color=gray&amp;gt;' ''Si procede finalmente a creare il file WAV finale.&lt;br /&gt;
 ' ''La procedura è abbastanza complessa: si tratta di creare, come già detto sopra, il blocco iniziale distintivo del formato audio WAV, e di unirlo successivamente ai dati audio grezzi, ormai ripuliti dagli eventuali valori zero iniziali.''&amp;lt;/font&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;FONT color=gray&amp;gt;' ''Ricaviamo la dimensione del file temporaneo contenente i dati audio grezzi:''&amp;lt;/font&amp;gt;&lt;br /&gt;
  Ipw = Stat(fltemp).Size&lt;br /&gt;
  &lt;br /&gt;
 &amp;lt;FONT color=gray&amp;gt;' ''Ricaviamo la dimensione totale del futuro file. Essa sarà, dunque, data dai byte del primo blocco (&amp;quot;Chunk&amp;quot;) - contenente le informazioni sul file WAV ed i dati che lo distinguono ed identificano - pari a 44 byte più i dati audio grezzi del file temporaneo, i quali così vengono a formare il secondo blocco di dati del futuro file WAV.''&amp;lt;/font&amp;gt;&lt;br /&gt;
  dim_file = 44 + Ipw&lt;br /&gt;
  &lt;br /&gt;
 &amp;lt;FONT color=gray&amp;gt;' ''Ricaviamo il formato &amp;quot;little-endian&amp;quot; dellla dimensione del file meno gli otto byte iniziali. Il risultato sarà inserito dal 5° all'8° byte:''&amp;lt;/font&amp;gt;&lt;br /&gt;
  m8 = dim_file - 8&lt;br /&gt;
    &lt;br /&gt;
  little_endian = Hex(((m8 \ CLong(2 ^ 24)) And &amp;amp;FF) Or ((m8 * CLong(2 ^ 8)) And &amp;amp;FF0000) Or ((m8 \ CLong(2 ^ 8)) And &amp;amp;FF00&amp;amp;) Or ((m8 * CLong(2 ^ 24)) And &amp;amp;FF000000), 8)&lt;br /&gt;
    &lt;br /&gt;
  For j = 0 To 3&lt;br /&gt;
    bb.Push(CByte(Val(&amp;quot;&amp;amp;&amp;quot; &amp;amp; Mid(little_endian, (2 * j) + 1, 2))))&lt;br /&gt;
  Next&lt;br /&gt;
  &lt;br /&gt;
 &amp;lt;FONT color=gray&amp;gt;' ''Quindi ricaviamo il formato &amp;quot;little-endian&amp;quot; della dimensione del file temporaneo dei dati audio grezzi.''&lt;br /&gt;
 ' ''Il risultato sarà inserito alla fine del primo blocco (chunk):''&amp;lt;/font&amp;gt;&lt;br /&gt;
  little_endian = Hex(((Ipw \ CLong(2 ^ 24)) And &amp;amp;FF) Or ((Ipw * CLong(2 ^ 8)) And &amp;amp;FF0000) Or ((Ipw \ CLong(2 ^ 8)) And &amp;amp;FF00&amp;amp;) Or ((Ipw * CLong(2 ^ 24)) And &amp;amp;FF000000), 8)&lt;br /&gt;
  &lt;br /&gt;
  For j = 0 To 3&lt;br /&gt;
    bb.Push(CByte(Val(&amp;quot;&amp;amp;&amp;quot; &amp;amp; Mid(little_endian, (2 * j) + 1, 2))))&lt;br /&gt;
  Next&lt;br /&gt;
  &lt;br /&gt;
 &amp;lt;FONT color=gray&amp;gt;' ''Impostiamo i dati appartenenti al primo blocco del futuro file WAV&amp;quot;:''&amp;lt;/font&amp;gt;&lt;br /&gt;
  primo_chunk = &amp;quot;RIFF&amp;quot; &amp;amp; bb.ToString(0, 4) &amp;amp; &amp;quot;WAVEfmt &amp;quot; &amp;amp; Chr(&amp;amp;10) &amp;amp; Chr(&amp;amp;00) &amp;amp; Chr(&amp;amp;00) &amp;amp; Chr(&amp;amp;00) &amp;amp;&lt;br /&gt;
                Chr(&amp;amp;01) &amp;amp; Chr(&amp;amp;00) &amp;amp; Chr(&amp;amp;02) &amp;amp; Chr(&amp;amp;00) &amp;amp; Chr(&amp;amp;44) &amp;amp; Chr(&amp;amp;AC) &amp;amp; Chr(&amp;amp;00) &amp;amp; Chr(&amp;amp;00) &amp;amp; Chr(&amp;amp;10) &amp;amp;&lt;br /&gt;
                Chr(&amp;amp;B1) &amp;amp; Chr(&amp;amp;02) &amp;amp; Chr(&amp;amp;00) &amp;amp; Chr(&amp;amp;04) &amp;amp; Chr(&amp;amp;00) &amp;amp; Chr(&amp;amp;10) &amp;amp; Chr(&amp;amp;00) &amp;amp; &amp;quot;data&amp;quot; &amp;amp; bb.ToString(4, 4)&lt;br /&gt;
  &lt;br /&gt;
 &amp;lt;FONT color=gray&amp;gt;' ''Carichiamo i dati audio grezzi del file temporaneo&amp;quot;:''&amp;lt;/font&amp;gt;&lt;br /&gt;
  $prewav = File.Load(fltemp)&lt;br /&gt;
  &lt;br /&gt;
 &amp;lt;FONT color=gray&amp;gt;' ''Ecco, dunque, creiamo il file WAV finale unendo il primo blocco dei dati informativi e caratterizzanti il file WAV con i dati audio grezzi del file temporaneo&amp;quot;:''&amp;lt;/font&amp;gt;&lt;br /&gt;
  File.Save(&amp;quot;&amp;lt;FONT color=darkgreen&amp;gt;''/percorso/del/definitivo/file.wav''&amp;lt;/font&amp;gt;&amp;quot;, primo_chunk &amp;amp; $prewav)&lt;br /&gt;
 &lt;br /&gt;
 End&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===2° esempio===&lt;br /&gt;
In quest'altro esempio, mentre viene effettuata la registrazione dei dati audio ottenuti dal Midi, contemporaneamente si avrà l'ascolto dell'audio che si va registrando. Si utilizzerà sia la libreria &amp;quot;''libWildMidi''&amp;quot; che la libreria di Alsa &amp;quot;''libasound''&amp;quot;.&lt;br /&gt;
&amp;lt;BR&amp;gt;Inoltre, per l'accumulo dei dati audio (che saranno così registrati ed anche eseguiti) ottenuti dai dati Midi, si utilizzerà un vettore di tipo ''Byte[]'', anziché una variabile di tipo ''Puntatore'' come nell'esempio precedente:&lt;br /&gt;
 Library &amp;quot;libWildMidi:2.1.0&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;FONT color=gray&amp;gt;' ''WildMidi_Init  (const char *config_file, unsigned short int rate, unsigned short int options):''&lt;br /&gt;
 ' ''Intializes &amp;quot;libWildMidi&amp;quot; in preparation for playback.''&amp;lt;/font&amp;gt;&lt;br /&gt;
 Private Extern WildMidi_Init(config_file As String, rate As Integer, options As Short) As Integer&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;FONT color=gray&amp;gt;' ''int WildMidi_MasterVolume (unsigned char master_volume)''&lt;br /&gt;
 ' ''Sets the overall audio level of the library.''&amp;lt;/font&amp;gt;&lt;br /&gt;
 Private Extern WildMidi_MasterVolume(master_volume As Byte) as Integer&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;FONT color=gray&amp;gt;' ''midi *WildMidi_Open (const char *midifile):''&lt;br /&gt;
 ' ''Open  a MIDI file pointed to by midifile for processing. This file must be in standard midi format.''&lt;br /&gt;
 ' ''It returns a handle for the midi file opened. This handle is used by most functions in libWildMidi to identify which midi file we are refering to.''&amp;lt;/font&amp;gt;&lt;br /&gt;
 Private Extern WildMidi_Open(midifile As String) As Pointer&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;FONT color=gray&amp;gt;' ''int  WildMidi_GetOutput  (midi *handle, char *buffer, unsigned long insize)''&lt;br /&gt;
 ' ''Places size bytes of audio data from a  handle,  previously  opened  by WildMidi_Open() or WildMidi_OpenBuffer(), into a buffer pointer to by buffer.''&lt;br /&gt;
 ' ''Buffer must be atleast size bytes, with size being a multiple of 4 as the data is stored in 16 bit interleaved stereo format.''&amp;lt;/font&amp;gt;&lt;br /&gt;
 Private Extern WildMidi_GetOutput(handle As Pointer, buffer As Pointer, insize As Long) As Integer&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;FONT color=gray&amp;gt;' ''int WildMidi_Close (midi *handle)''&lt;br /&gt;
 ' ''Finish processing MIDI data or file. &amp;quot;handle&amp;quot; the indentifier obtained from opening a midi file with &amp;quot;WildMidi_Open()&amp;quot;.''&amp;lt;/font&amp;gt;&lt;br /&gt;
 Private Extern WildMidi_Close(handle As Pointer) As Integer&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;FONT color=gray&amp;gt;' ''void WildMidi_Shutdown(void)''&lt;br /&gt;
 ' ''Shuts  down  the wildmidi library, resetting data and freeing up memory used by the library.''&amp;lt;/font&amp;gt;&lt;br /&gt;
 Private Extern WildMidi_Shutdown()&lt;br /&gt;
  &lt;br /&gt;
 &lt;br /&gt;
 Library &amp;quot;libasound:2&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;FONT color=gray&amp;gt;' ''int snd_pcm_open(snd_pcm_t **pcm, const char *name, snd_pcm_stream_t stream, int mode)''&lt;br /&gt;
 ' ''Opens a PCM.''&amp;lt;/font&amp;gt;&lt;br /&gt;
 Private Extern snd_pcm_open(pcmP As Pointer, nome As String, stream As Integer, mode As Integer) As Integer&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;FONT color=gray&amp;gt;' ''const char * snd_strerror (int errnum)''&lt;br /&gt;
 ' ''Returns the message for an error code.''&amp;lt;/font&amp;gt;&lt;br /&gt;
 Private Extern snd_strerror(errnum As Integer) As String&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;FONT color=gray&amp;gt;' ''int snd_pcm_set_params (snd_pcm_t *pcm, snd_pcm_format_t format, snd_pcm_access_t access, unsigned int canali, unsigned int rate, int soft_resample, unsigned int latency)''&lt;br /&gt;
 ' ''Set the hardware and software parameters in a simple way.''&amp;lt;/font&amp;gt;&lt;br /&gt;
 Private Extern snd_pcm_set_params(pcmP As Pointer, formatB As Byte, accessB As Byte, canali As Integer, rate As Integer, soft_resample As Integer, latency As Integer) As Integer&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;FONT color=gray&amp;gt;' ''snd_pcm_sframes_t snd_pcm_writei(snd_pcm_t *pcm, const void *buffer, snd_pcm_uframes_t size)''&lt;br /&gt;
 ' ''Write interleaved frames to a PCM.''&amp;lt;/font&amp;gt;&lt;br /&gt;
 Private Extern snd_pcm_writei(pcmP As Pointer, buffP As Byte[], uframes As Long) As Integer&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;FONT color=gray&amp;gt;' ''int snd_pcm_close(snd_pcm_t *pcm)''&lt;br /&gt;
 ' ''Close PCM handle.''&amp;lt;/font&amp;gt;&lt;br /&gt;
 Private Extern snd_pcm_close(pcmP As Pointer) As Integer&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 Public Sub Form_Open()&lt;br /&gt;
 &lt;br /&gt;
  Dim err, somma As Integer&lt;br /&gt;
  Dim midi, handle As Pointer&lt;br /&gt;
  Dim frequenza As Integer = 44100&lt;br /&gt;
  Dim buf As New Byte[128]&lt;br /&gt;
  Dim wave As New Byte[]&lt;br /&gt;
  Dim fileMid As String&lt;br /&gt;
  &lt;br /&gt;
  fileMid = &amp;quot;&amp;lt;FONT color=darkgreen&amp;gt;''/percorso/del/file.mid''&amp;lt;/font&amp;gt;&amp;quot;&lt;br /&gt;
  &lt;br /&gt;
 &amp;lt;FONT color=gray&amp;gt;' ''Va ad inizializzare l'interfaccia PCM di Alsa:''&amp;lt;/font&amp;gt;&lt;br /&gt;
  handle = inizializzaAlsa(frequenza)&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;FONT color=gray&amp;gt;' ''Inizializza la libreria di &amp;quot;WildMidi&amp;quot;.&lt;br /&gt;
 ' ''Il primo parametro richiama il file che contiene la configurazione degli strumenti musicali che sarà utilizzata dalla libreria.''&lt;br /&gt;
 ' ''Il file di configurazione potrà essere: &amp;quot;/etc/timidity/freepats.cfg&amp;quot; o &amp;quot;/etc/wildmidi/wildmidi.cfg&amp;quot;, oppure &amp;quot;/etc/timidity/eawpats.cfg&amp;quot;:''&amp;lt;/font&amp;gt;&lt;br /&gt;
  err = WildMidi_Init(&amp;quot;/etc/timidity/freepats.cfg&amp;quot;, frequenza, 0)&lt;br /&gt;
  If err &amp;lt; 0 Then Error.Raise(&amp;quot;Errore nell'inizializzazione dell'interfaccia libWildMidi !&amp;quot;)&lt;br /&gt;
 &lt;br /&gt;
  err = WildMidi_MasterVolume(100)&lt;br /&gt;
  If err &amp;lt; 0 Then Error.Raise(&amp;quot;Errore nell'impostazione del Volume Generale !&amp;quot;)&lt;br /&gt;
  &lt;br /&gt;
  midi = WildMidi_Open(fileMid)&lt;br /&gt;
  If midi == 0 Then Error.Raise(&amp;quot;Impossibile aprire il file Midi !&amp;quot;)&lt;br /&gt;
 &lt;br /&gt;
  Print &amp;quot;Esecuzione del brano Midi: &amp;quot;; File.Name(fileMid); &amp;quot;\n&amp;quot;&lt;br /&gt;
  &lt;br /&gt;
  Repeat&lt;br /&gt;
    err = WildMidi_GetOutput(midi, buf.Data, 128)&lt;br /&gt;
    &lt;br /&gt;
 &amp;lt;FONT color=gray&amp;gt;' ''Ad ogni ciclo aggiunge nel vettore &amp;quot;wave&amp;quot; i dati presenti nel vettore &amp;quot;buf&amp;quot;:''&amp;lt;/font&amp;gt;&lt;br /&gt;
    wave.Insert(buf)&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;FONT color=gray&amp;gt;' ''Ad ogni ciclo vengono scritti i dati audio nel sub-sistema PCM di ALsa, per consentire l'esecuzione audio di tali dati:''&amp;lt;/font&amp;gt;&lt;br /&gt;
    snd_pcm_writei(handle, buf, 128 / SizeOf(gb.Integer))&lt;br /&gt;
     &lt;br /&gt;
 &amp;lt;FONT color=gray&amp;gt;' ''Mostra il tempo trascorso dall'inizio dell'esecuzione del file wav:''&amp;lt;/font&amp;gt;&lt;br /&gt;
    somma += (buf.Count \ SizeOf(gb.Integer))&lt;br /&gt;
    Write &amp;quot;\rTempo trascorso: &amp;quot; &amp;amp; Time(0, 0, 0, (somma / frequenza) * 1000)&lt;br /&gt;
 &lt;br /&gt;
  Until err == 0&lt;br /&gt;
 &lt;br /&gt;
  Print &amp;quot;\n\nFine esecuzione audio !&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
  generaWAV(wave, fileMid)&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;FONT color=gray&amp;gt;' ''Va in chiusura:''&amp;lt;/font&amp;gt;&lt;br /&gt;
  err = WildMidi_Close(midi)&lt;br /&gt;
  If err &amp;lt; 0 Then Error.Raise(&amp;quot;Errore nella chiusura del processo dei dati Midi !&amp;quot;)&lt;br /&gt;
    &lt;br /&gt;
  WildMidi_Shutdown()&lt;br /&gt;
  snd_pcm_close(handle)&lt;br /&gt;
  &lt;br /&gt;
  Print &amp;quot;Librerie chiuse !&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
  Print &amp;quot;************************\n\n&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 End&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 Private Function inizializzaAlsa(frequenza As Integer) As Pointer&lt;br /&gt;
 &lt;br /&gt;
  Dim err As Integer&lt;br /&gt;
  Dim handle As Pointer&lt;br /&gt;
  Dim nomen As String = &amp;quot;default&amp;quot;&lt;br /&gt;
  Dim SND_PCM_STREAM_PLAYBACK As Byte = 0&lt;br /&gt;
  Dim SND_PCM_ACCESS_RW_INTERLEAVED As Byte = 3&lt;br /&gt;
  Dim canali As Byte = 2&lt;br /&gt;
  &lt;br /&gt;
 &amp;lt;FONT color=gray&amp;gt;' ''Apre il sub-sistema PCM di Alsa creando un apposito &amp;quot;handle&amp;quot;:''&amp;lt;/font&amp;gt;&lt;br /&gt;
  err = snd_pcm_open(VarPtr(handle), nomen, SND_PCM_STREAM_PLAYBACK, 0)&lt;br /&gt;
  If err &amp;lt; 0 Then Error.Raise(&amp;quot;Playback open error: &amp;quot; &amp;amp; snd_strerror(err))&lt;br /&gt;
  &lt;br /&gt;
 &amp;lt;FONT color=gray&amp;gt;' ''Imposta i parametri hardware/software dell'interfaccia PCM di ALsa:''&amp;lt;/font&amp;gt;&lt;br /&gt;
  err = snd_pcm_set_params(handle, 2, SND_PCM_ACCESS_RW_INTERLEAVED, canali, frequenza, 1, 500000)&lt;br /&gt;
  If err &amp;lt; 0 Then Error.Raise(&amp;quot;Playback open error: &amp;quot; &amp;amp; snd_strerror(err))&lt;br /&gt;
  &lt;br /&gt;
  Return handle&lt;br /&gt;
   &lt;br /&gt;
 End&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 Private Procedure generaWAV(wavArr As Byte[], percorsoFileMID As String)  &amp;lt;FONT color=gray&amp;gt;' ''Procedura per generare il file WAV''&amp;lt;/font&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
  Dim s1, s2, nomeFileWAV As String&lt;br /&gt;
  &lt;br /&gt;
  s1 = &amp;lt;FONT color=#B22222&amp;gt;creaChunkIniziale(wavArr)&amp;lt;/font&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
  s2 = wavArr.ToString(0, wavArr.Max)&lt;br /&gt;
     &lt;br /&gt;
  Print &amp;quot;\nDimensione dati grezzi audio = &amp;quot;; Len(s2); &amp;quot; byte&amp;quot;&lt;br /&gt;
  Print &amp;quot;Dimensione file audio = &amp;quot;; Len(s2) + 40; &amp;quot; byte&amp;quot;&lt;br /&gt;
  Print &amp;quot;Durata del brano audio = &amp;quot;; Format(((Len(s2) * 8) / 705600) / 2, &amp;quot;#.00&amp;quot;); &amp;quot; sec.\n&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
  nomeFileWAV = File.BaseName(percorsoFileMID)&lt;br /&gt;
     &lt;br /&gt;
  File.Save(&amp;quot;&amp;lt;FONT color=darkgreen&amp;gt;''/percorso/del/finale/file''&amp;lt;/font&amp;gt;&amp;quot; &amp;amp;/ nomeFileWAV &amp;amp; &amp;quot;&amp;lt;FONT color=gray&amp;gt;''.wav''&amp;lt;/font&amp;gt;&amp;quot;, s1 &amp;amp; s2)&lt;br /&gt;
          &lt;br /&gt;
  Print &amp;quot;Termine creazione del file audio: &amp;quot;; nomeFileWAV; &amp;quot;.wav&amp;quot;&lt;br /&gt;
   &lt;br /&gt;
 End&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 Private Function creaChunkIniziale(wavArr As Byte[]) As String  &amp;lt;FONT color=gray&amp;gt;' ''Procedura per generare il chunk iniziale del file WAV finale''&amp;lt;/font&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
  Dim dim_prewav, totale_dimensione, meno_otto As Integer&lt;br /&gt;
  Dim chunk, cvr As String&lt;br /&gt;
  Dim bb As New Byte[]&lt;br /&gt;
  Dim b As Byte&lt;br /&gt;
    &lt;br /&gt;
  dim_prewav = wavArr.Count&lt;br /&gt;
  &lt;br /&gt;
  totale_dimensione = 44 + dim_prewav&lt;br /&gt;
 &lt;br /&gt;
  meno_otto = totale_dimensione - 8&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;FONT color=gray&amp;gt;' ''Si ricava il formato &amp;quot;little-Endian&amp;quot; del valore di &amp;quot;meno_otto&amp;quot;:''&amp;lt;/font&amp;gt;&lt;br /&gt;
  cvr = Hex(((meno_otto \ CLong(2 ^ 24)) And &amp;amp;FF) Or ((meno_otto * CLong(2 ^ 8)) And &amp;amp;FF0000) Or ((meno_otto \ CLong(2 ^ 8)) And &amp;amp;FF00&amp;amp;) Or ((meno_otto * CLong(2 ^ 24)) And &amp;amp;FF000000), 8)&lt;br /&gt;
  &lt;br /&gt;
  For j = 0 To 3&lt;br /&gt;
    bb.Push(CByte(Val(&amp;quot;&amp;amp;&amp;quot; &amp;amp; Mid(cvr, (2 * j) + 1, 2))))&lt;br /&gt;
  Next&lt;br /&gt;
  &lt;br /&gt;
  cvr = Hex(((dim_prewav \ CLong(2 ^ 24)) And &amp;amp;FF) Or ((dim_prewav * CLong(2 ^ 8)) And &amp;amp;FF0000) Or ((dim_prewav \ CLong(2 ^ 8)) And &amp;amp;FF00&amp;amp;) Or ((dim_prewav * CLong(2 ^ 24)) And &amp;amp;FF000000), 8)&lt;br /&gt;
 &lt;br /&gt;
  For b = 0 To 3&lt;br /&gt;
    bb.Push(CByte(Val(&amp;quot;&amp;amp;&amp;quot; &amp;amp; Mid(cvr, (2 * b) + 1, 2))))&lt;br /&gt;
  Next&lt;br /&gt;
  &lt;br /&gt;
  chunk = &amp;quot;RIFF&amp;quot; &amp;amp; bb.ToString(0, 4) &amp;amp; &amp;quot;WAVEfmt &amp;quot; &amp;amp; Chr(&amp;amp;10) &amp;amp; Chr(&amp;amp;00) &amp;amp; Chr(&amp;amp;00) &amp;amp; Chr(&amp;amp;00) &amp;amp;&lt;br /&gt;
          Chr(&amp;amp;01) &amp;amp; Chr(&amp;amp;00) &amp;amp; Chr(&amp;amp;02) &amp;amp; Chr(&amp;amp;00) &amp;amp; Chr(&amp;amp;44) &amp;amp; Chr(&amp;amp;AC) &amp;amp; Chr(&amp;amp;00) &amp;amp; Chr(&amp;amp;00) &amp;amp; Chr(&amp;amp;10) &amp;amp;&lt;br /&gt;
          Chr(&amp;amp;B1) &amp;amp; Chr(&amp;amp;02) &amp;amp; Chr(&amp;amp;00) &amp;amp; Chr(&amp;amp;04) &amp;amp; Chr(&amp;amp;00) &amp;amp; Chr(&amp;amp;10) &amp;amp; Chr(&amp;amp;00) &amp;amp; &amp;quot;data&amp;quot; &amp;amp; bb.ToString(4, 4)&lt;br /&gt;
  &lt;br /&gt;
  Return chunk&lt;br /&gt;
  &lt;br /&gt;
 End&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Riferimenti=&lt;br /&gt;
* https://natonelbronx.wordpress.com/2007/07/12/ascoltare-midi-su-linux-debianubuntu/&lt;/div&gt;</summary>
		<author><name>Vuott</name></author>
	</entry>
	<entry>
		<id>https://www.gambas-it.org/wiki/index.php?title=Eseguire_un_file_Midi_con_le_risorse_del_API_di_WildMidi_e_di_ALSA&amp;diff=42730</id>
		<title>Eseguire un file Midi con le risorse del API di WildMidi e di ALSA</title>
		<link rel="alternate" type="text/html" href="https://www.gambas-it.org/wiki/index.php?title=Eseguire_un_file_Midi_con_le_risorse_del_API_di_WildMidi_e_di_ALSA&amp;diff=42730"/>
		<updated>2025-10-27T07:46:48Z</updated>

		<summary type="html">&lt;p&gt;Vuott: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;La libreria di '''''WildMidi''''' contiene funzioni e risorse per leggere e gestire file Midi.&lt;br /&gt;
&lt;br /&gt;
In particolare la libreria ''WildMIDI'' converte i file MIDI in dati ''audio'' che potranno essere inviati ad altra applicazione capace di eseguire i dati audio, come ad esempio Alsa, per farli ascoltare. L'[http://it.wikipedia.org/wiki/Application_programming_interface API] della libreria è progettata in modo che sia facile inserire ''WildMIDI'' in applicazioni che prevedono anche la riproduzione di file Midi.&lt;br /&gt;
&lt;br /&gt;
La libreria da utilizzare in Gambas è attualmente la seguente: &amp;quot;''libWildMidi.so.2.1.0'' &amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Bisognerà avere installato nel sistema il banco di suoni (''soundfont bank''):  ''Freepats''.&lt;br /&gt;
&lt;br /&gt;
===Esempio pratico===&lt;br /&gt;
Il semplice esempio che segue è sostanzialmente strutturato in due parti:&lt;br /&gt;
* la prima dedicata alle funzionalità di ''WildMidi'' che passeranno i dati audio, derivati dalla conversione di un file Midi, ad Alsa;&lt;br /&gt;
* la seconda dedicata ad Alsa, che, ricevuti i dati audio da ''WildMidi'', li eseguirà effettivamente.&lt;br /&gt;
I dati audio (ottenuti dalla conversione dei dei dati Midi) saranno passati da ''WildMidi'' ad Alsa attraverso una variabile di tipo ''Puntatore'' che punta ad un'area allocata riempita dei predetti dati audio dalla funzione ''WildMidi_GetOutput()'' di ''WildMidi''.&lt;br /&gt;
 Library &amp;quot;&amp;lt;FONT color=blue&amp;gt;libWildMidi:2.1.0&amp;lt;/font&amp;gt;&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;FONT color=gray&amp;gt;' ''int WildMidi_Init  (const char *config_file, unsigned short int rate, unsigned short int options)''&lt;br /&gt;
 ' ''Intializes &amp;quot;libWildMidi&amp;quot; in preparation for playback.''&amp;lt;/font&amp;gt;&lt;br /&gt;
 Private Extern WildMidi_Init(config_file As String, rate As Integer, options As Short) As Integer&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;FONT color=gray&amp;gt;' ''int WildMidi_MasterVolume (unsigned char master_volume)''&lt;br /&gt;
 ' ''Sets the overall library volume level to master_volume. The range of master_volume is between 0 And 127 with 100 being the default.''&amp;lt;/font&amp;gt;&lt;br /&gt;
 Private Extern WildMidi_MasterVolume(master_volume As Byte) As Integer&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;FONT color=gray&amp;gt;' ''midi *WildMidi_Open (const char *midifile)''&lt;br /&gt;
 ' ''Open  a MIDI file pointed to by midifile for processing. This file must be in standard midi format.''&lt;br /&gt;
 ' ''It returns a handle for the midi file opened. This handle is used by most functions in libWildMidi to identify which midi file we are refering to.''&amp;lt;/font&amp;gt;&lt;br /&gt;
 Private Extern WildMidi_Open(midifile As String) As Pointer&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;FONT color=gray&amp;gt;' ''int  WildMidi_GetOutput  (midi *handle, char *buffer, unsigned long insize)''&lt;br /&gt;
 ' ''Places size bytes of audio data from a  handle,  previously  opened  by WildMidi_Open() or WildMidi_OpenBuffer(), into a buffer pointer to by buffer.''&lt;br /&gt;
 ' ''Buffer must be atleast size bytes, &amp;lt;SPAN style=&amp;quot;text-decoration:underline&amp;quot;&amp;gt;with size being a multiple of 4 as the data is stored in 16 bit interleaved stereo format&amp;lt;/span&amp;gt;.''&amp;lt;/font&amp;gt;&lt;br /&gt;
 Private Extern WildMidi_GetOutput(handle As Pointer, buffer As Pointer, insize As Long) As Integer&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;FONT color=gray&amp;gt;' ''int WildMidi_Close (midi *handle)''&lt;br /&gt;
 ' ''Finish processing MIDI data or file. &amp;quot;handle&amp;quot; the indentifier obtained from opening a midi file with &amp;quot;WildMidi_Open()&amp;quot;.''&amp;lt;/font&amp;gt;&lt;br /&gt;
 Private Extern WildMidi_Close(handle As Pointer) As Integer&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;FONT color=gray&amp;gt;' ''void WildMidi_Shutdown(void)''&lt;br /&gt;
 ' ''Shuts  down  the wildmidi library, resetting data and freeing up memory used by the library.''&lt;br /&gt;
 ' ''Once this is called, the library is no-longer initiaized and &amp;quot;WildMidi_Init()&amp;quot; will need to be called again.''&amp;lt;/font&amp;gt;&lt;br /&gt;
 Private Extern WildMidi_Shutdown()&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;FONT color=darkgray&amp;gt;''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''&amp;lt;/font&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 Library &amp;quot;&amp;lt;FONT color=red&amp;gt;libasound:2.0.0&amp;lt;/font&amp;gt;&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;FONT color=gray&amp;gt;' ''int   snd_pcm_open(snd_pcm_t **pcm, const char *name, snd_pcm_stream_t stream, int mode)  --&amp;gt; Apre il sub-sistema PCM''&amp;lt;/font&amp;gt;&lt;br /&gt;
 Private Extern snd_pcm_open(pcmP As Pointer, nome As String, stream As Integer, mode As Integer) As Integer&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;FONT color=gray&amp;gt;' ''const char * snd_strerror (int errnum)  --&amp;gt; Ritorna un messaggio relativo ad un codice di Errore.''&amp;lt;/font&amp;gt;&lt;br /&gt;
 Private Extern snd_strerror(errnum As Integer) As String&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;FONT color=gray&amp;gt;' ''int snd_pcm_set_params (snd_pcm_t *pcm, snd_pcm_format_t format, snd_pcm_access_t access, unsigned int canali, unsigned int rate, int soft_resample, unsigned int latency)''&amp;lt;/font&amp;gt;&lt;br /&gt;
 Private Extern snd_pcm_set_params(pcmP As Pointer, formatB As Byte, accessB As Byte, canali As Integer, rate As Integer, soft_resample As Integer, latency As Integer) As Integer&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;FONT color=gray&amp;gt;' ''snd_pcm_sframes_t snd_pcm_writei(snd_pcm_t *pcm, const void *buffer, snd_pcm_uframes_t size)''&amp;lt;/font&amp;gt;&lt;br /&gt;
 Private Extern snd_pcm_writei(pcmP As Pointer, buffP As Pointer, uframes As Long) As Integer&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;FONT color=gray&amp;gt;' ''int snd_pcm_close(snd_pcm_t *pcm)  --&amp;gt; Chiude il sub-sistema PCM''&amp;lt;/font&amp;gt;&lt;br /&gt;
 Private Extern snd_pcm_close(pcmP As Pointer) As Integer&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 Public Sub Button1_Click()&lt;br /&gt;
 &lt;br /&gt;
  Dim err As Integer&lt;br /&gt;
  Dim handle, midi, buffer As Pointer&lt;br /&gt;
  Dim &amp;lt;FONT color=darkorange&amp;gt;frequenza&amp;lt;/font&amp;gt; As Integer = 44100&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;FONT color=gray&amp;gt;' ''Va ad inizializzare l'interfaccia PCM di Alsa:''&amp;lt;/font&amp;gt;&lt;br /&gt;
  handle = inizializzaAlsa(&amp;lt;FONT color=darkorange&amp;gt;frequenza&amp;lt;/font&amp;gt;)&lt;br /&gt;
  &lt;br /&gt;
 &amp;lt;FONT color=gray&amp;gt;' ''Inizializza la libreria di &amp;quot;WildMidi&amp;quot;:&lt;br /&gt;
 ' '''''-''' il primo parametro richiama il file che contiene la configurazione degli strumenti musicali che sarà utilizzata dalla libreria.''&lt;br /&gt;
 ' ''  Il file di configurazione potrà essere: &amp;quot;/etc/timidity/freepats.cfg&amp;quot; o &amp;quot;/etc/wildmidi/wildmidi.cfg&amp;quot; oppure &amp;quot;/etc/timidity/eawpats.cfg&amp;quot;.''&lt;br /&gt;
 ' '''''-''' il secondo argomento della funzione deve essere identico al 5° parametro (frequenza) di &amp;quot;snd_pcm_set_params()&amp;quot;, considerando che le frequenze accettate da WildMidi vanno da 11025 a 65000 hertz:''&amp;lt;/font&amp;gt;&lt;br /&gt;
  err = WildMidi_Init(&amp;quot;/etc/timidity/freepats.cfg&amp;quot;, &amp;lt;FONT color=darkorange&amp;gt;frequenza&amp;lt;/font&amp;gt;, 0)&lt;br /&gt;
  If err &amp;lt; 0 Then Error.Raise(&amp;quot;Errore nell'inizializzazione dell'interfaccia libWildMidi !&amp;quot;)&lt;br /&gt;
    &lt;br /&gt;
 &amp;lt;FONT color=gray&amp;gt;' ''Imposta il volume generale (da 0 a 127):''&amp;lt;/font&amp;gt;&lt;br /&gt;
  err = WildMidi_MasterVolume(100)&lt;br /&gt;
  If err &amp;lt; 0 Then Error.Raise(&amp;quot;Errore nell'impostazione del Volume Generale !&amp;quot;)&lt;br /&gt;
    &lt;br /&gt;
 &amp;lt;FONT color=gray&amp;gt;' ''Apre il file Midi che dovrà essere eseguito:''&amp;lt;/font&amp;gt;&lt;br /&gt;
  midi = WildMidi_Open(&amp;quot;&amp;lt;FONT color=darkgreen&amp;gt;''/percorso/del/file.mid''&amp;lt;/font&amp;gt;&amp;quot;)&lt;br /&gt;
  If midi == 0 Then Error.Raise(&amp;quot;Impossibile aprire il file Midi !&amp;quot;)&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;FONT color=gray&amp;gt;' ''Alloca un'area di memoria che sarà puntata da una variabile di tipo &amp;quot;Puntatore&amp;quot;:''&amp;lt;/font&amp;gt;&lt;br /&gt;
  buffer = Alloc(&amp;lt;FONT color=maroon&amp;gt;128&amp;lt;/font&amp;gt;)&lt;br /&gt;
  &lt;br /&gt;
  Repeat&lt;br /&gt;
  &lt;br /&gt;
 &amp;lt;FONT color=gray&amp;gt;' ''Ad ogni giro viene riempita l'area allocata con un certo numero di dati Midi convertiti in dati audio da passare successivamente ad Alsa.''&lt;br /&gt;
 ' ''(In particolare, ad Alsa sarà passata la variabile di tipo &amp;quot;puntatore&amp;quot; - qui chiamata &amp;quot;buffer&amp;quot; - che ora viene riempita di dati):&amp;lt;/font&amp;gt;&lt;br /&gt;
    err = WildMidi_GetOutput(midi, &amp;lt;FONT color=blue&amp;gt;buffer&amp;lt;/font&amp;gt;, &amp;lt;FONT color=maroon&amp;gt;128&amp;lt;/font&amp;gt;)&lt;br /&gt;
    &lt;br /&gt;
 &amp;lt;FONT color=gray&amp;gt;' ''Viene passata la variabile di tipo &amp;quot;puntatore&amp;quot; (qui chiamata &amp;quot;buffer&amp;quot;) alla seguente funzione, che provvede ad inviare i dati audio ad Alsa (il terzo parametro deve essere uguale ad 1/4 del valore del secondo parametro):''&amp;lt;/font&amp;gt;&lt;br /&gt;
    snd_pcm_writei(handle, &amp;lt;FONT color=blue&amp;gt;buffer&amp;lt;/font&amp;gt;, &amp;lt;FONT color=maroon&amp;gt;128&amp;lt;/font&amp;gt; / SizeOf(gb.Integer))&lt;br /&gt;
 &lt;br /&gt;
  Until err == 0&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;FONT color=gray&amp;gt;' ''Chiude l'elaborazione dei dati Midi da parte di &amp;quot;WildMidi&amp;quot;:''&amp;lt;/font&amp;gt;&lt;br /&gt;
  err = WildMidi_Close(midi)&lt;br /&gt;
  If err &amp;lt; 0 Then Error.Raise(&amp;quot;Errore nella chiusura del processo dei dati Midi !&amp;quot;)&lt;br /&gt;
 &lt;br /&gt;
  Free(buffer)&lt;br /&gt;
    &lt;br /&gt;
 &amp;lt;FONT color=gray&amp;gt;' ''Chiude la libreria di &amp;quot;WildMidi&amp;quot;:''&amp;lt;/font&amp;gt;&lt;br /&gt;
  WildMidi_Shutdown()&lt;br /&gt;
    &lt;br /&gt;
 &amp;lt;FONT color=gray&amp;gt;' ''Chiude infine anche l 'handle della libreria di Alsa:''&amp;lt;/font&amp;gt;&lt;br /&gt;
  snd_pcm_close(handle)&lt;br /&gt;
 &lt;br /&gt;
 End&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 Private Function inizializzaAlsa(&amp;lt;FONT color=darkorange&amp;gt;frequenza&amp;lt;/font&amp;gt; As Integer) As Pointer&lt;br /&gt;
  &lt;br /&gt;
  Dim err As Integer&lt;br /&gt;
  Dim handle as Pointer&lt;br /&gt;
  Dim nomen As String = &amp;quot;default&amp;quot;&lt;br /&gt;
  Dim SND_PCM_STREAM_PLAYBACK As Byte = 0&lt;br /&gt;
  Dim SND_PCM_ACCESS_RW_INTERLEAVED As Byte = 3&lt;br /&gt;
  Dim canali As Byte = 2&lt;br /&gt;
  &lt;br /&gt;
 &amp;lt;FONT color=gray&amp;gt;' ''Apre il sub-sistema PCM di Alsa creando un apposito &amp;quot;handle&amp;quot;:''&amp;lt;/font&amp;gt;&lt;br /&gt;
  err = snd_pcm_open(VarPtr(handle), nomen, SND_PCM_STREAM_PLAYBACK, 0)&lt;br /&gt;
  If err &amp;lt; 0 Then Error.Raise(&amp;quot;Playback open error: &amp;quot; &amp;amp; snd_strerror(err))&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;FONT color=gray&amp;gt;' ''Imposta i parametri hardware/software dell'interfaccia PCM di ALsa:''&amp;lt;/font&amp;gt;&lt;br /&gt;
  err = snd_pcm_set_params(handle, 2, SND_PCM_ACCESS_RW_INTERLEAVED, canali, &amp;lt;FONT color=darkorange&amp;gt;frequenza&amp;lt;/font&amp;gt;, 1, 500000)&lt;br /&gt;
  If err &amp;lt; 0 Then Error.Raise(&amp;quot;Playback open error: &amp;quot; &amp;amp; snd_strerror(err))&lt;br /&gt;
 &lt;br /&gt;
  Return handle&lt;br /&gt;
    &lt;br /&gt;
 End&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Riferimenti=&lt;br /&gt;
* http://wildmidi.sourceforge.net/?id=about&lt;br /&gt;
* http://manpages.ubuntu.com/manpages/saucy/man5/wildmidi.cfg.5.html&lt;br /&gt;
* https://natonelbronx.wordpress.com/2007/07/12/ascoltare-midi-su-linux-debianubuntu/&lt;/div&gt;</summary>
		<author><name>Vuott</name></author>
	</entry>
	<entry>
		<id>https://www.gambas-it.org/wiki/index.php?title=Eseguire_un_file_Midi_con_le_risorse_del_API_di_WildMidi_e_di_ALSA&amp;diff=42729</id>
		<title>Eseguire un file Midi con le risorse del API di WildMidi e di ALSA</title>
		<link rel="alternate" type="text/html" href="https://www.gambas-it.org/wiki/index.php?title=Eseguire_un_file_Midi_con_le_risorse_del_API_di_WildMidi_e_di_ALSA&amp;diff=42729"/>
		<updated>2025-10-27T07:34:38Z</updated>

		<summary type="html">&lt;p&gt;Vuott: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;La libreria di '''''WildMidi''''' contiene funzioni e risorse per leggere e gestire file Midi.&lt;br /&gt;
&lt;br /&gt;
In particolare la libreria ''WildMIDI'' converte i file MIDI in dati ''audio'' che potranno essere inviati ad altra applicazione capace di eseguire i dati audio, come ad esempio Alsa, per farli ascoltare. L'[http://it.wikipedia.org/wiki/Application_programming_interface API] della libreria è progettata in modo che sia facile inserire ''WildMIDI'' in applicazioni che prevedono anche la riproduzione di file Midi.&lt;br /&gt;
&lt;br /&gt;
La libreria da utilizzare in Gambas è attualmente la seguente: &amp;quot;''libWildMidi.so.2.1.0'' &amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Bisognerà avere installato nel sistema il banco di suoni (''soundfont bank''):  ''Freepats''.&lt;br /&gt;
&lt;br /&gt;
===Esempio pratico===&lt;br /&gt;
Il semplice esempio che segue è sostanzialmente strutturato in due parti:&lt;br /&gt;
* la prima dedicata alle funzionalità di ''WildMidi'' che passeranno i dati audio, derivati dalla conversione di un file Midi, ad Alsa;&lt;br /&gt;
* la seconda dedicata ad Alsa, che, ricevuti i dati audio da ''WildMidi'', li eseguirà effettivamente.&lt;br /&gt;
I dati audio (ottenuti dalla conversione dei dei dati Midi) saranno passati da ''WildMidi'' ad Alsa attraverso una variabile di tipo ''Puntatore'' che punta ad un'area allocata riempita dei predetti dati audio dalla funzione ''WildMidi_GetOutput()'' di ''WildMidi''.&lt;br /&gt;
 Library &amp;quot;&amp;lt;FONT color=blue&amp;gt;libWildMidi:2.1.0&amp;lt;/font&amp;gt;&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;FONT color=gray&amp;gt;' ''int WildMidi_Init  (const char *config_file, unsigned short int rate, unsigned short int options)''&lt;br /&gt;
 ' ''Intializes &amp;quot;libWildMidi&amp;quot; in preparation for playback.''&amp;lt;/font&amp;gt;&lt;br /&gt;
 Private Extern WildMidi_Init(config_file As String, rate As Short, options As Short) As Integer&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;FONT color=gray&amp;gt;' ''int WildMidi_MasterVolume (unsigned char master_volume)''&lt;br /&gt;
 ' ''Sets the overall library volume level to master_volume. The range of master_volume is between 0 And 127 with 100 being the default.''&amp;lt;/font&amp;gt;&lt;br /&gt;
 Private Extern WildMidi_MasterVolume(master_volume As Byte) As Integer&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;FONT color=gray&amp;gt;' ''midi *WildMidi_Open (const char *midifile)''&lt;br /&gt;
 ' ''Open  a MIDI file pointed to by midifile for processing. This file must be in standard midi format.''&lt;br /&gt;
 ' ''It returns a handle for the midi file opened. This handle is used by most functions in libWildMidi to identify which midi file we are refering to.''&amp;lt;/font&amp;gt;&lt;br /&gt;
 Private Extern WildMidi_Open(midifile As String) As Pointer&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;FONT color=gray&amp;gt;' ''int  WildMidi_GetOutput  (midi *handle, char *buffer, unsigned long insize)''&lt;br /&gt;
 ' ''Places size bytes of audio data from a  handle,  previously  opened  by WildMidi_Open() or WildMidi_OpenBuffer(), into a buffer pointer to by buffer.''&lt;br /&gt;
 ' ''Buffer must be atleast size bytes, &amp;lt;SPAN style=&amp;quot;text-decoration:underline&amp;quot;&amp;gt;with size being a multiple of 4 as the data is stored in 16 bit interleaved stereo format&amp;lt;/span&amp;gt;.''&amp;lt;/font&amp;gt;&lt;br /&gt;
 Private Extern WildMidi_GetOutput(handle As Pointer, buffer As Pointer, insize As Long) As Integer&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;FONT color=gray&amp;gt;' ''int WildMidi_Close (midi *handle)''&lt;br /&gt;
 ' ''Finish processing MIDI data or file. &amp;quot;handle&amp;quot; the indentifier obtained from opening a midi file with &amp;quot;WildMidi_Open()&amp;quot;.''&amp;lt;/font&amp;gt;&lt;br /&gt;
 Private Extern WildMidi_Close(handle As Pointer) As Integer&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;FONT color=gray&amp;gt;' ''void WildMidi_Shutdown(void)''&lt;br /&gt;
 ' ''Shuts  down  the wildmidi library, resetting data and freeing up memory used by the library.''&lt;br /&gt;
 ' ''Once this is called, the library is no-longer initiaized and &amp;quot;WildMidi_Init()&amp;quot; will need to be called again.''&amp;lt;/font&amp;gt;&lt;br /&gt;
 Private Extern WildMidi_Shutdown()&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;FONT color=darkgray&amp;gt;''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''&amp;lt;/font&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 Library &amp;quot;&amp;lt;FONT color=red&amp;gt;libasound:2.0.0&amp;lt;/font&amp;gt;&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;FONT color=gray&amp;gt;' ''int   snd_pcm_open(snd_pcm_t **pcm, const char *name, snd_pcm_stream_t stream, int mode)  --&amp;gt; Apre il sub-sistema PCM''&amp;lt;/font&amp;gt;&lt;br /&gt;
 Private Extern snd_pcm_open(pcmP As Pointer, nome As String, stream As Integer, mode As Integer) As Integer&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;FONT color=gray&amp;gt;' ''const char * snd_strerror (int errnum)  --&amp;gt; Ritorna un messaggio relativo ad un codice di Errore.''&amp;lt;/font&amp;gt;&lt;br /&gt;
 Private Extern snd_strerror(errnum As Integer) As String&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;FONT color=gray&amp;gt;' ''int snd_pcm_set_params (snd_pcm_t *pcm, snd_pcm_format_t format, snd_pcm_access_t access, unsigned int canali, unsigned int rate, int soft_resample, unsigned int latency)''&amp;lt;/font&amp;gt;&lt;br /&gt;
 Private Extern snd_pcm_set_params(pcmP As Pointer, formatB As Byte, accessB As Byte, canali As Integer, rate As Integer, soft_resample As Integer, latency As Integer) As Integer&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;FONT color=gray&amp;gt;' ''snd_pcm_sframes_t snd_pcm_writei(snd_pcm_t *pcm, const void *buffer, snd_pcm_uframes_t size)''&amp;lt;/font&amp;gt;&lt;br /&gt;
 Private Extern snd_pcm_writei(pcmP As Pointer, buffP As Pointer, uframes As Long) As Integer&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;FONT color=gray&amp;gt;' ''int snd_pcm_close(snd_pcm_t *pcm)  --&amp;gt; Chiude il sub-sistema PCM''&amp;lt;/font&amp;gt;&lt;br /&gt;
 Private Extern snd_pcm_close(pcmP As Pointer) As Integer&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 Public Sub Button1_Click()&lt;br /&gt;
 &lt;br /&gt;
  Dim err As Integer&lt;br /&gt;
  Dim handle, midi, buffer As Pointer&lt;br /&gt;
  Dim &amp;lt;FONT color=darkorange&amp;gt;frequenza&amp;lt;/font&amp;gt; As Integer = 44100&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;FONT color=gray&amp;gt;' ''Va ad inizializzare l'interfaccia PCM di Alsa:''&amp;lt;/font&amp;gt;&lt;br /&gt;
  handle = inizializzaAlsa(&amp;lt;FONT color=darkorange&amp;gt;frequenza&amp;lt;/font&amp;gt;)&lt;br /&gt;
  &lt;br /&gt;
 &amp;lt;FONT color=gray&amp;gt;' ''Inizializza la libreria di &amp;quot;WildMidi&amp;quot;:&lt;br /&gt;
 ' '''''-''' il primo parametro richiama il file che contiene la configurazione degli strumenti musicali che sarà utilizzata dalla libreria.''&lt;br /&gt;
 ' ''  Il file di configurazione potrà essere: &amp;quot;/etc/timidity/freepats.cfg&amp;quot; o &amp;quot;/etc/wildmidi/wildmidi.cfg&amp;quot; oppure &amp;quot;/etc/timidity/eawpats.cfg&amp;quot;.''&lt;br /&gt;
 ' '''''-''' il secondo argomento della funzione deve essere identico al 5° parametro (frequenza) di &amp;quot;snd_pcm_set_params()&amp;quot;, considerando che le frequenze accettate da WildMidi vanno da 11025 a 65000 hertz:''&amp;lt;/font&amp;gt;&lt;br /&gt;
  err = WildMidi_Init(&amp;quot;/etc/timidity/freepats.cfg&amp;quot;, &amp;lt;FONT color=darkorange&amp;gt;frequenza&amp;lt;/font&amp;gt;, 0)&lt;br /&gt;
  If err &amp;lt; 0 Then Error.Raise(&amp;quot;Errore nell'inizializzazione dell'interfaccia libWildMidi !&amp;quot;)&lt;br /&gt;
    &lt;br /&gt;
 &amp;lt;FONT color=gray&amp;gt;' ''Imposta il volume generale (da 0 a 127):''&amp;lt;/font&amp;gt;&lt;br /&gt;
  err = WildMidi_MasterVolume(100)&lt;br /&gt;
  If err &amp;lt; 0 Then Error.Raise(&amp;quot;Errore nell'impostazione del Volume Generale !&amp;quot;)&lt;br /&gt;
    &lt;br /&gt;
 &amp;lt;FONT color=gray&amp;gt;' ''Apre il file Midi che dovrà essere eseguito:''&amp;lt;/font&amp;gt;&lt;br /&gt;
  midi = WildMidi_Open(&amp;quot;&amp;lt;FONT color=darkgreen&amp;gt;''/percorso/del/file.mid''&amp;lt;/font&amp;gt;&amp;quot;)&lt;br /&gt;
  If midi == 0 Then Error.Raise(&amp;quot;Impossibile aprire il file Midi !&amp;quot;)&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;FONT color=gray&amp;gt;' ''Alloca un'area di memoria che sarà puntata da una variabile di tipo &amp;quot;Puntatore&amp;quot;:''&amp;lt;/font&amp;gt;&lt;br /&gt;
  buffer = Alloc(&amp;lt;FONT color=maroon&amp;gt;128&amp;lt;/font&amp;gt;)&lt;br /&gt;
  &lt;br /&gt;
  Repeat&lt;br /&gt;
  &lt;br /&gt;
 &amp;lt;FONT color=gray&amp;gt;' ''Ad ogni giro viene riempita l'area allocata con un certo numero di dati Midi convertiti in dati audio da passare successivamente ad Alsa.''&lt;br /&gt;
 ' ''(In particolare, ad Alsa sarà passata la variabile di tipo &amp;quot;puntatore&amp;quot; - qui chiamata &amp;quot;buffer&amp;quot; - che ora viene riempita di dati):&amp;lt;/font&amp;gt;&lt;br /&gt;
    err = WildMidi_GetOutput(midi, &amp;lt;FONT color=blue&amp;gt;buffer&amp;lt;/font&amp;gt;, &amp;lt;FONT color=maroon&amp;gt;128&amp;lt;/font&amp;gt;)&lt;br /&gt;
    &lt;br /&gt;
 &amp;lt;FONT color=gray&amp;gt;' ''Viene passata la variabile di tipo &amp;quot;puntatore&amp;quot; (qui chiamata &amp;quot;buffer&amp;quot;) alla seguente funzione, che provvede ad inviare i dati audio ad Alsa (il terzo parametro deve essere uguale ad 1/4 del valore del secondo parametro):''&amp;lt;/font&amp;gt;&lt;br /&gt;
    snd_pcm_writei(handle, &amp;lt;FONT color=blue&amp;gt;buffer&amp;lt;/font&amp;gt;, &amp;lt;FONT color=maroon&amp;gt;128&amp;lt;/font&amp;gt; / SizeOf(gb.Integer))&lt;br /&gt;
 &lt;br /&gt;
  Until err == 0&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;FONT color=gray&amp;gt;' ''Chiude l'elaborazione dei dati Midi da parte di &amp;quot;WildMidi&amp;quot;:''&amp;lt;/font&amp;gt;&lt;br /&gt;
  err = WildMidi_Close(midi)&lt;br /&gt;
  If err &amp;lt; 0 Then Error.Raise(&amp;quot;Errore nella chiusura del processo dei dati Midi !&amp;quot;)&lt;br /&gt;
 &lt;br /&gt;
  Free(buffer)&lt;br /&gt;
    &lt;br /&gt;
 &amp;lt;FONT color=gray&amp;gt;' ''Chiude la libreria di &amp;quot;WildMidi&amp;quot;:''&amp;lt;/font&amp;gt;&lt;br /&gt;
  WildMidi_Shutdown()&lt;br /&gt;
    &lt;br /&gt;
 &amp;lt;FONT color=gray&amp;gt;' ''Chiude infine anche l 'handle della libreria di Alsa:''&amp;lt;/font&amp;gt;&lt;br /&gt;
  snd_pcm_close(handle)&lt;br /&gt;
 &lt;br /&gt;
 End&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 Private Function inizializzaAlsa(&amp;lt;FONT color=darkorange&amp;gt;frequenza&amp;lt;/font&amp;gt; As Integer) As Pointer&lt;br /&gt;
  &lt;br /&gt;
  Dim err As Integer&lt;br /&gt;
  Dim handle as Pointer&lt;br /&gt;
  Dim nomen As String = &amp;quot;default&amp;quot;&lt;br /&gt;
  Dim SND_PCM_STREAM_PLAYBACK As Byte = 0&lt;br /&gt;
  Dim SND_PCM_ACCESS_RW_INTERLEAVED As Byte = 3&lt;br /&gt;
  Dim canali As Byte = 2&lt;br /&gt;
  &lt;br /&gt;
 &amp;lt;FONT color=gray&amp;gt;' ''Apre il sub-sistema PCM di Alsa creando un apposito &amp;quot;handle&amp;quot;:''&amp;lt;/font&amp;gt;&lt;br /&gt;
  err = snd_pcm_open(VarPtr(handle), nomen, SND_PCM_STREAM_PLAYBACK, 0)&lt;br /&gt;
  If err &amp;lt; 0 Then Error.Raise(&amp;quot;Playback open error: &amp;quot; &amp;amp; snd_strerror(err))&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;FONT color=gray&amp;gt;' ''Imposta i parametri hardware/software dell'interfaccia PCM di ALsa:''&amp;lt;/font&amp;gt;&lt;br /&gt;
  err = snd_pcm_set_params(handle, 2, SND_PCM_ACCESS_RW_INTERLEAVED, canali, &amp;lt;FONT color=darkorange&amp;gt;frequenza&amp;lt;/font&amp;gt;, 1, 500000)&lt;br /&gt;
  If err &amp;lt; 0 Then Error.Raise(&amp;quot;Playback open error: &amp;quot; &amp;amp; snd_strerror(err))&lt;br /&gt;
 &lt;br /&gt;
  Return handle&lt;br /&gt;
    &lt;br /&gt;
 End&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Riferimenti=&lt;br /&gt;
* http://wildmidi.sourceforge.net/?id=about&lt;br /&gt;
* http://manpages.ubuntu.com/manpages/saucy/man5/wildmidi.cfg.5.html&lt;br /&gt;
* https://natonelbronx.wordpress.com/2007/07/12/ascoltare-midi-su-linux-debianubuntu/&lt;/div&gt;</summary>
		<author><name>Vuott</name></author>
	</entry>
	<entry>
		<id>https://www.gambas-it.org/wiki/index.php?title=Conversione_Big-Endian/Little-Endian&amp;diff=42728</id>
		<title>Conversione Big-Endian/Little-Endian</title>
		<link rel="alternate" type="text/html" href="https://www.gambas-it.org/wiki/index.php?title=Conversione_Big-Endian/Little-Endian&amp;diff=42728"/>
		<updated>2025-10-26T23:41:37Z</updated>

		<summary type="html">&lt;p&gt;Vuott: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Big-Endian''' e '''Little-Endian''' sono due differenti modalità per memorizzare dati di dimensione superiore al semplice byte.&lt;br /&gt;
&lt;br /&gt;
La differenza tra i due sistemi è data dall'ordine, con il quale i byte costituenti il dato vengono memorizzati:&lt;br /&gt;
* ''Big-Endian'' è il tipo di memorizzazione che inizia (da sinistra verso destra) dal byte più significativo (che è quello posto a sinistra) e termina con il byte meno significativo;&lt;br /&gt;
* ''Little-Endian'' è il tipo di memorizzazione che inizia (da destra verso sinistra) dal byte meno significativo (che è quello posto a destra) e termina con il byte più significativo. Quindi in sostanza nel sistema ''Little-Endian'' l'ordine dei byte nell'indirizzo di memoria è invertito ripetto al sistema ''Big-Endian''.&lt;br /&gt;
&lt;br /&gt;
Se ad esempio abbiamo il valore decimale 1234567, la memorizzazione nella seguente forma esadecimale:&lt;br /&gt;
 12 D6 87&lt;br /&gt;
è di tipo ''Big-Endian''.&lt;br /&gt;
&lt;br /&gt;
Invece la memorizzazione di quello stesso numero nella forma:&lt;br /&gt;
 87 D6 12&lt;br /&gt;
è, invece, di tipo ''Little-Endian''.&lt;br /&gt;
&lt;br /&gt;
In taluni casi particolari, pertanto, possiamo riscontrare che alcuni valori vengono scritti per la memorizzazione in modalità ''Little-Endian'', e che di conseguenza, per comprenderne il reale significato/valore, devono essere convertiti in forma ''Big-Endian''. Possiamo, per converso, avere valori che, memorizzati inizialmente nel formato esadecimale della forma ''Big-Endian'', debbano essere convertiti in forma ''Little-Endian'', affinché altri pogrammi possano comprendere il loro reale significato e restituire quindi il vero valore.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Conversione ''Big-Endian''/''Little-Endian'' e viceversa di un valore a '''16-bit'''=&lt;br /&gt;
La formula astratta - espressa in linguaggio C - per ottenere la conversione ''Big-Endian''/''Little-Endian'' e viceversa di un valore a 16bit (= 2 byte, ossia di tipo ''Short'') può essere la seguente (anche se [http://stackoverflow.com/questions/105252/how-do-i-convert-between-big-endian-and-little-endian-values-in-c le modalità sono molteplici] per ottenere la conversione):&lt;br /&gt;
 ((valore &amp;gt;&amp;gt; 8) &amp;amp; 0x00FF) | ((valore &amp;lt;&amp;lt; 8) &amp;amp; 0xFF00)&lt;br /&gt;
che in Gambas potremo tradurre, utilizzando uno dei seguenti metodi:&lt;br /&gt;
* funzioni di scorrimento dei bit a destra ed a sinistra;&lt;br /&gt;
* esplicite operazioni matematiche;&lt;br /&gt;
* Uso dell'operatore ''OR'' combinato con operazione di scorrimento dei bit a sinistra;&lt;br /&gt;
* Uso degli operatori AND e OR, nonché delle funzioni Shr() e Shl();&lt;br /&gt;
* Uso degli operatori AND e OR, nonché della sola funzione Shr().&lt;br /&gt;
&lt;br /&gt;
==Uso delle funzioni di scorrimento dei bit a destra ed a sinistra==&lt;br /&gt;
Questa modalità è in sintassi così in Gambas espressa:&lt;br /&gt;
 Hex((Shr(''valore'', 8) And &amp;amp;FF) Or (Shl(''valore'', 8) And &amp;amp;FF00&amp;amp;), 4) As String&lt;br /&gt;
V'è da sottolineare che:&lt;br /&gt;
&amp;lt;BR&amp;gt; - il il valore ''&amp;amp;FF00&amp;amp;'' necessita assolutamente alla fine del carattere '''&amp;amp;''', poiché, se non lo si ponesse, avremmo come risultato un valore in esadecimale di 3 byte ! &amp;lt;SUP&amp;gt;[ [[#Note|nota 1]] ]&amp;lt;/sup&amp;gt;&lt;br /&gt;
&amp;lt;BR&amp;gt; - se il valore convertito assume un valore massimo supportato in Gambas dal tipo &amp;quot;Short&amp;quot; (ossia superiore al valore espresso in esadecimale &amp;amp;7FFF), allora la variabile &amp;quot;valore&amp;quot; dovrà essere dichiarata come tipo &amp;lt;SPAN Style=&amp;quot;text-decoration:underline&amp;quot;&amp;gt;Integer&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Uso di esplicite operazioni matematiche==&lt;br /&gt;
Se si vorranno utilizzare esplicite operazioni matematiche anziché funzioni Gambas, si potrà adoperare la seguente formula:&lt;br /&gt;
 Hex(((''valore'' \ CInt(2 ^ 8)) And &amp;amp;FF) Or ((''valore'' * CInt(2 ^ 8)) And &amp;amp;FF00&amp;amp;), 4) As String&lt;br /&gt;
oppure&lt;br /&gt;
 Hex(((''valore'' \ CInt(2 ^ 8)) And &amp;amp;FF) Or CShort(((''valore'' * CInt(2 ^ 8)) And &amp;amp;FF00)), 4) As String&lt;br /&gt;
&lt;br /&gt;
==Uso dell'operatore ''OR'' con operazione di scorrimento dei bit a sinistra==&lt;br /&gt;
Mostriamo un esempio pratico con l'operatore ''OR''  combinato con operazione di scorrimento dei bit a sinistra, in cui convertiremo il valore esadecimale ''0x2301'' di tipo ''Short'' da ''Little-Endian'' a ''Big-Endian'':&lt;br /&gt;
 Public Sub Main()&lt;br /&gt;
 &lt;br /&gt;
   Dim valore, s1, s2, v As Short&lt;br /&gt;
   &lt;br /&gt;
   valore = &amp;amp;2301&lt;br /&gt;
   &lt;br /&gt;
   s1 = Shr(valore, 8)&lt;br /&gt;
   s2 = valore And 255&lt;br /&gt;
   &lt;br /&gt;
   v = s1&lt;br /&gt;
   v = v Or Shl(s2, 8)&lt;br /&gt;
   &lt;br /&gt;
   Print Hex(v, 4), v&lt;br /&gt;
    &lt;br /&gt;
 End&lt;br /&gt;
Questo algoritmo è valido anche per la conversione contraria: da ''Big-Endian'' a ''Little-Endian''.&lt;br /&gt;
&lt;br /&gt;
==Uso degli operatori AND e OR, nonché delle funzioni Shr() e Shl(), mantenendo il tipo Short==&lt;br /&gt;
Ecco una funzione che prende in input un valore a 16 bit in ''Big-Endian'' e restituisce il corrispondente valore in ''Little-Endian'', mantenendo il tipo ''Short'':&lt;br /&gt;
 Private Function BigEndianToLittleEndian16(value As Short) As Short&lt;br /&gt;
 &lt;br /&gt;
  Dim hi As Short = (value And &amp;amp;HFF00) Shr 8   &amp;lt;FONT Color=gray&amp;gt;' ''Byte alto → spostato a destra''&amp;lt;/font&amp;gt;&lt;br /&gt;
  Dim lo As Short = (value And &amp;amp;H00FF)         &amp;lt;FONT Color=gray&amp;gt;' ''Byte basso → resta com’è''&amp;lt;/font&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
  Return lo Shl 8 Or hi                        &amp;lt;FONT Color=gray&amp;gt;' ''Ricompone in ordine Little-Endian''&amp;lt;/font&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 End&lt;br /&gt;
 &lt;br /&gt;
==Uso degli operatori AND e OR, nonché della sola funzione Shr()==&lt;br /&gt;
Mostriamo una funzione di supporto che converte un intero a 16 bit in stringa 4 byte ''little endian'':&lt;br /&gt;
 Private Function BigEndianToLittleEndian16_Shr(value As Short) As '''Short'''&lt;br /&gt;
 &lt;br /&gt;
  Dim hi As Short = (value And &amp;amp;HFF00) Shr 8     &amp;lt;FONT Color=gray&amp;gt;' ''Isola il byte alto e lo porta in basso''&amp;lt;/font&amp;gt;&lt;br /&gt;
  Dim lo As Short = (value And &amp;amp;H00FF)           &amp;lt;FONT Color=gray&amp;gt;' ''Isola il byte basso''&amp;lt;/font&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
  Return lo * 256 Or hi                          &amp;lt;FONT Color=gray&amp;gt;' ''Simula Shl 8 con * 256, ricompone con OR''&amp;lt;/font&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 End&lt;br /&gt;
Se si vuole ritornare un tipo ''String'', allora avremo:&lt;br /&gt;
 Private Function ShortToLittleEndianString(value As Short) As '''String'''&lt;br /&gt;
 &lt;br /&gt;
  Dim lo As Byte = value And &amp;amp;H00FF              &amp;lt;FONT Color=gray&amp;gt;' ''Byte meno significativo''&amp;lt;/font&amp;gt;&lt;br /&gt;
  Dim hi As Byte = (value And &amp;amp;HFF00) Shr 8      &amp;lt;FONT Color=gray&amp;gt;' ''Byte più significativo spostato a destra''&amp;lt;/font&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
  Return Hex(lo) &amp;amp; Hex(hi)                       &amp;lt;FONT Color=gray&amp;gt;' ''Costruzione stringa Little-Endian''&amp;lt;/font&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 End&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Conversione ''Big-Endian''/''Little-Endian'' e viceversa di un valore a '''32-bit'''=&lt;br /&gt;
La formula astratta per ottenere la conversione ''Big-Endian''/''Little-Endian'' di un valore intero a 32-bit (''Integer'') può essere la seguente:&lt;br /&gt;
 ((valore &amp;gt;&amp;gt; 24) &amp;amp; 0xff) | ((valore &amp;lt;&amp;lt; 8) &amp;amp; 0xff0000) | ((valore &amp;gt;&amp;gt; 8) &amp;amp; 0xff00) | ((valore &amp;lt;&amp;lt; 24) &amp;amp; 0xff000000)&lt;br /&gt;
La suddetta formula in Gambas potrà essere tradotta utilizzando uno dei seguenti metodi:&lt;br /&gt;
* funzioni di scorrimento dei bit a destra ed a sinistra;&lt;br /&gt;
* esplicite operazioni matematiche;&lt;br /&gt;
* Uso degli operatori AND e OR;&lt;br /&gt;
* Uso del solo operatore AND e della sola funzione Shr().&lt;br /&gt;
&lt;br /&gt;
==Uso delle funzioni di scorrimento dei bit a destra ed a sinistra==&lt;br /&gt;
Questa modalità è in sintassi così espressa:&lt;br /&gt;
 Hex((Shr(''valore'', 24) And &amp;amp;FF) Or (Shl(''valore'', 8) And &amp;amp;FF0000) Or (Shr(''valore'', 8) And &amp;amp;FF00&amp;amp;) Or (Shl(''valore'', 24) And &amp;amp;FF000000), 8) As String&lt;br /&gt;
oppure&lt;br /&gt;
 Hex((Shr(valore, 24)) Or (Shl(i, 8) And &amp;amp;FF0000) Or (Shr(valore, 8) And &amp;amp;FF00&amp;amp;) Or (Shl(valore, 24)), 8) As String&lt;br /&gt;
Va sottolineato che, se dalla conversione, il numero assumerà un valore superiore a quello supportato in Gambas dal tipo &amp;quot;Integer&amp;quot; (ossia superiore al valore espresso in esadecimale &amp;amp;7FFFFF), allora sarà opportuno dichiarare la variabile &amp;quot;valore&amp;quot; come tipo &amp;lt;SPAN Style=&amp;quot;text-decoration:underline&amp;quot;&amp;gt;Long&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Uso di esplicite operazioni matematiche==&lt;br /&gt;
Se si vorranno utilizzare esplicite operazioni matematiche anziché funzioni Gambas, si potrà adoperare la seguente formula:&lt;br /&gt;
 Hex(((''valore'' \ CInt(2 ^ 24)) And &amp;amp;FF) Or ((''valore'' * CInt(2 ^ 8)) And &amp;amp;FF0000) Or ((''valore'' \ CInt(2 ^ 8)) And &amp;amp;FF00&amp;amp;) Or ((''valore'' * CInt(2 ^ 24)) And &amp;amp;FF000000), 8)&lt;br /&gt;
oppure quest'altra:&lt;br /&gt;
 Hex(((''valore'' \ CInt(2 ^ 24)) And &amp;amp;FF) Or ((''valore'' * CInt(2 ^ 8)) And &amp;amp;FF0000) Or CShort(((''valore'' \ CInt(2 ^ 8)) And &amp;amp;FF00)) Or ((''valore'' * CInt(2 ^ 24)) And &amp;amp;FF000000), 8)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Usando gli operatori AND e OR, nonché le funzioni Shr() e Shl(), mantenendo il tipo Integer==&lt;br /&gt;
Ecco una funzione che prende in input un valore a 32 bit in ''Big-Endian'' e restituisce il corrispondente valore in ''Little-Endian'', mantenendo il tipo ''Integer'':&lt;br /&gt;
 Private Function BigEndianToLittleEndian32(value As Integer) As Integer&lt;br /&gt;
 &lt;br /&gt;
  Dim b1 As Integer = Shr(value And &amp;amp;HFF000000, 24)&lt;br /&gt;
 &amp;lt;FONT Color=gray&amp;gt;' ''Anche così la funzione &amp;quot;Shr()&amp;quot; va bene:''&amp;lt;/font&amp;gt;&lt;br /&gt;
  Dim b2 As Integer = (value And &amp;amp;H00FF0000) Shr 8&lt;br /&gt;
 &lt;br /&gt;
  Dim b3 As Integer = (value And &amp;amp;H0000FF00) Shl 8&lt;br /&gt;
 &amp;lt;FONT Color=gray&amp;gt;' ''Anche così la funzione &amp;quot;Shl()&amp;quot; va bene:''&amp;lt;/font&amp;gt;&lt;br /&gt;
  Dim b4 As Integer = (value And &amp;amp;H000000FF) Shl 24&lt;br /&gt;
 &lt;br /&gt;
  Return b1 Or b2 Or b3 Or b4&lt;br /&gt;
 &lt;br /&gt;
 End&lt;br /&gt;
o anche:&lt;br /&gt;
 Private Function BigEndianToLittleEndian32(value As Integer) As Integer&lt;br /&gt;
 &lt;br /&gt;
  Dim b1, b2, b3, b4 As Integer&lt;br /&gt;
 &lt;br /&gt;
  b1 = (value Shr 24) And &amp;amp;HFF&lt;br /&gt;
  b2 = (value Shr 16) And &amp;amp;HFF&lt;br /&gt;
  b3 = (value Shr 8) And &amp;amp;HFF&lt;br /&gt;
  b4 = value And &amp;amp;HFF&lt;br /&gt;
 &lt;br /&gt;
  Return (b4 Shl 24) Or (b3 Shl 16) Or (b2 Shl 8) Or b1&lt;br /&gt;
 &lt;br /&gt;
 End&lt;br /&gt;
&lt;br /&gt;
==Uso del solo operatore AND e della sola funzione Shr()==&lt;br /&gt;
Mostriamo una funzione di supporto che converte un intero a 32 bit in stringa 4 byte ''little endian'':&lt;br /&gt;
 Private Function IntToLittleEndian(value As Integer) As String&lt;br /&gt;
 &lt;br /&gt;
  Dim b1 As Byte = value And &amp;amp;HFF&lt;br /&gt;
  Dim b2 As Byte = (value Shr 8) And &amp;amp;HFF&lt;br /&gt;
  Dim b3 As Byte = (value Shr 16) And &amp;amp;HFF&lt;br /&gt;
  Dim b4 As Byte = (value Shr 24) And &amp;amp;HFF&lt;br /&gt;
  &lt;br /&gt;
  Return Chr(b1) &amp;amp; Chr(b2) &amp;amp; Chr(b3) &amp;amp; Chr(b4)&lt;br /&gt;
 &lt;br /&gt;
 End&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Rotazione dei byte mediante le funzioni esterne &amp;quot;ntohl()&amp;quot; e &amp;quot;ntohs()&amp;quot;=&lt;br /&gt;
Mediante le funzioni &amp;quot;ntohl()&amp;quot; e &amp;quot;ntohs() della libreria esterna &amp;quot;libc.so.6&amp;quot;, dichiarate nel file header &amp;quot;''/usr/include/netinet/in.h''&amp;quot;, è possibile ottenere la rotazione dei byte rispettivamente di un valore di tipo ''Intero'' (32 bit) e di uno valore di tipo ''Intero Corto'' (16 bit).&lt;br /&gt;
&lt;br /&gt;
Mostriamo un semplice esempio:&lt;br /&gt;
 Library &amp;quot;libc:6&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;FONT Color=gray&amp;gt;' ''uint32_t ntohl (uint32_t __netlong)''&lt;br /&gt;
 ' ''Converts the unsigned integer netlong from network byte order to host byte order.''&amp;lt;/font&amp;gt;&lt;br /&gt;
 Private Extern ntohl(__netlong As Integer) As Integer&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;FONT Color=gray&amp;gt;' ''uint16_t ntohs (uint16_t __netshort)''&lt;br /&gt;
 ' ''Converts the unsigned short integer netshort from network byte order to host byte order.''&amp;lt;/font&amp;gt;&lt;br /&gt;
 Private Extern ntohs(__netshort As Short) As Short&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 Public Sub Main()&lt;br /&gt;
  &lt;br /&gt;
   Dim i As Integer&lt;br /&gt;
   Dim c As Short&lt;br /&gt;
  &lt;br /&gt;
   i = ntohl(&amp;amp;01020304)&lt;br /&gt;
   Print Hex(i, 8)&lt;br /&gt;
   &lt;br /&gt;
   c = ntohs(&amp;amp;0908)&lt;br /&gt;
   Print Hex(c, 4)&lt;br /&gt;
   &lt;br /&gt;
 End&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Note=&lt;br /&gt;
[1] Interpellato al riguardo Benoît Minisini ha così spiegato il problema e suggerito la soluzione:&lt;br /&gt;
&amp;lt;BR&amp;gt;« ''Because of weird Visual Basic compatibility, &amp;amp;FF00 is sign-extended, i.e. &amp;amp;FF00 = &amp;amp;FFFFFF00''&lt;br /&gt;
&amp;lt;BR&amp;gt;''To prevent automatic sign-extension, write &amp;amp;FF00&amp;amp; (with an extra '&amp;amp;' at the end).''&lt;br /&gt;
&amp;lt;BR&amp;gt;''Otherwise, I don't know where your data comes from, but Swap$() does endianness conversion provided that each integer is stored inside a string.'' »&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Riferimenti=&lt;br /&gt;
* https://it.wikipedia.org/wiki/Ordine_dei_byte‎&lt;br /&gt;
* http://en.wikipedia.org/wiki/Endianness&lt;br /&gt;
* http://betterexplained.com/articles/understanding-big-and-little-endian-byte-order/&lt;br /&gt;
* https://www.cs.umd.edu/~meesh/cmsc311/clin-cmsc311/Lectures/lecture6/endian.pdf&lt;br /&gt;
* https://www.geeksforgeeks.org/little-and-big-endian-mystery/&lt;br /&gt;
* http://people.cs.umass.edu/~verts/cs32/endian.html&lt;br /&gt;
* https://www.youtube.com/watch?v=n6lPuep66aM&lt;br /&gt;
* https://www.youtube.com/watch?v=JrNF0KRAlyo&lt;/div&gt;</summary>
		<author><name>Vuott</name></author>
	</entry>
	<entry>
		<id>https://www.gambas-it.org/wiki/index.php?title=Conversione_Big-Endian/Little-Endian&amp;diff=42727</id>
		<title>Conversione Big-Endian/Little-Endian</title>
		<link rel="alternate" type="text/html" href="https://www.gambas-it.org/wiki/index.php?title=Conversione_Big-Endian/Little-Endian&amp;diff=42727"/>
		<updated>2025-10-26T23:38:43Z</updated>

		<summary type="html">&lt;p&gt;Vuott: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Big-Endian''' e '''Little-Endian''' sono due differenti modalità per memorizzare dati di dimensione superiore al semplice byte.&lt;br /&gt;
&lt;br /&gt;
La differenza tra i due sistemi è data dall'ordine, con il quale i byte costituenti il dato vengono memorizzati:&lt;br /&gt;
* ''Big-Endian'' è il tipo di memorizzazione che inizia (da sinistra verso destra) dal byte più significativo (che è quello posto a sinistra) e termina con il byte meno significativo;&lt;br /&gt;
* ''Little-Endian'' è il tipo di memorizzazione che inizia (da destra verso sinistra) dal byte meno significativo (che è quello posto a destra) e termina con il byte più significativo. Quindi in sostanza nel sistema ''Little-Endian'' l'ordine dei byte nell'indirizzo di memoria è invertito ripetto al sistema ''Big-Endian''.&lt;br /&gt;
&lt;br /&gt;
Se ad esempio abbiamo il valore decimale 1234567, la memorizzazione nella seguente forma esadecimale:&lt;br /&gt;
 12 D6 87&lt;br /&gt;
è di tipo ''Big-Endian''.&lt;br /&gt;
&lt;br /&gt;
Invece la memorizzazione di quello stesso numero nella forma:&lt;br /&gt;
 87 D6 12&lt;br /&gt;
è, invece, di tipo ''Little-Endian''.&lt;br /&gt;
&lt;br /&gt;
In taluni casi particolari, pertanto, possiamo riscontrare che alcuni valori vengono scritti per la memorizzazione in modalità ''Little-Endian'', e che di conseguenza, per comprenderne il reale significato/valore, devono essere convertiti in forma ''Big-Endian''. Possiamo, per converso, avere valori che, memorizzati inizialmente nel formato esadecimale della forma ''Big-Endian'', debbano essere convertiti in forma ''Little-Endian'', affinché altri pogrammi possano comprendere il loro reale significato e restituire quindi il vero valore.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Conversione ''Big-Endian''/''Little-Endian'' e viceversa di un valore a '''16-bit'''=&lt;br /&gt;
La formula astratta - espressa in linguaggio C - per ottenere la conversione ''Big-Endian''/''Little-Endian'' e viceversa di un valore a 16bit (= 2 byte, ossia di tipo ''Short'') può essere la seguente (anche se [http://stackoverflow.com/questions/105252/how-do-i-convert-between-big-endian-and-little-endian-values-in-c le modalità sono molteplici] per ottenere la conversione):&lt;br /&gt;
 ((valore &amp;gt;&amp;gt; 8) &amp;amp; 0x00FF) | ((valore &amp;lt;&amp;lt; 8) &amp;amp; 0xFF00)&lt;br /&gt;
che in Gambas potremo tradurre, utilizzando uno dei seguenti metodi:&lt;br /&gt;
* funzioni di scorrimento dei bit a destra ed a sinistra;&lt;br /&gt;
* esplicite operazioni matematiche;&lt;br /&gt;
* Uso dell'operatore ''OR'' combinato con operazione di scorrimento dei bit a sinistra;&lt;br /&gt;
* Uso degli operatori AND e OR.&lt;br /&gt;
&lt;br /&gt;
==Uso delle funzioni di scorrimento dei bit a destra ed a sinistra==&lt;br /&gt;
Questa modalità è in sintassi così in Gambas espressa:&lt;br /&gt;
 Hex((Shr(''valore'', 8) And &amp;amp;FF) Or (Shl(''valore'', 8) And &amp;amp;FF00&amp;amp;), 4) As String&lt;br /&gt;
V'è da sottolineare che:&lt;br /&gt;
&amp;lt;BR&amp;gt; - il il valore ''&amp;amp;FF00&amp;amp;'' necessita assolutamente alla fine del carattere '''&amp;amp;''', poiché, se non lo si ponesse, avremmo come risultato un valore in esadecimale di 3 byte ! &amp;lt;SUP&amp;gt;[ [[#Note|nota 1]] ]&amp;lt;/sup&amp;gt;&lt;br /&gt;
&amp;lt;BR&amp;gt; - se il valore convertito assume un valore massimo supportato in Gambas dal tipo &amp;quot;Short&amp;quot; (ossia superiore al valore espresso in esadecimale &amp;amp;7FFF), allora la variabile &amp;quot;valore&amp;quot; dovrà essere dichiarata come tipo &amp;lt;SPAN Style=&amp;quot;text-decoration:underline&amp;quot;&amp;gt;Integer&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Uso di esplicite operazioni matematiche==&lt;br /&gt;
Se si vorranno utilizzare esplicite operazioni matematiche anziché funzioni Gambas, si potrà adoperare la seguente formula:&lt;br /&gt;
 Hex(((''valore'' \ CInt(2 ^ 8)) And &amp;amp;FF) Or ((''valore'' * CInt(2 ^ 8)) And &amp;amp;FF00&amp;amp;), 4) As String&lt;br /&gt;
oppure&lt;br /&gt;
 Hex(((''valore'' \ CInt(2 ^ 8)) And &amp;amp;FF) Or CShort(((''valore'' * CInt(2 ^ 8)) And &amp;amp;FF00)), 4) As String&lt;br /&gt;
&lt;br /&gt;
==Uso dell'operatore ''OR'' con operazione di scorrimento dei bit a sinistra==&lt;br /&gt;
Mostriamo un esempio pratico con l'operatore ''OR''  combinato con operazione di scorrimento dei bit a sinistra, in cui convertiremo il valore esadecimale ''0x2301'' di tipo ''Short'' da ''Little-Endian'' a ''Big-Endian'':&lt;br /&gt;
 Public Sub Main()&lt;br /&gt;
 &lt;br /&gt;
   Dim valore, s1, s2, v As Short&lt;br /&gt;
   &lt;br /&gt;
   valore = &amp;amp;2301&lt;br /&gt;
   &lt;br /&gt;
   s1 = Shr(valore, 8)&lt;br /&gt;
   s2 = valore And 255&lt;br /&gt;
   &lt;br /&gt;
   v = s1&lt;br /&gt;
   v = v Or Shl(s2, 8)&lt;br /&gt;
   &lt;br /&gt;
   Print Hex(v, 4), v&lt;br /&gt;
    &lt;br /&gt;
 End&lt;br /&gt;
Questo algoritmo è valido anche per la conversione contraria: da ''Big-Endian'' a ''Little-Endian''.&lt;br /&gt;
&lt;br /&gt;
==Uso degli operatori AND e OR, nonché delle funzioni Shr() e Shl(), mantenendo il tipo Short==&lt;br /&gt;
Ecco una funzione che prende in input un valore a 16 bit in ''Big-Endian'' e restituisce il corrispondente valore in ''Little-Endian'', mantenendo il tipo ''Short'':&lt;br /&gt;
 Private Function BigEndianToLittleEndian16(value As Short) As Short&lt;br /&gt;
 &lt;br /&gt;
  Dim hi As Short = (value And &amp;amp;HFF00) Shr 8   &amp;lt;FONT Color=gray&amp;gt;' ''Byte alto → spostato a destra''&amp;lt;/font&amp;gt;&lt;br /&gt;
  Dim lo As Short = (value And &amp;amp;H00FF)         &amp;lt;FONT Color=gray&amp;gt;' ''Byte basso → resta com’è''&amp;lt;/font&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
  Return lo Shl 8 Or hi                        &amp;lt;FONT Color=gray&amp;gt;' ''Ricompone in ordine Little-Endian''&amp;lt;/font&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 End&lt;br /&gt;
 &lt;br /&gt;
==Uso degli operatori AND e OR, nonché della sola funzione Shr()==&lt;br /&gt;
Mostriamo una funzione di supporto che converte un intero a 16 bit in stringa 4 byte ''little endian'':&lt;br /&gt;
 Private Function BigEndianToLittleEndian16_Shr(value As Short) As '''Short'''&lt;br /&gt;
 &lt;br /&gt;
  Dim hi As Short = (value And &amp;amp;HFF00) Shr 8     &amp;lt;FONT Color=gray&amp;gt;' ''Isola il byte alto e lo porta in basso''&amp;lt;/font&amp;gt;&lt;br /&gt;
  Dim lo As Short = (value And &amp;amp;H00FF)           &amp;lt;FONT Color=gray&amp;gt;' ''Isola il byte basso''&amp;lt;/font&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
  Return lo * 256 Or hi                          &amp;lt;FONT Color=gray&amp;gt;' ''Simula Shl 8 con * 256, ricompone con OR''&amp;lt;/font&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 End&lt;br /&gt;
Se si vuole ritornare un tipo ''String'', allora avremo:&lt;br /&gt;
 Private Function ShortToLittleEndianString(value As Short) As '''String'''&lt;br /&gt;
 &lt;br /&gt;
  Dim lo As Byte = value And &amp;amp;H00FF              &amp;lt;FONT Color=gray&amp;gt;' ''Byte meno significativo''&amp;lt;/font&amp;gt;&lt;br /&gt;
  Dim hi As Byte = (value And &amp;amp;HFF00) Shr 8      &amp;lt;FONT Color=gray&amp;gt;' ''Byte più significativo spostato a destra''&amp;lt;/font&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
  Return Hex(lo) &amp;amp; Hex(hi)                       &amp;lt;FONT Color=gray&amp;gt;' ''Costruzione stringa Little-Endian''&amp;lt;/font&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 End&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Conversione ''Big-Endian''/''Little-Endian'' e viceversa di un valore a '''32-bit'''=&lt;br /&gt;
La formula astratta per ottenere la conversione ''Big-Endian''/''Little-Endian'' di un valore intero a 32-bit (''Integer'') può essere la seguente:&lt;br /&gt;
 ((valore &amp;gt;&amp;gt; 24) &amp;amp; 0xff) | ((valore &amp;lt;&amp;lt; 8) &amp;amp; 0xff0000) | ((valore &amp;gt;&amp;gt; 8) &amp;amp; 0xff00) | ((valore &amp;lt;&amp;lt; 24) &amp;amp; 0xff000000)&lt;br /&gt;
La suddetta formula in Gambas potrà essere tradotta utilizzando uno dei seguenti metodi:&lt;br /&gt;
* funzioni di scorrimento dei bit a destra ed a sinistra;&lt;br /&gt;
* esplicite operazioni matematiche;&lt;br /&gt;
* Uso degli operatori AND e OR;&lt;br /&gt;
* Uso del solo operatore AND e della sola funzione Shr().&lt;br /&gt;
&lt;br /&gt;
==Uso delle funzioni di scorrimento dei bit a destra ed a sinistra==&lt;br /&gt;
Questa modalità è in sintassi così espressa:&lt;br /&gt;
 Hex((Shr(''valore'', 24) And &amp;amp;FF) Or (Shl(''valore'', 8) And &amp;amp;FF0000) Or (Shr(''valore'', 8) And &amp;amp;FF00&amp;amp;) Or (Shl(''valore'', 24) And &amp;amp;FF000000), 8) As String&lt;br /&gt;
oppure&lt;br /&gt;
 Hex((Shr(valore, 24)) Or (Shl(i, 8) And &amp;amp;FF0000) Or (Shr(valore, 8) And &amp;amp;FF00&amp;amp;) Or (Shl(valore, 24)), 8) As String&lt;br /&gt;
Va sottolineato che, se dalla conversione, il numero assumerà un valore superiore a quello supportato in Gambas dal tipo &amp;quot;Integer&amp;quot; (ossia superiore al valore espresso in esadecimale &amp;amp;7FFFFF), allora sarà opportuno dichiarare la variabile &amp;quot;valore&amp;quot; come tipo &amp;lt;SPAN Style=&amp;quot;text-decoration:underline&amp;quot;&amp;gt;Long&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Uso di esplicite operazioni matematiche==&lt;br /&gt;
Se si vorranno utilizzare esplicite operazioni matematiche anziché funzioni Gambas, si potrà adoperare la seguente formula:&lt;br /&gt;
 Hex(((''valore'' \ CInt(2 ^ 24)) And &amp;amp;FF) Or ((''valore'' * CInt(2 ^ 8)) And &amp;amp;FF0000) Or ((''valore'' \ CInt(2 ^ 8)) And &amp;amp;FF00&amp;amp;) Or ((''valore'' * CInt(2 ^ 24)) And &amp;amp;FF000000), 8)&lt;br /&gt;
oppure quest'altra:&lt;br /&gt;
 Hex(((''valore'' \ CInt(2 ^ 24)) And &amp;amp;FF) Or ((''valore'' * CInt(2 ^ 8)) And &amp;amp;FF0000) Or CShort(((''valore'' \ CInt(2 ^ 8)) And &amp;amp;FF00)) Or ((''valore'' * CInt(2 ^ 24)) And &amp;amp;FF000000), 8)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Usando gli operatori AND e OR, nonché le funzioni Shr() e Shl(), mantenendo il tipo Integer==&lt;br /&gt;
Ecco una funzione che prende in input un valore a 32 bit in ''Big-Endian'' e restituisce il corrispondente valore in ''Little-Endian'', mantenendo il tipo ''Integer'':&lt;br /&gt;
 Private Function BigEndianToLittleEndian32(value As Integer) As Integer&lt;br /&gt;
 &lt;br /&gt;
  Dim b1 As Integer = Shr(value And &amp;amp;HFF000000, 24)&lt;br /&gt;
 &amp;lt;FONT Color=gray&amp;gt;' ''Anche così la funzione &amp;quot;Shr()&amp;quot; va bene:''&amp;lt;/font&amp;gt;&lt;br /&gt;
  Dim b2 As Integer = (value And &amp;amp;H00FF0000) Shr 8&lt;br /&gt;
 &lt;br /&gt;
  Dim b3 As Integer = (value And &amp;amp;H0000FF00) Shl 8&lt;br /&gt;
 &amp;lt;FONT Color=gray&amp;gt;' ''Anche così la funzione &amp;quot;Shl()&amp;quot; va bene:''&amp;lt;/font&amp;gt;&lt;br /&gt;
  Dim b4 As Integer = (value And &amp;amp;H000000FF) Shl 24&lt;br /&gt;
 &lt;br /&gt;
  Return b1 Or b2 Or b3 Or b4&lt;br /&gt;
 &lt;br /&gt;
 End&lt;br /&gt;
o anche:&lt;br /&gt;
 Private Function BigEndianToLittleEndian32(value As Integer) As Integer&lt;br /&gt;
 &lt;br /&gt;
  Dim b1, b2, b3, b4 As Integer&lt;br /&gt;
 &lt;br /&gt;
  b1 = (value Shr 24) And &amp;amp;HFF&lt;br /&gt;
  b2 = (value Shr 16) And &amp;amp;HFF&lt;br /&gt;
  b3 = (value Shr 8) And &amp;amp;HFF&lt;br /&gt;
  b4 = value And &amp;amp;HFF&lt;br /&gt;
 &lt;br /&gt;
  Return (b4 Shl 24) Or (b3 Shl 16) Or (b2 Shl 8) Or b1&lt;br /&gt;
 &lt;br /&gt;
 End&lt;br /&gt;
&lt;br /&gt;
==Uso del solo operatore AND e della sola funzione Shr()==&lt;br /&gt;
Mostriamo una funzione di supporto che converte un intero a 32 bit in stringa 4 byte ''little endian'':&lt;br /&gt;
 Private Function IntToLittleEndian(value As Integer) As String&lt;br /&gt;
 &lt;br /&gt;
  Dim b1 As Byte = value And &amp;amp;HFF&lt;br /&gt;
  Dim b2 As Byte = (value Shr 8) And &amp;amp;HFF&lt;br /&gt;
  Dim b3 As Byte = (value Shr 16) And &amp;amp;HFF&lt;br /&gt;
  Dim b4 As Byte = (value Shr 24) And &amp;amp;HFF&lt;br /&gt;
  &lt;br /&gt;
  Return Chr(b1) &amp;amp; Chr(b2) &amp;amp; Chr(b3) &amp;amp; Chr(b4)&lt;br /&gt;
 &lt;br /&gt;
 End&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Rotazione dei byte mediante le funzioni esterne &amp;quot;ntohl()&amp;quot; e &amp;quot;ntohs()&amp;quot;=&lt;br /&gt;
Mediante le funzioni &amp;quot;ntohl()&amp;quot; e &amp;quot;ntohs() della libreria esterna &amp;quot;libc.so.6&amp;quot;, dichiarate nel file header &amp;quot;''/usr/include/netinet/in.h''&amp;quot;, è possibile ottenere la rotazione dei byte rispettivamente di un valore di tipo ''Intero'' (32 bit) e di uno valore di tipo ''Intero Corto'' (16 bit).&lt;br /&gt;
&lt;br /&gt;
Mostriamo un semplice esempio:&lt;br /&gt;
 Library &amp;quot;libc:6&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;FONT Color=gray&amp;gt;' ''uint32_t ntohl (uint32_t __netlong)''&lt;br /&gt;
 ' ''Converts the unsigned integer netlong from network byte order to host byte order.''&amp;lt;/font&amp;gt;&lt;br /&gt;
 Private Extern ntohl(__netlong As Integer) As Integer&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;FONT Color=gray&amp;gt;' ''uint16_t ntohs (uint16_t __netshort)''&lt;br /&gt;
 ' ''Converts the unsigned short integer netshort from network byte order to host byte order.''&amp;lt;/font&amp;gt;&lt;br /&gt;
 Private Extern ntohs(__netshort As Short) As Short&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 Public Sub Main()&lt;br /&gt;
  &lt;br /&gt;
   Dim i As Integer&lt;br /&gt;
   Dim c As Short&lt;br /&gt;
  &lt;br /&gt;
   i = ntohl(&amp;amp;01020304)&lt;br /&gt;
   Print Hex(i, 8)&lt;br /&gt;
   &lt;br /&gt;
   c = ntohs(&amp;amp;0908)&lt;br /&gt;
   Print Hex(c, 4)&lt;br /&gt;
   &lt;br /&gt;
 End&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Note=&lt;br /&gt;
[1] Interpellato al riguardo Benoît Minisini ha così spiegato il problema e suggerito la soluzione:&lt;br /&gt;
&amp;lt;BR&amp;gt;« ''Because of weird Visual Basic compatibility, &amp;amp;FF00 is sign-extended, i.e. &amp;amp;FF00 = &amp;amp;FFFFFF00''&lt;br /&gt;
&amp;lt;BR&amp;gt;''To prevent automatic sign-extension, write &amp;amp;FF00&amp;amp; (with an extra '&amp;amp;' at the end).''&lt;br /&gt;
&amp;lt;BR&amp;gt;''Otherwise, I don't know where your data comes from, but Swap$() does endianness conversion provided that each integer is stored inside a string.'' »&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Riferimenti=&lt;br /&gt;
* https://it.wikipedia.org/wiki/Ordine_dei_byte‎&lt;br /&gt;
* http://en.wikipedia.org/wiki/Endianness&lt;br /&gt;
* http://betterexplained.com/articles/understanding-big-and-little-endian-byte-order/&lt;br /&gt;
* https://www.cs.umd.edu/~meesh/cmsc311/clin-cmsc311/Lectures/lecture6/endian.pdf&lt;br /&gt;
* https://www.geeksforgeeks.org/little-and-big-endian-mystery/&lt;br /&gt;
* http://people.cs.umass.edu/~verts/cs32/endian.html&lt;br /&gt;
* https://www.youtube.com/watch?v=n6lPuep66aM&lt;br /&gt;
* https://www.youtube.com/watch?v=JrNF0KRAlyo&lt;/div&gt;</summary>
		<author><name>Vuott</name></author>
	</entry>
	<entry>
		<id>https://www.gambas-it.org/wiki/index.php?title=Ottenere_in_Gambas_il_risultato_di_uno_spostamento_di_bit_scritto_in_linguaggio_C&amp;diff=42726</id>
		<title>Ottenere in Gambas il risultato di uno spostamento di bit scritto in linguaggio C</title>
		<link rel="alternate" type="text/html" href="https://www.gambas-it.org/wiki/index.php?title=Ottenere_in_Gambas_il_risultato_di_uno_spostamento_di_bit_scritto_in_linguaggio_C&amp;diff=42726"/>
		<updated>2025-10-26T16:24:45Z</updated>

		<summary type="html">&lt;p&gt;Vuott: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Per ottenere mediante il solo codice Gambas il risultato dello Spostamento di Bit a ''destra'' &amp;lt;U&amp;gt;scritto nel codice di un progetto Gambas usando la forma testuale del linguaggio C&amp;lt;/u&amp;gt; ( &amp;lt;FONT Color=red&amp;gt;'''&amp;gt;&amp;gt;'''&amp;lt;/font&amp;gt; ): &amp;lt;SUP&amp;gt;&amp;amp;#091;[[#Note|nota 1]]&amp;amp;#093;&amp;lt;/sup&amp;gt;&lt;br /&gt;
 numero &amp;lt;FONT Color=red&amp;gt;'''&amp;gt;&amp;gt;'''&amp;lt;/font&amp;gt; quantità bit di scorrimento&lt;br /&gt;
esempio:&lt;br /&gt;
 16 '''&amp;gt;&amp;gt;''' 2&lt;br /&gt;
oppure dello Spostamento a ''sinistra'' ( &amp;lt;FONT Color=red&amp;gt;'''&amp;lt;&amp;lt;'''&amp;lt;/font&amp;gt; )&lt;br /&gt;
  numero &amp;lt;FONT Color=red&amp;gt;'''&amp;lt;&amp;lt;'''&amp;lt;/font&amp;gt; quantità bit di scorrimento&lt;br /&gt;
esempio:&lt;br /&gt;
 16 '''&amp;lt;&amp;lt;''' 2&lt;br /&gt;
possiamo utilizzare un codice del seguente tenore:&lt;br /&gt;
 Public Sub Main()&lt;br /&gt;
  &lt;br /&gt;
  Dim s As String&lt;br /&gt;
  Dim i As Integer&lt;br /&gt;
  &lt;br /&gt;
 &amp;lt;FONT Color=gray&amp;gt;' ''Inseriamo, come testo, un esempio spostamento di bit a sinistra scritto in C:''&amp;lt;/font&amp;gt;&lt;br /&gt;
   s = &amp;quot;16 &amp;lt;&amp;lt; 3&amp;quot;&lt;br /&gt;
    &lt;br /&gt;
   i = Spostamento(s)&lt;br /&gt;
    &lt;br /&gt;
   Print i&lt;br /&gt;
   &lt;br /&gt;
 End&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 Private Function Spostamento(ds As String) As Integer&lt;br /&gt;
  &lt;br /&gt;
  Dim ris As Integer&lt;br /&gt;
  Dim ss As String[]&lt;br /&gt;
    &lt;br /&gt;
   ss = Scan(ds, &amp;quot;* * *&amp;quot;)&lt;br /&gt;
    &lt;br /&gt;
   Select Case Trim(ss[1])&lt;br /&gt;
     Case &amp;quot;&amp;lt;&amp;lt;&amp;quot;&lt;br /&gt;
       ris = Val(Trim(ss[0])) * (2 ^ Val(Trim(ss[2])))&lt;br /&gt;
     Case &amp;quot;&amp;gt;&amp;gt;&amp;quot;&lt;br /&gt;
       ris = Val(Trim(ss[0])) \ CInt(2 ^ Val(Trim(ss[2])))&lt;br /&gt;
   End Select&lt;br /&gt;
      &lt;br /&gt;
   Return ris&lt;br /&gt;
   &lt;br /&gt;
 End&lt;br /&gt;
&lt;br /&gt;
===Con supporto operatori più chiaro===&lt;br /&gt;
 Private Function Spostamento(ds As String) As Integer&lt;br /&gt;
 &lt;br /&gt;
  Dim ss As String[] = Scan(ds, &amp;quot;* * *&amp;quot;)&lt;br /&gt;
  Dim left As Integer = Val(ss[0])&lt;br /&gt;
  Dim op As String = Trim(ss[1])&lt;br /&gt;
  Dim right As Integer = Val(ss[2])&lt;br /&gt;
 &lt;br /&gt;
  Select Case op&lt;br /&gt;
    Case &amp;quot;&amp;lt;&amp;lt;&amp;quot;&lt;br /&gt;
      Return left Shl right&lt;br /&gt;
    Case &amp;quot;&amp;gt;&amp;gt;&amp;quot;&lt;br /&gt;
      Return left Shr right&lt;br /&gt;
    Case Else&lt;br /&gt;
      Error.Raise(&amp;quot;Operatore non supportato: &amp;quot; &amp;amp; op)&lt;br /&gt;
  End Select&lt;br /&gt;
 &lt;br /&gt;
 End&lt;br /&gt;
&lt;br /&gt;
===Applicando gli operatori Shl() e Shr()===&lt;br /&gt;
 Private Function Spostamento(ds As String) As Integer&lt;br /&gt;
 &lt;br /&gt;
  Dim ss As String[] = Scan(ds, &amp;quot;* * *&amp;quot;)&lt;br /&gt;
  Dim left As Integer = Val(ss[0])&lt;br /&gt;
  Dim op As String = Trim(ss[1])&lt;br /&gt;
  Dim right As Integer = Val(ss[2])&lt;br /&gt;
  Dim ris As Integer = 0&lt;br /&gt;
 &lt;br /&gt;
  Select Case op&lt;br /&gt;
    Case &amp;quot;&amp;lt;&amp;lt;&amp;quot;&lt;br /&gt;
      ris = left Shl right&lt;br /&gt;
    Case &amp;quot;&amp;gt;&amp;gt;&amp;quot;&lt;br /&gt;
      ris = left Shr right&lt;br /&gt;
    Case Else&lt;br /&gt;
      Error.Raise(&amp;quot;Operatore non supportato&amp;quot;)&lt;br /&gt;
  End Select&lt;br /&gt;
 &lt;br /&gt;
  Return ris&lt;br /&gt;
 &lt;br /&gt;
 End&lt;br /&gt;
&lt;br /&gt;
===Usando Eval()===&lt;br /&gt;
 Public Sub Main()&lt;br /&gt;
  &lt;br /&gt;
  Dim s As String = &amp;quot;16 &amp;lt;&amp;lt; 3&amp;quot;&lt;br /&gt;
  Dim i As Integer&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;FONT Color=gray&amp;gt;' ''Sostituisce gli operatori C con quelli Gambas, perché Gambas non riconosce &amp;lt;&amp;lt; come operatore valido nell’espressione Eval():&amp;lt;/font&amp;gt;&lt;br /&gt;
  s = Replace(s, &amp;quot;&amp;lt;&amp;lt;&amp;quot;, &amp;quot;Shl&amp;quot;)&lt;br /&gt;
  s = Replace(s, &amp;quot;&amp;gt;&amp;gt;&amp;quot;, &amp;quot;Shr&amp;quot;)&lt;br /&gt;
 &lt;br /&gt;
  i = Eval(s)&lt;br /&gt;
 &lt;br /&gt;
  Print i&lt;br /&gt;
 &lt;br /&gt;
 End&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Note=&lt;br /&gt;
[1] Vedere anche questa pagina: [[Sostituire gli operatori logici di spostamento dei bit con semplici operazioni]]&lt;/div&gt;</summary>
		<author><name>Vuott</name></author>
	</entry>
	<entry>
		<id>https://www.gambas-it.org/wiki/index.php?title=Ottenere_in_Gambas_il_risultato_di_uno_spostamento_di_bit_scritto_in_linguaggio_C&amp;diff=42725</id>
		<title>Ottenere in Gambas il risultato di uno spostamento di bit scritto in linguaggio C</title>
		<link rel="alternate" type="text/html" href="https://www.gambas-it.org/wiki/index.php?title=Ottenere_in_Gambas_il_risultato_di_uno_spostamento_di_bit_scritto_in_linguaggio_C&amp;diff=42725"/>
		<updated>2025-10-26T16:22:29Z</updated>

		<summary type="html">&lt;p&gt;Vuott: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Per ottenere mediante il solo codice Gambas il risultato dello Spostamento di Bit a ''destra'' &amp;lt;U&amp;gt;scritto nel codice di un progetto Gambas in linguaggio C&amp;lt;/u&amp;gt; ( &amp;lt;FONT Color=red&amp;gt;'''&amp;gt;&amp;gt;'''&amp;lt;/font&amp;gt; ): &amp;lt;SUP&amp;gt;&amp;amp;#091;[[#Note|nota 1]]&amp;amp;#093;&amp;lt;/sup&amp;gt;&lt;br /&gt;
 numero &amp;lt;FONT Color=red&amp;gt;'''&amp;gt;&amp;gt;'''&amp;lt;/font&amp;gt; quantità bit di scorrimento&lt;br /&gt;
esempio:&lt;br /&gt;
 16 '''&amp;gt;&amp;gt;''' 2&lt;br /&gt;
oppure dello Spostamento a ''sinistra'' ( &amp;lt;FONT Color=red&amp;gt;'''&amp;lt;&amp;lt;'''&amp;lt;/font&amp;gt; )&lt;br /&gt;
  numero &amp;lt;FONT Color=red&amp;gt;'''&amp;lt;&amp;lt;'''&amp;lt;/font&amp;gt; quantità bit di scorrimento&lt;br /&gt;
esempio:&lt;br /&gt;
 16 '''&amp;lt;&amp;lt;''' 2&lt;br /&gt;
possiamo utilizzare un codice del seguente tenore:&lt;br /&gt;
 Public Sub Main()&lt;br /&gt;
  &lt;br /&gt;
  Dim s As String&lt;br /&gt;
  Dim i As Integer&lt;br /&gt;
  &lt;br /&gt;
 &amp;lt;FONT Color=gray&amp;gt;' ''Inseriamo, come testo, un esempio spostamento di bit a sinistra scritto in C:''&amp;lt;/font&amp;gt;&lt;br /&gt;
   s = &amp;quot;16 &amp;lt;&amp;lt; 3&amp;quot;&lt;br /&gt;
    &lt;br /&gt;
   i = Spostamento(s)&lt;br /&gt;
    &lt;br /&gt;
   Print i&lt;br /&gt;
   &lt;br /&gt;
 End&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 Private Function Spostamento(ds As String) As Integer&lt;br /&gt;
  &lt;br /&gt;
  Dim ris As Integer&lt;br /&gt;
  Dim ss As String[]&lt;br /&gt;
    &lt;br /&gt;
   ss = Scan(ds, &amp;quot;* * *&amp;quot;)&lt;br /&gt;
    &lt;br /&gt;
   Select Case Trim(ss[1])&lt;br /&gt;
     Case &amp;quot;&amp;lt;&amp;lt;&amp;quot;&lt;br /&gt;
       ris = Val(Trim(ss[0])) * (2 ^ Val(Trim(ss[2])))&lt;br /&gt;
     Case &amp;quot;&amp;gt;&amp;gt;&amp;quot;&lt;br /&gt;
       ris = Val(Trim(ss[0])) \ CInt(2 ^ Val(Trim(ss[2])))&lt;br /&gt;
   End Select&lt;br /&gt;
      &lt;br /&gt;
   Return ris&lt;br /&gt;
   &lt;br /&gt;
 End&lt;br /&gt;
&lt;br /&gt;
===Con supporto operatori più chiaro===&lt;br /&gt;
 Private Function Spostamento(ds As String) As Integer&lt;br /&gt;
 &lt;br /&gt;
  Dim ss As String[] = Scan(ds, &amp;quot;* * *&amp;quot;)&lt;br /&gt;
  Dim left As Integer = Val(ss[0])&lt;br /&gt;
  Dim op As String = Trim(ss[1])&lt;br /&gt;
  Dim right As Integer = Val(ss[2])&lt;br /&gt;
 &lt;br /&gt;
  Select Case op&lt;br /&gt;
    Case &amp;quot;&amp;lt;&amp;lt;&amp;quot;&lt;br /&gt;
      Return left Shl right&lt;br /&gt;
    Case &amp;quot;&amp;gt;&amp;gt;&amp;quot;&lt;br /&gt;
      Return left Shr right&lt;br /&gt;
    Case Else&lt;br /&gt;
      Error.Raise(&amp;quot;Operatore non supportato: &amp;quot; &amp;amp; op)&lt;br /&gt;
  End Select&lt;br /&gt;
 &lt;br /&gt;
 End&lt;br /&gt;
&lt;br /&gt;
===Applicando gli operatori Shl() e Shr()===&lt;br /&gt;
 Private Function Spostamento(ds As String) As Integer&lt;br /&gt;
 &lt;br /&gt;
  Dim ss As String[] = Scan(ds, &amp;quot;* * *&amp;quot;)&lt;br /&gt;
  Dim left As Integer = Val(ss[0])&lt;br /&gt;
  Dim op As String = Trim(ss[1])&lt;br /&gt;
  Dim right As Integer = Val(ss[2])&lt;br /&gt;
  Dim ris As Integer = 0&lt;br /&gt;
 &lt;br /&gt;
  Select Case op&lt;br /&gt;
    Case &amp;quot;&amp;lt;&amp;lt;&amp;quot;&lt;br /&gt;
      ris = left Shl right&lt;br /&gt;
    Case &amp;quot;&amp;gt;&amp;gt;&amp;quot;&lt;br /&gt;
      ris = left Shr right&lt;br /&gt;
    Case Else&lt;br /&gt;
      Error.Raise(&amp;quot;Operatore non supportato&amp;quot;)&lt;br /&gt;
  End Select&lt;br /&gt;
 &lt;br /&gt;
  Return ris&lt;br /&gt;
 &lt;br /&gt;
 End&lt;br /&gt;
&lt;br /&gt;
===Usando Eval()===&lt;br /&gt;
 Public Sub Main()&lt;br /&gt;
  &lt;br /&gt;
  Dim s As String = &amp;quot;16 &amp;lt;&amp;lt; 3&amp;quot;&lt;br /&gt;
  Dim i As Integer&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;FONT Color=gray&amp;gt;' ''Sostituisce gli operatori C con quelli Gambas, perché Gambas non riconosce &amp;lt;&amp;lt; come operatore valido nell’espressione Eval():&amp;lt;/font&amp;gt;&lt;br /&gt;
  s = Replace(s, &amp;quot;&amp;lt;&amp;lt;&amp;quot;, &amp;quot;Shl&amp;quot;)&lt;br /&gt;
  s = Replace(s, &amp;quot;&amp;gt;&amp;gt;&amp;quot;, &amp;quot;Shr&amp;quot;)&lt;br /&gt;
 &lt;br /&gt;
  i = Eval(s)&lt;br /&gt;
 &lt;br /&gt;
  Print i&lt;br /&gt;
 &lt;br /&gt;
 End&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Note=&lt;br /&gt;
[1] Vedere anche questa pagina: [[Sostituire gli operatori logici di spostamento dei bit con semplici operazioni]]&lt;/div&gt;</summary>
		<author><name>Vuott</name></author>
	</entry>
	<entry>
		<id>https://www.gambas-it.org/wiki/index.php?title=Conversione_Big-Endian/Little-Endian&amp;diff=42724</id>
		<title>Conversione Big-Endian/Little-Endian</title>
		<link rel="alternate" type="text/html" href="https://www.gambas-it.org/wiki/index.php?title=Conversione_Big-Endian/Little-Endian&amp;diff=42724"/>
		<updated>2025-10-26T12:50:29Z</updated>

		<summary type="html">&lt;p&gt;Vuott: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Big-Endian''' e '''Little-Endian''' sono due differenti modalità per memorizzare dati di dimensione superiore al semplice byte.&lt;br /&gt;
&lt;br /&gt;
La differenza tra i due sistemi è data dall'ordine, con il quale i byte costituenti il dato vengono memorizzati:&lt;br /&gt;
* ''Big-Endian'' è il tipo di memorizzazione che inizia (da sinistra verso destra) dal byte più significativo (che è quello posto a sinistra) e termina con il byte meno significativo;&lt;br /&gt;
* ''Little-Endian'' è il tipo di memorizzazione che inizia (da destra verso sinistra) dal byte meno significativo (che è quello posto a destra) e termina con il byte più significativo. Quindi in sostanza nel sistema ''Little-Endian'' l'ordine dei byte nell'indirizzo di memoria è invertito ripetto al sistema ''Big-Endian''.&lt;br /&gt;
&lt;br /&gt;
Se ad esempio abbiamo il valore decimale 1234567, la memorizzazione nella seguente forma esadecimale:&lt;br /&gt;
 12 D6 87&lt;br /&gt;
è di tipo ''Big-Endian''.&lt;br /&gt;
&lt;br /&gt;
Invece la memorizzazione di quello stesso numero nella forma:&lt;br /&gt;
 87 D6 12&lt;br /&gt;
è, invece, di tipo ''Little-Endian''.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In taluni casi particolari, pertanto, possiamo riscontrare che alcuni valori vengono scritti per la memorizzazione in modalità ''Little-Endian'', e che di conseguenza, per comprenderne il reale significato/valore, devono essere convertiti in forma ''Big-Endian''. Possiamo, per converso, avere valori che, memorizzati inizialmente nel formato esadecimale della forma ''Big-Endian'', debbano essere convertiti in forma ''Little-Endian'', affinché altri pogrammi possano comprendere il loro reale significato e restituire quindi il vero valore.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Conversione ''Big-Endian''/''Little-Endian'' e viceversa di un valore a '''16-bit'''=&lt;br /&gt;
La formula astratta - espressa in linguaggio C - per ottenere la conversione ''Big-Endian''/''Little-Endian'' e viceversa di un valore a 16bit (= 2 byte, ossia di tipo ''Short'') può essere la seguente (anche se [http://stackoverflow.com/questions/105252/how-do-i-convert-between-big-endian-and-little-endian-values-in-c le modalità sono molteplici] per ottenere la conversione):&lt;br /&gt;
 ((valore &amp;gt;&amp;gt; 8) &amp;amp; 0x00FF) | ((valore &amp;lt;&amp;lt; 8) &amp;amp; 0xFF00)&lt;br /&gt;
che in Gambas potremo tradurre, utilizzando uno dei seguenti metodi:&lt;br /&gt;
* funzioni di scorrimento dei bit a destra ed a sinistra;&lt;br /&gt;
* esplicite operazioni matematiche;&lt;br /&gt;
* Uso dell'operatore ''OR'' combinato con operazione di scorrimento dei bit a sinistra.&lt;br /&gt;
&lt;br /&gt;
==Uso delle funzioni di scorrimento dei bit a destra ed a sinistra==&lt;br /&gt;
Questa modalità è in sintassi così in Gambas espressa:&lt;br /&gt;
 Hex((Shr(''valore'', 8) And &amp;amp;FF) Or (Shl(''valore'', 8) And &amp;amp;FF00&amp;amp;), 4) As String&lt;br /&gt;
V'è da sottolineare che:&lt;br /&gt;
&amp;lt;BR&amp;gt; - il il valore ''&amp;amp;FF00&amp;amp;'' necessita assolutamente alla fine del carattere '''&amp;amp;''', poiché, se non lo si ponesse, avremmo come risultato un valore in esadecimale di 3 byte ! &amp;lt;SUP&amp;gt;[ [[#Note|nota 1]] ]&amp;lt;/sup&amp;gt;&lt;br /&gt;
&amp;lt;BR&amp;gt; - se il valore convertito assume un valore massimo supportato in Gambas dal tipo &amp;quot;Short&amp;quot; (ossia superiore al valore espresso in esadecimale &amp;amp;7FFF), allora la variabile &amp;quot;valore&amp;quot; dovrà essere dichiarata come tipo &amp;lt;SPAN Style=&amp;quot;text-decoration:underline&amp;quot;&amp;gt;Integer&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Uso di esplicite operazioni matematiche==&lt;br /&gt;
Se si vorranno utilizzare esplicite operazioni matematiche anziché funzioni Gambas, si potrà adoperare la seguente formula:&lt;br /&gt;
 Hex(((''valore'' \ CInt(2 ^ 8)) And &amp;amp;FF) Or ((''valore'' * CInt(2 ^ 8)) And &amp;amp;FF00&amp;amp;), 4) As String&lt;br /&gt;
oppure&lt;br /&gt;
 Hex(((''valore'' \ CInt(2 ^ 8)) And &amp;amp;FF) Or CShort(((''valore'' * CInt(2 ^ 8)) And &amp;amp;FF00)), 4) As String&lt;br /&gt;
&lt;br /&gt;
==Uso dell'operatore ''OR'' con operazione di scorrimento dei bit a sinistra==&lt;br /&gt;
Mostriamo un esempio pratico con l'operatore ''OR''  combinato con operazione di scorrimento dei bit a sinistra, in cui convertiremo il valore esadecimale ''0x2301'' di tipo ''Short'' da ''Little-Endian'' a ''Big-Endian'':&lt;br /&gt;
 Public Sub Main()&lt;br /&gt;
 &lt;br /&gt;
   Dim valore, s1, s2, v As Short&lt;br /&gt;
   &lt;br /&gt;
   valore = &amp;amp;2301&lt;br /&gt;
   &lt;br /&gt;
   s1 = Shr(valore, 8)&lt;br /&gt;
   s2 = valore And 255&lt;br /&gt;
   &lt;br /&gt;
   v = s1&lt;br /&gt;
   v = v Or Shl(s2, 8)&lt;br /&gt;
   &lt;br /&gt;
   Print Hex(v, 4), v&lt;br /&gt;
    &lt;br /&gt;
 End&lt;br /&gt;
Questo algoritmo è valido anche per la conversione contraria: da ''Big-Endian'' a ''Little-Endian''.&lt;br /&gt;
&lt;br /&gt;
==Uso degli operatori AND e OR, nonché delle funzioni Shr() e Shl(), mantenendo il tipo Short==&lt;br /&gt;
Ecco una funzione che prende in input un valore a 16 bit in ''Big-Endian'' e restituisce il corrispondente valore in ''Little-Endian'', mantenendo il tipo ''Short'':&lt;br /&gt;
 Private Function BigEndianToLittleEndian16(value As Short) As Short&lt;br /&gt;
 &lt;br /&gt;
  Dim hi As Short = (value And &amp;amp;HFF00) Shr 8   &amp;lt;FONT Color=gray&amp;gt;' ''Byte alto → spostato a destra''&amp;lt;/font&amp;gt;&lt;br /&gt;
  Dim lo As Short = (value And &amp;amp;H00FF)         &amp;lt;FONT Color=gray&amp;gt;' ''Byte basso → resta com’è''&amp;lt;/font&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
  Return lo Shl 8 Or hi                        &amp;lt;FONT Color=gray&amp;gt;' ''Ricompone in ordine Little-Endian''&amp;lt;/font&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 End&lt;br /&gt;
 &lt;br /&gt;
==Uso degli operatori AND e OR, nonché  della sola funzione Shr()==&lt;br /&gt;
Mostriamo una funzione di supporto che converte un intero a 16 bit in stringa 4 byte ''little endian'':&lt;br /&gt;
 Private Function BigEndianToLittleEndian16_Shr(value As Short) As '''Short'''&lt;br /&gt;
 &lt;br /&gt;
  Dim hi As Short = (value And &amp;amp;HFF00) Shr 8     &amp;lt;FONT Color=gray&amp;gt;' ''Isola il byte alto e lo porta in basso''&amp;lt;/font&amp;gt;&lt;br /&gt;
  Dim lo As Short = (value And &amp;amp;H00FF)           &amp;lt;FONT Color=gray&amp;gt;' ''Isola il byte basso''&amp;lt;/font&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
  Return lo * 256 Or hi                          &amp;lt;FONT Color=gray&amp;gt;' ''Simula Shl 8 con * 256, ricompone con OR''&amp;lt;/font&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 End&lt;br /&gt;
Se si vuole ritornare un tipo ''String'', allora avremo:&lt;br /&gt;
 Private Function ShortToLittleEndianString(value As Short) As '''String'''&lt;br /&gt;
 &lt;br /&gt;
  Dim lo As Byte = value And &amp;amp;H00FF              &amp;lt;FONT Color=gray&amp;gt;' ''Byte meno significativo''&amp;lt;/font&amp;gt;&lt;br /&gt;
  Dim hi As Byte = (value And &amp;amp;HFF00) Shr 8      &amp;lt;FONT Color=gray&amp;gt;' ''Byte più significativo spostato a destra''&amp;lt;/font&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
  Return Hex(lo) &amp;amp; Hex(hi)                       &amp;lt;FONT Color=gray&amp;gt;' ''Costruzione stringa Little-Endian''&amp;lt;/font&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 End&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Conversione ''Big-Endian''/''Little-Endian'' e viceversa di un valore a '''32-bit'''=&lt;br /&gt;
La formula astratta per ottenere la conversione ''Big-Endian''/''Little-Endian'' di un valore intero a 32-bit (''Integer'') può essere la seguente:&lt;br /&gt;
 ((valore &amp;gt;&amp;gt; 24) &amp;amp; 0xff) | ((valore &amp;lt;&amp;lt; 8) &amp;amp; 0xff0000) | ((valore &amp;gt;&amp;gt; 8) &amp;amp; 0xff00) | ((valore &amp;lt;&amp;lt; 24) &amp;amp; 0xff000000)&lt;br /&gt;
La suddetta formula in Gambas potrà essere tradotta utilizzando uno dei seguenti metodi:&lt;br /&gt;
* funzioni di scorrimento dei bit a destra ed a sinistra;&lt;br /&gt;
* esplicite operazioni matematiche;&lt;br /&gt;
* Uso dell'operatore ''OR'' combinato con operazione di scorrimento dei bit a sinistra.&lt;br /&gt;
&lt;br /&gt;
==Uso delle funzioni di scorrimento dei bit a destra ed a sinistra==&lt;br /&gt;
Questa modalità è in sintassi così espressa:&lt;br /&gt;
 Hex((Shr(''valore'', 24) And &amp;amp;FF) Or (Shl(''valore'', 8) And &amp;amp;FF0000) Or (Shr(''valore'', 8) And &amp;amp;FF00&amp;amp;) Or (Shl(''valore'', 24) And &amp;amp;FF000000), 8) As String&lt;br /&gt;
oppure&lt;br /&gt;
 Hex((Shr(valore, 24)) Or (Shl(i, 8) And &amp;amp;FF0000) Or (Shr(valore, 8) And &amp;amp;FF00&amp;amp;) Or (Shl(valore, 24)), 8) As String&lt;br /&gt;
Va sottolineato che, se dalla conversione, il numero assumerà un valore superiore a quello supportato in Gambas dal tipo &amp;quot;Integer&amp;quot; (ossia superiore al valore espresso in esadecimale &amp;amp;7FFFFF), allora sarà opportuno dichiarare la variabile &amp;quot;valore&amp;quot; come tipo &amp;lt;SPAN Style=&amp;quot;text-decoration:underline&amp;quot;&amp;gt;Long&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Uso di esplicite operazioni matematiche===&lt;br /&gt;
Se si vorranno utilizzare esplicite operazioni matematiche anziché funzioni Gambas, si potrà adoperare la seguente formula:&lt;br /&gt;
 Hex(((''valore'' \ CInt(2 ^ 24)) And &amp;amp;FF) Or ((''valore'' * CInt(2 ^ 8)) And &amp;amp;FF0000) Or ((''valore'' \ CInt(2 ^ 8)) And &amp;amp;FF00&amp;amp;) Or ((''valore'' * CInt(2 ^ 24)) And &amp;amp;FF000000), 8)&lt;br /&gt;
oppure quest'altra:&lt;br /&gt;
 Hex(((''valore'' \ CInt(2 ^ 24)) And &amp;amp;FF) Or ((''valore'' * CInt(2 ^ 8)) And &amp;amp;FF0000) Or CShort(((''valore'' \ CInt(2 ^ 8)) And &amp;amp;FF00)) Or ((''valore'' * CInt(2 ^ 24)) And &amp;amp;FF000000), 8)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Usando gli operatori AND e OR, nonché le funzioni Shr() e Shl(), mantenendo il tipo Integer==&lt;br /&gt;
Ecco una funzione che prende in input un valore a 32 bit in ''Big-Endian'' e restituisce il corrispondente valore in ''Little-Endian'', mantenendo il tipo ''Integer'':&lt;br /&gt;
 Private Function BigEndianToLittleEndian32(value As Integer) As Integer&lt;br /&gt;
 &lt;br /&gt;
  Dim b1 As Integer = Shr(value And &amp;amp;HFF000000, 24)&lt;br /&gt;
 &amp;lt;FONT Color=gray&amp;gt;' ''Anche così la funzione &amp;quot;Shr()&amp;quot; va bene:''&amp;lt;/font&amp;gt;&lt;br /&gt;
  Dim b2 As Integer = (value And &amp;amp;H00FF0000) Shr 8&lt;br /&gt;
 &lt;br /&gt;
  Dim b3 As Integer = (value And &amp;amp;H0000FF00) Shl 8&lt;br /&gt;
 &amp;lt;FONT Color=gray&amp;gt;' ''Anche così la funzione &amp;quot;Shl()&amp;quot; va bene:''&amp;lt;/font&amp;gt;&lt;br /&gt;
  Dim b4 As Integer = (value And &amp;amp;H000000FF) Shl 24&lt;br /&gt;
 &lt;br /&gt;
  Return b1 Or b2 Or b3 Or b4&lt;br /&gt;
 &lt;br /&gt;
 End&lt;br /&gt;
o anche:&lt;br /&gt;
 Private Function BigEndianToLittleEndian32(value As Integer) As Integer&lt;br /&gt;
 &lt;br /&gt;
  Dim b1, b2, b3, b4 As Integer&lt;br /&gt;
 &lt;br /&gt;
  b1 = (value Shr 24) And &amp;amp;HFF&lt;br /&gt;
  b2 = (value Shr 16) And &amp;amp;HFF&lt;br /&gt;
  b3 = (value Shr 8) And &amp;amp;HFF&lt;br /&gt;
  b4 = value And &amp;amp;HFF&lt;br /&gt;
 &lt;br /&gt;
  Return (b4 Shl 24) Or (b3 Shl 16) Or (b2 Shl 8) Or b1&lt;br /&gt;
 &lt;br /&gt;
 End&lt;br /&gt;
&lt;br /&gt;
==Uso del solo operatore AND e della sola funzione Shr()==&lt;br /&gt;
Mostriamo una funzione di supporto che converte un intero a 32 bit in stringa 4 byte ''little endian'':&lt;br /&gt;
 Private Function IntToLittleEndian(value As Integer) As String&lt;br /&gt;
 &lt;br /&gt;
  Dim b1 As Byte = value And &amp;amp;HFF&lt;br /&gt;
  Dim b2 As Byte = (value Shr 8) And &amp;amp;HFF&lt;br /&gt;
  Dim b3 As Byte = (value Shr 16) And &amp;amp;HFF&lt;br /&gt;
  Dim b4 As Byte = (value Shr 24) And &amp;amp;HFF&lt;br /&gt;
  &lt;br /&gt;
  Return Chr(b1) &amp;amp; Chr(b2) &amp;amp; Chr(b3) &amp;amp; Chr(b4)&lt;br /&gt;
 &lt;br /&gt;
 End&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Rotazione dei byte mediante le funzioni esterne &amp;quot;ntohl()&amp;quot; e &amp;quot;ntohs()&amp;quot;=&lt;br /&gt;
Mediante le funzioni esterne ''ntohl( )'' e ''ntohs( )'', dichiarate nel file header &amp;quot;''/usr/include/netinet/in.h''&amp;quot;, è possibile ottenere la rotazione dei byte rispettivamente di un valore di tipo ''Intero'' (32 bit) e di uno valore di tipo ''Intero Corto'' (16 bit).&lt;br /&gt;
&lt;br /&gt;
Mostriamo un semplice esempio:&lt;br /&gt;
 Library &amp;quot;libc:6&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;FONT Color=gray&amp;gt;' ''uint32_t ntohl (uint32_t __netlong)''&lt;br /&gt;
 ' ''Converts the unsigned integer netlong from network byte order to host byte order.''&amp;lt;/font&amp;gt;&lt;br /&gt;
 Private Extern ntohl(__netlong As Integer) As Integer&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;FONT Color=gray&amp;gt;' ''uint16_t ntohs (uint16_t __netshort)''&lt;br /&gt;
 ' ''Converts the unsigned short integer netshort from network byte order to host byte order.''&amp;lt;/font&amp;gt;&lt;br /&gt;
 Private Extern ntohs(__netshort As Short) As Short&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 Public Sub Main()&lt;br /&gt;
  &lt;br /&gt;
   Dim i As Integer&lt;br /&gt;
   Dim c As Short&lt;br /&gt;
  &lt;br /&gt;
   i = ntohl(&amp;amp;01020304)&lt;br /&gt;
   Print Hex(i, 8)&lt;br /&gt;
   &lt;br /&gt;
   c = ntohs(&amp;amp;0908)&lt;br /&gt;
   Print Hex(c, 4)&lt;br /&gt;
   &lt;br /&gt;
 End&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Note=&lt;br /&gt;
[1] Interpellato al riguardo Benoît Minisini ha così spiegato il problema e suggerito la soluzione:&lt;br /&gt;
&amp;lt;BR&amp;gt;« ''Because of weird Visual Basic compatibility, &amp;amp;FF00 is sign-extended, i.e. &amp;amp;FF00 = &amp;amp;FFFFFF00''&lt;br /&gt;
&amp;lt;BR&amp;gt;''To prevent automatic sign-extension, write &amp;amp;FF00&amp;amp; (with an extra '&amp;amp;' at the end).''&lt;br /&gt;
&amp;lt;BR&amp;gt;''Otherwise, I don't know where your data comes from, but Swap$() does endianness conversion provided that each integer is stored inside a string.'' »&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Riferimenti=&lt;br /&gt;
* https://it.wikipedia.org/wiki/Ordine_dei_byte‎&lt;br /&gt;
* http://en.wikipedia.org/wiki/Endianness&lt;br /&gt;
* http://betterexplained.com/articles/understanding-big-and-little-endian-byte-order/&lt;br /&gt;
* https://www.cs.umd.edu/~meesh/cmsc311/clin-cmsc311/Lectures/lecture6/endian.pdf&lt;br /&gt;
* https://www.geeksforgeeks.org/little-and-big-endian-mystery/&lt;br /&gt;
* http://people.cs.umass.edu/~verts/cs32/endian.html&lt;br /&gt;
* https://www.youtube.com/watch?v=n6lPuep66aM&lt;br /&gt;
* https://www.youtube.com/watch?v=JrNF0KRAlyo&lt;/div&gt;</summary>
		<author><name>Vuott</name></author>
	</entry>
	<entry>
		<id>https://www.gambas-it.org/wiki/index.php?title=Conversione_Big-Endian/Little-Endian&amp;diff=42723</id>
		<title>Conversione Big-Endian/Little-Endian</title>
		<link rel="alternate" type="text/html" href="https://www.gambas-it.org/wiki/index.php?title=Conversione_Big-Endian/Little-Endian&amp;diff=42723"/>
		<updated>2025-10-26T12:49:55Z</updated>

		<summary type="html">&lt;p&gt;Vuott: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Big-Endian''' e '''Little-Endian''' sono due differenti modalità per memorizzare dati di dimensione superiore al semplice byte.&lt;br /&gt;
&lt;br /&gt;
La differenza tra i due sistemi è data dall'ordine, con il quale i byte costituenti il dato vengono memorizzati:&lt;br /&gt;
* ''Big-Endian'' è il tipo di memorizzazione che inizia (da sinistra verso destra) dal byte più significativo (che è quello posto a sinistra) e termina con il byte meno significativo;&lt;br /&gt;
* ''Little-Endian'' è il tipo di memorizzazione che inizia (da destra verso sinistra) dal byte meno significativo (che è quello posto a destra) e termina con il byte più significativo. Quindi in sostanza nel sistema ''Little-Endian'' l'ordine dei byte nell'indirizzo di memoria è invertito ripetto al sistema ''Big-Endian''.&lt;br /&gt;
&lt;br /&gt;
Se ad esempio abbiamo il valore decimale 1234567, la memorizzazione nella seguente forma esadecimale:&lt;br /&gt;
 12 D6 87&lt;br /&gt;
è di tipo ''Big-Endian''.&lt;br /&gt;
&lt;br /&gt;
Invece la memorizzazione di quello stesso numero nella forma:&lt;br /&gt;
 87 D6 12&lt;br /&gt;
è, invece, di tipo ''Little-Endian''.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In taluni casi particolari, pertanto, possiamo riscontrare che alcuni valori vengono scritti per la memorizzazione in modalità ''Little-Endian'', e che di conseguenza, per comprenderne il reale significato/valore, devono essere convertiti in forma ''Big-Endian''. Possiamo, per converso, avere valori che, memorizzati inizialmente nel formato esadecimale della forma ''Big-Endian'', debbano essere convertiti in forma ''Little-Endian'', affinché altri pogrammi possano comprendere il loro reale significato e restituire quindi il vero valore.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Conversione ''Big-Endian''/''Little-Endian'' e viceversa di un valore a '''16-bit'''=&lt;br /&gt;
La formula astratta - espressa in linguaggio C - per ottenere la conversione ''Big-Endian''/''Little-Endian'' e viceversa di un valore a 16bit (= 2 byte, ossia di tipo ''Short'') può essere la seguente (anche se [http://stackoverflow.com/questions/105252/how-do-i-convert-between-big-endian-and-little-endian-values-in-c le modalità sono molteplici] per ottenere la conversione):&lt;br /&gt;
 ((valore &amp;gt;&amp;gt; 8) &amp;amp; 0x00FF) | ((valore &amp;lt;&amp;lt; 8) &amp;amp; 0xFF00)&lt;br /&gt;
che in Gambas potremo tradurre, utilizzando uno dei seguenti metodi:&lt;br /&gt;
* funzioni di scorrimento dei bit a destra ed a sinistra;&lt;br /&gt;
* esplicite operazioni matematiche;&lt;br /&gt;
* Uso dell'operatore ''OR'' combinato con operazione di scorrimento dei bit a sinistra.&lt;br /&gt;
&lt;br /&gt;
==Uso delle funzioni di scorrimento dei bit a destra ed a sinistra==&lt;br /&gt;
Questa modalità è in sintassi così in Gambas espressa:&lt;br /&gt;
 Hex((Shr(''valore'', 8) And &amp;amp;FF) Or (Shl(''valore'', 8) And &amp;amp;FF00&amp;amp;), 4) As String&lt;br /&gt;
V'è da sottolineare che:&lt;br /&gt;
&amp;lt;BR&amp;gt; - il il valore ''&amp;amp;FF00&amp;amp;'' necessita assolutamente alla fine del carattere '''&amp;amp;''', poiché, se non lo si ponesse, avremmo come risultato un valore in esadecimale di 3 byte ! &amp;lt;SUP&amp;gt;[ [[#Note|Nota 1]] ]&amp;lt;/sup&amp;gt;&lt;br /&gt;
&amp;lt;BR&amp;gt; - se il valore convertito assume un valore massimo supportato in Gambas dal tipo &amp;quot;Short&amp;quot; (ossia superiore al valore espresso in esadecimale &amp;amp;7FFF), allora la variabile &amp;quot;valore&amp;quot; dovrà essere dichiarata come tipo &amp;lt;SPAN Style=&amp;quot;text-decoration:underline&amp;quot;&amp;gt;Integer&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Uso di esplicite operazioni matematiche==&lt;br /&gt;
Se si vorranno utilizzare esplicite operazioni matematiche anziché funzioni Gambas, si potrà adoperare la seguente formula:&lt;br /&gt;
 Hex(((''valore'' \ CInt(2 ^ 8)) And &amp;amp;FF) Or ((''valore'' * CInt(2 ^ 8)) And &amp;amp;FF00&amp;amp;), 4) As String&lt;br /&gt;
oppure&lt;br /&gt;
 Hex(((''valore'' \ CInt(2 ^ 8)) And &amp;amp;FF) Or CShort(((''valore'' * CInt(2 ^ 8)) And &amp;amp;FF00)), 4) As String&lt;br /&gt;
&lt;br /&gt;
==Uso dell'operatore ''OR'' con operazione di scorrimento dei bit a sinistra==&lt;br /&gt;
Mostriamo un esempio pratico con l'operatore ''OR''  combinato con operazione di scorrimento dei bit a sinistra, in cui convertiremo il valore esadecimale ''0x2301'' di tipo ''Short'' da ''Little-Endian'' a ''Big-Endian'':&lt;br /&gt;
 Public Sub Main()&lt;br /&gt;
 &lt;br /&gt;
   Dim valore, s1, s2, v As Short&lt;br /&gt;
   &lt;br /&gt;
   valore = &amp;amp;2301&lt;br /&gt;
   &lt;br /&gt;
   s1 = Shr(valore, 8)&lt;br /&gt;
   s2 = valore And 255&lt;br /&gt;
   &lt;br /&gt;
   v = s1&lt;br /&gt;
   v = v Or Shl(s2, 8)&lt;br /&gt;
   &lt;br /&gt;
   Print Hex(v, 4), v&lt;br /&gt;
    &lt;br /&gt;
 End&lt;br /&gt;
Questo algoritmo è valido anche per la conversione contraria: da ''Big-Endian'' a ''Little-Endian''.&lt;br /&gt;
&lt;br /&gt;
==Uso degli operatori AND e OR, nonché delle funzioni Shr() e Shl(), mantenendo il tipo Short==&lt;br /&gt;
Ecco una funzione che prende in input un valore a 16 bit in ''Big-Endian'' e restituisce il corrispondente valore in ''Little-Endian'', mantenendo il tipo ''Short'':&lt;br /&gt;
 Private Function BigEndianToLittleEndian16(value As Short) As Short&lt;br /&gt;
 &lt;br /&gt;
  Dim hi As Short = (value And &amp;amp;HFF00) Shr 8   &amp;lt;FONT Color=gray&amp;gt;' ''Byte alto → spostato a destra''&amp;lt;/font&amp;gt;&lt;br /&gt;
  Dim lo As Short = (value And &amp;amp;H00FF)         &amp;lt;FONT Color=gray&amp;gt;' ''Byte basso → resta com’è''&amp;lt;/font&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
  Return lo Shl 8 Or hi                        &amp;lt;FONT Color=gray&amp;gt;' ''Ricompone in ordine Little-Endian''&amp;lt;/font&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 End&lt;br /&gt;
 &lt;br /&gt;
==Uso degli operatori AND e OR, nonché  della sola funzione Shr()==&lt;br /&gt;
Mostriamo una funzione di supporto che converte un intero a 16 bit in stringa 4 byte ''little endian'':&lt;br /&gt;
 Private Function BigEndianToLittleEndian16_Shr(value As Short) As '''Short'''&lt;br /&gt;
 &lt;br /&gt;
  Dim hi As Short = (value And &amp;amp;HFF00) Shr 8     &amp;lt;FONT Color=gray&amp;gt;' ''Isola il byte alto e lo porta in basso''&amp;lt;/font&amp;gt;&lt;br /&gt;
  Dim lo As Short = (value And &amp;amp;H00FF)           &amp;lt;FONT Color=gray&amp;gt;' ''Isola il byte basso''&amp;lt;/font&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
  Return lo * 256 Or hi                          &amp;lt;FONT Color=gray&amp;gt;' ''Simula Shl 8 con * 256, ricompone con OR''&amp;lt;/font&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 End&lt;br /&gt;
Se si vuole ritornare un tipo ''String'', allora avremo:&lt;br /&gt;
 Private Function ShortToLittleEndianString(value As Short) As '''String'''&lt;br /&gt;
 &lt;br /&gt;
  Dim lo As Byte = value And &amp;amp;H00FF              &amp;lt;FONT Color=gray&amp;gt;' ''Byte meno significativo''&amp;lt;/font&amp;gt;&lt;br /&gt;
  Dim hi As Byte = (value And &amp;amp;HFF00) Shr 8      &amp;lt;FONT Color=gray&amp;gt;' ''Byte più significativo spostato a destra''&amp;lt;/font&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
  Return Hex(lo) &amp;amp; Hex(hi)                       &amp;lt;FONT Color=gray&amp;gt;' ''Costruzione stringa Little-Endian''&amp;lt;/font&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 End&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Conversione ''Big-Endian''/''Little-Endian'' e viceversa di un valore a '''32-bit'''=&lt;br /&gt;
La formula astratta per ottenere la conversione ''Big-Endian''/''Little-Endian'' di un valore intero a 32-bit (''Integer'') può essere la seguente:&lt;br /&gt;
 ((valore &amp;gt;&amp;gt; 24) &amp;amp; 0xff) | ((valore &amp;lt;&amp;lt; 8) &amp;amp; 0xff0000) | ((valore &amp;gt;&amp;gt; 8) &amp;amp; 0xff00) | ((valore &amp;lt;&amp;lt; 24) &amp;amp; 0xff000000)&lt;br /&gt;
La suddetta formula in Gambas potrà essere tradotta utilizzando uno dei seguenti metodi:&lt;br /&gt;
* funzioni di scorrimento dei bit a destra ed a sinistra;&lt;br /&gt;
* esplicite operazioni matematiche;&lt;br /&gt;
* Uso dell'operatore ''OR'' combinato con operazione di scorrimento dei bit a sinistra.&lt;br /&gt;
&lt;br /&gt;
==Uso delle funzioni di scorrimento dei bit a destra ed a sinistra==&lt;br /&gt;
Questa modalità è in sintassi così espressa:&lt;br /&gt;
 Hex((Shr(''valore'', 24) And &amp;amp;FF) Or (Shl(''valore'', 8) And &amp;amp;FF0000) Or (Shr(''valore'', 8) And &amp;amp;FF00&amp;amp;) Or (Shl(''valore'', 24) And &amp;amp;FF000000), 8) As String&lt;br /&gt;
oppure&lt;br /&gt;
 Hex((Shr(valore, 24)) Or (Shl(i, 8) And &amp;amp;FF0000) Or (Shr(valore, 8) And &amp;amp;FF00&amp;amp;) Or (Shl(valore, 24)), 8) As String&lt;br /&gt;
Va sottolineato che, se dalla conversione, il numero assumerà un valore superiore a quello supportato in Gambas dal tipo &amp;quot;Integer&amp;quot; (ossia superiore al valore espresso in esadecimale &amp;amp;7FFFFF), allora sarà opportuno dichiarare la variabile &amp;quot;valore&amp;quot; come tipo &amp;lt;SPAN Style=&amp;quot;text-decoration:underline&amp;quot;&amp;gt;Long&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Uso di esplicite operazioni matematiche===&lt;br /&gt;
Se si vorranno utilizzare esplicite operazioni matematiche anziché funzioni Gambas, si potrà adoperare la seguente formula:&lt;br /&gt;
 Hex(((''valore'' \ CInt(2 ^ 24)) And &amp;amp;FF) Or ((''valore'' * CInt(2 ^ 8)) And &amp;amp;FF0000) Or ((''valore'' \ CInt(2 ^ 8)) And &amp;amp;FF00&amp;amp;) Or ((''valore'' * CInt(2 ^ 24)) And &amp;amp;FF000000), 8)&lt;br /&gt;
oppure quest'altra:&lt;br /&gt;
 Hex(((''valore'' \ CInt(2 ^ 24)) And &amp;amp;FF) Or ((''valore'' * CInt(2 ^ 8)) And &amp;amp;FF0000) Or CShort(((''valore'' \ CInt(2 ^ 8)) And &amp;amp;FF00)) Or ((''valore'' * CInt(2 ^ 24)) And &amp;amp;FF000000), 8)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Usando gli operatori AND e OR, nonché le funzioni Shr() e Shl(), mantenendo il tipo Integer==&lt;br /&gt;
Ecco una funzione che prende in input un valore a 32 bit in ''Big-Endian'' e restituisce il corrispondente valore in ''Little-Endian'', mantenendo il tipo ''Integer'':&lt;br /&gt;
 Private Function BigEndianToLittleEndian32(value As Integer) As Integer&lt;br /&gt;
 &lt;br /&gt;
  Dim b1 As Integer = Shr(value And &amp;amp;HFF000000, 24)&lt;br /&gt;
 &amp;lt;FONT Color=gray&amp;gt;' ''Anche così la funzione &amp;quot;Shr()&amp;quot; va bene:''&amp;lt;/font&amp;gt;&lt;br /&gt;
  Dim b2 As Integer = (value And &amp;amp;H00FF0000) Shr 8&lt;br /&gt;
 &lt;br /&gt;
  Dim b3 As Integer = (value And &amp;amp;H0000FF00) Shl 8&lt;br /&gt;
 &amp;lt;FONT Color=gray&amp;gt;' ''Anche così la funzione &amp;quot;Shl()&amp;quot; va bene:''&amp;lt;/font&amp;gt;&lt;br /&gt;
  Dim b4 As Integer = (value And &amp;amp;H000000FF) Shl 24&lt;br /&gt;
 &lt;br /&gt;
  Return b1 Or b2 Or b3 Or b4&lt;br /&gt;
 &lt;br /&gt;
 End&lt;br /&gt;
o anche:&lt;br /&gt;
 Private Function BigEndianToLittleEndian32(value As Integer) As Integer&lt;br /&gt;
 &lt;br /&gt;
  Dim b1, b2, b3, b4 As Integer&lt;br /&gt;
 &lt;br /&gt;
  b1 = (value Shr 24) And &amp;amp;HFF&lt;br /&gt;
  b2 = (value Shr 16) And &amp;amp;HFF&lt;br /&gt;
  b3 = (value Shr 8) And &amp;amp;HFF&lt;br /&gt;
  b4 = value And &amp;amp;HFF&lt;br /&gt;
 &lt;br /&gt;
  Return (b4 Shl 24) Or (b3 Shl 16) Or (b2 Shl 8) Or b1&lt;br /&gt;
 &lt;br /&gt;
 End&lt;br /&gt;
&lt;br /&gt;
==Uso del solo operatore AND e della sola funzione Shr()==&lt;br /&gt;
Mostriamo una funzione di supporto che converte un intero a 32 bit in stringa 4 byte ''little endian'':&lt;br /&gt;
 Private Function IntToLittleEndian(value As Integer) As String&lt;br /&gt;
 &lt;br /&gt;
  Dim b1 As Byte = value And &amp;amp;HFF&lt;br /&gt;
  Dim b2 As Byte = (value Shr 8) And &amp;amp;HFF&lt;br /&gt;
  Dim b3 As Byte = (value Shr 16) And &amp;amp;HFF&lt;br /&gt;
  Dim b4 As Byte = (value Shr 24) And &amp;amp;HFF&lt;br /&gt;
  &lt;br /&gt;
  Return Chr(b1) &amp;amp; Chr(b2) &amp;amp; Chr(b3) &amp;amp; Chr(b4)&lt;br /&gt;
 &lt;br /&gt;
 End&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Rotazione dei byte mediante le funzioni esterne &amp;quot;ntohl()&amp;quot; e &amp;quot;ntohs()&amp;quot;=&lt;br /&gt;
Mediante le funzioni esterne ''ntohl( )'' e ''ntohs( )'', dichiarate nel file header &amp;quot;''/usr/include/netinet/in.h''&amp;quot;, è possibile ottenere la rotazione dei byte rispettivamente di un valore di tipo ''Intero'' (32 bit) e di uno valore di tipo ''Intero Corto'' (16 bit).&lt;br /&gt;
&lt;br /&gt;
Mostriamo un semplice esempio:&lt;br /&gt;
 Library &amp;quot;libc:6&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;FONT Color=gray&amp;gt;' ''uint32_t ntohl (uint32_t __netlong)''&lt;br /&gt;
 ' ''Converts the unsigned integer netlong from network byte order to host byte order.''&amp;lt;/font&amp;gt;&lt;br /&gt;
 Private Extern ntohl(__netlong As Integer) As Integer&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;FONT Color=gray&amp;gt;' ''uint16_t ntohs (uint16_t __netshort)''&lt;br /&gt;
 ' ''Converts the unsigned short integer netshort from network byte order to host byte order.''&amp;lt;/font&amp;gt;&lt;br /&gt;
 Private Extern ntohs(__netshort As Short) As Short&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 Public Sub Main()&lt;br /&gt;
  &lt;br /&gt;
   Dim i As Integer&lt;br /&gt;
   Dim c As Short&lt;br /&gt;
  &lt;br /&gt;
   i = ntohl(&amp;amp;01020304)&lt;br /&gt;
   Print Hex(i, 8)&lt;br /&gt;
   &lt;br /&gt;
   c = ntohs(&amp;amp;0908)&lt;br /&gt;
   Print Hex(c, 4)&lt;br /&gt;
   &lt;br /&gt;
 End&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Note=&lt;br /&gt;
[1] Interpellato al riguardo Benoît Minisini ha così spiegato il problema e suggerito la soluzione:&lt;br /&gt;
&amp;lt;BR&amp;gt;« ''Because of weird Visual Basic compatibility, &amp;amp;FF00 is sign-extended, i.e. &amp;amp;FF00 = &amp;amp;FFFFFF00''&lt;br /&gt;
&amp;lt;BR&amp;gt;''To prevent automatic sign-extension, write &amp;amp;FF00&amp;amp; (with an extra '&amp;amp;' at the end).''&lt;br /&gt;
&amp;lt;BR&amp;gt;''Otherwise, I don't know where your data comes from, but Swap$() does endianness conversion provided that each integer is stored inside a string.'' »&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Riferimenti=&lt;br /&gt;
* https://it.wikipedia.org/wiki/Ordine_dei_byte‎&lt;br /&gt;
* http://en.wikipedia.org/wiki/Endianness&lt;br /&gt;
* http://betterexplained.com/articles/understanding-big-and-little-endian-byte-order/&lt;br /&gt;
* https://www.cs.umd.edu/~meesh/cmsc311/clin-cmsc311/Lectures/lecture6/endian.pdf&lt;br /&gt;
* https://www.geeksforgeeks.org/little-and-big-endian-mystery/&lt;br /&gt;
* http://people.cs.umass.edu/~verts/cs32/endian.html&lt;br /&gt;
* https://www.youtube.com/watch?v=n6lPuep66aM&lt;br /&gt;
* https://www.youtube.com/watch?v=JrNF0KRAlyo&lt;/div&gt;</summary>
		<author><name>Vuott</name></author>
	</entry>
	<entry>
		<id>https://www.gambas-it.org/wiki/index.php?title=Conversione_Big-Endian/Little-Endian&amp;diff=42722</id>
		<title>Conversione Big-Endian/Little-Endian</title>
		<link rel="alternate" type="text/html" href="https://www.gambas-it.org/wiki/index.php?title=Conversione_Big-Endian/Little-Endian&amp;diff=42722"/>
		<updated>2025-10-26T12:47:30Z</updated>

		<summary type="html">&lt;p&gt;Vuott: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Big-Endian''' e '''Little-Endian''' sono due differenti modalità per memorizzare dati di dimensione superiore al semplice byte.&lt;br /&gt;
&lt;br /&gt;
La differenza tra i due sistemi è data dall'ordine, con il quale i byte costituenti il dato vengono memorizzati:&lt;br /&gt;
* ''Big-Endian'' è il tipo di memorizzazione che inizia (da sinistra verso destra) dal byte più significativo (che è quello posto a sinistra) e termina con il byte meno significativo;&lt;br /&gt;
* ''Little-Endian'' è il tipo di memorizzazione che inizia (da destra verso sinistra) dal byte meno significativo (che è quello posto a destra) e termina con il byte più significativo. Quindi in sostanza nel sistema ''Little-Endian'' l'ordine dei byte nell'indirizzo di memoria è invertito ripetto al sistema ''Big-Endian''.&lt;br /&gt;
&lt;br /&gt;
Se ad esempio abbiamo il valore decimale 1234567, la memorizzazione nella seguente forma esadecimale:&lt;br /&gt;
 12 D6 87&lt;br /&gt;
è di tipo ''Big-Endian''.&lt;br /&gt;
&lt;br /&gt;
Invece la memorizzazione di quello stesso numero nella forma:&lt;br /&gt;
 87 D6 12&lt;br /&gt;
è, invece, di tipo ''Little-Endian''.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In taluni casi particolari, pertanto, possiamo riscontrare che alcuni valori vengono scritti per la memorizzazione in modalità ''Little-Endian'', e che di conseguenza, per comprenderne il reale significato/valore, devono essere convertiti in forma ''Big-Endian''. Possiamo, per converso, avere valori che, memorizzati inizialmente nel formato esadecimale della forma ''Big-Endian'', debbano essere convertiti in forma ''Little-Endian'', affinché altri pogrammi possano comprendere il loro reale significato e restituire quindi il vero valore.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Conversione ''Big-Endian''/''Little-Endian'' e viceversa di un valore a '''16-bit'''=&lt;br /&gt;
La formula astratta per ottenere la conversione ''Big-Endian''/''Little-Endian'' e viceversa di un valore a 16bit (= 2 byte, ossia di tipo ''Short'') può essere la seguente (anche se [http://stackoverflow.com/questions/105252/how-do-i-convert-between-big-endian-and-little-endian-values-in-c le modalità sono molteplici] per ottenere la conversione):&lt;br /&gt;
 ((valore &amp;gt;&amp;gt; 8) &amp;amp; 0x00FF) | ((valore &amp;lt;&amp;lt; 8) &amp;amp; 0xFF00)&lt;br /&gt;
che in Gambas potremo tradurre, utilizzando uno dei seguenti metodi:&lt;br /&gt;
* funzioni di scorrimento dei bit a destra ed a sinistra;&lt;br /&gt;
* esplicite operazioni matematiche;&lt;br /&gt;
* Uso dell'operatore ''OR'' combinato con operazione di scorrimento dei bit a sinistra.&lt;br /&gt;
&lt;br /&gt;
==Uso delle funzioni di scorrimento dei bit a destra ed a sinistra==&lt;br /&gt;
Questa modalità è in sintassi così espressa:&lt;br /&gt;
 Hex((Shr(''valore'', 8) And &amp;amp;FF) Or (Shl(''valore'', 8) And &amp;amp;FF00&amp;amp;), 4) As String&lt;br /&gt;
V'è da sottolineare che:&lt;br /&gt;
&amp;lt;BR&amp;gt; - il il valore ''&amp;amp;FF00&amp;amp;'' necessita assolutamente alla fine del carattere '''&amp;amp;''', poiché, se non lo si ponesse, avremmo come risultato un valore in esadecimale di 3 byte ! &amp;lt;SUP&amp;gt;[ [[#Note|Nota 1]] ]&amp;lt;/sup&amp;gt;&lt;br /&gt;
&amp;lt;BR&amp;gt; - se il valore convertito assume un valore massimo supportato in Gambas dal tipo &amp;quot;Short&amp;quot; (ossia superiore al valore espresso in esadecimale &amp;amp;7FFF), allora la variabile &amp;quot;valore&amp;quot; dovrà essere dichiarata come tipo &amp;lt;SPAN Style=&amp;quot;text-decoration:underline&amp;quot;&amp;gt;Integer&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Uso di esplicite operazioni matematiche==&lt;br /&gt;
Se si vorranno utilizzare esplicite operazioni matematiche anziché funzioni Gambas, si potrà adoperare la seguente formula:&lt;br /&gt;
 Hex(((''valore'' \ CInt(2 ^ 8)) And &amp;amp;FF) Or ((''valore'' * CInt(2 ^ 8)) And &amp;amp;FF00&amp;amp;), 4) As String&lt;br /&gt;
oppure&lt;br /&gt;
 Hex(((''valore'' \ CInt(2 ^ 8)) And &amp;amp;FF) Or CShort(((''valore'' * CInt(2 ^ 8)) And &amp;amp;FF00)), 4) As String&lt;br /&gt;
&lt;br /&gt;
==Uso dell'operatore ''OR'' con operazione di scorrimento dei bit a sinistra==&lt;br /&gt;
Mostriamo un esempio pratico con l'operatore ''OR''  combinato con operazione di scorrimento dei bit a sinistra, in cui convertiremo il valore esadecimale ''0x2301'' di tipo ''Short'' da ''Little-Endian'' a ''Big-Endian'':&lt;br /&gt;
 Public Sub Main()&lt;br /&gt;
 &lt;br /&gt;
   Dim valore, s1, s2, v As Short&lt;br /&gt;
   &lt;br /&gt;
   valore = &amp;amp;2301&lt;br /&gt;
   &lt;br /&gt;
   s1 = Shr(valore, 8)&lt;br /&gt;
   s2 = valore And 255&lt;br /&gt;
   &lt;br /&gt;
   v = s1&lt;br /&gt;
   v = v Or Shl(s2, 8)&lt;br /&gt;
   &lt;br /&gt;
   Print Hex(v, 4), v&lt;br /&gt;
    &lt;br /&gt;
 End&lt;br /&gt;
Questo algoritmo è valido anche per la conversione contraria: da ''Big-Endian'' a ''Little-Endian''.&lt;br /&gt;
&lt;br /&gt;
==Uso degli operatori AND e OR, nonché delle funzioni Shr() e Shl(), mantenendo il tipo Short==&lt;br /&gt;
Ecco una funzione che prende in input un valore a 16 bit in ''Big-Endian'' e restituisce il corrispondente valore in ''Little-Endian'', mantenendo il tipo ''Short'':&lt;br /&gt;
 Private Function BigEndianToLittleEndian16(value As Short) As Short&lt;br /&gt;
 &lt;br /&gt;
  Dim hi As Short = (value And &amp;amp;HFF00) Shr 8   &amp;lt;FONT Color=gray&amp;gt;' ''Byte alto → spostato a destra''&amp;lt;/font&amp;gt;&lt;br /&gt;
  Dim lo As Short = (value And &amp;amp;H00FF)         &amp;lt;FONT Color=gray&amp;gt;' ''Byte basso → resta com’è''&amp;lt;/font&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
  Return lo Shl 8 Or hi                        &amp;lt;FONT Color=gray&amp;gt;' ''Ricompone in ordine Little-Endian''&amp;lt;/font&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 End&lt;br /&gt;
 &lt;br /&gt;
==Uso degli operatori AND e OR, nonché  della sola funzione Shr()==&lt;br /&gt;
Mostriamo una funzione di supporto che converte un intero a 16 bit in stringa 4 byte ''little endian'':&lt;br /&gt;
 Private Function BigEndianToLittleEndian16_Shr(value As Short) As '''Short'''&lt;br /&gt;
 &lt;br /&gt;
  Dim hi As Short = (value And &amp;amp;HFF00) Shr 8     &amp;lt;FONT Color=gray&amp;gt;' ''Isola il byte alto e lo porta in basso''&amp;lt;/font&amp;gt;&lt;br /&gt;
  Dim lo As Short = (value And &amp;amp;H00FF)           &amp;lt;FONT Color=gray&amp;gt;' ''Isola il byte basso''&amp;lt;/font&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
  Return lo * 256 Or hi                          &amp;lt;FONT Color=gray&amp;gt;' ''Simula Shl 8 con * 256, ricompone con OR''&amp;lt;/font&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 End&lt;br /&gt;
Se si vuole ritornare un tipo ''String'', allora avremo:&lt;br /&gt;
 Private Function ShortToLittleEndianString(value As Short) As '''String'''&lt;br /&gt;
 &lt;br /&gt;
  Dim lo As Byte = value And &amp;amp;H00FF              &amp;lt;FONT Color=gray&amp;gt;' ''Byte meno significativo''&amp;lt;/font&amp;gt;&lt;br /&gt;
  Dim hi As Byte = (value And &amp;amp;HFF00) Shr 8      &amp;lt;FONT Color=gray&amp;gt;' ''Byte più significativo spostato a destra''&amp;lt;/font&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
  Return Hex(lo) &amp;amp; Hex(hi)                       &amp;lt;FONT Color=gray&amp;gt;' ''Costruzione stringa Little-Endian''&amp;lt;/font&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 End&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Conversione ''Big-Endian''/''Little-Endian'' e viceversa di un valore a '''32-bit'''=&lt;br /&gt;
La formula astratta per ottenere la conversione ''Big-Endian''/''Little-Endian'' di un valore intero a 32-bit (''Integer'') può essere la seguente:&lt;br /&gt;
 ((valore &amp;gt;&amp;gt; 24) &amp;amp; 0xff) | ((valore &amp;lt;&amp;lt; 8) &amp;amp; 0xff0000) | ((valore &amp;gt;&amp;gt; 8) &amp;amp; 0xff00) | ((valore &amp;lt;&amp;lt; 24) &amp;amp; 0xff000000)&lt;br /&gt;
La suddetta formula in Gambas potrà essere tradotta utilizzando uno dei seguenti metodi:&lt;br /&gt;
* funzioni di scorrimento dei bit a destra ed a sinistra;&lt;br /&gt;
* esplicite operazioni matematiche;&lt;br /&gt;
* Uso dell'operatore ''OR'' combinato con operazione di scorrimento dei bit a sinistra.&lt;br /&gt;
&lt;br /&gt;
==Uso delle funzioni di scorrimento dei bit a destra ed a sinistra==&lt;br /&gt;
Questa modalità è in sintassi così espressa:&lt;br /&gt;
 Hex((Shr(''valore'', 24) And &amp;amp;FF) Or (Shl(''valore'', 8) And &amp;amp;FF0000) Or (Shr(''valore'', 8) And &amp;amp;FF00&amp;amp;) Or (Shl(''valore'', 24) And &amp;amp;FF000000), 8) As String&lt;br /&gt;
oppure&lt;br /&gt;
 Hex((Shr(valore, 24)) Or (Shl(i, 8) And &amp;amp;FF0000) Or (Shr(valore, 8) And &amp;amp;FF00&amp;amp;) Or (Shl(valore, 24)), 8) As String&lt;br /&gt;
Va sottolineato che, se dalla conversione, il numero assumerà un valore superiore a quello supportato in Gambas dal tipo &amp;quot;Integer&amp;quot; (ossia superiore al valore espresso in esadecimale &amp;amp;7FFFFF), allora sarà opportuno dichiarare la variabile &amp;quot;valore&amp;quot; come tipo &amp;lt;SPAN Style=&amp;quot;text-decoration:underline&amp;quot;&amp;gt;Long&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Uso di esplicite operazioni matematiche===&lt;br /&gt;
Se si vorranno utilizzare esplicite operazioni matematiche anziché funzioni Gambas, si potrà adoperare la seguente formula:&lt;br /&gt;
 Hex(((''valore'' \ CInt(2 ^ 24)) And &amp;amp;FF) Or ((''valore'' * CInt(2 ^ 8)) And &amp;amp;FF0000) Or ((''valore'' \ CInt(2 ^ 8)) And &amp;amp;FF00&amp;amp;) Or ((''valore'' * CInt(2 ^ 24)) And &amp;amp;FF000000), 8)&lt;br /&gt;
oppure quest'altra:&lt;br /&gt;
 Hex(((''valore'' \ CInt(2 ^ 24)) And &amp;amp;FF) Or ((''valore'' * CInt(2 ^ 8)) And &amp;amp;FF0000) Or CShort(((''valore'' \ CInt(2 ^ 8)) And &amp;amp;FF00)) Or ((''valore'' * CInt(2 ^ 24)) And &amp;amp;FF000000), 8)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Usando gli operatori AND e OR, nonché le funzioni Shr() e Shl(), mantenendo il tipo Integer==&lt;br /&gt;
Ecco una funzione che prende in input un valore a 32 bit in ''Big-Endian'' e restituisce il corrispondente valore in ''Little-Endian'', mantenendo il tipo ''Integer'':&lt;br /&gt;
 Private Function BigEndianToLittleEndian32(value As Integer) As Integer&lt;br /&gt;
 &lt;br /&gt;
  Dim b1 As Integer = Shr(value And &amp;amp;HFF000000, 24)&lt;br /&gt;
 &amp;lt;FONT Color=gray&amp;gt;' ''Anche così la funzione &amp;quot;Shr()&amp;quot; va bene:''&amp;lt;/font&amp;gt;&lt;br /&gt;
  Dim b2 As Integer = (value And &amp;amp;H00FF0000) Shr 8&lt;br /&gt;
 &lt;br /&gt;
  Dim b3 As Integer = (value And &amp;amp;H0000FF00) Shl 8&lt;br /&gt;
 &amp;lt;FONT Color=gray&amp;gt;' ''Anche così la funzione &amp;quot;Shl()&amp;quot; va bene:''&amp;lt;/font&amp;gt;&lt;br /&gt;
  Dim b4 As Integer = (value And &amp;amp;H000000FF) Shl 24&lt;br /&gt;
 &lt;br /&gt;
  Return b1 Or b2 Or b3 Or b4&lt;br /&gt;
 &lt;br /&gt;
 End&lt;br /&gt;
o anche:&lt;br /&gt;
 Private Function BigEndianToLittleEndian32(value As Integer) As Integer&lt;br /&gt;
 &lt;br /&gt;
  Dim b1, b2, b3, b4 As Integer&lt;br /&gt;
 &lt;br /&gt;
  b1 = (value Shr 24) And &amp;amp;HFF&lt;br /&gt;
  b2 = (value Shr 16) And &amp;amp;HFF&lt;br /&gt;
  b3 = (value Shr 8) And &amp;amp;HFF&lt;br /&gt;
  b4 = value And &amp;amp;HFF&lt;br /&gt;
 &lt;br /&gt;
  Return (b4 Shl 24) Or (b3 Shl 16) Or (b2 Shl 8) Or b1&lt;br /&gt;
 &lt;br /&gt;
 End&lt;br /&gt;
&lt;br /&gt;
==Uso del solo operatore AND e della sola funzione Shr()==&lt;br /&gt;
Mostriamo una funzione di supporto che converte un intero a 32 bit in stringa 4 byte ''little endian'':&lt;br /&gt;
 Private Function IntToLittleEndian(value As Integer) As String&lt;br /&gt;
 &lt;br /&gt;
  Dim b1 As Byte = value And &amp;amp;HFF&lt;br /&gt;
  Dim b2 As Byte = (value Shr 8) And &amp;amp;HFF&lt;br /&gt;
  Dim b3 As Byte = (value Shr 16) And &amp;amp;HFF&lt;br /&gt;
  Dim b4 As Byte = (value Shr 24) And &amp;amp;HFF&lt;br /&gt;
  &lt;br /&gt;
  Return Chr(b1) &amp;amp; Chr(b2) &amp;amp; Chr(b3) &amp;amp; Chr(b4)&lt;br /&gt;
 &lt;br /&gt;
 End&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Rotazione dei byte mediante le funzioni esterne &amp;quot;ntohl()&amp;quot; e &amp;quot;ntohs()&amp;quot;=&lt;br /&gt;
Mediante le funzioni esterne ''ntohl( )'' e ''ntohs( )'', dichiarate nel file header &amp;quot;''/usr/include/netinet/in.h''&amp;quot;, è possibile ottenere la rotazione dei byte rispettivamente di un valore di tipo ''Intero'' (32 bit) e di uno valore di tipo ''Intero Corto'' (16 bit).&lt;br /&gt;
&lt;br /&gt;
Mostriamo un semplice esempio:&lt;br /&gt;
 Library &amp;quot;libc:6&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;FONT Color=gray&amp;gt;' ''uint32_t ntohl (uint32_t __netlong)''&lt;br /&gt;
 ' ''Converts the unsigned integer netlong from network byte order to host byte order.''&amp;lt;/font&amp;gt;&lt;br /&gt;
 Private Extern ntohl(__netlong As Integer) As Integer&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;FONT Color=gray&amp;gt;' ''uint16_t ntohs (uint16_t __netshort)''&lt;br /&gt;
 ' ''Converts the unsigned short integer netshort from network byte order to host byte order.''&amp;lt;/font&amp;gt;&lt;br /&gt;
 Private Extern ntohs(__netshort As Short) As Short&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 Public Sub Main()&lt;br /&gt;
  &lt;br /&gt;
   Dim i As Integer&lt;br /&gt;
   Dim c As Short&lt;br /&gt;
  &lt;br /&gt;
   i = ntohl(&amp;amp;01020304)&lt;br /&gt;
   Print Hex(i, 8)&lt;br /&gt;
   &lt;br /&gt;
   c = ntohs(&amp;amp;0908)&lt;br /&gt;
   Print Hex(c, 4)&lt;br /&gt;
   &lt;br /&gt;
 End&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Note=&lt;br /&gt;
[1] Interpellato al riguardo Benoît Minisini ha così spiegato il problema e suggerito la soluzione:&lt;br /&gt;
&amp;lt;BR&amp;gt;« ''Because of weird Visual Basic compatibility, &amp;amp;FF00 is sign-extended, i.e. &amp;amp;FF00 = &amp;amp;FFFFFF00''&lt;br /&gt;
&amp;lt;BR&amp;gt;''To prevent automatic sign-extension, write &amp;amp;FF00&amp;amp; (with an extra '&amp;amp;' at the end).''&lt;br /&gt;
&amp;lt;BR&amp;gt;''Otherwise, I don't know where your data comes from, but Swap$() does endianness conversion provided that each integer is stored inside a string.'' »&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Riferimenti=&lt;br /&gt;
* https://it.wikipedia.org/wiki/Ordine_dei_byte‎&lt;br /&gt;
* http://en.wikipedia.org/wiki/Endianness&lt;br /&gt;
* http://betterexplained.com/articles/understanding-big-and-little-endian-byte-order/&lt;br /&gt;
* https://www.cs.umd.edu/~meesh/cmsc311/clin-cmsc311/Lectures/lecture6/endian.pdf&lt;br /&gt;
* https://www.geeksforgeeks.org/little-and-big-endian-mystery/&lt;br /&gt;
* http://people.cs.umass.edu/~verts/cs32/endian.html&lt;br /&gt;
* https://www.youtube.com/watch?v=n6lPuep66aM&lt;br /&gt;
* https://www.youtube.com/watch?v=JrNF0KRAlyo&lt;/div&gt;</summary>
		<author><name>Vuott</name></author>
	</entry>
	<entry>
		<id>https://www.gambas-it.org/wiki/index.php?title=Codice_essenziale_per_effettuare_il_Drag%26Drop_di_un_testo&amp;diff=42721</id>
		<title>Codice essenziale per effettuare il Drag&amp;Drop di un testo</title>
		<link rel="alternate" type="text/html" href="https://www.gambas-it.org/wiki/index.php?title=Codice_essenziale_per_effettuare_il_Drag%26Drop_di_un_testo&amp;diff=42721"/>
		<updated>2025-10-26T12:22:39Z</updated>

		<summary type="html">&lt;p&gt;Vuott: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Mostriamo di seguito il codice &amp;lt;U&amp;gt;essenziale&amp;lt;/u&amp;gt; per effettuare il ''Drag&amp;amp;Drop'' di un testo qualsiasi da un oggetto ad un altro posti sul medesimo ''Form''.&lt;br /&gt;
&lt;br /&gt;
Nel nostro esempio abbiamo una ''TextArea'', dalla quale verrà prelevato il testo, che sarà quindi trascinato e poi rilasciato in un ''TextLabel'':&lt;br /&gt;
 Public Sub Form_Open()&lt;br /&gt;
 &lt;br /&gt;
  With TextArea1&lt;br /&gt;
    .Text = &amp;quot;testo qualsiasi&amp;quot;&lt;br /&gt;
    .Wrap = True&lt;br /&gt;
  End With&lt;br /&gt;
 &lt;br /&gt;
  With TextLabel1&lt;br /&gt;
 &amp;lt;FONT color=gray&amp;gt;' ''Attiviamo la capacità della &amp;quot;Textlabel&amp;quot; di ricevere con il &amp;quot;_Drop()&amp;quot; il testo trascinato:''&amp;lt;/font&amp;gt;&lt;br /&gt;
    .&amp;lt;FONT color=red&amp;gt;Drop = True&amp;lt;/font&amp;gt;&lt;br /&gt;
    .Wrap = True&lt;br /&gt;
  End With&lt;br /&gt;
 &lt;br /&gt;
 End&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 Public Sub TextArea1_MouseDrag()&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;FONT color=gray&amp;gt;' ''Durante il trascinamento viene mostrata un'icona che rimanda al testo:''&amp;lt;/font&amp;gt;&lt;br /&gt;
  Drag.Icon = Picture[&amp;quot;icon:/22/text&amp;quot;]&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;FONT color=gray&amp;gt;' ''Preleviamo e trasciniamo il testo dalla &amp;quot;TextArea&amp;quot;:''&amp;lt;/font&amp;gt;&lt;br /&gt;
  TextArea1.Drag(TextArea1.Text, &amp;quot;text/html&amp;quot;)&lt;br /&gt;
 &lt;br /&gt;
 End&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 Public Sub TextLabel1_Drop()&lt;br /&gt;
  &lt;br /&gt;
 &amp;lt;FONT color=gray&amp;gt;' ''Rilasciamo il testo nell'oggetto &amp;quot;TextLabel&amp;quot;, aggiungendo anche uno spazio finale:''&amp;lt;/font&amp;gt;&lt;br /&gt;
  TextLabel1.Text &amp;amp;= Drag.Data &amp;amp; Chr(32)&lt;br /&gt;
  &lt;br /&gt;
 End&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Va fatto notare che, qualora il testo da trascinare contenga caratteri di controllo supportati attualmente da Gambas (come ad esempio '''\n''' &amp;quot;fine riga e a capo&amp;quot;), se viene effettuato il semplice trascinamento del testo, esso sarà disegnato nella ''TextLabel'' su un'unica riga senza rispettare l'effetto dei caratteri di controllo in esso presenti. Se il testo, invece, viene evidenziato, cliccando prima con il tasto sinistro del mouse all'inizio del testo medesimo tenendo contemporaneamente premuto il tasto dello ''Shift'', e poi cliccando (sempre tenendo premuto il tasto dello ''Shift'') alla fine del testo, allora il testo trascinato e rilasciato nella ''TextLabel'' sarà disegnato con il rispetto dell'effetto dei caratteri di controllo supportati da Gambas.&lt;/div&gt;</summary>
		<author><name>Vuott</name></author>
	</entry>
	<entry>
		<id>https://www.gambas-it.org/wiki/index.php?title=Ottenere_il_nome_dell%27host_corrispondente_ad_un_indirizzo_IP_e_viceversa&amp;diff=42720</id>
		<title>Ottenere il nome dell'host corrispondente ad un indirizzo IP e viceversa</title>
		<link rel="alternate" type="text/html" href="https://www.gambas-it.org/wiki/index.php?title=Ottenere_il_nome_dell%27host_corrispondente_ad_un_indirizzo_IP_e_viceversa&amp;diff=42720"/>
		<updated>2025-10-26T07:11:17Z</updated>

		<summary type="html">&lt;p&gt;Vuott: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Ottenere il nome (se esistente) dell'host corrispondente ad un indirizzo IP=&lt;br /&gt;
Per ottenere con Gambas la risoluzione DNS inversa di un IP pubblico  in un hostname, nella forma FQDN (''Fully Qualified Domain Name'' ), è possibile usare il seguente codice:&lt;br /&gt;
 Library &amp;quot;libc:6&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 Public Struct in_addr&lt;br /&gt;
   s_addr As Integer&lt;br /&gt;
 End Struct&lt;br /&gt;
 &lt;br /&gt;
 Public Struct hostent&lt;br /&gt;
   h_name As Pointer&lt;br /&gt;
   h_aliases As Pointer&lt;br /&gt;
   h_addrtype As Integer&lt;br /&gt;
   h_length As Integer&lt;br /&gt;
   h_addr_list As Pointer&lt;br /&gt;
 End Struct&lt;br /&gt;
 &lt;br /&gt;
 Private Const AF_INET As Integer = 2&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;FONT Color=gray&amp;gt;' ''int inet_aton(const char *cp, struct in_addr *inp)''&lt;br /&gt;
 ' ''Converts the Internet host address cp from the IPv4 numbers-and-dots notation into binary form.''&amp;lt;/font&amp;gt;&lt;br /&gt;
 Private Extern inet_aton(cp As String, inp As In_addr) As Integer&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;FONT Color=gray&amp;gt;' ''struct hostent *gethostbyaddr (const void *__addr, __socklen_t __len, int __type)''&lt;br /&gt;
 ' ''Returns a structure of type hostent for the given host address addr of length len and address type type.''&amp;lt;/font&amp;gt;&lt;br /&gt;
 Private Extern gethostbyaddr(__addr As In_addr, __len As Integer, __type As Integer) As Hostent&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 Public Sub Main()&lt;br /&gt;
 &lt;br /&gt;
  Dim ipstr As String&lt;br /&gt;
  Dim ip As New In_addr&lt;br /&gt;
  Dim hp As Hostent&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;FONT Color=gray&amp;gt;' ''Esempio pratico:''&amp;lt;/font&amp;gt;&lt;br /&gt;
  ipstr = &amp;quot;&amp;lt;FONT Color=red&amp;gt;127.0.0.1&amp;lt;/font&amp;gt;&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
  If inet_aton(ipstr, ip) &amp;lt; 1 Then Error.Raise(&amp;quot;Errore !&amp;quot;)&lt;br /&gt;
 &lt;br /&gt;
  hp = gethostbyaddr(ip, SizeOf(TypeOf(ip.s_addr)), AF_INET)&lt;br /&gt;
  If IsNull(hp) Then Error.Raise(&amp;quot;Errore !&amp;quot;)&lt;br /&gt;
  &lt;br /&gt;
  Print &amp;quot;Nome associato all'IP &amp;quot;; ipstr; &amp;quot; = \e[31m&amp;quot;; String@(hp.h_name)&lt;br /&gt;
  &lt;br /&gt;
 End&lt;br /&gt;
oppure il seguente codice più complesso:&lt;br /&gt;
 Private Const PORT_NO As Integer = 0&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 Library &amp;quot;libc:6&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 Public Struct sockaddr_in&lt;br /&gt;
   sin_ As Short&lt;br /&gt;
   sin_port As Short&lt;br /&gt;
   sin_addr As Integer&lt;br /&gt;
   sin_zero[8] As Byte&lt;br /&gt;
 End Struct&lt;br /&gt;
 &lt;br /&gt;
 Public Struct hostent&lt;br /&gt;
   h_name As Pointer&lt;br /&gt;
   h_aliases As Pointer&lt;br /&gt;
   h_addrtype As Integer&lt;br /&gt;
   h_length As Integer&lt;br /&gt;
   h_addr_list As Pointer&lt;br /&gt;
 End Struct&lt;br /&gt;
 &lt;br /&gt;
 Public Struct sockaddr&lt;br /&gt;
   sa_ As Short&lt;br /&gt;
   sa_data[14] As Byte&lt;br /&gt;
 End Struct&lt;br /&gt;
 &lt;br /&gt;
 Private Const IPPROTO_ICMP As Integer = 1&lt;br /&gt;
 Private Const AF_INET As Integer = 2&lt;br /&gt;
 Private Const SIGINT As Integer = 2&lt;br /&gt;
 Private Const SOCK_RAW As Integer = 3&lt;br /&gt;
 Private Const NI_MAXHOST As Integer = 1025&lt;br /&gt;
 Private Const NI_NAMEREQD As Integer = 8&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;FONT Color=gray&amp;gt;' ''struct hostent *gethostbyname (const char *__name)''&lt;br /&gt;
 ' ''Return entry from host data base for host with NAME.''&amp;lt;/font&amp;gt;&lt;br /&gt;
 Private Extern gethostbyname(__name As String) As Hostent&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;FONT Color=gray&amp;gt;' ''char *inet_ntoa (struct in_addr __in)''&lt;br /&gt;
 ' ''Convert Internet number in IN to ASCII representation.''&amp;lt;/font&amp;gt;&lt;br /&gt;
 Private Extern inet_ntoa(__in As Integer) As Pointer&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;FONT Color=gray&amp;gt;' ''in_addr_t inet_addr (const char *__cp)''&lt;br /&gt;
 ' ''Convert Internet host address from numbers-and-dots notation in CP into binary data in network byte order.''&amp;lt;/font&amp;gt;&lt;br /&gt;
 Private Extern inet_addr(__cp As Pointer) As Integer&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;FONT Color=gray&amp;gt;' ''int getnameinfo (const struct sockaddr *__restrict __sa, socklen_t __salen, char *__restrict __host, socklen_t __hostlen, char *__restrict __serv, socklen_t __servlen, int __flags)''&lt;br /&gt;
 ' ''Translate a socket address to a location and service name.''&amp;lt;/font&amp;gt;&lt;br /&gt;
 Private Extern getnameinfo(__sa As Sockaddr_in, __salen As Integer, __host As Pointer, __hostlen As Integer, __serv As Pointer, __servlen As Integer, __flags As Integer) As Integer&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 Public Sub Main()&lt;br /&gt;
 &lt;br /&gt;
  Dim addrlen As Integer&lt;br /&gt;
  Dim indirizzo As String&lt;br /&gt;
  Dim ip_addr As Pointer&lt;br /&gt;
  Dim addr_con As New Sockaddr_in&lt;br /&gt;
  Dim rev As Byte[]&lt;br /&gt;
 &lt;br /&gt;
  indirizzo = &amp;quot;&amp;lt;FONT Color=red&amp;gt;162.241.217.63&amp;lt;/font&amp;gt;&amp;quot;   &amp;lt;FONT Color=gray&amp;gt;' ''...un esempio.''&amp;lt;/font&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
  addrlen = Object.SizeOf(addr_con)&lt;br /&gt;
 &lt;br /&gt;
  ip_addr = Ricerca_DNS(indirizzo, addr_con)&lt;br /&gt;
 &lt;br /&gt;
  If ip_addr == 0 Then&lt;br /&gt;
    Print &amp;quot;Ricerca fallita: impossibile risolvere l'hostname !&amp;quot;&lt;br /&gt;
    Quit&lt;br /&gt;
  Endif&lt;br /&gt;
 &lt;br /&gt;
  rev = Risoluzione_DNS_Inversa(ip_addr)&lt;br /&gt;
 &lt;br /&gt;
  Print &amp;quot;\nTentativo di connessione a '&amp;quot;; indirizzo; &amp;quot;' IP: &amp;quot;; String@(ip_addr)&lt;br /&gt;
  Print &amp;quot;\nRisoluzione DNS inversa: &amp;quot;; rev.ToString(0, rev.Find(0))&lt;br /&gt;
 &lt;br /&gt;
 End&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 Private Function Ricerca_DNS(ind As String, con As Sockaddr_in) As Pointer ' Esegue una ricerca DNS&lt;br /&gt;
 &lt;br /&gt;
  Dim host_entity As Hostent&lt;br /&gt;
  Dim ip As Pointer&lt;br /&gt;
 &lt;br /&gt;
  Print &amp;quot;\nRisoluzione DNS...&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
  host_entity = gethostbyname(ind)&lt;br /&gt;
 &lt;br /&gt;
  ip = inet_ntoa(Int@(Pointer@(host_entity.h_addr_list)))  ' inet_ntoa(*(struct in_addr *) host_entity-&amp;gt;h_addr)&lt;br /&gt;
 &lt;br /&gt;
  con.sin_ = host_entity.h_addrtype&lt;br /&gt;
  con.sin_port = PORT_NO&lt;br /&gt;
  con.sin_addr = Long@(Pointer@(host_entity.h_addr_list))&lt;br /&gt;
 &lt;br /&gt;
  Return ip&lt;br /&gt;
 &lt;br /&gt;
 End&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 Private Function Risoluzione_DNS_Inversa(ip_addr As Pointer) As Byte[]&lt;br /&gt;
  &lt;br /&gt;
  Dim temp_addr As New Sockaddr_in&lt;br /&gt;
  Dim socklen, err As Integer&lt;br /&gt;
  Dim buf As Byte[]&lt;br /&gt;
  &lt;br /&gt;
  temp_addr.sin_ = AF_INET&lt;br /&gt;
  temp_addr.sin_addr = inet_addr(ip_addr)&lt;br /&gt;
  socklen = Object.sizeof(temp_addr)&lt;br /&gt;
  &lt;br /&gt;
  buf = New Byte[NI_MAXHOST]&lt;br /&gt;
  &lt;br /&gt;
  err = getnameinfo(temp_addr, socklen, buf.Data, buf.Count, 0, 0, NI_NAMEREQD)&lt;br /&gt;
  If err &amp;lt; 0 Then&lt;br /&gt;
    Print &amp;quot;Impossibile la risoluzione DNS inversa dell'hostname\n&amp;quot;&lt;br /&gt;
    Quit&lt;br /&gt;
  Endif&lt;br /&gt;
  &lt;br /&gt;
  Return buf&lt;br /&gt;
  &lt;br /&gt;
 End&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Ottenere l'indirizzo IP dal nome (se esistente) dell'host=&lt;br /&gt;
 Library &amp;quot;libc:6&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 Public Struct hostent&lt;br /&gt;
   h_name As Pointer&lt;br /&gt;
   h_aliases As Pointer&lt;br /&gt;
   h_addrtype As Integer&lt;br /&gt;
   h_length As Integer&lt;br /&gt;
   h_addr_list As Pointer&lt;br /&gt;
 End Struct&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;FONT Color=gray&amp;gt;' ''struct hostent *gethostbyname(const char *name)''&lt;br /&gt;
 ' ''Returns a structure of type hostent for the given host name.''&amp;lt;/font&amp;gt;&lt;br /&gt;
 Private Extern gethostbyname(idn As String) As Pointer&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;FONT Color=gray&amp;gt;' ''char *inet_ntoa (struct in_addr __in)''&lt;br /&gt;
 ' ''Convert Internet number in IN to ASCII representation.''&amp;lt;/font&amp;gt;&lt;br /&gt;
 Private Extern inet_ntoa(__in As Pointer) As Pointer&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 Public Sub Main()&lt;br /&gt;
 &lt;br /&gt;
  Dim host As Hostent&lt;br /&gt;
  Dim idn As String&lt;br /&gt;
  Dim ip As Pointer&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;FONT Color=gray&amp;gt;' ''Esempio pratico:''&amp;lt;/font&amp;gt;&lt;br /&gt;
  idn = &amp;quot;&amp;lt;FONT Color=red&amp;gt;localhost&amp;lt;/font&amp;gt;&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
  host = gethostbyname(idn)&lt;br /&gt;
  If isNull(host) Then Error.Raise(&amp;quot;Errore !&amp;quot;)&lt;br /&gt;
 &lt;br /&gt;
  ip = inet_ntoa(Pointer@(Pointer@(host.h_addr_list)))&lt;br /&gt;
 &lt;br /&gt;
  Print &amp;quot;IP associato al nome &amp;quot;; idn; &amp;quot; = \e[31m&amp;quot;; String@(ip)&lt;br /&gt;
 &lt;br /&gt;
 End&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Riferimenti=&lt;br /&gt;
* https://www.webarea.it/howto/linux/il-comando-hostname-in-linux-visualizzare-e-modificare-il-nome-host-di-un-server_53&lt;br /&gt;
* https://teoriadeisegnali.it/appint/html/altro/bgnet/gethostbynameman.html&lt;/div&gt;</summary>
		<author><name>Vuott</name></author>
	</entry>
	<entry>
		<id>https://www.gambas-it.org/wiki/index.php?title=Ottenere_il_nome_dell%27host_corrispondente_ad_un_indirizzo_IP_e_viceversa&amp;diff=42719</id>
		<title>Ottenere il nome dell'host corrispondente ad un indirizzo IP e viceversa</title>
		<link rel="alternate" type="text/html" href="https://www.gambas-it.org/wiki/index.php?title=Ottenere_il_nome_dell%27host_corrispondente_ad_un_indirizzo_IP_e_viceversa&amp;diff=42719"/>
		<updated>2025-10-26T07:10:19Z</updated>

		<summary type="html">&lt;p&gt;Vuott: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Ottenere il nome (se esistente) dell'host corrispondente ad un indirizzo IP=&lt;br /&gt;
Per ottenere con Gambas la risoluzione DNS inversa di un IP pubblico  in un hostname, nella forma FQDN (''Fully Qualified Domain Name'' ), è possibile usare il seguente codice:&lt;br /&gt;
 Library &amp;quot;libc:6&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 Public Struct in_addr&lt;br /&gt;
   s_addr As Integer&lt;br /&gt;
 End Struct&lt;br /&gt;
 &lt;br /&gt;
 Public Struct hostent&lt;br /&gt;
   h_name As Pointer&lt;br /&gt;
   h_aliases As Pointer&lt;br /&gt;
   h_addrtype As Integer&lt;br /&gt;
   h_length As Integer&lt;br /&gt;
   h_addr_list As Pointer&lt;br /&gt;
 End Struct&lt;br /&gt;
 &lt;br /&gt;
 Private Const AF_INET As Integer = 2&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;FONT Color=gray&amp;gt;' ''int inet_aton(const char *cp, struct in_addr *inp)''&lt;br /&gt;
 ' ''Converts the Internet host address cp from the IPv4 numbers-and-dots notation into binary form.''&amp;lt;/font&amp;gt;&lt;br /&gt;
 Private Extern inet_aton(cp As String, inp As In_addr) As Integer&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;FONT Color=gray&amp;gt;' ''struct hostent *gethostbyaddr (const void *__addr, __socklen_t __len, int __type)''&lt;br /&gt;
 ' ''Returns a structure of type hostent for the given host address addr of length len and address type type.''&amp;lt;/font&amp;gt;&lt;br /&gt;
 Private Extern gethostbyaddr(__addr As In_addr, __len As Integer, __type As Integer) As Hostent&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 Public Sub Main()&lt;br /&gt;
 &lt;br /&gt;
  Dim ipstr As String&lt;br /&gt;
  Dim ip As New In_addr&lt;br /&gt;
  Dim hp As Hostent&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;FONT Color=gray&amp;gt;' ''Esempio pratico:''&amp;lt;/font&amp;gt;&lt;br /&gt;
  ipstr = &amp;quot;&amp;lt;FONT Color=red&amp;gt;127.0.0.1&amp;lt;/font&amp;gt;&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
  If inet_aton(ipstr, ip) &amp;lt; 1 Then Error.Raise(&amp;quot;Errore !&amp;quot;)&lt;br /&gt;
 &lt;br /&gt;
  hp = gethostbyaddr(ip, SizeOf(TypeOf(ip.s_addr)), AF_INET)&lt;br /&gt;
  If IsNull(hp) Then Error.Raise(&amp;quot;Errore !&amp;quot;)&lt;br /&gt;
  &lt;br /&gt;
  Print &amp;quot;Nome associato all'IP &amp;quot;; ipstr; &amp;quot; = \e[31m&amp;quot;; String@(hp.h_name)&lt;br /&gt;
  &lt;br /&gt;
 End&lt;br /&gt;
oppure il seguente codice più complesso:&lt;br /&gt;
 Private Const PORT_NO As Integer = 0&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 Library &amp;quot;libc:6&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 Public Struct sockaddr_in&lt;br /&gt;
   sin_ As Short&lt;br /&gt;
   sin_port As Short&lt;br /&gt;
   sin_addr As Integer&lt;br /&gt;
   sin_zero[8] As Byte&lt;br /&gt;
 End Struct&lt;br /&gt;
 &lt;br /&gt;
 Public Struct hostent&lt;br /&gt;
   h_name As Pointer&lt;br /&gt;
   h_aliases As Pointer&lt;br /&gt;
   h_addrtype As Integer&lt;br /&gt;
   h_length As Integer&lt;br /&gt;
   h_addr_list As Pointer&lt;br /&gt;
 End Struct&lt;br /&gt;
 &lt;br /&gt;
 Public Struct sockaddr&lt;br /&gt;
   sa_ As Short&lt;br /&gt;
   sa_data[14] As Byte&lt;br /&gt;
 End Struct&lt;br /&gt;
 &lt;br /&gt;
 Private Const IPPROTO_ICMP As Integer = 1&lt;br /&gt;
 Private Const AF_INET As Integer = 2&lt;br /&gt;
 Private Const SIGINT As Integer = 2&lt;br /&gt;
 Private Const SOCK_RAW As Integer = 3&lt;br /&gt;
 Private Const NI_MAXHOST As Integer = 1025&lt;br /&gt;
 Private Const NI_NAMEREQD As Integer = 8&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;FONT Color=gray&amp;gt;' ''struct hostent *gethostbyname (const char *__name)''&lt;br /&gt;
 ' ''Return entry from host data base for host with NAME.''&amp;lt;/font&amp;gt;&lt;br /&gt;
 Private Extern gethostbyname(__name As String) As Hostent&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;FONT Color=gray&amp;gt;' ''char *inet_ntoa (struct in_addr __in)''&lt;br /&gt;
 ' ''Convert Internet number in IN to ASCII representation.''&amp;lt;/font&amp;gt;&lt;br /&gt;
 Private Extern inet_ntoa(__in As Integer) As Pointer&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;FONT Color=gray&amp;gt;' ''in_addr_t inet_addr (const char *__cp)''&lt;br /&gt;
 ' ''Convert Internet host address from numbers-and-dots notation in CP into binary data in network byte order.''&amp;lt;/font&amp;gt;&lt;br /&gt;
 Private Extern inet_addr(__cp As Pointer) As Integer&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;FONT Color=gray&amp;gt;' ''int getnameinfo (const struct sockaddr *__restrict __sa, socklen_t __salen, char *__restrict __host, socklen_t __hostlen, char *__restrict __serv, socklen_t __servlen, int __flags)''&lt;br /&gt;
 ' ''Translate a socket address to a location and service name.''&amp;lt;/font&amp;gt;&lt;br /&gt;
 Private Extern getnameinfo(__sa As Sockaddr_in, __salen As Integer, __host As Pointer, __hostlen As Integer, __serv As Pointer, __servlen As Integer, __flags As Integer) As Integer&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 Public Sub Main()&lt;br /&gt;
 &lt;br /&gt;
  Dim addrlen As Integer&lt;br /&gt;
  Dim indirizzo As String&lt;br /&gt;
  Dim ip_addr As Pointer&lt;br /&gt;
  Dim addr_con As New Sockaddr_in&lt;br /&gt;
  Dim rev As Byte[]&lt;br /&gt;
 &lt;br /&gt;
  indirizzo = &amp;quot;&amp;lt;FONT Color=red&amp;gt;162.241.217.63&amp;lt;/font&amp;gt;&amp;quot;   &amp;lt;FONT Color=gray&amp;gt;' ''...un esempio.''&amp;lt;/font&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
  addrlen = Object.SizeOf(addr_con)&lt;br /&gt;
 &lt;br /&gt;
  ip_addr = Ricerca_DNS(indirizzo, addr_con)&lt;br /&gt;
 &lt;br /&gt;
  If ip_addr == 0 Then&lt;br /&gt;
    Print &amp;quot;Ricerca fallita: impossibile risolvere l'hostname !&amp;quot;&lt;br /&gt;
    Quit&lt;br /&gt;
  Endif&lt;br /&gt;
 &lt;br /&gt;
  rev = Risoluzione_DNS_Inversa(ip_addr)&lt;br /&gt;
 &lt;br /&gt;
  Print &amp;quot;\nTentativo di connessione a '&amp;quot;; indirizzo; &amp;quot;' IP: &amp;quot;; String@(ip_addr)&lt;br /&gt;
  Print &amp;quot;\nRisoluzione DNS inversa: &amp;quot;; rev.ToString(0, rev.Find(0))&lt;br /&gt;
 &lt;br /&gt;
 End&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 Private Function Ricerca_DNS(ind As String, con As Sockaddr_in) As Pointer ' Esegue una ricerca DNS&lt;br /&gt;
 &lt;br /&gt;
  Dim host_entity As Hostent&lt;br /&gt;
  Dim ip As Pointer&lt;br /&gt;
 &lt;br /&gt;
  Print &amp;quot;\nRisoluzione DNS...&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
  host_entity = gethostbyname(ind)&lt;br /&gt;
 &lt;br /&gt;
  ip = inet_ntoa(Int@(Pointer@(host_entity.h_addr_list)))  ' inet_ntoa(*(struct in_addr *) host_entity-&amp;gt;h_addr)&lt;br /&gt;
 &lt;br /&gt;
  con.sin_ = host_entity.h_addrtype&lt;br /&gt;
  con.sin_port = PORT_NO&lt;br /&gt;
  con.sin_addr = Long@(Pointer@(host_entity.h_addr_list))&lt;br /&gt;
 &lt;br /&gt;
  Return ip&lt;br /&gt;
 &lt;br /&gt;
 End&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 Private Function Risoluzione_DNS_Inversa(ip_addr As Pointer) As Byte[]&lt;br /&gt;
  &lt;br /&gt;
  Dim temp_addr As New Sockaddr_in&lt;br /&gt;
  Dim socklen, err As Integer&lt;br /&gt;
  Dim buf As Byte[]&lt;br /&gt;
  &lt;br /&gt;
  temp_addr.sin_ = AF_INET&lt;br /&gt;
  temp_addr.sin_addr = inet_addr(ip_addr)&lt;br /&gt;
  socklen = Object.sizeof(temp_addr)&lt;br /&gt;
  &lt;br /&gt;
  buf = New Byte[NI_MAXHOST]&lt;br /&gt;
  &lt;br /&gt;
  err = getnameinfo(temp_addr, socklen, buf.Data, buf.Count, 0, 0, NI_NAMEREQD)&lt;br /&gt;
  If err &amp;lt; 0 Then&lt;br /&gt;
    Print &amp;quot;Impossibile la risoluzione DNS inversa dell'hostname\n&amp;quot;&lt;br /&gt;
    Quit&lt;br /&gt;
  Endif&lt;br /&gt;
  &lt;br /&gt;
  Return buf&lt;br /&gt;
  &lt;br /&gt;
 End&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Ottenere l'indirizzo IP dal nome (se esistente) dell'host=&lt;br /&gt;
 Library &amp;quot;libc:6&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 Public Struct hostent&lt;br /&gt;
   h_name As Pointer&lt;br /&gt;
   h_aliases As Pointer&lt;br /&gt;
   h_addrtype As Integer&lt;br /&gt;
   h_length As Integer&lt;br /&gt;
   h_addr_list As Pointer&lt;br /&gt;
 End Struct&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;FONT Color=gray&amp;gt;' ''struct hostent *gethostbyname(const char *name)''&lt;br /&gt;
 ' ''Returns a structure of type hostent for the given host name.''&amp;lt;/font&amp;gt;&lt;br /&gt;
 Private Extern gethostbyname(idn As String) As Pointer&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;FONT Color=gray&amp;gt;' ''char *inet_ntoa (struct in_addr __in)''&lt;br /&gt;
 ' ''Convert Internet number in IN to ASCII representation.''&amp;lt;/font&amp;gt;&lt;br /&gt;
 Private Extern inet_ntoa(__in As Pointer) As Pointer&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 Public Sub Main()&lt;br /&gt;
 &lt;br /&gt;
  Dim host As Hostent&lt;br /&gt;
  Dim idn As String&lt;br /&gt;
  Dim ip As Pointer&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;FONT Color=gray&amp;gt;' ''Esempio pratico:''&amp;lt;/font&amp;gt;&lt;br /&gt;
  idn = &amp;quot;&amp;lt;FONT Color=red&amp;gt;localhost&amp;lt;/font&amp;gt;&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
  host = gethostbyname(idn)&lt;br /&gt;
  If isNull(host) Then Error.Raise(&amp;quot;Errore !&amp;quot;)&lt;br /&gt;
 &lt;br /&gt;
  ip = inet_ntoa(Pointer@(Pointer@(host.h_addr_list)))&lt;br /&gt;
 &lt;br /&gt;
  Print &amp;quot;IP associato al nome &amp;quot;; idn; &amp;quot; = \e[31m&amp;quot;; String@(ip)&lt;br /&gt;
 &lt;br /&gt;
 End&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Riferimenti=&lt;br /&gt;
* https://www.webarea.it/howto/linux/il-comando-hostname-in-linux-visualizzare-e-modificare-il-nome-host-di-un-server_53&lt;/div&gt;</summary>
		<author><name>Vuott</name></author>
	</entry>
	<entry>
		<id>https://www.gambas-it.org/wiki/index.php?title=Ottenere_il_nome_dell%27host_corrispondente_ad_un_indirizzo_IP_e_viceversa&amp;diff=42718</id>
		<title>Ottenere il nome dell'host corrispondente ad un indirizzo IP e viceversa</title>
		<link rel="alternate" type="text/html" href="https://www.gambas-it.org/wiki/index.php?title=Ottenere_il_nome_dell%27host_corrispondente_ad_un_indirizzo_IP_e_viceversa&amp;diff=42718"/>
		<updated>2025-10-25T15:07:27Z</updated>

		<summary type="html">&lt;p&gt;Vuott: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Ottenere il nome (se esistente) dell'host corrispondente ad un indirizzo IP=&lt;br /&gt;
Per ottenere con Gambas la risoluzione DNS inversa di un IP pubblico  in un hostname, nella forma FQDN (''Fully Qualified Domain Name'' ), è possibile usare il seguente codice:&lt;br /&gt;
 Library &amp;quot;libc:6&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 Public Struct in_addr&lt;br /&gt;
   s_addr As Integer&lt;br /&gt;
 End Struct&lt;br /&gt;
 &lt;br /&gt;
 Public Struct hostent&lt;br /&gt;
   h_name As Pointer&lt;br /&gt;
   h_aliases As Pointer&lt;br /&gt;
   h_addrtype As Integer&lt;br /&gt;
   h_length As Integer&lt;br /&gt;
   h_addr_list As Pointer&lt;br /&gt;
 End Struct&lt;br /&gt;
 &lt;br /&gt;
 Private Const AF_INET As Integer = 2&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;FONT Color=gray&amp;gt;' ''int inet_aton(const char *cp, struct in_addr *inp)''&lt;br /&gt;
 ' ''Converts the Internet host address cp from the IPv4 numbers-and-dots notation into binary form.''&amp;lt;/font&amp;gt;&lt;br /&gt;
 Private Extern inet_aton(cp As String, inp As In_addr) As Integer&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;FONT Color=gray&amp;gt;' ''struct hostent *gethostbyaddr (const void *__addr, __socklen_t __len, int __type)''&lt;br /&gt;
 ' ''Returns a structure of type hostent for the given host address addr of length len and address type type.''&amp;lt;/font&amp;gt;&lt;br /&gt;
 Private Extern gethostbyaddr(__addr As In_addr, __len As Integer, __type As Integer) As Hostent&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 Public Sub Main()&lt;br /&gt;
 &lt;br /&gt;
  Dim ipstr As String&lt;br /&gt;
  Dim ip As New In_addr&lt;br /&gt;
  Dim hp As Hostent&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;FONT Color=gray&amp;gt;' ''Esempio pratico:''&amp;lt;/font&amp;gt;&lt;br /&gt;
  ipstr = &amp;quot;&amp;lt;FONT Color=red&amp;gt;127.0.0.1&amp;lt;/font&amp;gt;&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
  If inet_aton(ipstr, ip) &amp;lt; 1 Then Error.Raise(&amp;quot;Errore !&amp;quot;)&lt;br /&gt;
 &lt;br /&gt;
  hp = gethostbyaddr(ip, SizeOf(TypeOf(ip.s_addr)), AF_INET)&lt;br /&gt;
  If IsNull(hp) Then Error.Raise(&amp;quot;Errore !&amp;quot;)&lt;br /&gt;
  &lt;br /&gt;
  Print &amp;quot;Nome associato all'IP &amp;quot;; ipstr; &amp;quot; = \e[31m&amp;quot;; String@(hp.h_name)&lt;br /&gt;
  &lt;br /&gt;
 End&lt;br /&gt;
oppure il seguente codice più complesso:&lt;br /&gt;
 Private Const PORT_NO As Integer = 0&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 Library &amp;quot;libc:6&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 Public Struct sockaddr_in&lt;br /&gt;
   sin_ As Short&lt;br /&gt;
   sin_port As Short&lt;br /&gt;
   sin_addr As Integer&lt;br /&gt;
   sin_zero[8] As Byte&lt;br /&gt;
 End Struct&lt;br /&gt;
 &lt;br /&gt;
 Public Struct hostent&lt;br /&gt;
   h_name As Pointer&lt;br /&gt;
   h_aliases As Pointer&lt;br /&gt;
   h_addrtype As Integer&lt;br /&gt;
   h_length As Integer&lt;br /&gt;
   h_addr_list As Pointer&lt;br /&gt;
 End Struct&lt;br /&gt;
 &lt;br /&gt;
 Public Struct sockaddr&lt;br /&gt;
   sa_ As Short&lt;br /&gt;
   sa_data[14] As Byte&lt;br /&gt;
 End Struct&lt;br /&gt;
 &lt;br /&gt;
 Private Const IPPROTO_ICMP As Integer = 1&lt;br /&gt;
 Private Const AF_INET As Integer = 2&lt;br /&gt;
 Private Const SIGINT As Integer = 2&lt;br /&gt;
 Private Const SOCK_RAW As Integer = 3&lt;br /&gt;
 Private Const NI_MAXHOST As Integer = 1025&lt;br /&gt;
 Private Const NI_NAMEREQD As Integer = 8&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;FONT Color=gray&amp;gt;' ''struct hostent *gethostbyname (const char *__name)''&lt;br /&gt;
 ' ''Return entry from host data base for host with NAME.''&amp;lt;/font&amp;gt;&lt;br /&gt;
 Private Extern gethostbyname(__name As String) As Hostent&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;FONT Color=gray&amp;gt;' ''char *inet_ntoa (struct in_addr __in)''&lt;br /&gt;
 ' ''Convert Internet number in IN to ASCII representation.''&amp;lt;/font&amp;gt;&lt;br /&gt;
 Private Extern inet_ntoa(__in As Integer) As Pointer&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;FONT Color=gray&amp;gt;' ''in_addr_t inet_addr (const char *__cp)''&lt;br /&gt;
 ' ''Convert Internet host address from numbers-and-dots notation in CP into binary data in network byte order.''&amp;lt;/font&amp;gt;&lt;br /&gt;
 Private Extern inet_addr(__cp As Pointer) As Integer&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;FONT Color=gray&amp;gt;' ''int getnameinfo (const struct sockaddr *__restrict __sa, socklen_t __salen, char *__restrict __host, socklen_t __hostlen, char *__restrict __serv, socklen_t __servlen, int __flags)''&lt;br /&gt;
 ' ''Translate a socket address to a location and service name.''&amp;lt;/font&amp;gt;&lt;br /&gt;
 Private Extern getnameinfo(__sa As Sockaddr_in, __salen As Integer, __host As Pointer, __hostlen As Integer, __serv As Pointer, __servlen As Integer, __flags As Integer) As Integer&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 Public Sub Main()&lt;br /&gt;
 &lt;br /&gt;
  Dim addrlen As Integer&lt;br /&gt;
  Dim indirizzo As String&lt;br /&gt;
  Dim ip_addr As Pointer&lt;br /&gt;
  Dim addr_con As New Sockaddr_in&lt;br /&gt;
  Dim rev As Byte[]&lt;br /&gt;
 &lt;br /&gt;
  indirizzo = &amp;quot;&amp;lt;FONT Color=red&amp;gt;162.241.217.63&amp;lt;/font&amp;gt;&amp;quot;   &amp;lt;FONT Color=gray&amp;gt;' ''...un esempio.''&amp;lt;/font&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
  addrlen = Object.SizeOf(addr_con)&lt;br /&gt;
 &lt;br /&gt;
  ip_addr = Ricerca_DNS(indirizzo, addr_con)&lt;br /&gt;
 &lt;br /&gt;
  If ip_addr == 0 Then&lt;br /&gt;
    Print &amp;quot;Ricerca fallita: impossibile risolvere l'hostname !&amp;quot;&lt;br /&gt;
    Quit&lt;br /&gt;
  Endif&lt;br /&gt;
 &lt;br /&gt;
  rev = Risoluzione_DNS_Inversa(ip_addr)&lt;br /&gt;
 &lt;br /&gt;
  Print &amp;quot;\nTentativo di connessione a '&amp;quot;; indirizzo; &amp;quot;' IP: &amp;quot;; String@(ip_addr)&lt;br /&gt;
  Print &amp;quot;\nRisoluzione DNS inversa: &amp;quot;; rev.ToString(0, rev.Find(0))&lt;br /&gt;
 &lt;br /&gt;
 End&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 Private Function Ricerca_DNS(ind As String, con As Sockaddr_in) As Pointer ' Esegue una ricerca DNS&lt;br /&gt;
 &lt;br /&gt;
  Dim host_entity As Hostent&lt;br /&gt;
  Dim ip As Pointer&lt;br /&gt;
 &lt;br /&gt;
  Print &amp;quot;\nRisoluzione DNS...&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
  host_entity = gethostbyname(ind)&lt;br /&gt;
 &lt;br /&gt;
  ip = inet_ntoa(Int@(Pointer@(host_entity.h_addr_list)))  ' inet_ntoa(*(struct in_addr *) host_entity-&amp;gt;h_addr)&lt;br /&gt;
 &lt;br /&gt;
  con.sin_ = host_entity.h_addrtype&lt;br /&gt;
  con.sin_port = PORT_NO&lt;br /&gt;
  con.sin_addr = Long@(Pointer@(host_entity.h_addr_list))&lt;br /&gt;
 &lt;br /&gt;
  Return ip&lt;br /&gt;
 &lt;br /&gt;
 End&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 Private Function Risoluzione_DNS_Inversa(ip_addr As Pointer) As Byte[]&lt;br /&gt;
  &lt;br /&gt;
  Dim temp_addr As New Sockaddr_in&lt;br /&gt;
  Dim socklen, err As Integer&lt;br /&gt;
  Dim buf As Byte[]&lt;br /&gt;
  &lt;br /&gt;
  temp_addr.sin_ = AF_INET&lt;br /&gt;
  temp_addr.sin_addr = inet_addr(ip_addr)&lt;br /&gt;
  socklen = Object.sizeof(temp_addr)&lt;br /&gt;
  &lt;br /&gt;
  buf = New Byte[NI_MAXHOST]&lt;br /&gt;
  &lt;br /&gt;
  err = getnameinfo(temp_addr, socklen, buf.Data, buf.Count, 0, 0, NI_NAMEREQD)&lt;br /&gt;
  If err &amp;lt; 0 Then&lt;br /&gt;
    Print &amp;quot;Impossibile la risoluzione DNS inversa dell'hostname\n&amp;quot;&lt;br /&gt;
    Quit&lt;br /&gt;
  Endif&lt;br /&gt;
  &lt;br /&gt;
  Return buf&lt;br /&gt;
  &lt;br /&gt;
 End&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Ottenere l'indirizzo IP dal nome (se esistente) dell'host=&lt;br /&gt;
 Library &amp;quot;libc:6&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 Public Struct hostent&lt;br /&gt;
   h_name As Pointer&lt;br /&gt;
   h_aliases As Pointer&lt;br /&gt;
   h_addrtype As Integer&lt;br /&gt;
   h_length As Integer&lt;br /&gt;
   h_addr_list As Pointer&lt;br /&gt;
 End Struct&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;FONT Color=gray&amp;gt;' ''struct hostent *gethostbyname(const char *name)''&lt;br /&gt;
 ' ''Returns a structure of type hostent for the given host name.''&amp;lt;/font&amp;gt;&lt;br /&gt;
 Private Extern gethostbyname(idn As String) As Pointer&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;FONT Color=gray&amp;gt;' ''char *inet_ntoa (struct in_addr __in)''&lt;br /&gt;
 ' ''Convert Internet number in IN to ASCII representation.''&amp;lt;/font&amp;gt;&lt;br /&gt;
 Private Extern inet_ntoa(__in As Pointer) As Pointer&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 Public Sub Main()&lt;br /&gt;
 &lt;br /&gt;
  Dim host As Hostent&lt;br /&gt;
  Dim idn As String&lt;br /&gt;
  Dim ip As Pointer&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;FONT Color=gray&amp;gt;' ''Esempio pratico:''&amp;lt;/font&amp;gt;&lt;br /&gt;
  idn = &amp;quot;&amp;lt;FONT Color=red&amp;gt;localhost&amp;lt;/font&amp;gt;&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
  host = gethostbyname(idn)&lt;br /&gt;
  If isNull(host) Then Error.Raise(&amp;quot;Errore !&amp;quot;)&lt;br /&gt;
 &lt;br /&gt;
  ip = inet_ntoa(Pointer@(Pointer@(host.h_addr_list)))&lt;br /&gt;
 &lt;br /&gt;
  Print &amp;quot;IP associato al nome &amp;quot;; idn; &amp;quot; = \e[31m&amp;quot;; String@(ip)&lt;br /&gt;
 &lt;br /&gt;
 End&lt;/div&gt;</summary>
		<author><name>Vuott</name></author>
	</entry>
	<entry>
		<id>https://www.gambas-it.org/wiki/index.php?title=Ottenere_il_nome_dell%27host_corrispondente_ad_un_indirizzo_IP_e_viceversa&amp;diff=42717</id>
		<title>Ottenere il nome dell'host corrispondente ad un indirizzo IP e viceversa</title>
		<link rel="alternate" type="text/html" href="https://www.gambas-it.org/wiki/index.php?title=Ottenere_il_nome_dell%27host_corrispondente_ad_un_indirizzo_IP_e_viceversa&amp;diff=42717"/>
		<updated>2025-10-23T15:25:52Z</updated>

		<summary type="html">&lt;p&gt;Vuott: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Ottenere il nome (se esistente) dell'host corrispondente ad un indirizzo IP=&lt;br /&gt;
Per ottenere con Gambas la risoluzione DNS inversa di un IP pubblico  in un hostname, nella forma FQDN (''Fully Qualified Domain Name'' ), è possibile usare il seguente codice:&lt;br /&gt;
 Library &amp;quot;libc:6&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 Public Struct in_addr&lt;br /&gt;
   s_addr As Integer&lt;br /&gt;
 End Struct&lt;br /&gt;
 &lt;br /&gt;
 Public Struct hostent&lt;br /&gt;
   h_name As Pointer&lt;br /&gt;
   h_aliases As Pointer&lt;br /&gt;
   h_addrtype As Integer&lt;br /&gt;
   h_length As Integer&lt;br /&gt;
   h_addr_list As Pointer&lt;br /&gt;
 End Struct&lt;br /&gt;
 &lt;br /&gt;
 Private Const AF_INET As Integer = 2&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;FONT Color=gray&amp;gt;' ''int inet_aton(const char *cp, struct in_addr *inp)''&lt;br /&gt;
 ' ''Converts the Internet host address cp from the IPv4 numbers-and-dots notation into binary form.''&amp;lt;/font&amp;gt;&lt;br /&gt;
 Private Extern inet_aton(cp As String, inp As In_addr) As Integer&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;FONT Color=gray&amp;gt;' ''struct hostent *gethostbyaddr (const void *__addr, __socklen_t __len, int __type)''&lt;br /&gt;
 ' ''Returns a structure of type hostent for the given host address addr of length len and address type type.''&amp;lt;/font&amp;gt;&lt;br /&gt;
 Private Extern gethostbyaddr(__addr As In_addr, __len As Integer, __type As Integer) As Hostent&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 Public Sub Main()&lt;br /&gt;
 &lt;br /&gt;
  Dim ipstr As String&lt;br /&gt;
  Dim ip As New In_addr&lt;br /&gt;
  Dim hp As Hostent&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;FONT Color=gray&amp;gt;' ''Esempio pratico:''&amp;lt;/font&amp;gt;&lt;br /&gt;
  ipstr = &amp;quot;&amp;lt;FONT Color=red&amp;gt;127.0.0.1&amp;lt;/font&amp;gt;&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
  If inet_aton(ipstr, ip) &amp;lt; 1 Then Error.Raise(&amp;quot;Errore !&amp;quot;)&lt;br /&gt;
 &lt;br /&gt;
  hp = gethostbyaddr(ip, SizeOf(TypeOf(ip.s_addr)), AF_INET)&lt;br /&gt;
  If IsNull(hp) Then Error.Raise(&amp;quot;Errore !&amp;quot;)&lt;br /&gt;
  &lt;br /&gt;
  Print &amp;quot;Nome associato all'IP &amp;quot;; ipstr; &amp;quot; = \e[31m&amp;quot;; String@(hp.h_name)&lt;br /&gt;
  &lt;br /&gt;
 End&lt;br /&gt;
oppure il seguente codice più complesso:&lt;br /&gt;
 Private Const PORT_NO As Integer = 0&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 Library &amp;quot;libc:6&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 Public Struct sockaddr_in&lt;br /&gt;
   sin_ As Short&lt;br /&gt;
   sin_port As Short&lt;br /&gt;
   sin_addr As Integer&lt;br /&gt;
   sin_zero[8] As Byte&lt;br /&gt;
 End Struct&lt;br /&gt;
 &lt;br /&gt;
 Public Struct hostent&lt;br /&gt;
   h_name As Pointer&lt;br /&gt;
   h_aliases As Pointer&lt;br /&gt;
   h_addrtype As Integer&lt;br /&gt;
   h_length As Integer&lt;br /&gt;
   h_addr_list As Pointer&lt;br /&gt;
 End Struct&lt;br /&gt;
 &lt;br /&gt;
 Public Struct sockaddr&lt;br /&gt;
   sa_ As Short&lt;br /&gt;
   sa_data[14] As Byte&lt;br /&gt;
 End Struct&lt;br /&gt;
 &lt;br /&gt;
 Private Const IPPROTO_ICMP As Integer = 1&lt;br /&gt;
 Private Const AF_INET As Integer = 2&lt;br /&gt;
 Private Const SIGINT As Integer = 2&lt;br /&gt;
 Private Const SOCK_RAW As Integer = 3&lt;br /&gt;
 Private Const NI_MAXHOST As Integer = 1025&lt;br /&gt;
 Private Const NI_NAMEREQD As Integer = 8&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;FONT Color=gray&amp;gt;' ''struct hostent *gethostbyname (const char *__name)''&lt;br /&gt;
 ' ''Return entry from host data base for host with NAME.''&amp;lt;/font&amp;gt;&lt;br /&gt;
 Private Extern gethostbyname(__name As String) As Hostent&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;FONT Color=gray&amp;gt;' ''char *inet_ntoa (struct in_addr __in)''&lt;br /&gt;
 ' ''Convert Internet number in IN to ASCII representation.''&amp;lt;/font&amp;gt;&lt;br /&gt;
 Private Extern inet_ntoa(__in As Integer) As Pointer&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;FONT Color=gray&amp;gt;' ''in_addr_t inet_addr (const char *__cp)''&lt;br /&gt;
 ' ''Convert Internet host address from numbers-and-dots notation in CP into binary data in network byte order.''&amp;lt;/font&amp;gt;&lt;br /&gt;
 Private Extern inet_addr(__cp As Pointer) As Integer&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;FONT Color=gray&amp;gt;' ''int getnameinfo (const struct sockaddr *__restrict __sa, socklen_t __salen, char *__restrict __host, socklen_t __hostlen, char *__restrict __serv, socklen_t __servlen, int __flags)''&lt;br /&gt;
 ' ''Translate a socket address to a location and service name.''&amp;lt;/font&amp;gt;&lt;br /&gt;
 Private Extern getnameinfo(__sa As Sockaddr_in, __salen As Integer, __host As Pointer, __hostlen As Integer, __serv As Pointer, __servlen As Integer, __flags As Integer) As Integer&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 Public Sub Main()&lt;br /&gt;
 &lt;br /&gt;
  Dim addrlen As Integer&lt;br /&gt;
  Dim indirizzo As String&lt;br /&gt;
  Dim ip_addr As Pointer&lt;br /&gt;
  Dim addr_con As New Sockaddr_in&lt;br /&gt;
  Dim rev As Byte[]&lt;br /&gt;
 &lt;br /&gt;
  indirizzo = &amp;quot;&amp;lt;FONT Color=red&amp;gt;162.241.217.63&amp;lt;/font&amp;gt;&amp;quot;   &amp;lt;FONT Color=gray&amp;gt;' ''...un esempio.''&amp;lt;/font&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
  addrlen = Object.SizeOf(addr_con)&lt;br /&gt;
 &lt;br /&gt;
  ip_addr = Ricerca_DNS(indirizzo, addr_con)&lt;br /&gt;
 &lt;br /&gt;
  If ip_addr == 0 Then&lt;br /&gt;
    Print &amp;quot;Ricerca fallita: impossibile risolvere l'hostname !&amp;quot;&lt;br /&gt;
    Quit&lt;br /&gt;
  Endif&lt;br /&gt;
 &lt;br /&gt;
  rev = Risoluzione_DNS_Inversa(ip_addr)&lt;br /&gt;
 &lt;br /&gt;
  Print &amp;quot;\nTentativo di connessione a '&amp;quot;; indirizzo; &amp;quot;' IP: &amp;quot;; String@(ip_addr)&lt;br /&gt;
  Print &amp;quot;\nRisoluzione DNS inversa: &amp;quot;; rev.ToString(0, rev.Find(0))&lt;br /&gt;
 &lt;br /&gt;
 End&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 Private Function Ricerca_DNS(ind As String, con As Sockaddr_in) As Pointer ' Esegue una ricerca DNS&lt;br /&gt;
 &lt;br /&gt;
  Dim host_entity As Hostent&lt;br /&gt;
  Dim ip As Pointer&lt;br /&gt;
 &lt;br /&gt;
  Print &amp;quot;\nRisoluzione DNS...&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
  host_entity = gethostbyname(ind)&lt;br /&gt;
 &lt;br /&gt;
  ip = inet_ntoa(Int@(Pointer@(host_entity.h_addr_list)))  ' inet_ntoa(*(struct in_addr *) host_entity-&amp;gt;h_addr)&lt;br /&gt;
 &lt;br /&gt;
  con.sin_ = host_entity.h_addrtype&lt;br /&gt;
  con.sin_port = PORT_NO&lt;br /&gt;
  con.sin_addr = Long@(Pointer@(host_entity.h_addr_list))&lt;br /&gt;
 &lt;br /&gt;
  Return ip&lt;br /&gt;
 &lt;br /&gt;
 End&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 Private Function Risoluzione_DNS_Inversa(ip_addr As Pointer) As Byte[]&lt;br /&gt;
  &lt;br /&gt;
  Dim temp_addr As New Sockaddr_in&lt;br /&gt;
  Dim socklen, err As Integer&lt;br /&gt;
  Dim buf As Byte[]&lt;br /&gt;
  &lt;br /&gt;
  temp_addr.sin_ = AF_INET&lt;br /&gt;
  temp_addr.sin_addr = inet_addr(ip_addr)&lt;br /&gt;
  socklen = Object.sizeof(temp_addr)&lt;br /&gt;
  &lt;br /&gt;
  buf = New Byte[NI_MAXHOST]&lt;br /&gt;
  &lt;br /&gt;
  err = getnameinfo(temp_addr, socklen, buf.Data, buf.Count, 0, 0, NI_NAMEREQD)&lt;br /&gt;
  If err &amp;lt; 0 Then&lt;br /&gt;
    Print &amp;quot;Impossibile la risoluzione DNS inversa dell'hostname\n&amp;quot;&lt;br /&gt;
    Quit&lt;br /&gt;
  Endif&lt;br /&gt;
  &lt;br /&gt;
  Return buf&lt;br /&gt;
  &lt;br /&gt;
 End&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Ottenere l'indirizzo IP dal nome (se esistente) dell'host=&lt;br /&gt;
 Library &amp;quot;libc:6&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 Public Struct hostent&lt;br /&gt;
   h_name As Pointer&lt;br /&gt;
   h_aliases As Pointer&lt;br /&gt;
   h_addrtype As Integer&lt;br /&gt;
   h_length As Integer&lt;br /&gt;
   h_addr_list As Pointer&lt;br /&gt;
 End Struct&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;FONT Color=gray&amp;gt;' ''struct hostent *gethostbyname(const char *name)''&lt;br /&gt;
 ' ''Returns a structure of type hostent for the given host name.''&amp;lt;/font&amp;gt;&lt;br /&gt;
 Private Extern gethostbyname(idn As String) As Pointer&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;FONT Color=gray&amp;gt;' ''char *inet_ntoa (struct in_addr __in)''&lt;br /&gt;
 ' ''Convert Internet number in IN to ASCII representation.''&amp;lt;/font&amp;gt;&lt;br /&gt;
 Private Extern inet_ntoa(__in As Long) As Pointer&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 Public Sub Main()&lt;br /&gt;
 &lt;br /&gt;
  Dim host As Hostent&lt;br /&gt;
  Dim idn As String&lt;br /&gt;
  Dim ip As Pointer&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;FONT Color=gray&amp;gt;' ''Esempio pratico:''&amp;lt;/font&amp;gt;&lt;br /&gt;
  idn = &amp;quot;&amp;lt;FONT Color=red&amp;gt;localhost&amp;lt;/font&amp;gt;&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
  host = gethostbyname(idn)&lt;br /&gt;
  If isNull(host) Then Error.Raise(&amp;quot;Errore !&amp;quot;)&lt;br /&gt;
 &lt;br /&gt;
  ip = inet_ntoa(Long@(Pointer@(host.h_addr_list)))&lt;br /&gt;
 &lt;br /&gt;
  Print &amp;quot;IP associato al nome &amp;quot;; idn; &amp;quot; = \e[31m&amp;quot;; String@(ip)&lt;br /&gt;
 &lt;br /&gt;
 End&lt;/div&gt;</summary>
		<author><name>Vuott</name></author>
	</entry>
	<entry>
		<id>https://www.gambas-it.org/wiki/index.php?title=Ottenere_il_nome_dell%27host_corrispondente_ad_un_indirizzo_IP_e_viceversa&amp;diff=42716</id>
		<title>Ottenere il nome dell'host corrispondente ad un indirizzo IP e viceversa</title>
		<link rel="alternate" type="text/html" href="https://www.gambas-it.org/wiki/index.php?title=Ottenere_il_nome_dell%27host_corrispondente_ad_un_indirizzo_IP_e_viceversa&amp;diff=42716"/>
		<updated>2025-10-23T15:22:31Z</updated>

		<summary type="html">&lt;p&gt;Vuott: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Ottenere il nome (se esistente) dell'host corrispondente ad un indirizzo IP=&lt;br /&gt;
Per ottenere con Gambas la risoluzione DNS inversa di un IP pubblico  in un hostname, nella forma FQDN (''Fully Qualified Domain Name'' ), è possibile usare il seguente codice:&lt;br /&gt;
 Library &amp;quot;libc:6&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 Public Struct in_addr&lt;br /&gt;
   s_addr As Integer&lt;br /&gt;
 End Struct&lt;br /&gt;
 &lt;br /&gt;
 Public Struct hostent&lt;br /&gt;
   h_name As Pointer&lt;br /&gt;
   h_aliases As Pointer&lt;br /&gt;
   h_addrtype As Integer&lt;br /&gt;
   h_length As Integer&lt;br /&gt;
   h_addr_list As Pointer&lt;br /&gt;
 End Struct&lt;br /&gt;
 &lt;br /&gt;
 Private Const AF_INET As Integer = 2&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;FONT Color=gray&amp;gt;' ''int inet_aton(const char *cp, struct in_addr *inp)''&lt;br /&gt;
 ' ''Converts the Internet host address cp from the IPv4 numbers-and-dots notation into binary form.''&amp;lt;/font&amp;gt;&lt;br /&gt;
 Private Extern inet_aton(cp As String, inp As In_addr) As Integer&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;FONT Color=gray&amp;gt;' ''struct hostent *gethostbyaddr (const void *__addr, __socklen_t __len, int __type)''&lt;br /&gt;
 ' ''Returns a structure of type hostent for the given host address addr of length len and address type type.''&amp;lt;/font&amp;gt;&lt;br /&gt;
 Private Extern gethostbyaddr(__addr As In_addr, __len As Integer, __type As Integer) As Hostent&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 Public Sub Main()&lt;br /&gt;
 &lt;br /&gt;
  Dim ipstr As String&lt;br /&gt;
  Dim ip As New In_addr&lt;br /&gt;
  Dim hp As Hostent&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;FONT Color=gray&amp;gt;' ''Esempio pratico:''&amp;lt;/font&amp;gt;&lt;br /&gt;
  ipstr = &amp;quot;&amp;lt;FONT Color=red&amp;gt;127.0.0.1&amp;lt;/font&amp;gt;&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
  If inet_aton(ipstr, ip) &amp;lt; 1 Then Error.Raise(&amp;quot;Errore !&amp;quot;)&lt;br /&gt;
 &lt;br /&gt;
  hp = gethostbyaddr(ip, SizeOf(TypeOf(ip.s_addr)), AF_INET)&lt;br /&gt;
  If IsNull(hp) Then Error.Raise(&amp;quot;Errore !&amp;quot;)&lt;br /&gt;
  &lt;br /&gt;
  Print &amp;quot;Nome associato all'IP &amp;quot;; ipstr; &amp;quot; = \e[31m&amp;quot;; String@(hp.h_name)&lt;br /&gt;
  &lt;br /&gt;
 End&lt;br /&gt;
oppure il seguente codice più complesso:&lt;br /&gt;
 Private Const PORT_NO As Integer = 0&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 Library &amp;quot;libc:6&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 Public Struct sockaddr_in&lt;br /&gt;
   sin_ As Short&lt;br /&gt;
   sin_port As Short&lt;br /&gt;
   sin_addr As Integer&lt;br /&gt;
   sin_zero[8] As Byte&lt;br /&gt;
 End Struct&lt;br /&gt;
 &lt;br /&gt;
 Public Struct hostent&lt;br /&gt;
   h_name As Pointer&lt;br /&gt;
   h_aliases As Pointer&lt;br /&gt;
   h_addrtype As Integer&lt;br /&gt;
   h_length As Integer&lt;br /&gt;
   h_addr_list As Pointer&lt;br /&gt;
 End Struct&lt;br /&gt;
 &lt;br /&gt;
 Public Struct sockaddr&lt;br /&gt;
   sa_ As Short&lt;br /&gt;
   sa_data[14] As Byte&lt;br /&gt;
 End Struct&lt;br /&gt;
 &lt;br /&gt;
 Private Const IPPROTO_ICMP As Integer = 1&lt;br /&gt;
 Private Const AF_INET As Integer = 2&lt;br /&gt;
 Private Const SIGINT As Integer = 2&lt;br /&gt;
 Private Const SOCK_RAW As Integer = 3&lt;br /&gt;
 Private Const NI_MAXHOST As Integer = 1025&lt;br /&gt;
 Private Const NI_NAMEREQD As Integer = 8&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;FONT Color=gray&amp;gt;' ''struct hostent *gethostbyname (const char *__name)''&lt;br /&gt;
 ' ''Return entry from host data base for host with NAME.''&amp;lt;/font&amp;gt;&lt;br /&gt;
 Private Extern gethostbyname(__name As String) As Hostent&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;FONT Color=gray&amp;gt;' ''char *inet_ntoa (struct in_addr __in)''&lt;br /&gt;
 ' ''Convert Internet number in IN to ASCII representation.''&amp;lt;/font&amp;gt;&lt;br /&gt;
 Private Extern inet_ntoa(__in As Integer) As Pointer&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;FONT Color=gray&amp;gt;' ''in_addr_t inet_addr (const char *__cp)''&lt;br /&gt;
 ' ''Convert Internet host address from numbers-and-dots notation in CP into binary data in network byte order.''&amp;lt;/font&amp;gt;&lt;br /&gt;
 Private Extern inet_addr(__cp As Pointer) As Integer&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;FONT Color=gray&amp;gt;' ''int getnameinfo (const struct sockaddr *__restrict __sa, socklen_t __salen, char *__restrict __host, socklen_t __hostlen, char *__restrict __serv, socklen_t __servlen, int __flags)''&lt;br /&gt;
 ' ''Translate a socket address to a location and service name.''&amp;lt;/font&amp;gt;&lt;br /&gt;
 Private Extern getnameinfo(__sa As Sockaddr_in, __salen As Integer, __host As Pointer, __hostlen As Integer, __serv As Pointer, __servlen As Integer, __flags As Integer) As Integer&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 Public Sub Main()&lt;br /&gt;
 &lt;br /&gt;
  Dim addrlen As Integer&lt;br /&gt;
  Dim indirizzo As String&lt;br /&gt;
  Dim ip_addr As Pointer&lt;br /&gt;
  Dim addr_con As New Sockaddr_in&lt;br /&gt;
  Dim rev As Byte[]&lt;br /&gt;
 &lt;br /&gt;
  indirizzo = &amp;quot;&amp;lt;FONT Color=red&amp;gt;162.241.217.63&amp;lt;/font&amp;gt;&amp;quot;   &amp;lt;FONT Color=gray&amp;gt;' ''...un esempio.''&amp;lt;/font&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
  addrlen = Object.SizeOf(addr_con)&lt;br /&gt;
 &lt;br /&gt;
  ip_addr = Ricerca_DNS(indirizzo, addr_con)&lt;br /&gt;
 &lt;br /&gt;
  If ip_addr == 0 Then&lt;br /&gt;
    Print &amp;quot;Ricerca fallita: impossibile risolvere l'hostname !&amp;quot;&lt;br /&gt;
    Quit&lt;br /&gt;
  Endif&lt;br /&gt;
 &lt;br /&gt;
  rev = Risoluzione_DNS_Inversa(ip_addr)&lt;br /&gt;
 &lt;br /&gt;
  Print &amp;quot;\nTentativo di connessione a '&amp;quot;; indirizzo; &amp;quot;' IP: &amp;quot;; String@(ip_addr)&lt;br /&gt;
  Print &amp;quot;\nRisoluzione DNS inversa: &amp;quot;; rev.ToString(0, rev.Find(0))&lt;br /&gt;
 &lt;br /&gt;
 End&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 Private Function Ricerca_DNS(ind As String, con As Sockaddr_in) As Pointer ' Esegue una ricerca DNS&lt;br /&gt;
 &lt;br /&gt;
  Dim host_entity As Hostent&lt;br /&gt;
  Dim ip As Pointer&lt;br /&gt;
 &lt;br /&gt;
  Print &amp;quot;\nRisoluzione DNS...&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
  host_entity = gethostbyname(ind)&lt;br /&gt;
 &lt;br /&gt;
  ip = inet_ntoa(Int@(Pointer@(host_entity.h_addr_list)))  ' inet_ntoa(*(struct in_addr *) host_entity-&amp;gt;h_addr)&lt;br /&gt;
 &lt;br /&gt;
  con.sin_ = host_entity.h_addrtype&lt;br /&gt;
  con.sin_port = PORT_NO&lt;br /&gt;
  con.sin_addr = Long@(Pointer@(host_entity.h_addr_list))&lt;br /&gt;
 &lt;br /&gt;
  Return ip&lt;br /&gt;
 &lt;br /&gt;
 End&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 Private Function Risoluzione_DNS_Inversa(ip_addr As Pointer) As Byte[]&lt;br /&gt;
  &lt;br /&gt;
  Dim temp_addr As New Sockaddr_in&lt;br /&gt;
  Dim socklen, err As Integer&lt;br /&gt;
  Dim buf As Byte[]&lt;br /&gt;
  &lt;br /&gt;
  temp_addr.sin_ = AF_INET&lt;br /&gt;
  temp_addr.sin_addr = inet_addr(ip_addr)&lt;br /&gt;
  socklen = Object.sizeof(temp_addr)&lt;br /&gt;
  &lt;br /&gt;
  buf = New Byte[NI_MAXHOST]&lt;br /&gt;
  &lt;br /&gt;
  err = getnameinfo(temp_addr, socklen, buf.Data, buf.Count, 0, 0, NI_NAMEREQD)&lt;br /&gt;
  If err &amp;lt; 0 Then&lt;br /&gt;
    Print &amp;quot;Impossibile la risoluzione DNS inversa dell'hostname\n&amp;quot;&lt;br /&gt;
    Quit&lt;br /&gt;
  Endif&lt;br /&gt;
  &lt;br /&gt;
  Return buf&lt;br /&gt;
  &lt;br /&gt;
 End&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Ottenere l'indirizzo IP dal nome (se esistente) dell'host=&lt;br /&gt;
 Library &amp;quot;libc:6&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 Public Struct hostent&lt;br /&gt;
   h_name As Pointer&lt;br /&gt;
   h_aliases As Pointer&lt;br /&gt;
   h_addrtype As Integer&lt;br /&gt;
   h_length As Integer&lt;br /&gt;
   h_addr_list As Pointer&lt;br /&gt;
 End Struct&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;FONT Color=gray&amp;gt;' ''struct hostent *gethostbyname(const char *name)''&lt;br /&gt;
 ' ''Returns a structure of type hostent for the given host name.''&amp;lt;/font&amp;gt;&lt;br /&gt;
 Private Extern gethostbyname(idn As String) As Pointer&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;FONT Color=gray&amp;gt;' ''char *inet_ntoa (struct in_addr __in)''&lt;br /&gt;
 ' ''Convert Internet number in IN to ASCII representation.''&amp;lt;/font&amp;gt;&lt;br /&gt;
 Private Extern inet_ntoa(__in As Pointer) As Pointer&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 Public Sub Main()&lt;br /&gt;
 &lt;br /&gt;
  Dim host As Hostent&lt;br /&gt;
  Dim idn As String&lt;br /&gt;
  Dim ip As Pointer&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;FONT Color=gray&amp;gt;' ''Esempio pratico:''&amp;lt;/font&amp;gt;&lt;br /&gt;
  idn = &amp;quot;&amp;lt;FONT Color=red&amp;gt;localhost&amp;lt;/font&amp;gt;&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
  host = gethostbyname(idn)&lt;br /&gt;
  If isNull(host) Then Error.Raise(&amp;quot;Errore !&amp;quot;)&lt;br /&gt;
 &lt;br /&gt;
  ip = inet_ntoa(Long@(Pointer@(host.h_addr_list)))&lt;br /&gt;
 &lt;br /&gt;
  Print &amp;quot;IP associato al nome &amp;quot;; idn; &amp;quot; = \e[31m&amp;quot;; String@(ip)&lt;br /&gt;
 &lt;br /&gt;
 End&lt;/div&gt;</summary>
		<author><name>Vuott</name></author>
	</entry>
</feed>