<?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=Milio</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=Milio"/>
	<link rel="alternate" type="text/html" href="https://www.gambas-it.org/wiki/index.php/Speciale:Contributi/Milio"/>
	<updated>2026-10-23T07:38:11Z</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=GridBox&amp;diff=2549</id>
		<title>GridBox</title>
		<link rel="alternate" type="text/html" href="https://www.gambas-it.org/wiki/index.php?title=GridBox&amp;diff=2549"/>
		<updated>2010-11-04T20:27:43Z</updated>

		<summary type="html">&lt;p&gt;Milio: /* Busy */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Introduzione =&lt;br /&gt;
&lt;br /&gt;
Una GridBox è un componente non ufficiale ma molto valido per chi lavora spesso con i database. Questo componente, tutto made in Gambas-it.org grazie all'ottimo lavoro dell'utente Milio, permette di creare semplicemente una griglia collegata a un database, con pochissime righe di codice, e già pronta con comandi quali: salvataggio, inserimento, eliminazione, modifica.&lt;br /&gt;
&lt;br /&gt;
Una caratteristica interessante di questo componente è la possibilità di mantenere l'integrità dei dati, con l'aiuto di oggetti quali TextBox, ComboBox, CheckBox, ValueBox, ecc, per una corretta modifica/inserimento di record nel DataBase.&lt;br /&gt;
Altre caratteristiche sono la formattazione dei dati, mantenendo l'integrità del loro valore, formattazioni condizionate in stile foglio di calcolo, colonne di tipo Formula per facilitare calcoli su i vari record, e altro ancora.&lt;br /&gt;
&lt;br /&gt;
== Le Classi esportabili ==&lt;br /&gt;
&lt;br /&gt;
In questo componente abbiamo i seguenti oggetti che si possono utilizzare:&lt;br /&gt;
*GridBox&lt;br /&gt;
*Grid&lt;br /&gt;
*Conditional&lt;br /&gt;
*Cell&lt;br /&gt;
&lt;br /&gt;
== Simboli dell'oggetto GridBox ==&lt;br /&gt;
&lt;br /&gt;
==== Proprietà ====&lt;br /&gt;
===== Action =====&lt;br /&gt;
 Property Action As String&lt;br /&gt;
&lt;br /&gt;
===== AlwaysEditable =====&lt;br /&gt;
 Property AlwaysEditable As Boolean&lt;br /&gt;
&lt;br /&gt;
Imposta la griglia in modo che le celle siano sempre editabili.&lt;br /&gt;
Usando il Tab o le frecce, il focus verrà spostato solo sulle celle che hanno la proprietà ReadOnly impostata a False.&lt;br /&gt;
&lt;br /&gt;
===== AutoDataType =====&lt;br /&gt;
 Property AutoDataType As Boolean&lt;br /&gt;
&lt;br /&gt;
Imposta in automatico la proprietà DataType delle colonne di tipo Field in base al tipo di dato passatogli dal metodo LoadData.&lt;br /&gt;
&lt;br /&gt;
===== AutoNew =====&lt;br /&gt;
 Property AutoNew As Boolean&lt;br /&gt;
&lt;br /&gt;
Questa proprietà, legata alla proprietà AlwaysEditable, fa in modo che, spostandosi dall'ultima cella editabile dell'ultima riga della griglia, crei in automatico una nuova riga per l'inserimento di un nuovo record.&lt;br /&gt;
&lt;br /&gt;
===== Background =====&lt;br /&gt;
 Property Background As Integer&lt;br /&gt;
&lt;br /&gt;
Imposta il colore di fondo della griglia.&lt;br /&gt;
&lt;br /&gt;
===== Border =====&lt;br /&gt;
 Property Border As Integer&lt;br /&gt;
&lt;br /&gt;
===== Busy =====&lt;br /&gt;
 Property Busy As Boolean&lt;br /&gt;
&lt;br /&gt;
Questa proprietà serve a impostare la griglia in una fase di attesa. Ritorna utile quando la query da caricare è molto pesante.&lt;br /&gt;
&lt;br /&gt;
Un esempio di utilizzo potrebbe essere questo:&lt;br /&gt;
 Public Sub Caricodati()&lt;br /&gt;
   &lt;br /&gt;
   With Me.GridBox1&lt;br /&gt;
     .Busy = True&lt;br /&gt;
     .LoadData(&amp;lt;Query&amp;gt;)&lt;br /&gt;
     .Busy = False&lt;br /&gt;
   End With&lt;br /&gt;
 &lt;br /&gt;
 End&lt;br /&gt;
&lt;br /&gt;
===== Children =====&lt;br /&gt;
 Property Read Children As .ContainerChildren&lt;br /&gt;
&lt;br /&gt;
===== ClientH =====&lt;br /&gt;
 Property Read ClientH As Integer&lt;br /&gt;
&lt;br /&gt;
===== ClientHeight =====&lt;br /&gt;
 Property Read ClientHeight As Integer&lt;br /&gt;
&lt;br /&gt;
===== ClientW =====&lt;br /&gt;
 Property Read ClientW As Integer&lt;br /&gt;
&lt;br /&gt;
===== ClientWidth =====&lt;br /&gt;
 Property Read ClientWidth As Integer&lt;br /&gt;
&lt;br /&gt;
===== ClientX =====&lt;br /&gt;
 Property Read ClientX As Integer&lt;br /&gt;
&lt;br /&gt;
===== ClientY =====&lt;br /&gt;
 Property Read ClientY As Integer&lt;br /&gt;
&lt;br /&gt;
===== Color =====&lt;br /&gt;
 Property Read Color As Color (Virtual class)&lt;br /&gt;
&lt;br /&gt;
===== ColorRowAlternating =====&lt;br /&gt;
 Property ColorRowAlternating As Boolean&lt;br /&gt;
&lt;br /&gt;
===== Column =====&lt;br /&gt;
 Property Column As Integer&lt;br /&gt;
&lt;br /&gt;
===== Columns =====&lt;br /&gt;
 Property Read Columns As Columns (Virtual class)&lt;br /&gt;
&lt;br /&gt;
===== Connection =====&lt;br /&gt;
 Property Connection As Connection&lt;br /&gt;
&lt;br /&gt;
===== Cursor =====&lt;br /&gt;
 Property Cursor As Cursor&lt;br /&gt;
&lt;br /&gt;
===== DataMining =====&lt;br /&gt;
 Property DataMining As Boolean&lt;br /&gt;
&lt;br /&gt;
===== Design =====&lt;br /&gt;
 Property Design As Boolean&lt;br /&gt;
&lt;br /&gt;
===== Drop =====&lt;br /&gt;
 Property Drop As Boolean&lt;br /&gt;
&lt;br /&gt;
===== Enabled =====&lt;br /&gt;
 Property Enabled As Boolean&lt;br /&gt;
&lt;br /&gt;
===== Expand =====&lt;br /&gt;
 Property Expand As Boolean&lt;br /&gt;
&lt;br /&gt;
===== FieldKey =====&lt;br /&gt;
 Property FieldKey As String[]&lt;br /&gt;
&lt;br /&gt;
===== FieldReordering =====&lt;br /&gt;
 Property FieldReordering As String&lt;br /&gt;
&lt;br /&gt;
===== Font =====&lt;br /&gt;
 Property Font As Font&lt;br /&gt;
&lt;br /&gt;
===== Foreground =====&lt;br /&gt;
 Property Foreground As Integer&lt;br /&gt;
&lt;br /&gt;
===== GridOnly =====&lt;br /&gt;
 Property GridOnly As Boolean&lt;br /&gt;
&lt;br /&gt;
===== H =====&lt;br /&gt;
 Property H As Integer&lt;br /&gt;
&lt;br /&gt;
===== Handle =====&lt;br /&gt;
 Property Read Handle As Integer&lt;br /&gt;
&lt;br /&gt;
===== HasFocus =====&lt;br /&gt;
 Property Read HasFocus As Boolean&lt;br /&gt;
&lt;br /&gt;
===== Header =====&lt;br /&gt;
 Property Header As Integer&lt;br /&gt;
&lt;br /&gt;
===== Height =====&lt;br /&gt;
 Property Height As Integer&lt;br /&gt;
&lt;br /&gt;
===== Hovered =====&lt;br /&gt;
 Property Read Hovered As Boolean&lt;br /&gt;
&lt;br /&gt;
===== Id =====&lt;br /&gt;
 Property Read Id As Integer&lt;br /&gt;
&lt;br /&gt;
===== Ignore =====&lt;br /&gt;
 Property Ignore As Boolean&lt;br /&gt;
&lt;br /&gt;
===== KeyActivity =====&lt;br /&gt;
 Property KeyActivity As Boolean&lt;br /&gt;
&lt;br /&gt;
===== KeyGrid =====&lt;br /&gt;
 Property Read KeyGrid As KeyGrid (Virtual class)&lt;br /&gt;
&lt;br /&gt;
===== Left =====&lt;br /&gt;
 Property Left As Integer&lt;br /&gt;
&lt;br /&gt;
===== Mouse =====&lt;br /&gt;
 Property Mouse As Integer&lt;br /&gt;
&lt;br /&gt;
===== Name =====&lt;br /&gt;
 Property Name As String&lt;br /&gt;
&lt;br /&gt;
===== Next =====&lt;br /&gt;
 Property Next As Control&lt;br /&gt;
&lt;br /&gt;
===== Parent =====&lt;br /&gt;
 Property Read Parent As Container&lt;br /&gt;
&lt;br /&gt;
===== PicCheck =====&lt;br /&gt;
 Property PicCheck As Picture&lt;br /&gt;
&lt;br /&gt;
===== PicUncheck =====&lt;br /&gt;
 Property PicUncheck As Picture&lt;br /&gt;
&lt;br /&gt;
===== PopupMenu =====&lt;br /&gt;
 Property PopupMenu As String&lt;br /&gt;
&lt;br /&gt;
===== Previous =====&lt;br /&gt;
 Property Previous As Control&lt;br /&gt;
&lt;br /&gt;
===== Query =====&lt;br /&gt;
 Property Read Query As String[]&lt;br /&gt;
&lt;br /&gt;
===== ReadData =====&lt;br /&gt;
 Property Read ReadData As Result&lt;br /&gt;
&lt;br /&gt;
===== ReadOnly =====&lt;br /&gt;
 Property ReadOnly As Boolean&lt;br /&gt;
&lt;br /&gt;
===== Row =====&lt;br /&gt;
 Property Row As Integer&lt;br /&gt;
&lt;br /&gt;
===== RowSelected =====&lt;br /&gt;
 Property RowSelected As Integer[]&lt;br /&gt;
&lt;br /&gt;
===== Rows =====&lt;br /&gt;
 Property Read Rows As Rows (Virtual class)&lt;br /&gt;
&lt;br /&gt;
===== ScreenX =====&lt;br /&gt;
 Property Read ScreenX As Integer&lt;br /&gt;
&lt;br /&gt;
===== ScreenY =====&lt;br /&gt;
 Property Read ScreenY As Integer&lt;br /&gt;
&lt;br /&gt;
===== ScrollBar =====&lt;br /&gt;
 Property ScrollBar As Integer&lt;br /&gt;
&lt;br /&gt;
===== ScrollX =====&lt;br /&gt;
 Property ScrollX As Integer&lt;br /&gt;
&lt;br /&gt;
===== ScrollY =====&lt;br /&gt;
 Property ScrollY As Integer&lt;br /&gt;
&lt;br /&gt;
===== Table =====&lt;br /&gt;
 Property Read Table As Table&lt;br /&gt;
&lt;br /&gt;
===== TableName =====&lt;br /&gt;
 Property TableName As String&lt;br /&gt;
&lt;br /&gt;
===== Tag =====&lt;br /&gt;
 Property Tag As Variant&lt;br /&gt;
&lt;br /&gt;
===== TmpConnection =====&lt;br /&gt;
 Property Read TmpConnection As Connection&lt;br /&gt;
&lt;br /&gt;
===== Tooltip =====&lt;br /&gt;
 Property Tooltip As String&lt;br /&gt;
&lt;br /&gt;
===== Top =====&lt;br /&gt;
 Property Top As Integer&lt;br /&gt;
&lt;br /&gt;
===== Tracking =====&lt;br /&gt;
 Property Tracking As Boolean&lt;br /&gt;
&lt;br /&gt;
===== UpdateReording =====&lt;br /&gt;
 Property UpdateReording As Boolean&lt;br /&gt;
&lt;br /&gt;
===== Visible =====&lt;br /&gt;
 Property Visible As Boolean&lt;br /&gt;
&lt;br /&gt;
===== W =====&lt;br /&gt;
 Property W As Integer&lt;br /&gt;
&lt;br /&gt;
===== Width =====&lt;br /&gt;
 Property Width As Integer&lt;br /&gt;
&lt;br /&gt;
===== Window =====&lt;br /&gt;
 Property Read Window As Window&lt;br /&gt;
&lt;br /&gt;
===== X =====&lt;br /&gt;
 Property X As Integer&lt;br /&gt;
&lt;br /&gt;
===== Y =====&lt;br /&gt;
 Property Y As Integer&lt;br /&gt;
&lt;br /&gt;
==== Metodi ====&lt;br /&gt;
==== Eventi ====&lt;br /&gt;
&lt;br /&gt;
== Link utili ==&lt;br /&gt;
*[[Installazione]]&lt;br /&gt;
*[[Guida a Gridbox]]&lt;/div&gt;</summary>
		<author><name>Milio</name></author>
	</entry>
	<entry>
		<id>https://www.gambas-it.org/wiki/index.php?title=GridBox&amp;diff=2548</id>
		<title>GridBox</title>
		<link rel="alternate" type="text/html" href="https://www.gambas-it.org/wiki/index.php?title=GridBox&amp;diff=2548"/>
		<updated>2010-11-04T20:27:13Z</updated>

		<summary type="html">&lt;p&gt;Milio: /* Busy */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Introduzione =&lt;br /&gt;
&lt;br /&gt;
Una GridBox è un componente non ufficiale ma molto valido per chi lavora spesso con i database. Questo componente, tutto made in Gambas-it.org grazie all'ottimo lavoro dell'utente Milio, permette di creare semplicemente una griglia collegata a un database, con pochissime righe di codice, e già pronta con comandi quali: salvataggio, inserimento, eliminazione, modifica.&lt;br /&gt;
&lt;br /&gt;
Una caratteristica interessante di questo componente è la possibilità di mantenere l'integrità dei dati, con l'aiuto di oggetti quali TextBox, ComboBox, CheckBox, ValueBox, ecc, per una corretta modifica/inserimento di record nel DataBase.&lt;br /&gt;
Altre caratteristiche sono la formattazione dei dati, mantenendo l'integrità del loro valore, formattazioni condizionate in stile foglio di calcolo, colonne di tipo Formula per facilitare calcoli su i vari record, e altro ancora.&lt;br /&gt;
&lt;br /&gt;
== Le Classi esportabili ==&lt;br /&gt;
&lt;br /&gt;
In questo componente abbiamo i seguenti oggetti che si possono utilizzare:&lt;br /&gt;
*GridBox&lt;br /&gt;
*Grid&lt;br /&gt;
*Conditional&lt;br /&gt;
*Cell&lt;br /&gt;
&lt;br /&gt;
== Simboli dell'oggetto GridBox ==&lt;br /&gt;
&lt;br /&gt;
==== Proprietà ====&lt;br /&gt;
===== Action =====&lt;br /&gt;
 Property Action As String&lt;br /&gt;
&lt;br /&gt;
===== AlwaysEditable =====&lt;br /&gt;
 Property AlwaysEditable As Boolean&lt;br /&gt;
&lt;br /&gt;
Imposta la griglia in modo che le celle siano sempre editabili.&lt;br /&gt;
Usando il Tab o le frecce, il focus verrà spostato solo sulle celle che hanno la proprietà ReadOnly impostata a False.&lt;br /&gt;
&lt;br /&gt;
===== AutoDataType =====&lt;br /&gt;
 Property AutoDataType As Boolean&lt;br /&gt;
&lt;br /&gt;
Imposta in automatico la proprietà DataType delle colonne di tipo Field in base al tipo di dato passatogli dal metodo LoadData.&lt;br /&gt;
&lt;br /&gt;
===== AutoNew =====&lt;br /&gt;
 Property AutoNew As Boolean&lt;br /&gt;
&lt;br /&gt;
Questa proprietà, legata alla proprietà AlwaysEditable, fa in modo che, spostandosi dall'ultima cella editabile dell'ultima riga della griglia, crei in automatico una nuova riga per l'inserimento di un nuovo record.&lt;br /&gt;
&lt;br /&gt;
===== Background =====&lt;br /&gt;
 Property Background As Integer&lt;br /&gt;
&lt;br /&gt;
Imposta il colore di fondo della griglia.&lt;br /&gt;
&lt;br /&gt;
===== Border =====&lt;br /&gt;
 Property Border As Integer&lt;br /&gt;
&lt;br /&gt;
===== Busy =====&lt;br /&gt;
 Property Busy As Boolean&lt;br /&gt;
&lt;br /&gt;
Questa proprietà serve a impostare la griglia in una fase di attesa. Ritorna utile quando la query da caricare è molto pesante.&lt;br /&gt;
&lt;br /&gt;
Un esempio di utilizzo potrebbe essere questo:&lt;br /&gt;
 Public Sub Caricodati()&lt;br /&gt;
   &lt;br /&gt;
   With Me.GridBox1&lt;br /&gt;
     .Busy = True&lt;br /&gt;
     .LoadData(&amp;lt;Query&amp;gt;)&lt;br /&gt;
     .Busy = False&lt;br /&gt;
   End With&lt;br /&gt;
&lt;br /&gt;
 End&lt;br /&gt;
&lt;br /&gt;
===== Children =====&lt;br /&gt;
 Property Read Children As .ContainerChildren&lt;br /&gt;
&lt;br /&gt;
===== ClientH =====&lt;br /&gt;
 Property Read ClientH As Integer&lt;br /&gt;
&lt;br /&gt;
===== ClientHeight =====&lt;br /&gt;
 Property Read ClientHeight As Integer&lt;br /&gt;
&lt;br /&gt;
===== ClientW =====&lt;br /&gt;
 Property Read ClientW As Integer&lt;br /&gt;
&lt;br /&gt;
===== ClientWidth =====&lt;br /&gt;
 Property Read ClientWidth As Integer&lt;br /&gt;
&lt;br /&gt;
===== ClientX =====&lt;br /&gt;
 Property Read ClientX As Integer&lt;br /&gt;
&lt;br /&gt;
===== ClientY =====&lt;br /&gt;
 Property Read ClientY As Integer&lt;br /&gt;
&lt;br /&gt;
===== Color =====&lt;br /&gt;
 Property Read Color As Color (Virtual class)&lt;br /&gt;
&lt;br /&gt;
===== ColorRowAlternating =====&lt;br /&gt;
 Property ColorRowAlternating As Boolean&lt;br /&gt;
&lt;br /&gt;
===== Column =====&lt;br /&gt;
 Property Column As Integer&lt;br /&gt;
&lt;br /&gt;
===== Columns =====&lt;br /&gt;
 Property Read Columns As Columns (Virtual class)&lt;br /&gt;
&lt;br /&gt;
===== Connection =====&lt;br /&gt;
 Property Connection As Connection&lt;br /&gt;
&lt;br /&gt;
===== Cursor =====&lt;br /&gt;
 Property Cursor As Cursor&lt;br /&gt;
&lt;br /&gt;
===== DataMining =====&lt;br /&gt;
 Property DataMining As Boolean&lt;br /&gt;
&lt;br /&gt;
===== Design =====&lt;br /&gt;
 Property Design As Boolean&lt;br /&gt;
&lt;br /&gt;
===== Drop =====&lt;br /&gt;
 Property Drop As Boolean&lt;br /&gt;
&lt;br /&gt;
===== Enabled =====&lt;br /&gt;
 Property Enabled As Boolean&lt;br /&gt;
&lt;br /&gt;
===== Expand =====&lt;br /&gt;
 Property Expand As Boolean&lt;br /&gt;
&lt;br /&gt;
===== FieldKey =====&lt;br /&gt;
 Property FieldKey As String[]&lt;br /&gt;
&lt;br /&gt;
===== FieldReordering =====&lt;br /&gt;
 Property FieldReordering As String&lt;br /&gt;
&lt;br /&gt;
===== Font =====&lt;br /&gt;
 Property Font As Font&lt;br /&gt;
&lt;br /&gt;
===== Foreground =====&lt;br /&gt;
 Property Foreground As Integer&lt;br /&gt;
&lt;br /&gt;
===== GridOnly =====&lt;br /&gt;
 Property GridOnly As Boolean&lt;br /&gt;
&lt;br /&gt;
===== H =====&lt;br /&gt;
 Property H As Integer&lt;br /&gt;
&lt;br /&gt;
===== Handle =====&lt;br /&gt;
 Property Read Handle As Integer&lt;br /&gt;
&lt;br /&gt;
===== HasFocus =====&lt;br /&gt;
 Property Read HasFocus As Boolean&lt;br /&gt;
&lt;br /&gt;
===== Header =====&lt;br /&gt;
 Property Header As Integer&lt;br /&gt;
&lt;br /&gt;
===== Height =====&lt;br /&gt;
 Property Height As Integer&lt;br /&gt;
&lt;br /&gt;
===== Hovered =====&lt;br /&gt;
 Property Read Hovered As Boolean&lt;br /&gt;
&lt;br /&gt;
===== Id =====&lt;br /&gt;
 Property Read Id As Integer&lt;br /&gt;
&lt;br /&gt;
===== Ignore =====&lt;br /&gt;
 Property Ignore As Boolean&lt;br /&gt;
&lt;br /&gt;
===== KeyActivity =====&lt;br /&gt;
 Property KeyActivity As Boolean&lt;br /&gt;
&lt;br /&gt;
===== KeyGrid =====&lt;br /&gt;
 Property Read KeyGrid As KeyGrid (Virtual class)&lt;br /&gt;
&lt;br /&gt;
===== Left =====&lt;br /&gt;
 Property Left As Integer&lt;br /&gt;
&lt;br /&gt;
===== Mouse =====&lt;br /&gt;
 Property Mouse As Integer&lt;br /&gt;
&lt;br /&gt;
===== Name =====&lt;br /&gt;
 Property Name As String&lt;br /&gt;
&lt;br /&gt;
===== Next =====&lt;br /&gt;
 Property Next As Control&lt;br /&gt;
&lt;br /&gt;
===== Parent =====&lt;br /&gt;
 Property Read Parent As Container&lt;br /&gt;
&lt;br /&gt;
===== PicCheck =====&lt;br /&gt;
 Property PicCheck As Picture&lt;br /&gt;
&lt;br /&gt;
===== PicUncheck =====&lt;br /&gt;
 Property PicUncheck As Picture&lt;br /&gt;
&lt;br /&gt;
===== PopupMenu =====&lt;br /&gt;
 Property PopupMenu As String&lt;br /&gt;
&lt;br /&gt;
===== Previous =====&lt;br /&gt;
 Property Previous As Control&lt;br /&gt;
&lt;br /&gt;
===== Query =====&lt;br /&gt;
 Property Read Query As String[]&lt;br /&gt;
&lt;br /&gt;
===== ReadData =====&lt;br /&gt;
 Property Read ReadData As Result&lt;br /&gt;
&lt;br /&gt;
===== ReadOnly =====&lt;br /&gt;
 Property ReadOnly As Boolean&lt;br /&gt;
&lt;br /&gt;
===== Row =====&lt;br /&gt;
 Property Row As Integer&lt;br /&gt;
&lt;br /&gt;
===== RowSelected =====&lt;br /&gt;
 Property RowSelected As Integer[]&lt;br /&gt;
&lt;br /&gt;
===== Rows =====&lt;br /&gt;
 Property Read Rows As Rows (Virtual class)&lt;br /&gt;
&lt;br /&gt;
===== ScreenX =====&lt;br /&gt;
 Property Read ScreenX As Integer&lt;br /&gt;
&lt;br /&gt;
===== ScreenY =====&lt;br /&gt;
 Property Read ScreenY As Integer&lt;br /&gt;
&lt;br /&gt;
===== ScrollBar =====&lt;br /&gt;
 Property ScrollBar As Integer&lt;br /&gt;
&lt;br /&gt;
===== ScrollX =====&lt;br /&gt;
 Property ScrollX As Integer&lt;br /&gt;
&lt;br /&gt;
===== ScrollY =====&lt;br /&gt;
 Property ScrollY As Integer&lt;br /&gt;
&lt;br /&gt;
===== Table =====&lt;br /&gt;
 Property Read Table As Table&lt;br /&gt;
&lt;br /&gt;
===== TableName =====&lt;br /&gt;
 Property TableName As String&lt;br /&gt;
&lt;br /&gt;
===== Tag =====&lt;br /&gt;
 Property Tag As Variant&lt;br /&gt;
&lt;br /&gt;
===== TmpConnection =====&lt;br /&gt;
 Property Read TmpConnection As Connection&lt;br /&gt;
&lt;br /&gt;
===== Tooltip =====&lt;br /&gt;
 Property Tooltip As String&lt;br /&gt;
&lt;br /&gt;
===== Top =====&lt;br /&gt;
 Property Top As Integer&lt;br /&gt;
&lt;br /&gt;
===== Tracking =====&lt;br /&gt;
 Property Tracking As Boolean&lt;br /&gt;
&lt;br /&gt;
===== UpdateReording =====&lt;br /&gt;
 Property UpdateReording As Boolean&lt;br /&gt;
&lt;br /&gt;
===== Visible =====&lt;br /&gt;
 Property Visible As Boolean&lt;br /&gt;
&lt;br /&gt;
===== W =====&lt;br /&gt;
 Property W As Integer&lt;br /&gt;
&lt;br /&gt;
===== Width =====&lt;br /&gt;
 Property Width As Integer&lt;br /&gt;
&lt;br /&gt;
===== Window =====&lt;br /&gt;
 Property Read Window As Window&lt;br /&gt;
&lt;br /&gt;
===== X =====&lt;br /&gt;
 Property X As Integer&lt;br /&gt;
&lt;br /&gt;
===== Y =====&lt;br /&gt;
 Property Y As Integer&lt;br /&gt;
&lt;br /&gt;
==== Metodi ====&lt;br /&gt;
==== Eventi ====&lt;br /&gt;
&lt;br /&gt;
== Link utili ==&lt;br /&gt;
*[[Installazione]]&lt;br /&gt;
*[[Guida a Gridbox]]&lt;/div&gt;</summary>
		<author><name>Milio</name></author>
	</entry>
	<entry>
		<id>https://www.gambas-it.org/wiki/index.php?title=GridBox&amp;diff=2547</id>
		<title>GridBox</title>
		<link rel="alternate" type="text/html" href="https://www.gambas-it.org/wiki/index.php?title=GridBox&amp;diff=2547"/>
		<updated>2010-11-04T20:24:59Z</updated>

		<summary type="html">&lt;p&gt;Milio: /* Busy */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Introduzione =&lt;br /&gt;
&lt;br /&gt;
Una GridBox è un componente non ufficiale ma molto valido per chi lavora spesso con i database. Questo componente, tutto made in Gambas-it.org grazie all'ottimo lavoro dell'utente Milio, permette di creare semplicemente una griglia collegata a un database, con pochissime righe di codice, e già pronta con comandi quali: salvataggio, inserimento, eliminazione, modifica.&lt;br /&gt;
&lt;br /&gt;
Una caratteristica interessante di questo componente è la possibilità di mantenere l'integrità dei dati, con l'aiuto di oggetti quali TextBox, ComboBox, CheckBox, ValueBox, ecc, per una corretta modifica/inserimento di record nel DataBase.&lt;br /&gt;
Altre caratteristiche sono la formattazione dei dati, mantenendo l'integrità del loro valore, formattazioni condizionate in stile foglio di calcolo, colonne di tipo Formula per facilitare calcoli su i vari record, e altro ancora.&lt;br /&gt;
&lt;br /&gt;
== Le Classi esportabili ==&lt;br /&gt;
&lt;br /&gt;
In questo componente abbiamo i seguenti oggetti che si possono utilizzare:&lt;br /&gt;
*GridBox&lt;br /&gt;
*Grid&lt;br /&gt;
*Conditional&lt;br /&gt;
*Cell&lt;br /&gt;
&lt;br /&gt;
== Simboli dell'oggetto GridBox ==&lt;br /&gt;
&lt;br /&gt;
==== Proprietà ====&lt;br /&gt;
===== Action =====&lt;br /&gt;
 Property Action As String&lt;br /&gt;
&lt;br /&gt;
===== AlwaysEditable =====&lt;br /&gt;
 Property AlwaysEditable As Boolean&lt;br /&gt;
&lt;br /&gt;
Imposta la griglia in modo che le celle siano sempre editabili.&lt;br /&gt;
Usando il Tab o le frecce, il focus verrà spostato solo sulle celle che hanno la proprietà ReadOnly impostata a False.&lt;br /&gt;
&lt;br /&gt;
===== AutoDataType =====&lt;br /&gt;
 Property AutoDataType As Boolean&lt;br /&gt;
&lt;br /&gt;
Imposta in automatico la proprietà DataType delle colonne di tipo Field in base al tipo di dato passatogli dal metodo LoadData.&lt;br /&gt;
&lt;br /&gt;
===== AutoNew =====&lt;br /&gt;
 Property AutoNew As Boolean&lt;br /&gt;
&lt;br /&gt;
Questa proprietà, legata alla proprietà AlwaysEditable, fa in modo che, spostandosi dall'ultima cella editabile dell'ultima riga della griglia, crei in automatico una nuova riga per l'inserimento di un nuovo record.&lt;br /&gt;
&lt;br /&gt;
===== Background =====&lt;br /&gt;
 Property Background As Integer&lt;br /&gt;
&lt;br /&gt;
Imposta il colore di fondo della griglia.&lt;br /&gt;
&lt;br /&gt;
===== Border =====&lt;br /&gt;
 Property Border As Integer&lt;br /&gt;
&lt;br /&gt;
===== Busy =====&lt;br /&gt;
 Property Busy As Boolean&lt;br /&gt;
&lt;br /&gt;
Questa proprietà serve a impostare la griglia in una fase di attesa. Ritorna utile quando la query da caricare è molto pesante.&lt;br /&gt;
&lt;br /&gt;
===== Children =====&lt;br /&gt;
 Property Read Children As .ContainerChildren&lt;br /&gt;
&lt;br /&gt;
===== ClientH =====&lt;br /&gt;
 Property Read ClientH As Integer&lt;br /&gt;
&lt;br /&gt;
===== ClientHeight =====&lt;br /&gt;
 Property Read ClientHeight As Integer&lt;br /&gt;
&lt;br /&gt;
===== ClientW =====&lt;br /&gt;
 Property Read ClientW As Integer&lt;br /&gt;
&lt;br /&gt;
===== ClientWidth =====&lt;br /&gt;
 Property Read ClientWidth As Integer&lt;br /&gt;
&lt;br /&gt;
===== ClientX =====&lt;br /&gt;
 Property Read ClientX As Integer&lt;br /&gt;
&lt;br /&gt;
===== ClientY =====&lt;br /&gt;
 Property Read ClientY As Integer&lt;br /&gt;
&lt;br /&gt;
===== Color =====&lt;br /&gt;
 Property Read Color As Color (Virtual class)&lt;br /&gt;
&lt;br /&gt;
===== ColorRowAlternating =====&lt;br /&gt;
 Property ColorRowAlternating As Boolean&lt;br /&gt;
&lt;br /&gt;
===== Column =====&lt;br /&gt;
 Property Column As Integer&lt;br /&gt;
&lt;br /&gt;
===== Columns =====&lt;br /&gt;
 Property Read Columns As Columns (Virtual class)&lt;br /&gt;
&lt;br /&gt;
===== Connection =====&lt;br /&gt;
 Property Connection As Connection&lt;br /&gt;
&lt;br /&gt;
===== Cursor =====&lt;br /&gt;
 Property Cursor As Cursor&lt;br /&gt;
&lt;br /&gt;
===== DataMining =====&lt;br /&gt;
 Property DataMining As Boolean&lt;br /&gt;
&lt;br /&gt;
===== Design =====&lt;br /&gt;
 Property Design As Boolean&lt;br /&gt;
&lt;br /&gt;
===== Drop =====&lt;br /&gt;
 Property Drop As Boolean&lt;br /&gt;
&lt;br /&gt;
===== Enabled =====&lt;br /&gt;
 Property Enabled As Boolean&lt;br /&gt;
&lt;br /&gt;
===== Expand =====&lt;br /&gt;
 Property Expand As Boolean&lt;br /&gt;
&lt;br /&gt;
===== FieldKey =====&lt;br /&gt;
 Property FieldKey As String[]&lt;br /&gt;
&lt;br /&gt;
===== FieldReordering =====&lt;br /&gt;
 Property FieldReordering As String&lt;br /&gt;
&lt;br /&gt;
===== Font =====&lt;br /&gt;
 Property Font As Font&lt;br /&gt;
&lt;br /&gt;
===== Foreground =====&lt;br /&gt;
 Property Foreground As Integer&lt;br /&gt;
&lt;br /&gt;
===== GridOnly =====&lt;br /&gt;
 Property GridOnly As Boolean&lt;br /&gt;
&lt;br /&gt;
===== H =====&lt;br /&gt;
 Property H As Integer&lt;br /&gt;
&lt;br /&gt;
===== Handle =====&lt;br /&gt;
 Property Read Handle As Integer&lt;br /&gt;
&lt;br /&gt;
===== HasFocus =====&lt;br /&gt;
 Property Read HasFocus As Boolean&lt;br /&gt;
&lt;br /&gt;
===== Header =====&lt;br /&gt;
 Property Header As Integer&lt;br /&gt;
&lt;br /&gt;
===== Height =====&lt;br /&gt;
 Property Height As Integer&lt;br /&gt;
&lt;br /&gt;
===== Hovered =====&lt;br /&gt;
 Property Read Hovered As Boolean&lt;br /&gt;
&lt;br /&gt;
===== Id =====&lt;br /&gt;
 Property Read Id As Integer&lt;br /&gt;
&lt;br /&gt;
===== Ignore =====&lt;br /&gt;
 Property Ignore As Boolean&lt;br /&gt;
&lt;br /&gt;
===== KeyActivity =====&lt;br /&gt;
 Property KeyActivity As Boolean&lt;br /&gt;
&lt;br /&gt;
===== KeyGrid =====&lt;br /&gt;
 Property Read KeyGrid As KeyGrid (Virtual class)&lt;br /&gt;
&lt;br /&gt;
===== Left =====&lt;br /&gt;
 Property Left As Integer&lt;br /&gt;
&lt;br /&gt;
===== Mouse =====&lt;br /&gt;
 Property Mouse As Integer&lt;br /&gt;
&lt;br /&gt;
===== Name =====&lt;br /&gt;
 Property Name As String&lt;br /&gt;
&lt;br /&gt;
===== Next =====&lt;br /&gt;
 Property Next As Control&lt;br /&gt;
&lt;br /&gt;
===== Parent =====&lt;br /&gt;
 Property Read Parent As Container&lt;br /&gt;
&lt;br /&gt;
===== PicCheck =====&lt;br /&gt;
 Property PicCheck As Picture&lt;br /&gt;
&lt;br /&gt;
===== PicUncheck =====&lt;br /&gt;
 Property PicUncheck As Picture&lt;br /&gt;
&lt;br /&gt;
===== PopupMenu =====&lt;br /&gt;
 Property PopupMenu As String&lt;br /&gt;
&lt;br /&gt;
===== Previous =====&lt;br /&gt;
 Property Previous As Control&lt;br /&gt;
&lt;br /&gt;
===== Query =====&lt;br /&gt;
 Property Read Query As String[]&lt;br /&gt;
&lt;br /&gt;
===== ReadData =====&lt;br /&gt;
 Property Read ReadData As Result&lt;br /&gt;
&lt;br /&gt;
===== ReadOnly =====&lt;br /&gt;
 Property ReadOnly As Boolean&lt;br /&gt;
&lt;br /&gt;
===== Row =====&lt;br /&gt;
 Property Row As Integer&lt;br /&gt;
&lt;br /&gt;
===== RowSelected =====&lt;br /&gt;
 Property RowSelected As Integer[]&lt;br /&gt;
&lt;br /&gt;
===== Rows =====&lt;br /&gt;
 Property Read Rows As Rows (Virtual class)&lt;br /&gt;
&lt;br /&gt;
===== ScreenX =====&lt;br /&gt;
 Property Read ScreenX As Integer&lt;br /&gt;
&lt;br /&gt;
===== ScreenY =====&lt;br /&gt;
 Property Read ScreenY As Integer&lt;br /&gt;
&lt;br /&gt;
===== ScrollBar =====&lt;br /&gt;
 Property ScrollBar As Integer&lt;br /&gt;
&lt;br /&gt;
===== ScrollX =====&lt;br /&gt;
 Property ScrollX As Integer&lt;br /&gt;
&lt;br /&gt;
===== ScrollY =====&lt;br /&gt;
 Property ScrollY As Integer&lt;br /&gt;
&lt;br /&gt;
===== Table =====&lt;br /&gt;
 Property Read Table As Table&lt;br /&gt;
&lt;br /&gt;
===== TableName =====&lt;br /&gt;
 Property TableName As String&lt;br /&gt;
&lt;br /&gt;
===== Tag =====&lt;br /&gt;
 Property Tag As Variant&lt;br /&gt;
&lt;br /&gt;
===== TmpConnection =====&lt;br /&gt;
 Property Read TmpConnection As Connection&lt;br /&gt;
&lt;br /&gt;
===== Tooltip =====&lt;br /&gt;
 Property Tooltip As String&lt;br /&gt;
&lt;br /&gt;
===== Top =====&lt;br /&gt;
 Property Top As Integer&lt;br /&gt;
&lt;br /&gt;
===== Tracking =====&lt;br /&gt;
 Property Tracking As Boolean&lt;br /&gt;
&lt;br /&gt;
===== UpdateReording =====&lt;br /&gt;
 Property UpdateReording As Boolean&lt;br /&gt;
&lt;br /&gt;
===== Visible =====&lt;br /&gt;
 Property Visible As Boolean&lt;br /&gt;
&lt;br /&gt;
===== W =====&lt;br /&gt;
 Property W As Integer&lt;br /&gt;
&lt;br /&gt;
===== Width =====&lt;br /&gt;
 Property Width As Integer&lt;br /&gt;
&lt;br /&gt;
===== Window =====&lt;br /&gt;
 Property Read Window As Window&lt;br /&gt;
&lt;br /&gt;
===== X =====&lt;br /&gt;
 Property X As Integer&lt;br /&gt;
&lt;br /&gt;
===== Y =====&lt;br /&gt;
 Property Y As Integer&lt;br /&gt;
&lt;br /&gt;
==== Metodi ====&lt;br /&gt;
==== Eventi ====&lt;br /&gt;
&lt;br /&gt;
== Link utili ==&lt;br /&gt;
*[[Installazione]]&lt;br /&gt;
*[[Guida a Gridbox]]&lt;/div&gt;</summary>
		<author><name>Milio</name></author>
	</entry>
	<entry>
		<id>https://www.gambas-it.org/wiki/index.php?title=GridBox&amp;diff=2546</id>
		<title>GridBox</title>
		<link rel="alternate" type="text/html" href="https://www.gambas-it.org/wiki/index.php?title=GridBox&amp;diff=2546"/>
		<updated>2010-11-04T20:22:50Z</updated>

		<summary type="html">&lt;p&gt;Milio: /* Background */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Introduzione =&lt;br /&gt;
&lt;br /&gt;
Una GridBox è un componente non ufficiale ma molto valido per chi lavora spesso con i database. Questo componente, tutto made in Gambas-it.org grazie all'ottimo lavoro dell'utente Milio, permette di creare semplicemente una griglia collegata a un database, con pochissime righe di codice, e già pronta con comandi quali: salvataggio, inserimento, eliminazione, modifica.&lt;br /&gt;
&lt;br /&gt;
Una caratteristica interessante di questo componente è la possibilità di mantenere l'integrità dei dati, con l'aiuto di oggetti quali TextBox, ComboBox, CheckBox, ValueBox, ecc, per una corretta modifica/inserimento di record nel DataBase.&lt;br /&gt;
Altre caratteristiche sono la formattazione dei dati, mantenendo l'integrità del loro valore, formattazioni condizionate in stile foglio di calcolo, colonne di tipo Formula per facilitare calcoli su i vari record, e altro ancora.&lt;br /&gt;
&lt;br /&gt;
== Le Classi esportabili ==&lt;br /&gt;
&lt;br /&gt;
In questo componente abbiamo i seguenti oggetti che si possono utilizzare:&lt;br /&gt;
*GridBox&lt;br /&gt;
*Grid&lt;br /&gt;
*Conditional&lt;br /&gt;
*Cell&lt;br /&gt;
&lt;br /&gt;
== Simboli dell'oggetto GridBox ==&lt;br /&gt;
&lt;br /&gt;
==== Proprietà ====&lt;br /&gt;
===== Action =====&lt;br /&gt;
 Property Action As String&lt;br /&gt;
&lt;br /&gt;
===== AlwaysEditable =====&lt;br /&gt;
 Property AlwaysEditable As Boolean&lt;br /&gt;
&lt;br /&gt;
Imposta la griglia in modo che le celle siano sempre editabili.&lt;br /&gt;
Usando il Tab o le frecce, il focus verrà spostato solo sulle celle che hanno la proprietà ReadOnly impostata a False.&lt;br /&gt;
&lt;br /&gt;
===== AutoDataType =====&lt;br /&gt;
 Property AutoDataType As Boolean&lt;br /&gt;
&lt;br /&gt;
Imposta in automatico la proprietà DataType delle colonne di tipo Field in base al tipo di dato passatogli dal metodo LoadData.&lt;br /&gt;
&lt;br /&gt;
===== AutoNew =====&lt;br /&gt;
 Property AutoNew As Boolean&lt;br /&gt;
&lt;br /&gt;
Questa proprietà, legata alla proprietà AlwaysEditable, fa in modo che, spostandosi dall'ultima cella editabile dell'ultima riga della griglia, crei in automatico una nuova riga per l'inserimento di un nuovo record.&lt;br /&gt;
&lt;br /&gt;
===== Background =====&lt;br /&gt;
 Property Background As Integer&lt;br /&gt;
&lt;br /&gt;
Imposta il colore di fondo della griglia.&lt;br /&gt;
&lt;br /&gt;
===== Border =====&lt;br /&gt;
 Property Border As Integer&lt;br /&gt;
&lt;br /&gt;
===== Busy =====&lt;br /&gt;
 Property Busy As Boolean&lt;br /&gt;
&lt;br /&gt;
===== Children =====&lt;br /&gt;
 Property Read Children As .ContainerChildren&lt;br /&gt;
&lt;br /&gt;
===== ClientH =====&lt;br /&gt;
 Property Read ClientH As Integer&lt;br /&gt;
&lt;br /&gt;
===== ClientHeight =====&lt;br /&gt;
 Property Read ClientHeight As Integer&lt;br /&gt;
&lt;br /&gt;
===== ClientW =====&lt;br /&gt;
 Property Read ClientW As Integer&lt;br /&gt;
&lt;br /&gt;
===== ClientWidth =====&lt;br /&gt;
 Property Read ClientWidth As Integer&lt;br /&gt;
&lt;br /&gt;
===== ClientX =====&lt;br /&gt;
 Property Read ClientX As Integer&lt;br /&gt;
&lt;br /&gt;
===== ClientY =====&lt;br /&gt;
 Property Read ClientY As Integer&lt;br /&gt;
&lt;br /&gt;
===== Color =====&lt;br /&gt;
 Property Read Color As Color (Virtual class)&lt;br /&gt;
&lt;br /&gt;
===== ColorRowAlternating =====&lt;br /&gt;
 Property ColorRowAlternating As Boolean&lt;br /&gt;
&lt;br /&gt;
===== Column =====&lt;br /&gt;
 Property Column As Integer&lt;br /&gt;
&lt;br /&gt;
===== Columns =====&lt;br /&gt;
 Property Read Columns As Columns (Virtual class)&lt;br /&gt;
&lt;br /&gt;
===== Connection =====&lt;br /&gt;
 Property Connection As Connection&lt;br /&gt;
&lt;br /&gt;
===== Cursor =====&lt;br /&gt;
 Property Cursor As Cursor&lt;br /&gt;
&lt;br /&gt;
===== DataMining =====&lt;br /&gt;
 Property DataMining As Boolean&lt;br /&gt;
&lt;br /&gt;
===== Design =====&lt;br /&gt;
 Property Design As Boolean&lt;br /&gt;
&lt;br /&gt;
===== Drop =====&lt;br /&gt;
 Property Drop As Boolean&lt;br /&gt;
&lt;br /&gt;
===== Enabled =====&lt;br /&gt;
 Property Enabled As Boolean&lt;br /&gt;
&lt;br /&gt;
===== Expand =====&lt;br /&gt;
 Property Expand As Boolean&lt;br /&gt;
&lt;br /&gt;
===== FieldKey =====&lt;br /&gt;
 Property FieldKey As String[]&lt;br /&gt;
&lt;br /&gt;
===== FieldReordering =====&lt;br /&gt;
 Property FieldReordering As String&lt;br /&gt;
&lt;br /&gt;
===== Font =====&lt;br /&gt;
 Property Font As Font&lt;br /&gt;
&lt;br /&gt;
===== Foreground =====&lt;br /&gt;
 Property Foreground As Integer&lt;br /&gt;
&lt;br /&gt;
===== GridOnly =====&lt;br /&gt;
 Property GridOnly As Boolean&lt;br /&gt;
&lt;br /&gt;
===== H =====&lt;br /&gt;
 Property H As Integer&lt;br /&gt;
&lt;br /&gt;
===== Handle =====&lt;br /&gt;
 Property Read Handle As Integer&lt;br /&gt;
&lt;br /&gt;
===== HasFocus =====&lt;br /&gt;
 Property Read HasFocus As Boolean&lt;br /&gt;
&lt;br /&gt;
===== Header =====&lt;br /&gt;
 Property Header As Integer&lt;br /&gt;
&lt;br /&gt;
===== Height =====&lt;br /&gt;
 Property Height As Integer&lt;br /&gt;
&lt;br /&gt;
===== Hovered =====&lt;br /&gt;
 Property Read Hovered As Boolean&lt;br /&gt;
&lt;br /&gt;
===== Id =====&lt;br /&gt;
 Property Read Id As Integer&lt;br /&gt;
&lt;br /&gt;
===== Ignore =====&lt;br /&gt;
 Property Ignore As Boolean&lt;br /&gt;
&lt;br /&gt;
===== KeyActivity =====&lt;br /&gt;
 Property KeyActivity As Boolean&lt;br /&gt;
&lt;br /&gt;
===== KeyGrid =====&lt;br /&gt;
 Property Read KeyGrid As KeyGrid (Virtual class)&lt;br /&gt;
&lt;br /&gt;
===== Left =====&lt;br /&gt;
 Property Left As Integer&lt;br /&gt;
&lt;br /&gt;
===== Mouse =====&lt;br /&gt;
 Property Mouse As Integer&lt;br /&gt;
&lt;br /&gt;
===== Name =====&lt;br /&gt;
 Property Name As String&lt;br /&gt;
&lt;br /&gt;
===== Next =====&lt;br /&gt;
 Property Next As Control&lt;br /&gt;
&lt;br /&gt;
===== Parent =====&lt;br /&gt;
 Property Read Parent As Container&lt;br /&gt;
&lt;br /&gt;
===== PicCheck =====&lt;br /&gt;
 Property PicCheck As Picture&lt;br /&gt;
&lt;br /&gt;
===== PicUncheck =====&lt;br /&gt;
 Property PicUncheck As Picture&lt;br /&gt;
&lt;br /&gt;
===== PopupMenu =====&lt;br /&gt;
 Property PopupMenu As String&lt;br /&gt;
&lt;br /&gt;
===== Previous =====&lt;br /&gt;
 Property Previous As Control&lt;br /&gt;
&lt;br /&gt;
===== Query =====&lt;br /&gt;
 Property Read Query As String[]&lt;br /&gt;
&lt;br /&gt;
===== ReadData =====&lt;br /&gt;
 Property Read ReadData As Result&lt;br /&gt;
&lt;br /&gt;
===== ReadOnly =====&lt;br /&gt;
 Property ReadOnly As Boolean&lt;br /&gt;
&lt;br /&gt;
===== Row =====&lt;br /&gt;
 Property Row As Integer&lt;br /&gt;
&lt;br /&gt;
===== RowSelected =====&lt;br /&gt;
 Property RowSelected As Integer[]&lt;br /&gt;
&lt;br /&gt;
===== Rows =====&lt;br /&gt;
 Property Read Rows As Rows (Virtual class)&lt;br /&gt;
&lt;br /&gt;
===== ScreenX =====&lt;br /&gt;
 Property Read ScreenX As Integer&lt;br /&gt;
&lt;br /&gt;
===== ScreenY =====&lt;br /&gt;
 Property Read ScreenY As Integer&lt;br /&gt;
&lt;br /&gt;
===== ScrollBar =====&lt;br /&gt;
 Property ScrollBar As Integer&lt;br /&gt;
&lt;br /&gt;
===== ScrollX =====&lt;br /&gt;
 Property ScrollX As Integer&lt;br /&gt;
&lt;br /&gt;
===== ScrollY =====&lt;br /&gt;
 Property ScrollY As Integer&lt;br /&gt;
&lt;br /&gt;
===== Table =====&lt;br /&gt;
 Property Read Table As Table&lt;br /&gt;
&lt;br /&gt;
===== TableName =====&lt;br /&gt;
 Property TableName As String&lt;br /&gt;
&lt;br /&gt;
===== Tag =====&lt;br /&gt;
 Property Tag As Variant&lt;br /&gt;
&lt;br /&gt;
===== TmpConnection =====&lt;br /&gt;
 Property Read TmpConnection As Connection&lt;br /&gt;
&lt;br /&gt;
===== Tooltip =====&lt;br /&gt;
 Property Tooltip As String&lt;br /&gt;
&lt;br /&gt;
===== Top =====&lt;br /&gt;
 Property Top As Integer&lt;br /&gt;
&lt;br /&gt;
===== Tracking =====&lt;br /&gt;
 Property Tracking As Boolean&lt;br /&gt;
&lt;br /&gt;
===== UpdateReording =====&lt;br /&gt;
 Property UpdateReording As Boolean&lt;br /&gt;
&lt;br /&gt;
===== Visible =====&lt;br /&gt;
 Property Visible As Boolean&lt;br /&gt;
&lt;br /&gt;
===== W =====&lt;br /&gt;
 Property W As Integer&lt;br /&gt;
&lt;br /&gt;
===== Width =====&lt;br /&gt;
 Property Width As Integer&lt;br /&gt;
&lt;br /&gt;
===== Window =====&lt;br /&gt;
 Property Read Window As Window&lt;br /&gt;
&lt;br /&gt;
===== X =====&lt;br /&gt;
 Property X As Integer&lt;br /&gt;
&lt;br /&gt;
===== Y =====&lt;br /&gt;
 Property Y As Integer&lt;br /&gt;
&lt;br /&gt;
==== Metodi ====&lt;br /&gt;
==== Eventi ====&lt;br /&gt;
&lt;br /&gt;
== Link utili ==&lt;br /&gt;
*[[Installazione]]&lt;br /&gt;
*[[Guida a Gridbox]]&lt;/div&gt;</summary>
		<author><name>Milio</name></author>
	</entry>
	<entry>
		<id>https://www.gambas-it.org/wiki/index.php?title=GridBox&amp;diff=2545</id>
		<title>GridBox</title>
		<link rel="alternate" type="text/html" href="https://www.gambas-it.org/wiki/index.php?title=GridBox&amp;diff=2545"/>
		<updated>2010-11-04T20:22:11Z</updated>

		<summary type="html">&lt;p&gt;Milio: /* AutoNew */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Introduzione =&lt;br /&gt;
&lt;br /&gt;
Una GridBox è un componente non ufficiale ma molto valido per chi lavora spesso con i database. Questo componente, tutto made in Gambas-it.org grazie all'ottimo lavoro dell'utente Milio, permette di creare semplicemente una griglia collegata a un database, con pochissime righe di codice, e già pronta con comandi quali: salvataggio, inserimento, eliminazione, modifica.&lt;br /&gt;
&lt;br /&gt;
Una caratteristica interessante di questo componente è la possibilità di mantenere l'integrità dei dati, con l'aiuto di oggetti quali TextBox, ComboBox, CheckBox, ValueBox, ecc, per una corretta modifica/inserimento di record nel DataBase.&lt;br /&gt;
Altre caratteristiche sono la formattazione dei dati, mantenendo l'integrità del loro valore, formattazioni condizionate in stile foglio di calcolo, colonne di tipo Formula per facilitare calcoli su i vari record, e altro ancora.&lt;br /&gt;
&lt;br /&gt;
== Le Classi esportabili ==&lt;br /&gt;
&lt;br /&gt;
In questo componente abbiamo i seguenti oggetti che si possono utilizzare:&lt;br /&gt;
*GridBox&lt;br /&gt;
*Grid&lt;br /&gt;
*Conditional&lt;br /&gt;
*Cell&lt;br /&gt;
&lt;br /&gt;
== Simboli dell'oggetto GridBox ==&lt;br /&gt;
&lt;br /&gt;
==== Proprietà ====&lt;br /&gt;
===== Action =====&lt;br /&gt;
 Property Action As String&lt;br /&gt;
&lt;br /&gt;
===== AlwaysEditable =====&lt;br /&gt;
 Property AlwaysEditable As Boolean&lt;br /&gt;
&lt;br /&gt;
Imposta la griglia in modo che le celle siano sempre editabili.&lt;br /&gt;
Usando il Tab o le frecce, il focus verrà spostato solo sulle celle che hanno la proprietà ReadOnly impostata a False.&lt;br /&gt;
&lt;br /&gt;
===== AutoDataType =====&lt;br /&gt;
 Property AutoDataType As Boolean&lt;br /&gt;
&lt;br /&gt;
Imposta in automatico la proprietà DataType delle colonne di tipo Field in base al tipo di dato passatogli dal metodo LoadData.&lt;br /&gt;
&lt;br /&gt;
===== AutoNew =====&lt;br /&gt;
 Property AutoNew As Boolean&lt;br /&gt;
&lt;br /&gt;
Questa proprietà, legata alla proprietà AlwaysEditable, fa in modo che, spostandosi dall'ultima cella editabile dell'ultima riga della griglia, crei in automatico una nuova riga per l'inserimento di un nuovo record.&lt;br /&gt;
&lt;br /&gt;
===== Background =====&lt;br /&gt;
 Property Background As Integer&lt;br /&gt;
&lt;br /&gt;
===== Border =====&lt;br /&gt;
 Property Border As Integer&lt;br /&gt;
&lt;br /&gt;
===== Busy =====&lt;br /&gt;
 Property Busy As Boolean&lt;br /&gt;
&lt;br /&gt;
===== Children =====&lt;br /&gt;
 Property Read Children As .ContainerChildren&lt;br /&gt;
&lt;br /&gt;
===== ClientH =====&lt;br /&gt;
 Property Read ClientH As Integer&lt;br /&gt;
&lt;br /&gt;
===== ClientHeight =====&lt;br /&gt;
 Property Read ClientHeight As Integer&lt;br /&gt;
&lt;br /&gt;
===== ClientW =====&lt;br /&gt;
 Property Read ClientW As Integer&lt;br /&gt;
&lt;br /&gt;
===== ClientWidth =====&lt;br /&gt;
 Property Read ClientWidth As Integer&lt;br /&gt;
&lt;br /&gt;
===== ClientX =====&lt;br /&gt;
 Property Read ClientX As Integer&lt;br /&gt;
&lt;br /&gt;
===== ClientY =====&lt;br /&gt;
 Property Read ClientY As Integer&lt;br /&gt;
&lt;br /&gt;
===== Color =====&lt;br /&gt;
 Property Read Color As Color (Virtual class)&lt;br /&gt;
&lt;br /&gt;
===== ColorRowAlternating =====&lt;br /&gt;
 Property ColorRowAlternating As Boolean&lt;br /&gt;
&lt;br /&gt;
===== Column =====&lt;br /&gt;
 Property Column As Integer&lt;br /&gt;
&lt;br /&gt;
===== Columns =====&lt;br /&gt;
 Property Read Columns As Columns (Virtual class)&lt;br /&gt;
&lt;br /&gt;
===== Connection =====&lt;br /&gt;
 Property Connection As Connection&lt;br /&gt;
&lt;br /&gt;
===== Cursor =====&lt;br /&gt;
 Property Cursor As Cursor&lt;br /&gt;
&lt;br /&gt;
===== DataMining =====&lt;br /&gt;
 Property DataMining As Boolean&lt;br /&gt;
&lt;br /&gt;
===== Design =====&lt;br /&gt;
 Property Design As Boolean&lt;br /&gt;
&lt;br /&gt;
===== Drop =====&lt;br /&gt;
 Property Drop As Boolean&lt;br /&gt;
&lt;br /&gt;
===== Enabled =====&lt;br /&gt;
 Property Enabled As Boolean&lt;br /&gt;
&lt;br /&gt;
===== Expand =====&lt;br /&gt;
 Property Expand As Boolean&lt;br /&gt;
&lt;br /&gt;
===== FieldKey =====&lt;br /&gt;
 Property FieldKey As String[]&lt;br /&gt;
&lt;br /&gt;
===== FieldReordering =====&lt;br /&gt;
 Property FieldReordering As String&lt;br /&gt;
&lt;br /&gt;
===== Font =====&lt;br /&gt;
 Property Font As Font&lt;br /&gt;
&lt;br /&gt;
===== Foreground =====&lt;br /&gt;
 Property Foreground As Integer&lt;br /&gt;
&lt;br /&gt;
===== GridOnly =====&lt;br /&gt;
 Property GridOnly As Boolean&lt;br /&gt;
&lt;br /&gt;
===== H =====&lt;br /&gt;
 Property H As Integer&lt;br /&gt;
&lt;br /&gt;
===== Handle =====&lt;br /&gt;
 Property Read Handle As Integer&lt;br /&gt;
&lt;br /&gt;
===== HasFocus =====&lt;br /&gt;
 Property Read HasFocus As Boolean&lt;br /&gt;
&lt;br /&gt;
===== Header =====&lt;br /&gt;
 Property Header As Integer&lt;br /&gt;
&lt;br /&gt;
===== Height =====&lt;br /&gt;
 Property Height As Integer&lt;br /&gt;
&lt;br /&gt;
===== Hovered =====&lt;br /&gt;
 Property Read Hovered As Boolean&lt;br /&gt;
&lt;br /&gt;
===== Id =====&lt;br /&gt;
 Property Read Id As Integer&lt;br /&gt;
&lt;br /&gt;
===== Ignore =====&lt;br /&gt;
 Property Ignore As Boolean&lt;br /&gt;
&lt;br /&gt;
===== KeyActivity =====&lt;br /&gt;
 Property KeyActivity As Boolean&lt;br /&gt;
&lt;br /&gt;
===== KeyGrid =====&lt;br /&gt;
 Property Read KeyGrid As KeyGrid (Virtual class)&lt;br /&gt;
&lt;br /&gt;
===== Left =====&lt;br /&gt;
 Property Left As Integer&lt;br /&gt;
&lt;br /&gt;
===== Mouse =====&lt;br /&gt;
 Property Mouse As Integer&lt;br /&gt;
&lt;br /&gt;
===== Name =====&lt;br /&gt;
 Property Name As String&lt;br /&gt;
&lt;br /&gt;
===== Next =====&lt;br /&gt;
 Property Next As Control&lt;br /&gt;
&lt;br /&gt;
===== Parent =====&lt;br /&gt;
 Property Read Parent As Container&lt;br /&gt;
&lt;br /&gt;
===== PicCheck =====&lt;br /&gt;
 Property PicCheck As Picture&lt;br /&gt;
&lt;br /&gt;
===== PicUncheck =====&lt;br /&gt;
 Property PicUncheck As Picture&lt;br /&gt;
&lt;br /&gt;
===== PopupMenu =====&lt;br /&gt;
 Property PopupMenu As String&lt;br /&gt;
&lt;br /&gt;
===== Previous =====&lt;br /&gt;
 Property Previous As Control&lt;br /&gt;
&lt;br /&gt;
===== Query =====&lt;br /&gt;
 Property Read Query As String[]&lt;br /&gt;
&lt;br /&gt;
===== ReadData =====&lt;br /&gt;
 Property Read ReadData As Result&lt;br /&gt;
&lt;br /&gt;
===== ReadOnly =====&lt;br /&gt;
 Property ReadOnly As Boolean&lt;br /&gt;
&lt;br /&gt;
===== Row =====&lt;br /&gt;
 Property Row As Integer&lt;br /&gt;
&lt;br /&gt;
===== RowSelected =====&lt;br /&gt;
 Property RowSelected As Integer[]&lt;br /&gt;
&lt;br /&gt;
===== Rows =====&lt;br /&gt;
 Property Read Rows As Rows (Virtual class)&lt;br /&gt;
&lt;br /&gt;
===== ScreenX =====&lt;br /&gt;
 Property Read ScreenX As Integer&lt;br /&gt;
&lt;br /&gt;
===== ScreenY =====&lt;br /&gt;
 Property Read ScreenY As Integer&lt;br /&gt;
&lt;br /&gt;
===== ScrollBar =====&lt;br /&gt;
 Property ScrollBar As Integer&lt;br /&gt;
&lt;br /&gt;
===== ScrollX =====&lt;br /&gt;
 Property ScrollX As Integer&lt;br /&gt;
&lt;br /&gt;
===== ScrollY =====&lt;br /&gt;
 Property ScrollY As Integer&lt;br /&gt;
&lt;br /&gt;
===== Table =====&lt;br /&gt;
 Property Read Table As Table&lt;br /&gt;
&lt;br /&gt;
===== TableName =====&lt;br /&gt;
 Property TableName As String&lt;br /&gt;
&lt;br /&gt;
===== Tag =====&lt;br /&gt;
 Property Tag As Variant&lt;br /&gt;
&lt;br /&gt;
===== TmpConnection =====&lt;br /&gt;
 Property Read TmpConnection As Connection&lt;br /&gt;
&lt;br /&gt;
===== Tooltip =====&lt;br /&gt;
 Property Tooltip As String&lt;br /&gt;
&lt;br /&gt;
===== Top =====&lt;br /&gt;
 Property Top As Integer&lt;br /&gt;
&lt;br /&gt;
===== Tracking =====&lt;br /&gt;
 Property Tracking As Boolean&lt;br /&gt;
&lt;br /&gt;
===== UpdateReording =====&lt;br /&gt;
 Property UpdateReording As Boolean&lt;br /&gt;
&lt;br /&gt;
===== Visible =====&lt;br /&gt;
 Property Visible As Boolean&lt;br /&gt;
&lt;br /&gt;
===== W =====&lt;br /&gt;
 Property W As Integer&lt;br /&gt;
&lt;br /&gt;
===== Width =====&lt;br /&gt;
 Property Width As Integer&lt;br /&gt;
&lt;br /&gt;
===== Window =====&lt;br /&gt;
 Property Read Window As Window&lt;br /&gt;
&lt;br /&gt;
===== X =====&lt;br /&gt;
 Property X As Integer&lt;br /&gt;
&lt;br /&gt;
===== Y =====&lt;br /&gt;
 Property Y As Integer&lt;br /&gt;
&lt;br /&gt;
==== Metodi ====&lt;br /&gt;
==== Eventi ====&lt;br /&gt;
&lt;br /&gt;
== Link utili ==&lt;br /&gt;
*[[Installazione]]&lt;br /&gt;
*[[Guida a Gridbox]]&lt;/div&gt;</summary>
		<author><name>Milio</name></author>
	</entry>
	<entry>
		<id>https://www.gambas-it.org/wiki/index.php?title=GridBox&amp;diff=2544</id>
		<title>GridBox</title>
		<link rel="alternate" type="text/html" href="https://www.gambas-it.org/wiki/index.php?title=GridBox&amp;diff=2544"/>
		<updated>2010-11-04T20:21:40Z</updated>

		<summary type="html">&lt;p&gt;Milio: /* AutoNew */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Introduzione =&lt;br /&gt;
&lt;br /&gt;
Una GridBox è un componente non ufficiale ma molto valido per chi lavora spesso con i database. Questo componente, tutto made in Gambas-it.org grazie all'ottimo lavoro dell'utente Milio, permette di creare semplicemente una griglia collegata a un database, con pochissime righe di codice, e già pronta con comandi quali: salvataggio, inserimento, eliminazione, modifica.&lt;br /&gt;
&lt;br /&gt;
Una caratteristica interessante di questo componente è la possibilità di mantenere l'integrità dei dati, con l'aiuto di oggetti quali TextBox, ComboBox, CheckBox, ValueBox, ecc, per una corretta modifica/inserimento di record nel DataBase.&lt;br /&gt;
Altre caratteristiche sono la formattazione dei dati, mantenendo l'integrità del loro valore, formattazioni condizionate in stile foglio di calcolo, colonne di tipo Formula per facilitare calcoli su i vari record, e altro ancora.&lt;br /&gt;
&lt;br /&gt;
== Le Classi esportabili ==&lt;br /&gt;
&lt;br /&gt;
In questo componente abbiamo i seguenti oggetti che si possono utilizzare:&lt;br /&gt;
*GridBox&lt;br /&gt;
*Grid&lt;br /&gt;
*Conditional&lt;br /&gt;
*Cell&lt;br /&gt;
&lt;br /&gt;
== Simboli dell'oggetto GridBox ==&lt;br /&gt;
&lt;br /&gt;
==== Proprietà ====&lt;br /&gt;
===== Action =====&lt;br /&gt;
 Property Action As String&lt;br /&gt;
&lt;br /&gt;
===== AlwaysEditable =====&lt;br /&gt;
 Property AlwaysEditable As Boolean&lt;br /&gt;
&lt;br /&gt;
Imposta la griglia in modo che le celle siano sempre editabili.&lt;br /&gt;
Usando il Tab o le frecce, il focus verrà spostato solo sulle celle che hanno la proprietà ReadOnly impostata a False.&lt;br /&gt;
&lt;br /&gt;
===== AutoDataType =====&lt;br /&gt;
 Property AutoDataType As Boolean&lt;br /&gt;
&lt;br /&gt;
Imposta in automatico la proprietà DataType delle colonne di tipo Field in base al tipo di dato passatogli dal metodo LoadData.&lt;br /&gt;
&lt;br /&gt;
===== AutoNew =====&lt;br /&gt;
 Property AutoNew As Boolean&lt;br /&gt;
&lt;br /&gt;
Questa proprietà, legata alla proprietà AlwayEditable, fa in modo che, spostandosi dall'ultima cella editabile dell'ultima riga della griglia, crei in automatico una nuova riga per l'inserimento di un nuovo record.&lt;br /&gt;
&lt;br /&gt;
===== Background =====&lt;br /&gt;
 Property Background As Integer&lt;br /&gt;
&lt;br /&gt;
===== Border =====&lt;br /&gt;
 Property Border As Integer&lt;br /&gt;
&lt;br /&gt;
===== Busy =====&lt;br /&gt;
 Property Busy As Boolean&lt;br /&gt;
&lt;br /&gt;
===== Children =====&lt;br /&gt;
 Property Read Children As .ContainerChildren&lt;br /&gt;
&lt;br /&gt;
===== ClientH =====&lt;br /&gt;
 Property Read ClientH As Integer&lt;br /&gt;
&lt;br /&gt;
===== ClientHeight =====&lt;br /&gt;
 Property Read ClientHeight As Integer&lt;br /&gt;
&lt;br /&gt;
===== ClientW =====&lt;br /&gt;
 Property Read ClientW As Integer&lt;br /&gt;
&lt;br /&gt;
===== ClientWidth =====&lt;br /&gt;
 Property Read ClientWidth As Integer&lt;br /&gt;
&lt;br /&gt;
===== ClientX =====&lt;br /&gt;
 Property Read ClientX As Integer&lt;br /&gt;
&lt;br /&gt;
===== ClientY =====&lt;br /&gt;
 Property Read ClientY As Integer&lt;br /&gt;
&lt;br /&gt;
===== Color =====&lt;br /&gt;
 Property Read Color As Color (Virtual class)&lt;br /&gt;
&lt;br /&gt;
===== ColorRowAlternating =====&lt;br /&gt;
 Property ColorRowAlternating As Boolean&lt;br /&gt;
&lt;br /&gt;
===== Column =====&lt;br /&gt;
 Property Column As Integer&lt;br /&gt;
&lt;br /&gt;
===== Columns =====&lt;br /&gt;
 Property Read Columns As Columns (Virtual class)&lt;br /&gt;
&lt;br /&gt;
===== Connection =====&lt;br /&gt;
 Property Connection As Connection&lt;br /&gt;
&lt;br /&gt;
===== Cursor =====&lt;br /&gt;
 Property Cursor As Cursor&lt;br /&gt;
&lt;br /&gt;
===== DataMining =====&lt;br /&gt;
 Property DataMining As Boolean&lt;br /&gt;
&lt;br /&gt;
===== Design =====&lt;br /&gt;
 Property Design As Boolean&lt;br /&gt;
&lt;br /&gt;
===== Drop =====&lt;br /&gt;
 Property Drop As Boolean&lt;br /&gt;
&lt;br /&gt;
===== Enabled =====&lt;br /&gt;
 Property Enabled As Boolean&lt;br /&gt;
&lt;br /&gt;
===== Expand =====&lt;br /&gt;
 Property Expand As Boolean&lt;br /&gt;
&lt;br /&gt;
===== FieldKey =====&lt;br /&gt;
 Property FieldKey As String[]&lt;br /&gt;
&lt;br /&gt;
===== FieldReordering =====&lt;br /&gt;
 Property FieldReordering As String&lt;br /&gt;
&lt;br /&gt;
===== Font =====&lt;br /&gt;
 Property Font As Font&lt;br /&gt;
&lt;br /&gt;
===== Foreground =====&lt;br /&gt;
 Property Foreground As Integer&lt;br /&gt;
&lt;br /&gt;
===== GridOnly =====&lt;br /&gt;
 Property GridOnly As Boolean&lt;br /&gt;
&lt;br /&gt;
===== H =====&lt;br /&gt;
 Property H As Integer&lt;br /&gt;
&lt;br /&gt;
===== Handle =====&lt;br /&gt;
 Property Read Handle As Integer&lt;br /&gt;
&lt;br /&gt;
===== HasFocus =====&lt;br /&gt;
 Property Read HasFocus As Boolean&lt;br /&gt;
&lt;br /&gt;
===== Header =====&lt;br /&gt;
 Property Header As Integer&lt;br /&gt;
&lt;br /&gt;
===== Height =====&lt;br /&gt;
 Property Height As Integer&lt;br /&gt;
&lt;br /&gt;
===== Hovered =====&lt;br /&gt;
 Property Read Hovered As Boolean&lt;br /&gt;
&lt;br /&gt;
===== Id =====&lt;br /&gt;
 Property Read Id As Integer&lt;br /&gt;
&lt;br /&gt;
===== Ignore =====&lt;br /&gt;
 Property Ignore As Boolean&lt;br /&gt;
&lt;br /&gt;
===== KeyActivity =====&lt;br /&gt;
 Property KeyActivity As Boolean&lt;br /&gt;
&lt;br /&gt;
===== KeyGrid =====&lt;br /&gt;
 Property Read KeyGrid As KeyGrid (Virtual class)&lt;br /&gt;
&lt;br /&gt;
===== Left =====&lt;br /&gt;
 Property Left As Integer&lt;br /&gt;
&lt;br /&gt;
===== Mouse =====&lt;br /&gt;
 Property Mouse As Integer&lt;br /&gt;
&lt;br /&gt;
===== Name =====&lt;br /&gt;
 Property Name As String&lt;br /&gt;
&lt;br /&gt;
===== Next =====&lt;br /&gt;
 Property Next As Control&lt;br /&gt;
&lt;br /&gt;
===== Parent =====&lt;br /&gt;
 Property Read Parent As Container&lt;br /&gt;
&lt;br /&gt;
===== PicCheck =====&lt;br /&gt;
 Property PicCheck As Picture&lt;br /&gt;
&lt;br /&gt;
===== PicUncheck =====&lt;br /&gt;
 Property PicUncheck As Picture&lt;br /&gt;
&lt;br /&gt;
===== PopupMenu =====&lt;br /&gt;
 Property PopupMenu As String&lt;br /&gt;
&lt;br /&gt;
===== Previous =====&lt;br /&gt;
 Property Previous As Control&lt;br /&gt;
&lt;br /&gt;
===== Query =====&lt;br /&gt;
 Property Read Query As String[]&lt;br /&gt;
&lt;br /&gt;
===== ReadData =====&lt;br /&gt;
 Property Read ReadData As Result&lt;br /&gt;
&lt;br /&gt;
===== ReadOnly =====&lt;br /&gt;
 Property ReadOnly As Boolean&lt;br /&gt;
&lt;br /&gt;
===== Row =====&lt;br /&gt;
 Property Row As Integer&lt;br /&gt;
&lt;br /&gt;
===== RowSelected =====&lt;br /&gt;
 Property RowSelected As Integer[]&lt;br /&gt;
&lt;br /&gt;
===== Rows =====&lt;br /&gt;
 Property Read Rows As Rows (Virtual class)&lt;br /&gt;
&lt;br /&gt;
===== ScreenX =====&lt;br /&gt;
 Property Read ScreenX As Integer&lt;br /&gt;
&lt;br /&gt;
===== ScreenY =====&lt;br /&gt;
 Property Read ScreenY As Integer&lt;br /&gt;
&lt;br /&gt;
===== ScrollBar =====&lt;br /&gt;
 Property ScrollBar As Integer&lt;br /&gt;
&lt;br /&gt;
===== ScrollX =====&lt;br /&gt;
 Property ScrollX As Integer&lt;br /&gt;
&lt;br /&gt;
===== ScrollY =====&lt;br /&gt;
 Property ScrollY As Integer&lt;br /&gt;
&lt;br /&gt;
===== Table =====&lt;br /&gt;
 Property Read Table As Table&lt;br /&gt;
&lt;br /&gt;
===== TableName =====&lt;br /&gt;
 Property TableName As String&lt;br /&gt;
&lt;br /&gt;
===== Tag =====&lt;br /&gt;
 Property Tag As Variant&lt;br /&gt;
&lt;br /&gt;
===== TmpConnection =====&lt;br /&gt;
 Property Read TmpConnection As Connection&lt;br /&gt;
&lt;br /&gt;
===== Tooltip =====&lt;br /&gt;
 Property Tooltip As String&lt;br /&gt;
&lt;br /&gt;
===== Top =====&lt;br /&gt;
 Property Top As Integer&lt;br /&gt;
&lt;br /&gt;
===== Tracking =====&lt;br /&gt;
 Property Tracking As Boolean&lt;br /&gt;
&lt;br /&gt;
===== UpdateReording =====&lt;br /&gt;
 Property UpdateReording As Boolean&lt;br /&gt;
&lt;br /&gt;
===== Visible =====&lt;br /&gt;
 Property Visible As Boolean&lt;br /&gt;
&lt;br /&gt;
===== W =====&lt;br /&gt;
 Property W As Integer&lt;br /&gt;
&lt;br /&gt;
===== Width =====&lt;br /&gt;
 Property Width As Integer&lt;br /&gt;
&lt;br /&gt;
===== Window =====&lt;br /&gt;
 Property Read Window As Window&lt;br /&gt;
&lt;br /&gt;
===== X =====&lt;br /&gt;
 Property X As Integer&lt;br /&gt;
&lt;br /&gt;
===== Y =====&lt;br /&gt;
 Property Y As Integer&lt;br /&gt;
&lt;br /&gt;
==== Metodi ====&lt;br /&gt;
==== Eventi ====&lt;br /&gt;
&lt;br /&gt;
== Link utili ==&lt;br /&gt;
*[[Installazione]]&lt;br /&gt;
*[[Guida a Gridbox]]&lt;/div&gt;</summary>
		<author><name>Milio</name></author>
	</entry>
	<entry>
		<id>https://www.gambas-it.org/wiki/index.php?title=GridBox&amp;diff=2543</id>
		<title>GridBox</title>
		<link rel="alternate" type="text/html" href="https://www.gambas-it.org/wiki/index.php?title=GridBox&amp;diff=2543"/>
		<updated>2010-11-04T20:19:44Z</updated>

		<summary type="html">&lt;p&gt;Milio: /* AutoDataType */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Introduzione =&lt;br /&gt;
&lt;br /&gt;
Una GridBox è un componente non ufficiale ma molto valido per chi lavora spesso con i database. Questo componente, tutto made in Gambas-it.org grazie all'ottimo lavoro dell'utente Milio, permette di creare semplicemente una griglia collegata a un database, con pochissime righe di codice, e già pronta con comandi quali: salvataggio, inserimento, eliminazione, modifica.&lt;br /&gt;
&lt;br /&gt;
Una caratteristica interessante di questo componente è la possibilità di mantenere l'integrità dei dati, con l'aiuto di oggetti quali TextBox, ComboBox, CheckBox, ValueBox, ecc, per una corretta modifica/inserimento di record nel DataBase.&lt;br /&gt;
Altre caratteristiche sono la formattazione dei dati, mantenendo l'integrità del loro valore, formattazioni condizionate in stile foglio di calcolo, colonne di tipo Formula per facilitare calcoli su i vari record, e altro ancora.&lt;br /&gt;
&lt;br /&gt;
== Le Classi esportabili ==&lt;br /&gt;
&lt;br /&gt;
In questo componente abbiamo i seguenti oggetti che si possono utilizzare:&lt;br /&gt;
*GridBox&lt;br /&gt;
*Grid&lt;br /&gt;
*Conditional&lt;br /&gt;
*Cell&lt;br /&gt;
&lt;br /&gt;
== Simboli dell'oggetto GridBox ==&lt;br /&gt;
&lt;br /&gt;
==== Proprietà ====&lt;br /&gt;
===== Action =====&lt;br /&gt;
 Property Action As String&lt;br /&gt;
&lt;br /&gt;
===== AlwaysEditable =====&lt;br /&gt;
 Property AlwaysEditable As Boolean&lt;br /&gt;
&lt;br /&gt;
Imposta la griglia in modo che le celle siano sempre editabili.&lt;br /&gt;
Usando il Tab o le frecce, il focus verrà spostato solo sulle celle che hanno la proprietà ReadOnly impostata a False.&lt;br /&gt;
&lt;br /&gt;
===== AutoDataType =====&lt;br /&gt;
 Property AutoDataType As Boolean&lt;br /&gt;
&lt;br /&gt;
Imposta in automatico la proprietà DataType delle colonne di tipo Field in base al tipo di dato passatogli dal metodo LoadData.&lt;br /&gt;
&lt;br /&gt;
===== AutoNew =====&lt;br /&gt;
 Property AutoNew As Boolean&lt;br /&gt;
&lt;br /&gt;
===== Background =====&lt;br /&gt;
 Property Background As Integer&lt;br /&gt;
&lt;br /&gt;
===== Border =====&lt;br /&gt;
 Property Border As Integer&lt;br /&gt;
&lt;br /&gt;
===== Busy =====&lt;br /&gt;
 Property Busy As Boolean&lt;br /&gt;
&lt;br /&gt;
===== Children =====&lt;br /&gt;
 Property Read Children As .ContainerChildren&lt;br /&gt;
&lt;br /&gt;
===== ClientH =====&lt;br /&gt;
 Property Read ClientH As Integer&lt;br /&gt;
&lt;br /&gt;
===== ClientHeight =====&lt;br /&gt;
 Property Read ClientHeight As Integer&lt;br /&gt;
&lt;br /&gt;
===== ClientW =====&lt;br /&gt;
 Property Read ClientW As Integer&lt;br /&gt;
&lt;br /&gt;
===== ClientWidth =====&lt;br /&gt;
 Property Read ClientWidth As Integer&lt;br /&gt;
&lt;br /&gt;
===== ClientX =====&lt;br /&gt;
 Property Read ClientX As Integer&lt;br /&gt;
&lt;br /&gt;
===== ClientY =====&lt;br /&gt;
 Property Read ClientY As Integer&lt;br /&gt;
&lt;br /&gt;
===== Color =====&lt;br /&gt;
 Property Read Color As Color (Virtual class)&lt;br /&gt;
&lt;br /&gt;
===== ColorRowAlternating =====&lt;br /&gt;
 Property ColorRowAlternating As Boolean&lt;br /&gt;
&lt;br /&gt;
===== Column =====&lt;br /&gt;
 Property Column As Integer&lt;br /&gt;
&lt;br /&gt;
===== Columns =====&lt;br /&gt;
 Property Read Columns As Columns (Virtual class)&lt;br /&gt;
&lt;br /&gt;
===== Connection =====&lt;br /&gt;
 Property Connection As Connection&lt;br /&gt;
&lt;br /&gt;
===== Cursor =====&lt;br /&gt;
 Property Cursor As Cursor&lt;br /&gt;
&lt;br /&gt;
===== DataMining =====&lt;br /&gt;
 Property DataMining As Boolean&lt;br /&gt;
&lt;br /&gt;
===== Design =====&lt;br /&gt;
 Property Design As Boolean&lt;br /&gt;
&lt;br /&gt;
===== Drop =====&lt;br /&gt;
 Property Drop As Boolean&lt;br /&gt;
&lt;br /&gt;
===== Enabled =====&lt;br /&gt;
 Property Enabled As Boolean&lt;br /&gt;
&lt;br /&gt;
===== Expand =====&lt;br /&gt;
 Property Expand As Boolean&lt;br /&gt;
&lt;br /&gt;
===== FieldKey =====&lt;br /&gt;
 Property FieldKey As String[]&lt;br /&gt;
&lt;br /&gt;
===== FieldReordering =====&lt;br /&gt;
 Property FieldReordering As String&lt;br /&gt;
&lt;br /&gt;
===== Font =====&lt;br /&gt;
 Property Font As Font&lt;br /&gt;
&lt;br /&gt;
===== Foreground =====&lt;br /&gt;
 Property Foreground As Integer&lt;br /&gt;
&lt;br /&gt;
===== GridOnly =====&lt;br /&gt;
 Property GridOnly As Boolean&lt;br /&gt;
&lt;br /&gt;
===== H =====&lt;br /&gt;
 Property H As Integer&lt;br /&gt;
&lt;br /&gt;
===== Handle =====&lt;br /&gt;
 Property Read Handle As Integer&lt;br /&gt;
&lt;br /&gt;
===== HasFocus =====&lt;br /&gt;
 Property Read HasFocus As Boolean&lt;br /&gt;
&lt;br /&gt;
===== Header =====&lt;br /&gt;
 Property Header As Integer&lt;br /&gt;
&lt;br /&gt;
===== Height =====&lt;br /&gt;
 Property Height As Integer&lt;br /&gt;
&lt;br /&gt;
===== Hovered =====&lt;br /&gt;
 Property Read Hovered As Boolean&lt;br /&gt;
&lt;br /&gt;
===== Id =====&lt;br /&gt;
 Property Read Id As Integer&lt;br /&gt;
&lt;br /&gt;
===== Ignore =====&lt;br /&gt;
 Property Ignore As Boolean&lt;br /&gt;
&lt;br /&gt;
===== KeyActivity =====&lt;br /&gt;
 Property KeyActivity As Boolean&lt;br /&gt;
&lt;br /&gt;
===== KeyGrid =====&lt;br /&gt;
 Property Read KeyGrid As KeyGrid (Virtual class)&lt;br /&gt;
&lt;br /&gt;
===== Left =====&lt;br /&gt;
 Property Left As Integer&lt;br /&gt;
&lt;br /&gt;
===== Mouse =====&lt;br /&gt;
 Property Mouse As Integer&lt;br /&gt;
&lt;br /&gt;
===== Name =====&lt;br /&gt;
 Property Name As String&lt;br /&gt;
&lt;br /&gt;
===== Next =====&lt;br /&gt;
 Property Next As Control&lt;br /&gt;
&lt;br /&gt;
===== Parent =====&lt;br /&gt;
 Property Read Parent As Container&lt;br /&gt;
&lt;br /&gt;
===== PicCheck =====&lt;br /&gt;
 Property PicCheck As Picture&lt;br /&gt;
&lt;br /&gt;
===== PicUncheck =====&lt;br /&gt;
 Property PicUncheck As Picture&lt;br /&gt;
&lt;br /&gt;
===== PopupMenu =====&lt;br /&gt;
 Property PopupMenu As String&lt;br /&gt;
&lt;br /&gt;
===== Previous =====&lt;br /&gt;
 Property Previous As Control&lt;br /&gt;
&lt;br /&gt;
===== Query =====&lt;br /&gt;
 Property Read Query As String[]&lt;br /&gt;
&lt;br /&gt;
===== ReadData =====&lt;br /&gt;
 Property Read ReadData As Result&lt;br /&gt;
&lt;br /&gt;
===== ReadOnly =====&lt;br /&gt;
 Property ReadOnly As Boolean&lt;br /&gt;
&lt;br /&gt;
===== Row =====&lt;br /&gt;
 Property Row As Integer&lt;br /&gt;
&lt;br /&gt;
===== RowSelected =====&lt;br /&gt;
 Property RowSelected As Integer[]&lt;br /&gt;
&lt;br /&gt;
===== Rows =====&lt;br /&gt;
 Property Read Rows As Rows (Virtual class)&lt;br /&gt;
&lt;br /&gt;
===== ScreenX =====&lt;br /&gt;
 Property Read ScreenX As Integer&lt;br /&gt;
&lt;br /&gt;
===== ScreenY =====&lt;br /&gt;
 Property Read ScreenY As Integer&lt;br /&gt;
&lt;br /&gt;
===== ScrollBar =====&lt;br /&gt;
 Property ScrollBar As Integer&lt;br /&gt;
&lt;br /&gt;
===== ScrollX =====&lt;br /&gt;
 Property ScrollX As Integer&lt;br /&gt;
&lt;br /&gt;
===== ScrollY =====&lt;br /&gt;
 Property ScrollY As Integer&lt;br /&gt;
&lt;br /&gt;
===== Table =====&lt;br /&gt;
 Property Read Table As Table&lt;br /&gt;
&lt;br /&gt;
===== TableName =====&lt;br /&gt;
 Property TableName As String&lt;br /&gt;
&lt;br /&gt;
===== Tag =====&lt;br /&gt;
 Property Tag As Variant&lt;br /&gt;
&lt;br /&gt;
===== TmpConnection =====&lt;br /&gt;
 Property Read TmpConnection As Connection&lt;br /&gt;
&lt;br /&gt;
===== Tooltip =====&lt;br /&gt;
 Property Tooltip As String&lt;br /&gt;
&lt;br /&gt;
===== Top =====&lt;br /&gt;
 Property Top As Integer&lt;br /&gt;
&lt;br /&gt;
===== Tracking =====&lt;br /&gt;
 Property Tracking As Boolean&lt;br /&gt;
&lt;br /&gt;
===== UpdateReording =====&lt;br /&gt;
 Property UpdateReording As Boolean&lt;br /&gt;
&lt;br /&gt;
===== Visible =====&lt;br /&gt;
 Property Visible As Boolean&lt;br /&gt;
&lt;br /&gt;
===== W =====&lt;br /&gt;
 Property W As Integer&lt;br /&gt;
&lt;br /&gt;
===== Width =====&lt;br /&gt;
 Property Width As Integer&lt;br /&gt;
&lt;br /&gt;
===== Window =====&lt;br /&gt;
 Property Read Window As Window&lt;br /&gt;
&lt;br /&gt;
===== X =====&lt;br /&gt;
 Property X As Integer&lt;br /&gt;
&lt;br /&gt;
===== Y =====&lt;br /&gt;
 Property Y As Integer&lt;br /&gt;
&lt;br /&gt;
==== Metodi ====&lt;br /&gt;
==== Eventi ====&lt;br /&gt;
&lt;br /&gt;
== Link utili ==&lt;br /&gt;
*[[Installazione]]&lt;br /&gt;
*[[Guida a Gridbox]]&lt;/div&gt;</summary>
		<author><name>Milio</name></author>
	</entry>
	<entry>
		<id>https://www.gambas-it.org/wiki/index.php?title=GridBox&amp;diff=2536</id>
		<title>GridBox</title>
		<link rel="alternate" type="text/html" href="https://www.gambas-it.org/wiki/index.php?title=GridBox&amp;diff=2536"/>
		<updated>2010-11-02T23:59:49Z</updated>

		<summary type="html">&lt;p&gt;Milio: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduzione ==&lt;br /&gt;
&lt;br /&gt;
Una GridBox è un componente non ufficiale ma molto valido per chi lavora spesso con i database. Questo componente, tutto made in Gambas-it.org grazie all'ottimo lavoro dell'utente Milio, permette di creare semplicemente una griglia collegata a un database, con pochissime righe di codice, e già pronta con comandi quali: salvataggio, inserimento, eliminazione, modifica.&lt;br /&gt;
Una caratteristica interessante di questo componente è la possibilità di mantenere l'integrità dei dati, con l'aiuto di oggetti quali TextBox, ComboBox, CheckBox, ValueBox, ecc, per una corretta modifica/inserimento di record nel DataBase.&lt;br /&gt;
Altre caratteristiche sono la formattazione dei dati, mantenendo l'integrità del loro valore, formattazioni condizionate in stile foglio di calcolo, colonne di tipo Formula per facilitare calcoli su i vari record, e altro ancora.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Link utili ==&lt;br /&gt;
*[[Installazione]]&lt;br /&gt;
*[[Guida a Gridbox]]&lt;/div&gt;</summary>
		<author><name>Milio</name></author>
	</entry>
	<entry>
		<id>https://www.gambas-it.org/wiki/index.php?title=GridBox&amp;diff=2534</id>
		<title>GridBox</title>
		<link rel="alternate" type="text/html" href="https://www.gambas-it.org/wiki/index.php?title=GridBox&amp;diff=2534"/>
		<updated>2010-10-14T20:58:08Z</updated>

		<summary type="html">&lt;p&gt;Milio: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduzione ==&lt;br /&gt;
&lt;br /&gt;
Una GridBox è un componente non ufficiale ma molto valido per chi lavora spesso con i database. Questo componente, tutto made in Gambas-it.org grazie all'ottimo lavoro dell'utente Milio, permette di creare semplicemente una griglia collegata a un database, con pochissime righe di codice, e già pronta con comandi quali: salvataggio, inserimento, eliminazione, etc.&lt;br /&gt;
Una caratteristica interessante di questo componente è la possibilità di formattare comodamente le colonne, ad esempio, in testo, numeri, valuta, data, combobox o checkbox.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Link utili ==&lt;br /&gt;
*[[Installazione]]&lt;br /&gt;
*[[Guida a Gridbox]]&lt;/div&gt;</summary>
		<author><name>Milio</name></author>
	</entry>
	<entry>
		<id>https://www.gambas-it.org/wiki/index.php?title=GridBox&amp;diff=2532</id>
		<title>GridBox</title>
		<link rel="alternate" type="text/html" href="https://www.gambas-it.org/wiki/index.php?title=GridBox&amp;diff=2532"/>
		<updated>2010-10-14T20:52:30Z</updated>

		<summary type="html">&lt;p&gt;Milio: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduzione ==&lt;br /&gt;
&lt;br /&gt;
Una GridBox è un componente non ufficiale ma molto valido per chi lavora spesso con i database. Questo componente, tutto made in Gambas-it.org grazie all'ottimo lavoro dell'utente Milio, permette di creare semplicemente una griglia collegata a un database, con pochissime righe di codice, e già pronta con comandi quali: salvataggio, inserimento, eliminazione, etc.&lt;br /&gt;
Una caratteristica interessante di questo componente è la possibilità di formattare comodamente le colonne, ad esempio, in testo, numeri, valuta, data, combobox o checkbox.&lt;br /&gt;
&lt;br /&gt;
[[Introduzione]]&lt;br /&gt;
*[[Installazione]]&lt;br /&gt;
*[[Guida a Gridbox]]&lt;/div&gt;</summary>
		<author><name>Milio</name></author>
	</entry>
	<entry>
		<id>https://www.gambas-it.org/wiki/index.php?title=GridBox&amp;diff=2531</id>
		<title>GridBox</title>
		<link rel="alternate" type="text/html" href="https://www.gambas-it.org/wiki/index.php?title=GridBox&amp;diff=2531"/>
		<updated>2010-10-14T20:50:06Z</updated>

		<summary type="html">&lt;p&gt;Milio: Nuova pagina:  *Introduzione *Installazione *Guida a Gridbox&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
*[[Introduzione]]&lt;br /&gt;
*[[Installazione]]&lt;br /&gt;
*[[Guida a Gridbox]]&lt;/div&gt;</summary>
		<author><name>Milio</name></author>
	</entry>
	<entry>
		<id>https://www.gambas-it.org/wiki/index.php?title=Guide_della_comunit%C3%A0&amp;diff=2530</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=2530"/>
		<updated>2010-10-14T20:49:12Z</updated>

		<summary type="html">&lt;p&gt;Milio: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Raccolta di guide sui componenti, sui metodi e sugli algoritmi del linguaggio Gambas scritti e mantenuti dalla comunità italiana Gambas-it&lt;br /&gt;
&lt;br /&gt;
== Componenti ==&lt;br /&gt;
&lt;br /&gt;
* [[Come creare un componente]]&lt;br /&gt;
&lt;br /&gt;
* [[Tutorial - creare un componente: il frame]]&lt;br /&gt;
&lt;br /&gt;
==== Componenti della Comunità Gambas-it.org ====&lt;br /&gt;
&lt;br /&gt;
* [[GridBox]]&lt;br /&gt;
&lt;br /&gt;
== Interfacciare Gambas con librerie esterne ==&lt;br /&gt;
&lt;br /&gt;
* [[Documento originale (Inglese)]]&lt;br /&gt;
* [[Traduzione della comunità di Gambas-it]]&lt;br /&gt;
&lt;br /&gt;
== Pdfwriter ==&lt;br /&gt;
&lt;br /&gt;
*[[Guida ai report]]&lt;br /&gt;
&lt;br /&gt;
== Gestione dei dati MIDI ==&lt;br /&gt;
&lt;br /&gt;
*[[Gestione del MIDI con O.S.S.]]&lt;br /&gt;
&lt;br /&gt;
*[[Gestione del MIDI con ALSA]]&lt;/div&gt;</summary>
		<author><name>Milio</name></author>
	</entry>
	<entry>
		<id>https://www.gambas-it.org/wiki/index.php?title=Guide_della_comunit%C3%A0&amp;diff=2529</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=2529"/>
		<updated>2010-10-14T20:48:42Z</updated>

		<summary type="html">&lt;p&gt;Milio: /* Componenti */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Raccolta di guide sui componenti, sui metodi e sugli algoritmi del linguaggio Gambas scritti e mantenuti dalla comunità italiana Gambas-it&lt;br /&gt;
&lt;br /&gt;
== Componenti ==&lt;br /&gt;
&lt;br /&gt;
* [[Come creare un componente]]&lt;br /&gt;
&lt;br /&gt;
* [[Tutorial - creare un componente: il frame]]&lt;br /&gt;
&lt;br /&gt;
==== Componenti della Comunità Gambas-it.org ====&lt;br /&gt;
&lt;br /&gt;
* [[GridBox]]&lt;br /&gt;
&lt;br /&gt;
== Interfacciare Gambas con librerie esterne ==&lt;br /&gt;
&lt;br /&gt;
* [[Documento originale (Inglese)]]&lt;br /&gt;
* [[Traduzione della comunità di Gambas-it]]&lt;br /&gt;
&lt;br /&gt;
== Pdfwriter ==&lt;br /&gt;
&lt;br /&gt;
*[[Guida ai report]]&lt;br /&gt;
&lt;br /&gt;
== Gestione dei dati MIDI ==&lt;br /&gt;
&lt;br /&gt;
*[[Gestione del MIDI con O.S.S.]]&lt;br /&gt;
&lt;br /&gt;
*[[Gestione del MIDI con ALSA]]&lt;br /&gt;
&lt;br /&gt;
== Componente gb.GridBox ==&lt;br /&gt;
&lt;br /&gt;
*[[Introduzione]]&lt;br /&gt;
*[[Installazione]]&lt;br /&gt;
*[[Guida a Gridbox]]&lt;/div&gt;</summary>
		<author><name>Milio</name></author>
	</entry>
	<entry>
		<id>https://www.gambas-it.org/wiki/index.php?title=Tutorial_-_creare_un_componente:_il_frame&amp;diff=2528</id>
		<title>Tutorial - creare un componente: il frame</title>
		<link rel="alternate" type="text/html" href="https://www.gambas-it.org/wiki/index.php?title=Tutorial_-_creare_un_componente:_il_frame&amp;diff=2528"/>
		<updated>2010-10-13T18:57:49Z</updated>

		<summary type="html">&lt;p&gt;Milio: /* Stesura del Codice */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduzione==&lt;br /&gt;
&lt;br /&gt;
Questo tutorial è di completamento alla guida di [[Come creare un componente]] e vuol essere di esempio per la realizzazione di un oggetto Frame, che andrà ad integrarsi come componente nell'ambiente di sviluppo del linguaggio di programmazione Gambas versione 3.&lt;br /&gt;
&lt;br /&gt;
L'oggetto Frame, farà utilizzo di una classe genitore di tipo Container il quale verrà utilizzato per ereditare tutte le proprietà, metodi ed eventi che può avere un contenitore, di una Form che conterrà a sua volta una DrawingArea per il disegno dei bordi e del titolo, e di un Panel che sarà il reale contenitore di oggetti del Frame.&lt;br /&gt;
&lt;br /&gt;
==Creazione del Progetto==&lt;br /&gt;
&lt;br /&gt;
Una volta avviato Gambas, andiamo a selezionare le seguenti voci:&lt;br /&gt;
&lt;br /&gt;
* Tipo Progetto: Applicazione Grafica&lt;br /&gt;
* Opzioni: Creazione di un componente&lt;br /&gt;
&lt;br /&gt;
Dopo aver scelto la cartella che andrà a contenere il Progetto, inseriamo il titolo: gb.framebox.&lt;br /&gt;
&lt;br /&gt;
A questo punto il nostro [[Media:Esploratore1.png|Esploratore di Progetti]] conterrà due classi di esempio che vengono generate di default, una Form di test e la cartella control dove risiederanno le icone dei vari oggetti del componente.&lt;br /&gt;
Andiamo ad eliminare le due classi e le due icone, creando una nuova classe FrameBox, con opzione 'Esportato', e una Form a cui daremo il nome di FFrameBox.&lt;br /&gt;
&lt;br /&gt;
====Form FFrameBox====&lt;br /&gt;
&lt;br /&gt;
L'utilizzare una Form per la realizzazione di un oggetto grafico non è strettamente indispensabile in quanto si possono creare tutti gli oggetti grafici all'interno di una classe. Il solo scopo del suo utilizzo è per semplificare le operazioni di posizionamento e ridimensionamento degli oggetti che andranno a comporre il Frame.&lt;br /&gt;
&lt;br /&gt;
Prima di tutto andiamo a posizionare la DrawingArea come primo strato del nostro oggetto, in quanto l'immagine che andrà a creare dovrà essere obbligatoriamente sul fondo, altrimenti non sarà possibile selezionare gli oggetti contenuti nel Frame. Dopodiché andremo ad inserire il Panel, senza preoccuparci della sua posizione.&lt;br /&gt;
&lt;br /&gt;
=====Impostazioni degli oggetti=====&lt;br /&gt;
&lt;br /&gt;
Le modifiche verranno apportate solamente alle proprietà sotto elencate, alle altre verranno lasciati i valori di default.&lt;br /&gt;
&lt;br /&gt;
* FFrameBox&lt;br /&gt;
 Name = FFrameBox&lt;br /&gt;
 Arrangemet = Fill&lt;br /&gt;
Impostando questa proprietà, gli oggetti figli con proprietà Expand = TRUE si andranno a ridimensionare in automatico alle dimensioni del Form.&lt;br /&gt;
&lt;br /&gt;
* DrawingArea&lt;br /&gt;
 Name = DrawingArea1&lt;br /&gt;
 Expand = TRUE&lt;br /&gt;
&lt;br /&gt;
* Panel&lt;br /&gt;
 Name = Panel1&lt;br /&gt;
 Expan = TRUE&lt;br /&gt;
&lt;br /&gt;
=====Stesura del Codice=====&lt;br /&gt;
&lt;br /&gt;
Come prima cosa si dovranno decidere le varie proprietà che andranno a variare graficamente il Frame:&lt;br /&gt;
&lt;br /&gt;
* Titolo&lt;br /&gt;
* Colore testo&lt;br /&gt;
* Tipo di carattere&lt;br /&gt;
* Bordi visibili&lt;br /&gt;
* Colore bordi&lt;br /&gt;
&lt;br /&gt;
''Dichiarazione delle Variabili Private''&lt;br /&gt;
 Private $Text As String&lt;br /&gt;
 Private $TextColor As Integer&lt;br /&gt;
 Private $Font As New Font&lt;br /&gt;
 Private $Border As Boolean = True&lt;br /&gt;
 Private $BorderColor As Integer&lt;br /&gt;
&lt;br /&gt;
Essendo il codice 'di uso interno' andremo a creare solamente dei metodi per il settaggio delle proprietà grafiche:&lt;br /&gt;
&lt;br /&gt;
 Public Sub SetText(Value As String)&lt;br /&gt;
   $Text = Value&lt;br /&gt;
   Me.DrawingArea1.Refresh()&lt;br /&gt;
 End&lt;br /&gt;
 &lt;br /&gt;
 Public Function GetText() As String&lt;br /&gt;
   Return $Text&lt;br /&gt;
 End&lt;br /&gt;
  &lt;br /&gt;
 Public Sub SetTexColor(Value As Integer)&lt;br /&gt;
   $TextColor = Value&lt;br /&gt;
   Me.DrawingArea1.Refresh()&lt;br /&gt;
 End &lt;br /&gt;
 &lt;br /&gt;
 Public Function GetTextColor() As Integer&lt;br /&gt;
   Return $TextColor&lt;br /&gt;
 End&lt;br /&gt;
 &lt;br /&gt;
 Public Sub SetFont(Value As Font)&lt;br /&gt;
   $Font = Value&lt;br /&gt;
   Me.DrawingArea1.Refresh()&lt;br /&gt;
 End&lt;br /&gt;
 &lt;br /&gt;
 Public Function GetFont() As Font&lt;br /&gt;
   Return $Font&lt;br /&gt;
 End&lt;br /&gt;
 &lt;br /&gt;
 Public Sub SetBorder(Value As Boolean)&lt;br /&gt;
   $Border = Value&lt;br /&gt;
   Me.DrawingArea1.Refresh()&lt;br /&gt;
 End&lt;br /&gt;
 &lt;br /&gt;
 Public Function GetBorder() As Boolean&lt;br /&gt;
   Return $Border&lt;br /&gt;
 End&lt;br /&gt;
 &lt;br /&gt;
 Public Sub SetBorderColor(Value As Integer)&lt;br /&gt;
   $BorderColor = Value&lt;br /&gt;
   Me.DrawingArea1.Refresh()&lt;br /&gt;
 End&lt;br /&gt;
 &lt;br /&gt;
 Public Function GetBorderColor() As Integer&lt;br /&gt;
   Return $BorderColor&lt;br /&gt;
 End&lt;br /&gt;
&lt;br /&gt;
Da notare che per ogni variazione delle variabili, si richiama il metodo DrawingArea.Refresh() per poter applicare al volo le rispettive modifiche grafiche del frame.&amp;lt;br&amp;gt;&lt;br /&gt;
A questo punto creiamo il disegno del Frame all'interno dell'evento Draw della DrawingArea:&lt;br /&gt;
 Public Sub DrawingArea1_Draw()&lt;br /&gt;
 &lt;br /&gt;
   Paint.Begin(Me.DrawingArea1)&lt;br /&gt;
     Paint.Font = $Font&lt;br /&gt;
     Paint.Brush = Paint.Color($TextColor)&lt;br /&gt;
     Paint.Text($Text, 0, 0, Me.DrawingArea1.W, Paint.Font.TextHeight($Text) + 3, Align.Center)&lt;br /&gt;
     Paint.Fill()&lt;br /&gt;
     If $Border Then&lt;br /&gt;
       Paint.LineWidth = 0.5&lt;br /&gt;
       Paint.Brush = Paint.Color($BorderColor)&lt;br /&gt;
       Paint.MoveTo((Me.DrawingArea1.W - 5 - Paint.Font.TextWidth($Text)) / 2, Paint.Font.TextHeight($Text) / 2)&lt;br /&gt;
       Paint.LineTo(0, Paint.Font.TextHeight($Text) / 2)&lt;br /&gt;
       Paint.LineTo(0, Me.DrawingArea1.H)&lt;br /&gt;
       Paint.LineTo(Me.DrawingArea1.W, Me.DrawingArea1.H)&lt;br /&gt;
       Paint.LineTo(Me.DrawingArea1.w, Paint.Font.TextHeight($Text) / 2)&lt;br /&gt;
       Paint.LineTo(Me.DrawingArea1.W - ((Me.DrawingArea1.W - 5 - Paint.Font.TextWidth($Text)) / 2), Paint.Font.TextHeight($Text) / 2)&lt;br /&gt;
       Paint.Stroke()&lt;br /&gt;
     Endif&lt;br /&gt;
   Paint.End()&lt;br /&gt;
 &lt;br /&gt;
 End&lt;br /&gt;
&lt;br /&gt;
E per finire creiamo i metodi per variare la Proprietà Arrangement del Panel, in quanto sarà il vero contenitore del Frame:&lt;br /&gt;
 Public Sub SetArrange(Value As Integer)&lt;br /&gt;
   Me.Panel1.Arrangement = Value&lt;br /&gt;
 End&lt;br /&gt;
 &lt;br /&gt;
 Public Function GetArrange() As Integer&lt;br /&gt;
   Return Me.Panel1.Arrangement&lt;br /&gt;
 End&lt;br /&gt;
&lt;br /&gt;
====Classe FrameBox====&lt;br /&gt;
&lt;br /&gt;
Se nel Form appena creato abbiamo avuto una certa 'libertà' nella stesura del codice, adesso dobbiamo procedere con 'rigidità' per poter avere un componente pienamente funzionante nell'ide di Gambas.&lt;br /&gt;
&lt;br /&gt;
=====Dichiarazione Proprietà, Costanti e Variabili Private=====&lt;br /&gt;
Per prima cosa andremo a dichiarare la classe Genitore:&lt;br /&gt;
 Export&lt;br /&gt;
 &lt;br /&gt;
 Inherits UserContainer&lt;br /&gt;
In questo modo abbiamo ereditato proprietà, metodi ed eventi dell'oggetto UserContainer&amp;lt;br&amp;gt;&lt;br /&gt;
Poi andremo a dichiarare le costanti che serviranno all'ide di Gambas per l'integrazione del controllo:&lt;br /&gt;
 Public Const _Properties As String = &amp;quot;*,Text,Foreground{Color}=&amp;amp;H000000&amp;amp;,BorderColor{Color}=&amp;amp;H000000H,Border=True&amp;quot;&lt;br /&gt;
 Public Const _Group As String = &amp;quot;Gambas-it.org&amp;quot;&lt;br /&gt;
 Public Const _Arrangement As Integer = 0&lt;br /&gt;
 Public Const _Size As String = &amp;quot;36;36&amp;quot;&lt;br /&gt;
Dichiarazione delle Proprietà:&lt;br /&gt;
 Property Text As String&lt;br /&gt;
 Property Foreground As Integer&lt;br /&gt;
 Property BorderColor As Integer&lt;br /&gt;
 Property {Border} As Boolean&lt;br /&gt;
 Property {Font} As Font&lt;br /&gt;
 Property Arrangement As Integer&lt;br /&gt;
La Proprietà Arrangement è già compresa nelle Proprietà della classe genitore UserContainer. Dichiarandola nella classe figlia verrà automaticamente gestita da quest'ultima. &lt;br /&gt;
 Private Obs As Observer&lt;br /&gt;
L'oggetto Observer intercetta gli eventi dell'oggetto a lui legato, prima che passino alla classe che ha istanziato il medesimo oggetto. Questo è utile per creare condizioni nell'oggetto, prima che scateni un evento. Nel nostro esempio non sarà indispensabile, ma siccome è un oggetto molto usato nei componenti, è bene sapere come funzioni.&amp;lt;br&amp;gt;&lt;br /&gt;
Ed ora la FFrameBox che genererà la parte grafica del controllo:&lt;br /&gt;
 Private F As FFrameBox&lt;br /&gt;
&lt;br /&gt;
=====Metodo speciale _new()=====&lt;br /&gt;
&lt;br /&gt;
Questo metodo viene richiamato al momento della creazione dell'oggetto Frame. All'interno della sub quindi, vengono istanziati i vari oggetti che compongono il Frame e si danno i valori di default per alcune variabili.&lt;br /&gt;
&lt;br /&gt;
 Public Sub _new()&lt;br /&gt;
 &lt;br /&gt;
   Obs = New Observer(Me) As &amp;quot;Event&amp;quot;&lt;br /&gt;
   F = New FFrameBox(Me)&lt;br /&gt;
   Me._Container = F.Panel1&lt;br /&gt;
   F.SetText(Me.Name)&lt;br /&gt;
 &lt;br /&gt;
 End&lt;br /&gt;
&lt;br /&gt;
Il metodo speciale UserContainer._Container serve per trasferire le proprietà di contenitore vero e proprio, dall'oggetto UserContainer ad un altro oggetto, a patto che quest'ultimo sia a sua volta un contenitore. In questo caso passiamo l'onere di oggetto contenitore dalla classe genitore al Panel1 della FFrameBox, quindi tutti gli oggetti inseriti nel nostro Frame saranno contenuti dall'oggetto Panel1.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Metodi Read/Write delle Proprietà=====&lt;br /&gt;
&lt;br /&gt;
A questo punto non ci rimane altro che scrivere i metodi Read e Write delle varie proprietà, che andranno a modificare le  caratteristiche del nostro Frame.&amp;lt;br&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 Private Function Text_Read() As String&lt;br /&gt;
   Return F.GetText()&lt;br /&gt;
 End&lt;br /&gt;
 Private Sub Text_Write(Value As String)&lt;br /&gt;
   F.SetText(Value)&lt;br /&gt;
 End&lt;br /&gt;
 &lt;br /&gt;
 Private Function Foreground_Read() As Integer&lt;br /&gt;
   Return F.GetTextColor()&lt;br /&gt;
 End&lt;br /&gt;
 Private Sub Foreground_Write(Value As Integer)&lt;br /&gt;
   F.SetTexColor(Value)&lt;br /&gt;
 End&lt;br /&gt;
 &lt;br /&gt;
 Private Function BorderColor_Read() As Integer&lt;br /&gt;
   Return F.GetBorderColor()&lt;br /&gt;
 End&lt;br /&gt;
 Private Sub BorderColor_Write(Value As Integer)&lt;br /&gt;
   F.SetBorderColor(Value)&lt;br /&gt;
 End&lt;br /&gt;
 &lt;br /&gt;
 Private Function Border_Read() As Boolean&lt;br /&gt;
   Return F.GetBorder()&lt;br /&gt;
 End&lt;br /&gt;
 Private Sub Border_Write(Value As Boolean)&lt;br /&gt;
   F.SetBorder(Value)&lt;br /&gt;
 End&lt;br /&gt;
 &lt;br /&gt;
 Private Function Font_Read() As Font&lt;br /&gt;
   Return F.GetFont()&lt;br /&gt;
 End&lt;br /&gt;
 Private Sub Font_Write(Value As Font)&lt;br /&gt;
   Super.Font = Value&lt;br /&gt;
   F.SetFont(Value)&lt;br /&gt;
 End &lt;br /&gt;
 &lt;br /&gt;
 Private Function Arrangement_Read() As Integer&lt;br /&gt;
   Return F.GetArrange()&lt;br /&gt;
 End&lt;br /&gt;
 Private Sub Arrangement_Write(Value As Integer)&lt;br /&gt;
   F.SetArrange(Value)&lt;br /&gt;
 End&lt;br /&gt;
&lt;br /&gt;
=====Esempio per l'oggetto Observer=====&lt;br /&gt;
&lt;br /&gt;
Mettiamo il caso in cui volessimo che il nostro Frame 'accendesse' i bordi al posizionamento del mouse su di esso, dovremmo intercettare l'evento Enter del Frame, che, in questo caso, viene generato dall'oggetto UserContainer. Siccome quest'ultimo viene istanziato nella classe contenitore di un progetto, i vari eventi vengono eseguiti nella classe istanziatrice e non all'interno del medesimo oggetto. Quindi l'onere di cambiare il colore ai bordi spetta al programmatore che ha richiamato l'oggetto nel proprio Progetto.&amp;lt;br&amp;gt;&lt;br /&gt;
Per rendere l'oggetto autonomo da eventuale codice esterno, si richiama appunto l'oggetto Observer, il quale viene legato all'oggetto che si vuole monitorare. In questo esempio, e da come visto nel metodo _new(), si andrebbe semplicemente a scrivere questo codice:&lt;br /&gt;
&lt;br /&gt;
 Private $BorderColor as Integer&lt;br /&gt;
&lt;br /&gt;
 Public Sub Event_Enter()&lt;br /&gt;
 &lt;br /&gt;
   $BorderColor = Me.BorderColor&lt;br /&gt;
   Me.BorderColor = Color.Lighter(Me.BorderColor)&lt;br /&gt;
 &lt;br /&gt;
 End&lt;br /&gt;
&lt;br /&gt;
E, a sua volta, per far tornare i bordi ai suoi colori originali:&lt;br /&gt;
&lt;br /&gt;
 Public Sub Event_Leave()&lt;br /&gt;
 &lt;br /&gt;
   Me.BorderColor = $BorderColor&lt;br /&gt;
 &lt;br /&gt;
 End&lt;/div&gt;</summary>
		<author><name>Milio</name></author>
	</entry>
	<entry>
		<id>https://www.gambas-it.org/wiki/index.php?title=Tutorial_-_creare_un_componente:_il_frame&amp;diff=2527</id>
		<title>Tutorial - creare un componente: il frame</title>
		<link rel="alternate" type="text/html" href="https://www.gambas-it.org/wiki/index.php?title=Tutorial_-_creare_un_componente:_il_frame&amp;diff=2527"/>
		<updated>2010-10-13T18:57:13Z</updated>

		<summary type="html">&lt;p&gt;Milio: /* Introduzione */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduzione==&lt;br /&gt;
&lt;br /&gt;
Questo tutorial è di completamento alla guida di [[Come creare un componente]] e vuol essere di esempio per la realizzazione di un oggetto Frame, che andrà ad integrarsi come componente nell'ambiente di sviluppo del linguaggio di programmazione Gambas versione 3.&lt;br /&gt;
&lt;br /&gt;
L'oggetto Frame, farà utilizzo di una classe genitore di tipo Container il quale verrà utilizzato per ereditare tutte le proprietà, metodi ed eventi che può avere un contenitore, di una Form che conterrà a sua volta una DrawingArea per il disegno dei bordi e del titolo, e di un Panel che sarà il reale contenitore di oggetti del Frame.&lt;br /&gt;
&lt;br /&gt;
==Creazione del Progetto==&lt;br /&gt;
&lt;br /&gt;
Una volta avviato Gambas, andiamo a selezionare le seguenti voci:&lt;br /&gt;
&lt;br /&gt;
* Tipo Progetto: Applicazione Grafica&lt;br /&gt;
* Opzioni: Creazione di un componente&lt;br /&gt;
&lt;br /&gt;
Dopo aver scelto la cartella che andrà a contenere il Progetto, inseriamo il titolo: gb.framebox.&lt;br /&gt;
&lt;br /&gt;
A questo punto il nostro [[Media:Esploratore1.png|Esploratore di Progetti]] conterrà due classi di esempio che vengono generate di default, una Form di test e la cartella control dove risiederanno le icone dei vari oggetti del componente.&lt;br /&gt;
Andiamo ad eliminare le due classi e le due icone, creando una nuova classe FrameBox, con opzione 'Esportato', e una Form a cui daremo il nome di FFrameBox.&lt;br /&gt;
&lt;br /&gt;
====Form FFrameBox====&lt;br /&gt;
&lt;br /&gt;
L'utilizzare una Form per la realizzazione di un oggetto grafico non è strettamente indispensabile in quanto si possono creare tutti gli oggetti grafici all'interno di una classe. Il solo scopo del suo utilizzo è per semplificare le operazioni di posizionamento e ridimensionamento degli oggetti che andranno a comporre il Frame.&lt;br /&gt;
&lt;br /&gt;
Prima di tutto andiamo a posizionare la DrawingArea come primo strato del nostro oggetto, in quanto l'immagine che andrà a creare dovrà essere obbligatoriamente sul fondo, altrimenti non sarà possibile selezionare gli oggetti contenuti nel Frame. Dopodiché andremo ad inserire il Panel, senza preoccuparci della sua posizione.&lt;br /&gt;
&lt;br /&gt;
=====Impostazioni degli oggetti=====&lt;br /&gt;
&lt;br /&gt;
Le modifiche verranno apportate solamente alle proprietà sotto elencate, alle altre verranno lasciati i valori di default.&lt;br /&gt;
&lt;br /&gt;
* FFrameBox&lt;br /&gt;
 Name = FFrameBox&lt;br /&gt;
 Arrangemet = Fill&lt;br /&gt;
Impostando questa proprietà, gli oggetti figli con proprietà Expand = TRUE si andranno a ridimensionare in automatico alle dimensioni del Form.&lt;br /&gt;
&lt;br /&gt;
* DrawingArea&lt;br /&gt;
 Name = DrawingArea1&lt;br /&gt;
 Expand = TRUE&lt;br /&gt;
&lt;br /&gt;
* Panel&lt;br /&gt;
 Name = Panel1&lt;br /&gt;
 Expan = TRUE&lt;br /&gt;
&lt;br /&gt;
=====Stesura del Codice=====&lt;br /&gt;
&lt;br /&gt;
Come prima cosa si dovranno decidere le varie proprietà che andranno a variare graficamente il Frame:&lt;br /&gt;
&lt;br /&gt;
* Titolo&lt;br /&gt;
* Colore testo&lt;br /&gt;
* Tipo di carattere&lt;br /&gt;
* Bordi visibili&lt;br /&gt;
* Colore bordi&lt;br /&gt;
&lt;br /&gt;
''Dichiarazione delle Variabili Private''&lt;br /&gt;
 Private $Text As String&lt;br /&gt;
 Private $TextColor As Integer&lt;br /&gt;
 Private $Font As New Font&lt;br /&gt;
 Private $Border As Boolean = True&lt;br /&gt;
 Private $BorderColor As Integer&lt;br /&gt;
&lt;br /&gt;
Essendo il codice 'di uso interno' andremo a creare solamente dei metodi per il settaggio di proprietà grafiche:&lt;br /&gt;
&lt;br /&gt;
 Public Sub SetText(Value As String)&lt;br /&gt;
   $Text = Value&lt;br /&gt;
   Me.DrawingArea1.Refresh()&lt;br /&gt;
 End&lt;br /&gt;
 &lt;br /&gt;
 Public Function GetText() As String&lt;br /&gt;
   Return $Text&lt;br /&gt;
 End&lt;br /&gt;
  &lt;br /&gt;
 Public Sub SetTexColor(Value As Integer)&lt;br /&gt;
   $TextColor = Value&lt;br /&gt;
   Me.DrawingArea1.Refresh()&lt;br /&gt;
 End &lt;br /&gt;
 &lt;br /&gt;
 Public Function GetTextColor() As Integer&lt;br /&gt;
   Return $TextColor&lt;br /&gt;
 End&lt;br /&gt;
 &lt;br /&gt;
 Public Sub SetFont(Value As Font)&lt;br /&gt;
   $Font = Value&lt;br /&gt;
   Me.DrawingArea1.Refresh()&lt;br /&gt;
 End&lt;br /&gt;
 &lt;br /&gt;
 Public Function GetFont() As Font&lt;br /&gt;
   Return $Font&lt;br /&gt;
 End&lt;br /&gt;
 &lt;br /&gt;
 Public Sub SetBorder(Value As Boolean)&lt;br /&gt;
   $Border = Value&lt;br /&gt;
   Me.DrawingArea1.Refresh()&lt;br /&gt;
 End&lt;br /&gt;
 &lt;br /&gt;
 Public Function GetBorder() As Boolean&lt;br /&gt;
   Return $Border&lt;br /&gt;
 End&lt;br /&gt;
 &lt;br /&gt;
 Public Sub SetBorderColor(Value As Integer)&lt;br /&gt;
   $BorderColor = Value&lt;br /&gt;
   Me.DrawingArea1.Refresh()&lt;br /&gt;
 End&lt;br /&gt;
 &lt;br /&gt;
 Public Function GetBorderColor() As Integer&lt;br /&gt;
   Return $BorderColor&lt;br /&gt;
 End&lt;br /&gt;
&lt;br /&gt;
Da notare che per ogni variazione delle variabili, si richiama il metodo DrawingArea.Refresh() per poter applicare al volo le rispettive modifiche grafiche del frame.&amp;lt;br&amp;gt;&lt;br /&gt;
A questo punto creiamo il disegno del Frame all'interno dell'evento Draw della DrawingArea:&lt;br /&gt;
 Public Sub DrawingArea1_Draw()&lt;br /&gt;
 &lt;br /&gt;
   Paint.Begin(Me.DrawingArea1)&lt;br /&gt;
     Paint.Font = $Font&lt;br /&gt;
     Paint.Brush = Paint.Color($TextColor)&lt;br /&gt;
     Paint.Text($Text, 0, 0, Me.DrawingArea1.W, Paint.Font.TextHeight($Text) + 3, Align.Center)&lt;br /&gt;
     Paint.Fill()&lt;br /&gt;
     If $Border Then&lt;br /&gt;
       Paint.LineWidth = 0.5&lt;br /&gt;
       Paint.Brush = Paint.Color($BorderColor)&lt;br /&gt;
       Paint.MoveTo((Me.DrawingArea1.W - 5 - Paint.Font.TextWidth($Text)) / 2, Paint.Font.TextHeight($Text) / 2)&lt;br /&gt;
       Paint.LineTo(0, Paint.Font.TextHeight($Text) / 2)&lt;br /&gt;
       Paint.LineTo(0, Me.DrawingArea1.H)&lt;br /&gt;
       Paint.LineTo(Me.DrawingArea1.W, Me.DrawingArea1.H)&lt;br /&gt;
       Paint.LineTo(Me.DrawingArea1.w, Paint.Font.TextHeight($Text) / 2)&lt;br /&gt;
       Paint.LineTo(Me.DrawingArea1.W - ((Me.DrawingArea1.W - 5 - Paint.Font.TextWidth($Text)) / 2), Paint.Font.TextHeight($Text) / 2)&lt;br /&gt;
       Paint.Stroke()&lt;br /&gt;
     Endif&lt;br /&gt;
   Paint.End()&lt;br /&gt;
 &lt;br /&gt;
 End&lt;br /&gt;
&lt;br /&gt;
E per finire creiamo i metodi per variare la Proprietà Arrangement del Panel, in quanto sarà il vero contenitore del Frame:&lt;br /&gt;
 Public Sub SetArrange(Value As Integer)&lt;br /&gt;
   Me.Panel1.Arrangement = Value&lt;br /&gt;
 End&lt;br /&gt;
 &lt;br /&gt;
 Public Function GetArrange() As Integer&lt;br /&gt;
   Return Me.Panel1.Arrangement&lt;br /&gt;
 End&lt;br /&gt;
&lt;br /&gt;
====Classe FrameBox====&lt;br /&gt;
&lt;br /&gt;
Se nel Form appena creato abbiamo avuto una certa 'libertà' nella stesura del codice, adesso dobbiamo procedere con 'rigidità' per poter avere un componente pienamente funzionante nell'ide di Gambas.&lt;br /&gt;
&lt;br /&gt;
=====Dichiarazione Proprietà, Costanti e Variabili Private=====&lt;br /&gt;
Per prima cosa andremo a dichiarare la classe Genitore:&lt;br /&gt;
 Export&lt;br /&gt;
 &lt;br /&gt;
 Inherits UserContainer&lt;br /&gt;
In questo modo abbiamo ereditato proprietà, metodi ed eventi dell'oggetto UserContainer&amp;lt;br&amp;gt;&lt;br /&gt;
Poi andremo a dichiarare le costanti che serviranno all'ide di Gambas per l'integrazione del controllo:&lt;br /&gt;
 Public Const _Properties As String = &amp;quot;*,Text,Foreground{Color}=&amp;amp;H000000&amp;amp;,BorderColor{Color}=&amp;amp;H000000H,Border=True&amp;quot;&lt;br /&gt;
 Public Const _Group As String = &amp;quot;Gambas-it.org&amp;quot;&lt;br /&gt;
 Public Const _Arrangement As Integer = 0&lt;br /&gt;
 Public Const _Size As String = &amp;quot;36;36&amp;quot;&lt;br /&gt;
Dichiarazione delle Proprietà:&lt;br /&gt;
 Property Text As String&lt;br /&gt;
 Property Foreground As Integer&lt;br /&gt;
 Property BorderColor As Integer&lt;br /&gt;
 Property {Border} As Boolean&lt;br /&gt;
 Property {Font} As Font&lt;br /&gt;
 Property Arrangement As Integer&lt;br /&gt;
La Proprietà Arrangement è già compresa nelle Proprietà della classe genitore UserContainer. Dichiarandola nella classe figlia verrà automaticamente gestita da quest'ultima. &lt;br /&gt;
 Private Obs As Observer&lt;br /&gt;
L'oggetto Observer intercetta gli eventi dell'oggetto a lui legato, prima che passino alla classe che ha istanziato il medesimo oggetto. Questo è utile per creare condizioni nell'oggetto, prima che scateni un evento. Nel nostro esempio non sarà indispensabile, ma siccome è un oggetto molto usato nei componenti, è bene sapere come funzioni.&amp;lt;br&amp;gt;&lt;br /&gt;
Ed ora la FFrameBox che genererà la parte grafica del controllo:&lt;br /&gt;
 Private F As FFrameBox&lt;br /&gt;
&lt;br /&gt;
=====Metodo speciale _new()=====&lt;br /&gt;
&lt;br /&gt;
Questo metodo viene richiamato al momento della creazione dell'oggetto Frame. All'interno della sub quindi, vengono istanziati i vari oggetti che compongono il Frame e si danno i valori di default per alcune variabili.&lt;br /&gt;
&lt;br /&gt;
 Public Sub _new()&lt;br /&gt;
 &lt;br /&gt;
   Obs = New Observer(Me) As &amp;quot;Event&amp;quot;&lt;br /&gt;
   F = New FFrameBox(Me)&lt;br /&gt;
   Me._Container = F.Panel1&lt;br /&gt;
   F.SetText(Me.Name)&lt;br /&gt;
 &lt;br /&gt;
 End&lt;br /&gt;
&lt;br /&gt;
Il metodo speciale UserContainer._Container serve per trasferire le proprietà di contenitore vero e proprio, dall'oggetto UserContainer ad un altro oggetto, a patto che quest'ultimo sia a sua volta un contenitore. In questo caso passiamo l'onere di oggetto contenitore dalla classe genitore al Panel1 della FFrameBox, quindi tutti gli oggetti inseriti nel nostro Frame saranno contenuti dall'oggetto Panel1.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Metodi Read/Write delle Proprietà=====&lt;br /&gt;
&lt;br /&gt;
A questo punto non ci rimane altro che scrivere i metodi Read e Write delle varie proprietà, che andranno a modificare le  caratteristiche del nostro Frame.&amp;lt;br&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 Private Function Text_Read() As String&lt;br /&gt;
   Return F.GetText()&lt;br /&gt;
 End&lt;br /&gt;
 Private Sub Text_Write(Value As String)&lt;br /&gt;
   F.SetText(Value)&lt;br /&gt;
 End&lt;br /&gt;
 &lt;br /&gt;
 Private Function Foreground_Read() As Integer&lt;br /&gt;
   Return F.GetTextColor()&lt;br /&gt;
 End&lt;br /&gt;
 Private Sub Foreground_Write(Value As Integer)&lt;br /&gt;
   F.SetTexColor(Value)&lt;br /&gt;
 End&lt;br /&gt;
 &lt;br /&gt;
 Private Function BorderColor_Read() As Integer&lt;br /&gt;
   Return F.GetBorderColor()&lt;br /&gt;
 End&lt;br /&gt;
 Private Sub BorderColor_Write(Value As Integer)&lt;br /&gt;
   F.SetBorderColor(Value)&lt;br /&gt;
 End&lt;br /&gt;
 &lt;br /&gt;
 Private Function Border_Read() As Boolean&lt;br /&gt;
   Return F.GetBorder()&lt;br /&gt;
 End&lt;br /&gt;
 Private Sub Border_Write(Value As Boolean)&lt;br /&gt;
   F.SetBorder(Value)&lt;br /&gt;
 End&lt;br /&gt;
 &lt;br /&gt;
 Private Function Font_Read() As Font&lt;br /&gt;
   Return F.GetFont()&lt;br /&gt;
 End&lt;br /&gt;
 Private Sub Font_Write(Value As Font)&lt;br /&gt;
   Super.Font = Value&lt;br /&gt;
   F.SetFont(Value)&lt;br /&gt;
 End &lt;br /&gt;
 &lt;br /&gt;
 Private Function Arrangement_Read() As Integer&lt;br /&gt;
   Return F.GetArrange()&lt;br /&gt;
 End&lt;br /&gt;
 Private Sub Arrangement_Write(Value As Integer)&lt;br /&gt;
   F.SetArrange(Value)&lt;br /&gt;
 End&lt;br /&gt;
&lt;br /&gt;
=====Esempio per l'oggetto Observer=====&lt;br /&gt;
&lt;br /&gt;
Mettiamo il caso in cui volessimo che il nostro Frame 'accendesse' i bordi al posizionamento del mouse su di esso, dovremmo intercettare l'evento Enter del Frame, che, in questo caso, viene generato dall'oggetto UserContainer. Siccome quest'ultimo viene istanziato nella classe contenitore di un progetto, i vari eventi vengono eseguiti nella classe istanziatrice e non all'interno del medesimo oggetto. Quindi l'onere di cambiare il colore ai bordi spetta al programmatore che ha richiamato l'oggetto nel proprio Progetto.&amp;lt;br&amp;gt;&lt;br /&gt;
Per rendere l'oggetto autonomo da eventuale codice esterno, si richiama appunto l'oggetto Observer, il quale viene legato all'oggetto che si vuole monitorare. In questo esempio, e da come visto nel metodo _new(), si andrebbe semplicemente a scrivere questo codice:&lt;br /&gt;
&lt;br /&gt;
 Private $BorderColor as Integer&lt;br /&gt;
&lt;br /&gt;
 Public Sub Event_Enter()&lt;br /&gt;
 &lt;br /&gt;
   $BorderColor = Me.BorderColor&lt;br /&gt;
   Me.BorderColor = Color.Lighter(Me.BorderColor)&lt;br /&gt;
 &lt;br /&gt;
 End&lt;br /&gt;
&lt;br /&gt;
E, a sua volta, per far tornare i bordi ai suoi colori originali:&lt;br /&gt;
&lt;br /&gt;
 Public Sub Event_Leave()&lt;br /&gt;
 &lt;br /&gt;
   Me.BorderColor = $BorderColor&lt;br /&gt;
 &lt;br /&gt;
 End&lt;/div&gt;</summary>
		<author><name>Milio</name></author>
	</entry>
	<entry>
		<id>https://www.gambas-it.org/wiki/index.php?title=Tutorial_-_creare_un_componente:_il_frame&amp;diff=2505</id>
		<title>Tutorial - creare un componente: il frame</title>
		<link rel="alternate" type="text/html" href="https://www.gambas-it.org/wiki/index.php?title=Tutorial_-_creare_un_componente:_il_frame&amp;diff=2505"/>
		<updated>2010-09-27T20:14:47Z</updated>

		<summary type="html">&lt;p&gt;Milio: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduzione==&lt;br /&gt;
&lt;br /&gt;
Questo tutorial è di completamento alla guida di [[Come creare un componente]] e vuol essere di esempio per la realizzazione di un oggetto Frame, che andrà ad integrarsi come componente nell'ambiente di sviluppo del linguaggio di programmazione Gambas versione 3.&lt;br /&gt;
&lt;br /&gt;
L'oggetto Frame, farà utilizzo di una classe genitore di tipo Container il quale verrà utilizzato per ereditare tutte le proprietà, metodi ed eventi che può un contenitore, di una Form che conterrà a sua volta una DrawingArea per il disegno dei bordi e del titolo, e di un Panel che sarà il reale contenitore di oggetti del Frame.&lt;br /&gt;
&lt;br /&gt;
==Creazione del Progetto==&lt;br /&gt;
&lt;br /&gt;
Una volta avviato Gambas, andiamo a selezionare le seguenti voci:&lt;br /&gt;
&lt;br /&gt;
* Tipo Progetto: Applicazione Grafica&lt;br /&gt;
* Opzioni: Creazione di un componente&lt;br /&gt;
&lt;br /&gt;
Dopo aver scelto la cartella che andrà a contenere il Progetto, inseriamo il titolo: gb.framebox.&lt;br /&gt;
&lt;br /&gt;
A questo punto il nostro [[Media:Esploratore1.png|Esploratore di Progetti]] conterrà due classi di esempio che vengono generate di default, una Form di test e la cartella control dove risiederanno le icone dei vari oggetti del componente.&lt;br /&gt;
Andiamo ad eliminare le due classi e le due icone, creando una nuova classe FrameBox, con opzione 'Esportato', e una Form a cui daremo il nome di FFrameBox.&lt;br /&gt;
&lt;br /&gt;
====Form FFrameBox====&lt;br /&gt;
&lt;br /&gt;
L'utilizzare una Form per la realizzazione di un oggetto grafico non è strettamente indispensabile in quanto si possono creare tutti gli oggetti grafici all'interno di una classe. Il solo scopo del suo utilizzo è per semplificare le operazioni di posizionamento e ridimensionamento degli oggetti che andranno a comporre il Frame.&lt;br /&gt;
&lt;br /&gt;
Prima di tutto andiamo a posizionare la DrawingArea come primo strato del nostro oggetto, in quanto l'immagine che andrà a creare dovrà essere obbligatoriamente sul fondo, altrimenti non sarà possibile selezionare gli oggetti contenuti nel Frame. Dopodiché andremo ad inserire il Panel, senza preoccuparci della sua posizione.&lt;br /&gt;
&lt;br /&gt;
=====Impostazioni degli oggetti=====&lt;br /&gt;
&lt;br /&gt;
Le modifiche verranno apportate solamente alle proprietà sotto elencate, alle altre verranno lasciati i valori di default.&lt;br /&gt;
&lt;br /&gt;
* FFrameBox&lt;br /&gt;
 Name = FFrameBox&lt;br /&gt;
 Arrangemet = Fill&lt;br /&gt;
Impostando questa proprietà, gli oggetti figli con proprietà Expand = TRUE si andranno a ridimensionare in automatico alle dimensioni del Form.&lt;br /&gt;
&lt;br /&gt;
* DrawingArea&lt;br /&gt;
 Name = DrawingArea1&lt;br /&gt;
 Expand = TRUE&lt;br /&gt;
&lt;br /&gt;
* Panel&lt;br /&gt;
 Name = Panel1&lt;br /&gt;
 Expan = TRUE&lt;br /&gt;
&lt;br /&gt;
=====Stesura del Codice=====&lt;br /&gt;
&lt;br /&gt;
Come prima cosa si dovranno decidere le varie proprietà che andranno a variare graficamente il Frame:&lt;br /&gt;
&lt;br /&gt;
* Titolo&lt;br /&gt;
* Colore testo&lt;br /&gt;
* Tipo di carattere&lt;br /&gt;
* Bordi visibili&lt;br /&gt;
* Colore bordi&lt;br /&gt;
&lt;br /&gt;
''Dichiarazione delle Variabili Private''&lt;br /&gt;
 Private $Text As String&lt;br /&gt;
 Private $TextColor As Integer&lt;br /&gt;
 Private $Font As New Font&lt;br /&gt;
 Private $Border As Boolean = True&lt;br /&gt;
 Private $BorderColor As Integer&lt;br /&gt;
&lt;br /&gt;
Essendo il codice 'di uso interno' andremo a creare solamente dei metodi per il settaggio di proprietà grafiche:&lt;br /&gt;
&lt;br /&gt;
 Public Sub SetText(Value As String)&lt;br /&gt;
   $Text = Value&lt;br /&gt;
   Me.DrawingArea1.Refresh()&lt;br /&gt;
 End&lt;br /&gt;
 &lt;br /&gt;
 Public Function GetText() As String&lt;br /&gt;
   Return $Text&lt;br /&gt;
 End&lt;br /&gt;
  &lt;br /&gt;
 Public Sub SetTexColor(Value As Integer)&lt;br /&gt;
   $TextColor = Value&lt;br /&gt;
   Me.DrawingArea1.Refresh()&lt;br /&gt;
 End &lt;br /&gt;
 &lt;br /&gt;
 Public Function GetTextColor() As Integer&lt;br /&gt;
   Return $TextColor&lt;br /&gt;
 End&lt;br /&gt;
 &lt;br /&gt;
 Public Sub SetFont(Value As Font)&lt;br /&gt;
   $Font = Value&lt;br /&gt;
   Me.DrawingArea1.Refresh()&lt;br /&gt;
 End&lt;br /&gt;
 &lt;br /&gt;
 Public Function GetFont() As Font&lt;br /&gt;
   Return $Font&lt;br /&gt;
 End&lt;br /&gt;
 &lt;br /&gt;
 Public Sub SetBorder(Value As Boolean)&lt;br /&gt;
   $Border = Value&lt;br /&gt;
   Me.DrawingArea1.Refresh()&lt;br /&gt;
 End&lt;br /&gt;
 &lt;br /&gt;
 Public Function GetBorder() As Boolean&lt;br /&gt;
   Return $Border&lt;br /&gt;
 End&lt;br /&gt;
 &lt;br /&gt;
 Public Sub SetBorderColor(Value As Integer)&lt;br /&gt;
   $BorderColor = Value&lt;br /&gt;
   Me.DrawingArea1.Refresh()&lt;br /&gt;
 End&lt;br /&gt;
 &lt;br /&gt;
 Public Function GetBorderColor() As Integer&lt;br /&gt;
   Return $BorderColor&lt;br /&gt;
 End&lt;br /&gt;
&lt;br /&gt;
Da notare che per ogni variazione delle variabili, si richiama il metodo DrawingArea.Refresh() per poter applicare al volo le rispettive modifiche grafiche del frame.&amp;lt;br&amp;gt;&lt;br /&gt;
A questo punto creiamo il disegno del Frame all'interno dell'evento Draw della DrawingArea:&lt;br /&gt;
 Public Sub DrawingArea1_Draw()&lt;br /&gt;
 &lt;br /&gt;
   Paint.Begin(Me.DrawingArea1)&lt;br /&gt;
     Paint.Font = $Font&lt;br /&gt;
     Paint.Brush = Paint.Color($TextColor)&lt;br /&gt;
     Paint.Text($Text, 0, 0, Me.DrawingArea1.W, Paint.Font.TextHeight($Text) + 3, Align.Center)&lt;br /&gt;
     Paint.Fill()&lt;br /&gt;
     If $Border Then&lt;br /&gt;
       Paint.LineWidth = 0.5&lt;br /&gt;
       Paint.Brush = Paint.Color($BorderColor)&lt;br /&gt;
       Paint.MoveTo((Me.DrawingArea1.W - 5 - Paint.Font.TextWidth($Text)) / 2, Paint.Font.TextHeight($Text) / 2)&lt;br /&gt;
       Paint.LineTo(0, Paint.Font.TextHeight($Text) / 2)&lt;br /&gt;
       Paint.LineTo(0, Me.DrawingArea1.H)&lt;br /&gt;
       Paint.LineTo(Me.DrawingArea1.W, Me.DrawingArea1.H)&lt;br /&gt;
       Paint.LineTo(Me.DrawingArea1.w, Paint.Font.TextHeight($Text) / 2)&lt;br /&gt;
       Paint.LineTo(Me.DrawingArea1.W - ((Me.DrawingArea1.W - 5 - Paint.Font.TextWidth($Text)) / 2), Paint.Font.TextHeight($Text) / 2)&lt;br /&gt;
       Paint.Stroke()&lt;br /&gt;
     Endif&lt;br /&gt;
   Paint.End()&lt;br /&gt;
 &lt;br /&gt;
 End&lt;br /&gt;
&lt;br /&gt;
E per finire creiamo i metodi per variare la Proprietà Arrangement del Panel, in quanto sarà il vero contenitore del Frame:&lt;br /&gt;
 Public Sub SetArrange(Value As Integer)&lt;br /&gt;
   Me.Panel1.Arrangement = Value&lt;br /&gt;
 End&lt;br /&gt;
 &lt;br /&gt;
 Public Function GetArrange() As Integer&lt;br /&gt;
   Return Me.Panel1.Arrangement&lt;br /&gt;
 End&lt;br /&gt;
&lt;br /&gt;
====Classe FrameBox====&lt;br /&gt;
&lt;br /&gt;
Se nel Form appena creato abbiamo avuto una certa 'libertà' nella stesura del codice, adesso dobbiamo procedere con 'rigidità' per poter avere un componente pienamente funzionante nell'ide di Gambas.&lt;br /&gt;
&lt;br /&gt;
=====Dichiarazione Proprietà, Costanti e Variabili Private=====&lt;br /&gt;
Per prima cosa andremo a dichiarare la classe Genitore:&lt;br /&gt;
 Export&lt;br /&gt;
 &lt;br /&gt;
 Inherits UserContainer&lt;br /&gt;
In questo modo abbiamo ereditato proprietà, metodi ed eventi dell'oggetto UserContainer&amp;lt;br&amp;gt;&lt;br /&gt;
Poi andremo a dichiarare le costanti che serviranno all'ide di Gambas per l'integrazione del controllo:&lt;br /&gt;
 Public Const _Properties As String = &amp;quot;*,Text,Foreground{Color}=&amp;amp;H000000&amp;amp;,BorderColor{Color}=&amp;amp;H000000H,Border=True&amp;quot;&lt;br /&gt;
 Public Const _Group As String = &amp;quot;Gambas-it.org&amp;quot;&lt;br /&gt;
 Public Const _Arrangement As Integer = 0&lt;br /&gt;
 Public Const _Size As String = &amp;quot;36;36&amp;quot;&lt;br /&gt;
Dichiarazione delle Proprietà:&lt;br /&gt;
 Property Text As String&lt;br /&gt;
 Property Foreground As Integer&lt;br /&gt;
 Property BorderColor As Integer&lt;br /&gt;
 Property {Border} As Boolean&lt;br /&gt;
 Property {Font} As Font&lt;br /&gt;
 Property Arrangement As Integer&lt;br /&gt;
La Proprietà Arrangement è già compresa nelle Proprietà della classe genitore UserContainer. Dichiarandola nella classe figlia verrà automaticamente gestita da quest'ultima. &lt;br /&gt;
 Private Obs As Observer&lt;br /&gt;
L'oggetto Observer intercetta gli eventi dell'oggetto a lui legato, prima che passino alla classe che ha istanziato il medesimo oggetto. Questo è utile per creare condizioni nell'oggetto, prima che scateni un evento. Nel nostro esempio non sarà indispensabile, ma siccome è un oggetto molto usato nei componenti, è bene sapere come funzioni.&amp;lt;br&amp;gt;&lt;br /&gt;
Ed ora la FFrameBox che genererà la parte grafica del controllo:&lt;br /&gt;
 Private F As FFrameBox&lt;br /&gt;
&lt;br /&gt;
=====Metodo speciale _new()=====&lt;br /&gt;
&lt;br /&gt;
Questo metodo viene richiamato al momento della creazione dell'oggetto Frame. All'interno della sub quindi, vengono istanziati i vari oggetti che compongono il Frame e si danno i valori di default per alcune variabili.&lt;br /&gt;
&lt;br /&gt;
 Public Sub _new()&lt;br /&gt;
 &lt;br /&gt;
   Obs = New Observer(Me) As &amp;quot;Event&amp;quot;&lt;br /&gt;
   F = New FFrameBox(Me)&lt;br /&gt;
   Me._Container = F.Panel1&lt;br /&gt;
   F.SetText(Me.Name)&lt;br /&gt;
 &lt;br /&gt;
 End&lt;br /&gt;
&lt;br /&gt;
Il metodo speciale UserContainer._Container serve per trasferire le proprietà di contenitore vero e proprio, dall'oggetto UserContainer ad un altro oggetto, a patto che quest'ultimo sia a sua volta un contenitore. In questo caso passiamo l'onere di oggetto contenitore dalla classe genitore al Panel1 della FFrameBox, quindi tutti gli oggetti inseriti nel nostro Frame saranno contenuti dall'oggetto Panel1.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Metodi Read/Write delle Proprietà=====&lt;br /&gt;
&lt;br /&gt;
A questo punto non ci rimane altro che scrivere i metodi Read e Write delle varie proprietà, che andranno a modificare le  caratteristiche del nostro Frame.&amp;lt;br&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 Private Function Text_Read() As String&lt;br /&gt;
   Return F.GetText()&lt;br /&gt;
 End&lt;br /&gt;
 Private Sub Text_Write(Value As String)&lt;br /&gt;
   F.SetText(Value)&lt;br /&gt;
 End&lt;br /&gt;
 &lt;br /&gt;
 Private Function Foreground_Read() As Integer&lt;br /&gt;
   Return F.GetTextColor()&lt;br /&gt;
 End&lt;br /&gt;
 Private Sub Foreground_Write(Value As Integer)&lt;br /&gt;
   F.SetTexColor(Value)&lt;br /&gt;
 End&lt;br /&gt;
 &lt;br /&gt;
 Private Function BorderColor_Read() As Integer&lt;br /&gt;
   Return F.GetBorderColor()&lt;br /&gt;
 End&lt;br /&gt;
 Private Sub BorderColor_Write(Value As Integer)&lt;br /&gt;
   F.SetBorderColor(Value)&lt;br /&gt;
 End&lt;br /&gt;
 &lt;br /&gt;
 Private Function Border_Read() As Boolean&lt;br /&gt;
   Return F.GetBorder()&lt;br /&gt;
 End&lt;br /&gt;
 Private Sub Border_Write(Value As Boolean)&lt;br /&gt;
   F.SetBorder(Value)&lt;br /&gt;
 End&lt;br /&gt;
 &lt;br /&gt;
 Private Function Font_Read() As Font&lt;br /&gt;
   Return F.GetFont()&lt;br /&gt;
 End&lt;br /&gt;
 Private Sub Font_Write(Value As Font)&lt;br /&gt;
   Super.Font = Value&lt;br /&gt;
   F.SetFont(Value)&lt;br /&gt;
 End &lt;br /&gt;
 &lt;br /&gt;
 Private Function Arrangement_Read() As Integer&lt;br /&gt;
   Return F.GetArrange()&lt;br /&gt;
 End&lt;br /&gt;
 Private Sub Arrangement_Write(Value As Integer)&lt;br /&gt;
   F.SetArrange(Value)&lt;br /&gt;
 End&lt;br /&gt;
&lt;br /&gt;
=====Esempio per l'oggetto Observer=====&lt;br /&gt;
&lt;br /&gt;
Mettiamo il caso in cui volessimo che il nostro Frame 'accendesse' i bordi al posizionamento del mouse su di esso, dovremmo intercettare l'evento Enter del Frame, che, in questo caso, viene generato dall'oggetto UserContainer. Siccome quest'ultimo viene istanziato nella classe contenitore di un progetto, i vari eventi vengono eseguiti nella classe istanziatrice e non all'interno del medesimo oggetto. Quindi l'onere di cambiare il colore ai bordi spetta al programmatore che ha richiamato l'oggetto nel proprio Progetto.&amp;lt;br&amp;gt;&lt;br /&gt;
Per rendere l'oggetto autonomo da eventuale codice esterno, si richiama appunto l'oggetto Observer, il quale viene legato all'oggetto che si vuole monitorare. In questo esempio, e da come visto nel metodo _new(), si andrebbe semplicemente a scrivere questo codice:&lt;br /&gt;
&lt;br /&gt;
 Private $BorderColor as Integer&lt;br /&gt;
&lt;br /&gt;
 Public Sub Event_Enter()&lt;br /&gt;
 &lt;br /&gt;
   $BorderColor = Me.BorderColor&lt;br /&gt;
   Me.BorderColor = Color.Lighter(Me.BorderColor)&lt;br /&gt;
 &lt;br /&gt;
 End&lt;br /&gt;
&lt;br /&gt;
E, a sua volta, per far tornare i bordi ai suoi colori originali:&lt;br /&gt;
&lt;br /&gt;
 Public Sub Event_Leave()&lt;br /&gt;
 &lt;br /&gt;
   Me.BorderColor = $BorderColor&lt;br /&gt;
 &lt;br /&gt;
 End&lt;/div&gt;</summary>
		<author><name>Milio</name></author>
	</entry>
	<entry>
		<id>https://www.gambas-it.org/wiki/index.php?title=Tutorial_-_creare_un_componente:_il_frame&amp;diff=2504</id>
		<title>Tutorial - creare un componente: il frame</title>
		<link rel="alternate" type="text/html" href="https://www.gambas-it.org/wiki/index.php?title=Tutorial_-_creare_un_componente:_il_frame&amp;diff=2504"/>
		<updated>2010-09-27T20:05:38Z</updated>

		<summary type="html">&lt;p&gt;Milio: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduzione==&lt;br /&gt;
&lt;br /&gt;
Questo tutorial vuol essere di esempio per la realizzazione di un oggetto Frame, che andrà ad integrarsi come componente nell'ambiente di sviluppo del linguaggio di programmazione Gambas versione 3.&lt;br /&gt;
&lt;br /&gt;
L'oggetto Frame, farà utilizzo di una classe genitore di tipo Container il quale verrà utilizzato per ereditare tutte le proprietà, metodi ed eventi che può un contenitore, di una Form che conterrà a sua volta una DrawingArea per il disegno dei bordi e del titolo, e di un Panel che sarà il reale contenitore di oggetti del Frame.&lt;br /&gt;
&lt;br /&gt;
==Creazione del Progetto==&lt;br /&gt;
&lt;br /&gt;
Una volta avviato Gambas, andiamo a selezionare le seguenti voci:&lt;br /&gt;
&lt;br /&gt;
* Tipo Progetto: Applicazione Grafica&lt;br /&gt;
* Opzioni: Creazione di un componente&lt;br /&gt;
&lt;br /&gt;
Dopo aver scelto la cartella che andrà a contenere il Progetto, inseriamo il titolo: gb.framebox.&lt;br /&gt;
&lt;br /&gt;
A questo punto il nostro [[Media:Esploratore1.png|Esploratore di Progetti]] conterrà due classi di esempio che vengono generate di default, una Form di test e la cartella control dove risiederanno le icone dei vari oggetti del componente.&lt;br /&gt;
Andiamo ad eliminare le due classi e le due icone, creando una nuova classe FrameBox, con opzione 'Esportato', e una Form a cui daremo il nome di FFrameBox.&lt;br /&gt;
&lt;br /&gt;
====Form FFrameBox====&lt;br /&gt;
&lt;br /&gt;
L'utilizzare una Form per la realizzazione di un oggetto grafico non è strettamente indispensabile in quanto si possono creare tutti gli oggetti grafici all'interno di una classe. Il solo scopo del suo utilizzo è per semplificare le operazioni di posizionamento e ridimensionamento degli oggetti che andranno a comporre il Frame.&lt;br /&gt;
&lt;br /&gt;
Prima di tutto andiamo a posizionare la DrawingArea come primo strato del nostro oggetto, in quanto l'immagine che andrà a creare dovrà essere obbligatoriamente sul fondo, altrimenti non sarà possibile selezionare gli oggetti contenuti nel Frame. Dopodiché andremo ad inserire il Panel, senza preoccuparci della sua posizione.&lt;br /&gt;
&lt;br /&gt;
=====Impostazioni degli oggetti=====&lt;br /&gt;
&lt;br /&gt;
Le modifiche verranno apportate solamente alle proprietà sotto elencate, alle altre verranno lasciati i valori di default.&lt;br /&gt;
&lt;br /&gt;
* FFrameBox&lt;br /&gt;
 Name = FFrameBox&lt;br /&gt;
 Arrangemet = Fill&lt;br /&gt;
Impostando questa proprietà, gli oggetti figli con proprietà Expand = TRUE si andranno a ridimensionare in automatico alle dimensioni del Form.&lt;br /&gt;
&lt;br /&gt;
* DrawingArea&lt;br /&gt;
 Name = DrawingArea1&lt;br /&gt;
 Expand = TRUE&lt;br /&gt;
&lt;br /&gt;
* Panel&lt;br /&gt;
 Name = Panel1&lt;br /&gt;
 Expan = TRUE&lt;br /&gt;
&lt;br /&gt;
=====Stesura del Codice=====&lt;br /&gt;
&lt;br /&gt;
Come prima cosa si dovranno decidere le varie proprietà che andranno a variare graficamente il Frame:&lt;br /&gt;
&lt;br /&gt;
* Titolo&lt;br /&gt;
* Colore testo&lt;br /&gt;
* Tipo di carattere&lt;br /&gt;
* Bordi visibili&lt;br /&gt;
* Colore bordi&lt;br /&gt;
&lt;br /&gt;
''Dichiarazione delle Variabili Private''&lt;br /&gt;
 Private $Text As String&lt;br /&gt;
 Private $TextColor As Integer&lt;br /&gt;
 Private $Font As New Font&lt;br /&gt;
 Private $Border As Boolean = True&lt;br /&gt;
 Private $BorderColor As Integer&lt;br /&gt;
&lt;br /&gt;
Essendo il codice 'di uso interno' andremo a creare solamente dei metodi per il settaggio di proprietà grafiche:&lt;br /&gt;
&lt;br /&gt;
 Public Sub SetText(Value As String)&lt;br /&gt;
   $Text = Value&lt;br /&gt;
   Me.DrawingArea1.Refresh()&lt;br /&gt;
 End&lt;br /&gt;
 &lt;br /&gt;
 Public Function GetText() As String&lt;br /&gt;
   Return $Text&lt;br /&gt;
 End&lt;br /&gt;
  &lt;br /&gt;
 Public Sub SetTexColor(Value As Integer)&lt;br /&gt;
   $TextColor = Value&lt;br /&gt;
   Me.DrawingArea1.Refresh()&lt;br /&gt;
 End &lt;br /&gt;
 &lt;br /&gt;
 Public Function GetTextColor() As Integer&lt;br /&gt;
   Return $TextColor&lt;br /&gt;
 End&lt;br /&gt;
 &lt;br /&gt;
 Public Sub SetFont(Value As Font)&lt;br /&gt;
   $Font = Value&lt;br /&gt;
   Me.DrawingArea1.Refresh()&lt;br /&gt;
 End&lt;br /&gt;
 &lt;br /&gt;
 Public Function GetFont() As Font&lt;br /&gt;
   Return $Font&lt;br /&gt;
 End&lt;br /&gt;
 &lt;br /&gt;
 Public Sub SetBorder(Value As Boolean)&lt;br /&gt;
   $Border = Value&lt;br /&gt;
   Me.DrawingArea1.Refresh()&lt;br /&gt;
 End&lt;br /&gt;
 &lt;br /&gt;
 Public Function GetBorder() As Boolean&lt;br /&gt;
   Return $Border&lt;br /&gt;
 End&lt;br /&gt;
 &lt;br /&gt;
 Public Sub SetBorderColor(Value As Integer)&lt;br /&gt;
   $BorderColor = Value&lt;br /&gt;
   Me.DrawingArea1.Refresh()&lt;br /&gt;
 End&lt;br /&gt;
 &lt;br /&gt;
 Public Function GetBorderColor() As Integer&lt;br /&gt;
   Return $BorderColor&lt;br /&gt;
 End&lt;br /&gt;
&lt;br /&gt;
Da notare che per ogni variazione delle variabili, si richiama il metodo DrawingArea.Refresh() per poter applicare al volo le rispettive modifiche grafiche del frame.&amp;lt;br&amp;gt;&lt;br /&gt;
A questo punto creiamo il disegno del Frame all'interno dell'evento Draw della DrawingArea:&lt;br /&gt;
 Public Sub DrawingArea1_Draw()&lt;br /&gt;
 &lt;br /&gt;
   Paint.Begin(Me.DrawingArea1)&lt;br /&gt;
     Paint.Font = $Font&lt;br /&gt;
     Paint.Brush = Paint.Color($TextColor)&lt;br /&gt;
     Paint.Text($Text, 0, 0, Me.DrawingArea1.W, Paint.Font.TextHeight($Text) + 3, Align.Center)&lt;br /&gt;
     Paint.Fill()&lt;br /&gt;
     If $Border Then&lt;br /&gt;
       Paint.LineWidth = 0.5&lt;br /&gt;
       Paint.Brush = Paint.Color($BorderColor)&lt;br /&gt;
       Paint.MoveTo((Me.DrawingArea1.W - 5 - Paint.Font.TextWidth($Text)) / 2, Paint.Font.TextHeight($Text) / 2)&lt;br /&gt;
       Paint.LineTo(0, Paint.Font.TextHeight($Text) / 2)&lt;br /&gt;
       Paint.LineTo(0, Me.DrawingArea1.H)&lt;br /&gt;
       Paint.LineTo(Me.DrawingArea1.W, Me.DrawingArea1.H)&lt;br /&gt;
       Paint.LineTo(Me.DrawingArea1.w, Paint.Font.TextHeight($Text) / 2)&lt;br /&gt;
       Paint.LineTo(Me.DrawingArea1.W - ((Me.DrawingArea1.W - 5 - Paint.Font.TextWidth($Text)) / 2), Paint.Font.TextHeight($Text) / 2)&lt;br /&gt;
       Paint.Stroke()&lt;br /&gt;
     Endif&lt;br /&gt;
   Paint.End()&lt;br /&gt;
 &lt;br /&gt;
 End&lt;br /&gt;
&lt;br /&gt;
E per finire creiamo i metodi per variare la Proprietà Arrangement del Panel, in quanto sarà il vero contenitore del Frame:&lt;br /&gt;
 Public Sub SetArrange(Value As Integer)&lt;br /&gt;
   Me.Panel1.Arrangement = Value&lt;br /&gt;
 End&lt;br /&gt;
 &lt;br /&gt;
 Public Function GetArrange() As Integer&lt;br /&gt;
   Return Me.Panel1.Arrangement&lt;br /&gt;
 End&lt;br /&gt;
&lt;br /&gt;
====Classe FrameBox====&lt;br /&gt;
&lt;br /&gt;
Se nel Form appena creato abbiamo avuto una certa 'libertà' nella stesura del codice, adesso dobbiamo procedere con 'rigidità' per poter avere un componente pienamente funzionante nell'ide di Gambas.&lt;br /&gt;
&lt;br /&gt;
=====Dichiarazione Proprietà, Costanti e Variabili Private=====&lt;br /&gt;
Per prima cosa andremo a dichiarare la classe Genitore:&lt;br /&gt;
 Export&lt;br /&gt;
 &lt;br /&gt;
 Inherits UserContainer&lt;br /&gt;
In questo modo abbiamo ereditato proprietà, metodi ed eventi dell'oggetto UserContainer&amp;lt;br&amp;gt;&lt;br /&gt;
Poi andremo a dichiarare le costanti che serviranno all'ide di Gambas per l'integrazione del controllo:&lt;br /&gt;
 Public Const _Properties As String = &amp;quot;*,Text,Foreground{Color}=&amp;amp;H000000&amp;amp;,BorderColor{Color}=&amp;amp;H000000H,Border=True&amp;quot;&lt;br /&gt;
 Public Const _Group As String = &amp;quot;Gambas-it.org&amp;quot;&lt;br /&gt;
 Public Const _Arrangement As Integer = 0&lt;br /&gt;
 Public Const _Size As String = &amp;quot;36;36&amp;quot;&lt;br /&gt;
Dichiarazione delle Proprietà:&lt;br /&gt;
 Property Text As String&lt;br /&gt;
 Property Foreground As Integer&lt;br /&gt;
 Property BorderColor As Integer&lt;br /&gt;
 Property {Border} As Boolean&lt;br /&gt;
 Property {Font} As Font&lt;br /&gt;
 Property Arrangement As Integer&lt;br /&gt;
La Proprietà Arrangement è già compresa nelle Proprietà della classe genitore UserContainer. Dichiarandola nella classe figlia verrà automaticamente gestita da quest'ultima. &lt;br /&gt;
 Private Obs As Observer&lt;br /&gt;
L'oggetto Observer intercetta gli eventi dell'oggetto a lui legato, prima che passino alla classe che ha istanziato il medesimo oggetto. Questo è utile per creare condizioni nell'oggetto, prima che scateni un evento. Nel nostro esempio non sarà indispensabile, ma siccome è un oggetto molto usato nei componenti, è bene sapere come funzioni.&amp;lt;br&amp;gt;&lt;br /&gt;
Ed ora la FFrameBox che genererà la parte grafica del controllo:&lt;br /&gt;
 Private F As FFrameBox&lt;br /&gt;
&lt;br /&gt;
=====Metodo speciale _new()=====&lt;br /&gt;
&lt;br /&gt;
Questo metodo viene richiamato al momento della creazione dell'oggetto Frame. All'interno della sub quindi, vengono istanziati i vari oggetti che compongono il Frame e si danno i valori di default per alcune variabili.&lt;br /&gt;
&lt;br /&gt;
 Public Sub _new()&lt;br /&gt;
 &lt;br /&gt;
   Obs = New Observer(Me) As &amp;quot;Event&amp;quot;&lt;br /&gt;
   F = New FFrameBox(Me)&lt;br /&gt;
   Me._Container = F.Panel1&lt;br /&gt;
   F.SetText(Me.Name)&lt;br /&gt;
 &lt;br /&gt;
 End&lt;br /&gt;
&lt;br /&gt;
Il metodo speciale UserContainer._Container serve per trasferire le proprietà di contenitore vero e proprio, dall'oggetto UserContainer ad un altro oggetto, a patto che quest'ultimo sia a sua volta un contenitore. In questo caso passiamo l'onere di oggetto contenitore dalla classe genitore al Panel1 della FFrameBox, quindi tutti gli oggetti inseriti nel nostro Frame saranno contenuti dall'oggetto Panel1.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Metodi Read/Write delle Proprietà=====&lt;br /&gt;
&lt;br /&gt;
A questo punto non ci rimane altro che scrivere i metodi Read e Write delle varie proprietà, che andranno a modificare le  caratteristiche del nostro Frame.&amp;lt;br&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 Private Function Text_Read() As String&lt;br /&gt;
   Return F.GetText()&lt;br /&gt;
 End&lt;br /&gt;
 Private Sub Text_Write(Value As String)&lt;br /&gt;
   F.SetText(Value)&lt;br /&gt;
 End&lt;br /&gt;
 &lt;br /&gt;
 Private Function Foreground_Read() As Integer&lt;br /&gt;
   Return F.GetTextColor()&lt;br /&gt;
 End&lt;br /&gt;
 Private Sub Foreground_Write(Value As Integer)&lt;br /&gt;
   F.SetTexColor(Value)&lt;br /&gt;
 End&lt;br /&gt;
 &lt;br /&gt;
 Private Function BorderColor_Read() As Integer&lt;br /&gt;
   Return F.GetBorderColor()&lt;br /&gt;
 End&lt;br /&gt;
 Private Sub BorderColor_Write(Value As Integer)&lt;br /&gt;
   F.SetBorderColor(Value)&lt;br /&gt;
 End&lt;br /&gt;
 &lt;br /&gt;
 Private Function Border_Read() As Boolean&lt;br /&gt;
   Return F.GetBorder()&lt;br /&gt;
 End&lt;br /&gt;
 Private Sub Border_Write(Value As Boolean)&lt;br /&gt;
   F.SetBorder(Value)&lt;br /&gt;
 End&lt;br /&gt;
 &lt;br /&gt;
 Private Function Font_Read() As Font&lt;br /&gt;
   Return F.GetFont()&lt;br /&gt;
 End&lt;br /&gt;
 Private Sub Font_Write(Value As Font)&lt;br /&gt;
   Super.Font = Value&lt;br /&gt;
   F.SetFont(Value)&lt;br /&gt;
 End &lt;br /&gt;
 &lt;br /&gt;
 Private Function Arrangement_Read() As Integer&lt;br /&gt;
   Return F.GetArrange()&lt;br /&gt;
 End&lt;br /&gt;
 Private Sub Arrangement_Write(Value As Integer)&lt;br /&gt;
   F.SetArrange(Value)&lt;br /&gt;
 End&lt;br /&gt;
&lt;br /&gt;
=====Esempio per l'oggetto Observer=====&lt;br /&gt;
&lt;br /&gt;
Mettiamo il caso in cui volessimo che il nostro Frame 'accendesse' i bordi al posizionamento del mouse su di esso, dovremmo intercettare l'evento Enter del Frame, che, in questo caso, viene generato dall'oggetto UserContainer. Siccome quest'ultimo viene istanziato nella classe contenitore di un progetto, i vari eventi vengono eseguiti nella classe istanziatrice e non all'interno del medesimo oggetto. Quindi l'onere di cambiare il colore ai bordi spetta al programmatore che ha richiamato l'oggetto nel proprio Progetto.&amp;lt;br&amp;gt;&lt;br /&gt;
Per rendere l'oggetto autonomo da eventuale codice esterno, si richiama appunto l'oggetto Observer, il quale viene legato all'oggetto che si vuole monitorare. In questo esempio, e da come visto nel metodo _new(), si andrebbe semplicemente a scrivere questo codice:&lt;br /&gt;
&lt;br /&gt;
 Private $BorderColor as Integer&lt;br /&gt;
&lt;br /&gt;
 Public Sub Event_Enter()&lt;br /&gt;
 &lt;br /&gt;
   $BorderColor = Me.BorderColor&lt;br /&gt;
   Me.BorderColor = Color.Lighter(Me.BorderColor)&lt;br /&gt;
 &lt;br /&gt;
 End&lt;br /&gt;
&lt;br /&gt;
E, a sua volta, per far tornare i bordi ai suoi colori originali:&lt;br /&gt;
&lt;br /&gt;
 Public Sub Event_Leave()&lt;br /&gt;
 &lt;br /&gt;
   Me.BorderColor = $BorderColor&lt;br /&gt;
 &lt;br /&gt;
 End&lt;/div&gt;</summary>
		<author><name>Milio</name></author>
	</entry>
	<entry>
		<id>https://www.gambas-it.org/wiki/index.php?title=Tutorial_-_creare_un_componente:_il_frame&amp;diff=2503</id>
		<title>Tutorial - creare un componente: il frame</title>
		<link rel="alternate" type="text/html" href="https://www.gambas-it.org/wiki/index.php?title=Tutorial_-_creare_un_componente:_il_frame&amp;diff=2503"/>
		<updated>2010-09-27T20:00:36Z</updated>

		<summary type="html">&lt;p&gt;Milio: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduzione==&lt;br /&gt;
&lt;br /&gt;
Questo tutorial vuol essere di esempio per la realizzazione di un oggetto Frame, che andrà ad integrarsi come componente nell'ambiente di sviluppo del linguaggio di programmazione Gambas versione 3.&lt;br /&gt;
&lt;br /&gt;
L'oggetto Frame, farà utilizzo di una classe genitore di tipo Container il quale verrà utilizzato per ereditare tutte le proprietà, metodi ed eventi che può un contenitore, di una Form che conterrà a sua volta una DrawingArea per il disegno dei bordi e del titolo, e di un Panel che sarà il reale contenitore di oggetti del Frame.&lt;br /&gt;
&lt;br /&gt;
==Creazione del Progetto==&lt;br /&gt;
&lt;br /&gt;
Una volta avviato Gambas, andiamo a selezionare le seguenti voci:&lt;br /&gt;
&lt;br /&gt;
* Tipo Progetto: Applicazione Grafica&lt;br /&gt;
* Opzioni: Creazione di un componente&lt;br /&gt;
&lt;br /&gt;
Dopo aver scelto la cartella che andrà a contenere il Progetto, inseriamo il titolo: gb.framebox.&lt;br /&gt;
&lt;br /&gt;
A questo punto il nostro [[Media:Esploratore1.png|Esploratore di Progetti]] conterrà due classi di esempio che vengono generate di default, una Form di test e la cartella control dove risiederanno le icone dei vari oggetti del componente.&lt;br /&gt;
Andiamo ad eliminare le due classi e le due icone, creando una nuova classe FrameBox, con opzione 'Esportato', e una Form a cui daremo il nome di FFrameBox.&lt;br /&gt;
&lt;br /&gt;
====Form FFrameBox====&lt;br /&gt;
&lt;br /&gt;
L'utilizzare una Form per la realizzazione di un oggetto grafico non è strettamente indispensabile in quanto si possono creare tutti gli oggetti grafici all'interno di una classe. Il solo scopo del suo utilizzo è per semplificare le operazioni di posizionamento e ridimensionamento degli oggetti che andranno a comporre il Frame.&lt;br /&gt;
&lt;br /&gt;
Prima di tutto andiamo a posizionare la DrawingArea come primo strato del nostro oggetto, in quanto l'immagine che andrà a creare dovrà essere obbligatoriamente sul fondo, altrimenti non sarà possibile selezionare gli oggetti contenuti nel Frame. Dopodiché andremo ad inserire il Panel, senza preoccuparci della sua posizione.&lt;br /&gt;
&lt;br /&gt;
=====Impostazioni degli oggetti=====&lt;br /&gt;
&lt;br /&gt;
Le modifiche verranno apportate solamente alle proprietà sotto elencate, alle altre verranno lasciati i valori di default.&lt;br /&gt;
&lt;br /&gt;
* FFrameBox&lt;br /&gt;
 Name = FFrameBox&lt;br /&gt;
 Arrangemet = Fill&lt;br /&gt;
Impostando questa proprietà, gli oggetti figli con proprietà Expand = TRUE si andranno a ridimensionare in automatico alle dimensioni del Form.&lt;br /&gt;
&lt;br /&gt;
* DrawingArea&lt;br /&gt;
 Name = DrawingArea1&lt;br /&gt;
 Expand = TRUE&lt;br /&gt;
&lt;br /&gt;
* Panel&lt;br /&gt;
 Name = Panel1&lt;br /&gt;
 Expan = TRUE&lt;br /&gt;
&lt;br /&gt;
=====Stesura del Codice=====&lt;br /&gt;
&lt;br /&gt;
Come prima cosa si dovranno decidere le varie proprietà che andranno a variare graficamente il Frame:&lt;br /&gt;
&lt;br /&gt;
* Titolo&lt;br /&gt;
* Colore testo&lt;br /&gt;
* Tipo di carattere&lt;br /&gt;
* Bordi visibili&lt;br /&gt;
* Colore bordi&lt;br /&gt;
&lt;br /&gt;
''Dichiarazione delle Variabili Private''&lt;br /&gt;
 Private $Text As String&lt;br /&gt;
 Private $TextColor As Integer&lt;br /&gt;
 Private $Font As New Font&lt;br /&gt;
 Private $Border As Boolean = True&lt;br /&gt;
 Private $BorderColor As Integer&lt;br /&gt;
&lt;br /&gt;
Essendo il codice 'di uso interno' andremo a creare solamente dei metodi per il settaggio di proprietà grafiche:&lt;br /&gt;
&lt;br /&gt;
 Public Sub SetText(Value As String)&lt;br /&gt;
   $Text = Value&lt;br /&gt;
   Me.DrawingArea1.Refresh()&lt;br /&gt;
 End&lt;br /&gt;
 &lt;br /&gt;
 Public Function GetText() As String&lt;br /&gt;
   Return $Text&lt;br /&gt;
 End&lt;br /&gt;
  &lt;br /&gt;
 Public Sub SetTexColor(Value As Integer)&lt;br /&gt;
   $TextColor = Value&lt;br /&gt;
   Me.DrawingArea1.Refresh()&lt;br /&gt;
 End &lt;br /&gt;
 &lt;br /&gt;
 Public Function GetTextColor() As Integer&lt;br /&gt;
   Return $TextColor&lt;br /&gt;
 End&lt;br /&gt;
 &lt;br /&gt;
 Public Sub SetFont(Value As Font)&lt;br /&gt;
   $Font = Value&lt;br /&gt;
   Me.DrawingArea1.Refresh()&lt;br /&gt;
 End&lt;br /&gt;
 &lt;br /&gt;
 Public Function GetFont() As Font&lt;br /&gt;
   Return $Font&lt;br /&gt;
 End&lt;br /&gt;
 &lt;br /&gt;
 Public Sub SetBorder(Value As Boolean)&lt;br /&gt;
   $Border = Value&lt;br /&gt;
   Me.DrawingArea1.Refresh()&lt;br /&gt;
 End&lt;br /&gt;
 &lt;br /&gt;
 Public Function GetBorder() As Boolean&lt;br /&gt;
   Return $Border&lt;br /&gt;
 End&lt;br /&gt;
 &lt;br /&gt;
 Public Sub SetBorderColor(Value As Integer)&lt;br /&gt;
   $BorderColor = Value&lt;br /&gt;
   Me.DrawingArea1.Refresh()&lt;br /&gt;
 End&lt;br /&gt;
 &lt;br /&gt;
 Public Function GetBorderColor() As Integer&lt;br /&gt;
   Return $BorderColor&lt;br /&gt;
 End&lt;br /&gt;
&lt;br /&gt;
Da notare che per ogni variazione delle variabili, si richiama il metodo DrawingArea.Refresh() per poter applicare al volo le rispettive modifiche grafiche del frame.&amp;lt;br&amp;gt;&lt;br /&gt;
A questo punto creiamo il disegno del Frame all'interno dell'evento Draw della DrawingArea:&lt;br /&gt;
 Public Sub DrawingArea1_Draw()&lt;br /&gt;
 &lt;br /&gt;
   Paint.Begin(Me.DrawingArea1)&lt;br /&gt;
     Paint.Font = $Font&lt;br /&gt;
     Paint.Brush = Paint.Color($TextColor)&lt;br /&gt;
     Paint.Text($Text, 0, 0, Me.DrawingArea1.W, Paint.Font.TextHeight($Text) + 3, Align.Center)&lt;br /&gt;
     Paint.Fill()&lt;br /&gt;
     If $Border Then&lt;br /&gt;
       Paint.LineWidth = 0.5&lt;br /&gt;
       Paint.Brush = Paint.Color($BorderColor)&lt;br /&gt;
       Paint.MoveTo((Me.DrawingArea1.W - 5 - Paint.Font.TextWidth($Text)) / 2, Paint.Font.TextHeight($Text) / 2)&lt;br /&gt;
       Paint.LineTo(0, Paint.Font.TextHeight($Text) / 2)&lt;br /&gt;
       Paint.LineTo(0, Me.DrawingArea1.H)&lt;br /&gt;
       Paint.LineTo(Me.DrawingArea1.W, Me.DrawingArea1.H)&lt;br /&gt;
       Paint.LineTo(Me.DrawingArea1.w, Paint.Font.TextHeight($Text) / 2)&lt;br /&gt;
       Paint.LineTo(Me.DrawingArea1.W - ((Me.DrawingArea1.W - 5 - Paint.Font.TextWidth($Text)) / 2), Paint.Font.TextHeight($Text) / 2)&lt;br /&gt;
       Paint.Stroke()&lt;br /&gt;
     Endif&lt;br /&gt;
   Paint.End()&lt;br /&gt;
 &lt;br /&gt;
 End&lt;br /&gt;
&lt;br /&gt;
E per finire creiamo i metodi per variare la Proprietà Arrangement del Panel, in quanto sarà il vero contenitore del Frame:&lt;br /&gt;
 Public Sub SetArrange(Value As Integer)&lt;br /&gt;
   Me.Panel1.Arrangement = Value&lt;br /&gt;
 End&lt;br /&gt;
 &lt;br /&gt;
 Public Function GetArrange() As Integer&lt;br /&gt;
   Return Me.Panel1.Arrangement&lt;br /&gt;
 End&lt;br /&gt;
&lt;br /&gt;
====Classe FrameBox====&lt;br /&gt;
&lt;br /&gt;
Se nel Form appena creato abbiamo avuto una certa 'libertà' nella stesura del codice, adesso dobbiamo procedere con 'rigidità' per poter avere un componente pienamente funzionante nell'ide di Gambas.&lt;br /&gt;
&lt;br /&gt;
=====Dichiarazione Proprietà, Costanti e Variabili Private=====&lt;br /&gt;
Per prima cosa andremo a dichiarare la classe Genitore:&lt;br /&gt;
 Export&lt;br /&gt;
 &lt;br /&gt;
 Inherits UserContainer&lt;br /&gt;
In questo modo abbiamo ereditato proprietà, metodi ed eventi dell'oggetto UserContainer&amp;lt;br&amp;gt;&lt;br /&gt;
Poi andremo a dichiarare le costanti che serviranno all'ide di Gambas per l'integrazione del controllo:&lt;br /&gt;
 Public Const _Properties As String = &amp;quot;*,Text,Foreground{Color}=&amp;amp;H000000&amp;amp;,BorderColor{Color}=&amp;amp;H000000H,Border=True&amp;quot;&lt;br /&gt;
 Public Const _Group As String = &amp;quot;Gambas-it.org&amp;quot;&lt;br /&gt;
 Public Const _Arrangement As Integer = 0&lt;br /&gt;
 Public Const _Size As String = &amp;quot;36;36&amp;quot;&lt;br /&gt;
Dichiarazione delle Proprietà:&lt;br /&gt;
 Property Text As String&lt;br /&gt;
 Property Foreground As Integer&lt;br /&gt;
 Property BorderColor As Integer&lt;br /&gt;
 Property {Border} As Boolean&lt;br /&gt;
 Property {Font} As Font&lt;br /&gt;
 Property Arrangement As Integer&lt;br /&gt;
La Proprietà Arrangement è già compresa nelle Proprietà della classe genitore UserContainer. Dichiarandola nella classe figlia verrà automaticamente gestita da quest'ultima. &lt;br /&gt;
 Private Obs As Observer&lt;br /&gt;
L'oggetto Observer intercetta gli eventi dell'oggetto a lui legato, prima che passino alla classe che ha istanziato il medesimo oggetto. Questo è utile per creare condizioni nell'oggetto, prima che scateni un evento. Nel nostro esempio non sarà indispensabile, ma siccome è un oggetto molto usato nei componenti, è bene sapere come funzioni.&amp;lt;br&amp;gt;&lt;br /&gt;
Ed ora la FFrameBox che genererà la parte grafica del controllo:&lt;br /&gt;
 Private F As FFrameBox&lt;br /&gt;
&lt;br /&gt;
=====Metodo speciale _new()=====&lt;br /&gt;
&lt;br /&gt;
Questo metodo viene richiamato al momento della creazione dell'oggetto Frame. All'interno della sub quindi, vengono istanziati i vari oggetti che compongono il Frame e si danno i valori di default per alcune variabili.&lt;br /&gt;
&lt;br /&gt;
 Public Sub _new()&lt;br /&gt;
 &lt;br /&gt;
   Obs = New Observer(Me) As &amp;quot;Event&amp;quot;&lt;br /&gt;
   F = New FFrameBox(Me)&lt;br /&gt;
   Me._Container = F.Panel1&lt;br /&gt;
   F.SetText(Me.Name)&lt;br /&gt;
 &lt;br /&gt;
 End&lt;br /&gt;
&lt;br /&gt;
Il metodo speciale UserContainer._Container serve per trasferire le proprietà di contenitore vero e proprio, dall'oggetto UserContainer ad un altro oggetto, a patto che quest'ultimo sia a sua volta un contenitore. In questo caso passiamo l'onere di oggetto contenitore dalla classe genitore al Panel1 della FFrameBox, quindi tutti gli oggetti inseriti nel nostro Frame saranno contenuti dall'oggetto Panel1.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Metodi Read/Write delle Proprietà=====&lt;br /&gt;
&lt;br /&gt;
A questo punto non ci rimane altro che scrivere i metodi Read e Write delle varie proprietà, che andranno a modificare le  caratteristiche del nostro Frame.&amp;lt;br&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 Private Function Text_Read() As String&lt;br /&gt;
   Return F.GetText()&lt;br /&gt;
 End&lt;br /&gt;
 Private Sub Text_Write(Value As String)&lt;br /&gt;
   F.SetText(Value)&lt;br /&gt;
 End&lt;br /&gt;
 &lt;br /&gt;
 Private Function Foreground_Read() As Integer&lt;br /&gt;
   Return F.GetTextColor()&lt;br /&gt;
 End&lt;br /&gt;
 Private Sub Foreground_Write(Value As Integer)&lt;br /&gt;
   F.SetTexColor(Value)&lt;br /&gt;
 End&lt;br /&gt;
 &lt;br /&gt;
 Private Function BorderColor_Read() As Integer&lt;br /&gt;
   Return F.GetBorderColor()&lt;br /&gt;
 End&lt;br /&gt;
 Private Sub BorderColor_Write(Value As Integer)&lt;br /&gt;
   F.SetBorderColor(Value)&lt;br /&gt;
 End&lt;br /&gt;
 &lt;br /&gt;
 Private Function Border_Read() As Boolean&lt;br /&gt;
   Return F.GetBorder()&lt;br /&gt;
 End&lt;br /&gt;
 Private Sub Border_Write(Value As Boolean)&lt;br /&gt;
   F.SetBorder(Value)&lt;br /&gt;
 End&lt;br /&gt;
 &lt;br /&gt;
 Private Function Font_Read() As Font&lt;br /&gt;
   Return F.GetFont()&lt;br /&gt;
 End&lt;br /&gt;
 Private Sub Font_Write(Value As Font)&lt;br /&gt;
   Super.Font = Value&lt;br /&gt;
   F.SetFont(Value)&lt;br /&gt;
 End &lt;br /&gt;
 &lt;br /&gt;
 Private Function Arrangement_Read() As Integer&lt;br /&gt;
   Return F.GetArrange()&lt;br /&gt;
 End&lt;br /&gt;
 Private Sub Arrangement_Write(Value As Integer)&lt;br /&gt;
   F.SetArrange(Value)&lt;br /&gt;
 End&lt;br /&gt;
&lt;br /&gt;
=====Esempio per l'oggetto Observer=====&lt;br /&gt;
&lt;br /&gt;
Mettiamo il caso in cui volessimo che il nostro Frame 'accendesse' i bordi al posizionamento del mouse su di esso, dovremmo intercettare l'evento Enter del Frame, che, in questo caso, viene generato dall'oggetto UserContainer. Siccome quest'ultimo viene istanziato nella classe contenitore di un progetto, i vari eventi vengono eseguiti nella classe istanziatrice e non all'interno del medesimo oggetto. Quindi l'onere di cambiare il colore ai bordi spetta al programmatore che ha richiamato l'oggetto nel proprio Progetto.&amp;lt;br&amp;gt;&lt;br /&gt;
Per rendere l'oggetto autonomo da eventuale codice esterno, si richiama appunto l'oggetto Observer, il quale viene legato all'oggetto che si vuole monitorare. In questo esempio, e da come visto nel metodo _new(), si andrebbe semplicemente a scrivere questo codice:&lt;br /&gt;
&lt;br /&gt;
 Public Sub Event_Enter()&lt;br /&gt;
 &lt;br /&gt;
   Me.BorderColor = Color.Lighter(Me.BorderColor)&lt;br /&gt;
 &lt;br /&gt;
 End&lt;br /&gt;
&lt;br /&gt;
E, a sua volta, per far tornare i bordi ai suoi colori originali:&lt;br /&gt;
&lt;br /&gt;
 Public Sub Event_Leave()&lt;br /&gt;
 &lt;br /&gt;
   Me.BorderColor = Color.Darker(Me.Bordercolor)&lt;br /&gt;
 &lt;br /&gt;
 End&lt;/div&gt;</summary>
		<author><name>Milio</name></author>
	</entry>
	<entry>
		<id>https://www.gambas-it.org/wiki/index.php?title=Tutorial_-_creare_un_componente:_il_frame&amp;diff=2502</id>
		<title>Tutorial - creare un componente: il frame</title>
		<link rel="alternate" type="text/html" href="https://www.gambas-it.org/wiki/index.php?title=Tutorial_-_creare_un_componente:_il_frame&amp;diff=2502"/>
		<updated>2010-09-27T19:29:42Z</updated>

		<summary type="html">&lt;p&gt;Milio: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduzione==&lt;br /&gt;
&lt;br /&gt;
Questo tutorial vuol essere di esempio per la realizzazione di un oggetto Frame, che andrà ad integrarsi come componente nell'ambiente di sviluppo del linguaggio di programmazione Gambas versione 3.&lt;br /&gt;
&lt;br /&gt;
L'oggetto Frame, farà utilizzo di una classe genitore di tipo Container il quale verrà utilizzato per ereditare tutte le proprietà, metodi ed eventi che può un contenitore, di una Form che conterrà a sua volta una DrawingArea per il disegno dei bordi e del titolo, e di un Panel che sarà il reale contenitore di oggetti del Frame.&lt;br /&gt;
&lt;br /&gt;
==Creazione del Progetto==&lt;br /&gt;
&lt;br /&gt;
Una volta avviato Gambas, andiamo a selezionare le seguenti voci:&lt;br /&gt;
&lt;br /&gt;
* Tipo Progetto: Applicazione Grafica&lt;br /&gt;
* Opzioni: Creazione di un componente&lt;br /&gt;
&lt;br /&gt;
Dopo aver scelto la cartella che andrà a contenere il Progetto, inseriamo il titolo: gb.framebox.&lt;br /&gt;
&lt;br /&gt;
A questo punto il nostro [[Media:Esploratore1.png|Esploratore di Progetti]] conterrà due classi di esempio che vengono generate di default, una Form di test e la cartella control dove risiederanno le icone dei vari oggetti del componente.&lt;br /&gt;
Andiamo ad eliminare le due classi e le due icone, creando una nuova classe FrameBox, con opzione 'Esportato', e una Form a cui daremo il nome di FFrameBox.&lt;br /&gt;
&lt;br /&gt;
====Form FFrameBox====&lt;br /&gt;
&lt;br /&gt;
L'utilizzare una Form per la realizzazione di un oggetto grafico non è strettamente indispensabile in quanto si possono creare tutti gli oggetti grafici all'interno di una classe. Il solo scopo del suo utilizzo è per semplificare le operazioni di posizionamento e ridimensionamento degli oggetti che andranno a comporre il Frame.&lt;br /&gt;
&lt;br /&gt;
Prima di tutto andiamo a posizionare la DrawingArea come primo strato del nostro oggetto, in quanto l'immagine che andrà a creare dovrà essere obbligatoriamente sul fondo, altrimenti non sarà possibile selezionare gli oggetti contenuti nel Frame. Dopodiché andremo ad inserire il Panel, senza preoccuparci della sua posizione.&lt;br /&gt;
&lt;br /&gt;
=====Impostazioni degli oggetti=====&lt;br /&gt;
&lt;br /&gt;
Le modifiche verranno apportate solamente alle proprietà sotto elencate, alle altre verranno lasciati i valori di default.&lt;br /&gt;
&lt;br /&gt;
* FFrameBox&lt;br /&gt;
 Name = FFrameBox&lt;br /&gt;
 Arrangemet = Fill&lt;br /&gt;
Impostando questa proprietà, gli oggetti figli con proprietà Expand = TRUE si andranno a ridimensionare in automatico alle dimensioni del Form.&lt;br /&gt;
&lt;br /&gt;
* DrawingArea&lt;br /&gt;
 Name = DrawingArea1&lt;br /&gt;
 Expand = TRUE&lt;br /&gt;
&lt;br /&gt;
* Panel&lt;br /&gt;
 Name = Panel1&lt;br /&gt;
 Expan = TRUE&lt;br /&gt;
&lt;br /&gt;
=====Stesura del Codice=====&lt;br /&gt;
&lt;br /&gt;
Come prima cosa si dovranno decidere le varie proprietà che andranno a variare graficamente il Frame:&lt;br /&gt;
&lt;br /&gt;
* Titolo&lt;br /&gt;
* Colore testo&lt;br /&gt;
* Tipo di carattere&lt;br /&gt;
* Bordi visibili&lt;br /&gt;
* Colore bordi&lt;br /&gt;
&lt;br /&gt;
''Dichiarazione delle Variabili Private''&lt;br /&gt;
 Private $Text As String&lt;br /&gt;
 Private $TextColor As Integer&lt;br /&gt;
 Private $Font As New Font&lt;br /&gt;
 Private $Border As Boolean = True&lt;br /&gt;
 Private $BorderColor As Integer&lt;br /&gt;
&lt;br /&gt;
Essendo il codice 'di uso interno' andremo a creare solamente dei metodi per il settaggio di proprietà grafiche:&lt;br /&gt;
&lt;br /&gt;
 Public Sub SetText(Value As String)&lt;br /&gt;
   $Text = Value&lt;br /&gt;
   Me.DrawingArea1.Refresh()&lt;br /&gt;
 End&lt;br /&gt;
 &lt;br /&gt;
 Public Function GetText() As String&lt;br /&gt;
   Return $Text&lt;br /&gt;
 End&lt;br /&gt;
  &lt;br /&gt;
 Public Sub SetTexColor(Value As Integer)&lt;br /&gt;
   $TextColor = Value&lt;br /&gt;
   Me.DrawingArea1.Refresh()&lt;br /&gt;
 End &lt;br /&gt;
 &lt;br /&gt;
 Public Function GetTextColor() As Integer&lt;br /&gt;
   Return $TextColor&lt;br /&gt;
 End&lt;br /&gt;
 &lt;br /&gt;
 Public Sub SetFont(Value As Font)&lt;br /&gt;
   $Font = Value&lt;br /&gt;
   Me.DrawingArea1.Refresh()&lt;br /&gt;
 End&lt;br /&gt;
 &lt;br /&gt;
 Public Function GetFont() As Font&lt;br /&gt;
   Return $Font&lt;br /&gt;
 End&lt;br /&gt;
 &lt;br /&gt;
 Public Sub SetBorder(Value As Boolean)&lt;br /&gt;
   $Border = Value&lt;br /&gt;
   Me.DrawingArea1.Refresh()&lt;br /&gt;
 End&lt;br /&gt;
 &lt;br /&gt;
 Public Function GetBorder() As Boolean&lt;br /&gt;
   Return $Border&lt;br /&gt;
 End&lt;br /&gt;
 &lt;br /&gt;
 Public Sub SetBorderColor(Value As Integer)&lt;br /&gt;
   $BorderColor = Value&lt;br /&gt;
   Me.DrawingArea1.Refresh()&lt;br /&gt;
 End&lt;br /&gt;
 &lt;br /&gt;
 Public Function GetBorderColor() As Integer&lt;br /&gt;
   Return $BorderColor&lt;br /&gt;
 End&lt;br /&gt;
&lt;br /&gt;
Da notare che per ogni variazione delle variabili, si richiama il metodo DrawingArea.Refresh() per poter applicare al volo le rispettive modifiche grafiche del frame.&amp;lt;br&amp;gt;&lt;br /&gt;
A questo punto creiamo il disegno del Frame all'interno dell'evento Draw della DrawingArea:&lt;br /&gt;
 Public Sub DrawingArea1_Draw()&lt;br /&gt;
 &lt;br /&gt;
   Paint.Begin(Me.DrawingArea1)&lt;br /&gt;
     Paint.Font = $Font&lt;br /&gt;
     Paint.Brush = Paint.Color($TextColor)&lt;br /&gt;
     Paint.Text($Text, 0, 0, Me.DrawingArea1.W, Paint.Font.TextHeight($Text) + 3, Align.Center)&lt;br /&gt;
     Paint.Fill()&lt;br /&gt;
     If $Border Then&lt;br /&gt;
       Paint.LineWidth = 0.5&lt;br /&gt;
       Paint.Brush = Paint.Color($BorderColor)&lt;br /&gt;
       Paint.MoveTo((Me.DrawingArea1.W - 5 - Paint.Font.TextWidth($Text)) / 2, Paint.Font.TextHeight($Text) / 2)&lt;br /&gt;
       Paint.LineTo(0, Paint.Font.TextHeight($Text) / 2)&lt;br /&gt;
       Paint.LineTo(0, Me.DrawingArea1.H)&lt;br /&gt;
       Paint.LineTo(Me.DrawingArea1.W, Me.DrawingArea1.H)&lt;br /&gt;
       Paint.LineTo(Me.DrawingArea1.w, Paint.Font.TextHeight($Text) / 2)&lt;br /&gt;
       Paint.LineTo(Me.DrawingArea1.W - ((Me.DrawingArea1.W - 5 - Paint.Font.TextWidth($Text)) / 2), Paint.Font.TextHeight($Text) / 2)&lt;br /&gt;
       Paint.Stroke()&lt;br /&gt;
     Endif&lt;br /&gt;
   Paint.End()&lt;br /&gt;
 &lt;br /&gt;
 End&lt;br /&gt;
&lt;br /&gt;
E per finire creiamo i metodi per variare la Proprietà Arrangement del Panel, in quanto sarà il vero contenitore del Frame:&lt;br /&gt;
 Public Sub SetArrange(Value As Integer)&lt;br /&gt;
   Me.Panel1.Arrangement = Value&lt;br /&gt;
 End&lt;br /&gt;
 &lt;br /&gt;
 Public Function GetArrange() As Integer&lt;br /&gt;
   Return Me.Panel1.Arrangement&lt;br /&gt;
 End&lt;br /&gt;
&lt;br /&gt;
====Classe FrameBox====&lt;br /&gt;
&lt;br /&gt;
Se nel Form appena creato abbiamo avuto una certa 'libertà' nella stesura del codice, adesso dobbiamo procedere con 'rigidità' per poter avere un componente pienamente funzionante nell'ide di Gambas.&lt;br /&gt;
&lt;br /&gt;
=====Dichiarazione Proprietà, Costanti e Variabili Private=====&lt;br /&gt;
Per prima cosa andremo a dichiarare la classe Genitore:&lt;br /&gt;
 Export&lt;br /&gt;
 &lt;br /&gt;
 Inherits UserContainer&lt;br /&gt;
In questo modo abbiamo ereditato proprietà, metodi ed eventi dell'oggetto UserContainer&amp;lt;br&amp;gt;&lt;br /&gt;
Poi andremo a dichiarare le costanti che serviranno all'ide di Gambas per l'integrazione del controllo:&lt;br /&gt;
 Public Const _Properties As String = &amp;quot;*,Text,Foreground{Color}=&amp;amp;H000000&amp;amp;,BorderColor{Color}=&amp;amp;H000000H,Border=True&amp;quot;&lt;br /&gt;
 Public Const _Group As String = &amp;quot;Gambas-it.org&amp;quot;&lt;br /&gt;
 Public Const _Arrangement As Integer = 0&lt;br /&gt;
 Public Const _Size As String = &amp;quot;36;36&amp;quot;&lt;br /&gt;
Dichiarazione delle Proprietà:&lt;br /&gt;
 Property Text As String&lt;br /&gt;
 Property Foreground As Integer&lt;br /&gt;
 Property BorderColor As Integer&lt;br /&gt;
 Property {Border} As Boolean&lt;br /&gt;
 Property {Font} As Font&lt;br /&gt;
 Property Arrangement As Integer&lt;br /&gt;
La Proprietà Arrangement è già compresa nelle Proprietà della classe genitore UserContainer. Dichiarandola nella classe figlia verrà automaticamente gestita da quest'ultima. &lt;br /&gt;
 Private Obs As Observer&lt;br /&gt;
L'oggetto Observer intercetta gli eventi dell'oggetto a lui legato, prima che passino alla classe che ha istanziato il medesimo oggetto. Questo è utile per creare condizioni nell'oggetto, prima che scateni un evento. Nel nostro esempio non sarà indispensabile, ma siccome è un oggetto molto usato nei componenti, è bene sapere come funzioni.&amp;lt;br&amp;gt;&lt;br /&gt;
Ed ora la FFrameBox che genererà la parte grafica del controllo:&lt;br /&gt;
 Private F As FFrameBox&lt;/div&gt;</summary>
		<author><name>Milio</name></author>
	</entry>
	<entry>
		<id>https://www.gambas-it.org/wiki/index.php?title=Tutorial_-_creare_un_componente:_il_frame&amp;diff=2500</id>
		<title>Tutorial - creare un componente: il frame</title>
		<link rel="alternate" type="text/html" href="https://www.gambas-it.org/wiki/index.php?title=Tutorial_-_creare_un_componente:_il_frame&amp;diff=2500"/>
		<updated>2010-09-24T23:01:37Z</updated>

		<summary type="html">&lt;p&gt;Milio: /* Dichiarazione Proprietà, Costanti e Variabili Private */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduzione==&lt;br /&gt;
&lt;br /&gt;
Questo tutorial vuol essere di esempio per la realizzazione di un oggetto Frame, che andrà ad integrarsi come componente nell'ambiente di sviluppo del linguaggio di programmazione Gambas versione 3.&lt;br /&gt;
&lt;br /&gt;
L'oggetto Frame, farà utilizzo di una classe genitore di tipo Container il quale verrà utilizzato per ereditare tutte le proprietà, metodi ed eventi che può un contenitore, di una Form che conterrà a sua volta una DrawingArea per il disegno dei bordi e del titolo, e di un Panel che sarà il reale contenitore di oggetti del Frame.&lt;br /&gt;
&lt;br /&gt;
==Creazione del Progetto==&lt;br /&gt;
&lt;br /&gt;
Una volta avviato Gambas, andiamo a selezionare le seguenti voci:&lt;br /&gt;
&lt;br /&gt;
* Tipo Progetto: Applicazione Grafica&lt;br /&gt;
* Opzioni: Creazione di un componente&lt;br /&gt;
&lt;br /&gt;
Dopo aver scelto la cartella che andrà a contenere il Progetto, inseriamo il titolo: gb.framebox.&lt;br /&gt;
&lt;br /&gt;
A questo punto il nostro [[Media:Esploratore1.png|Esploratore di Progetti]] conterrà due classi di esempio che vengono generate di default, una Form di test e la cartella control dove risiederanno le icone dei vari oggetti del componente.&lt;br /&gt;
Andiamo ad eliminare le due classi e le due icone, creando una nuova classe FrameBox, con opzione 'Esportato', e una Form a cui daremo il nome di FFrameBox.&lt;br /&gt;
&lt;br /&gt;
====Form FFrameBox====&lt;br /&gt;
&lt;br /&gt;
L'utilizzare una Form per la realizzazione di un oggetto grafico non è strettamente indispensabile in quanto si possono creare tutti gli oggetti grafici all'interno di una classe. Il solo scopo del suo utilizzo è per semplificare le operazioni di posizionamento e ridimensionamento degli oggetti che andranno a comporre il Frame.&lt;br /&gt;
&lt;br /&gt;
Prima di tutto andiamo a posizionare la DrawingArea come primo strato del nostro oggetto, in quanto l'immagine che andrà a creare dovrà essere obbligatoriamente sul fondo, altrimenti non sarà possibile selezionare gli oggetti contenuti nel Frame. Dopodiché andremo ad inserire il Panel, senza preoccuparci della sua posizione.&lt;br /&gt;
&lt;br /&gt;
=====Impostazioni degli oggetti=====&lt;br /&gt;
&lt;br /&gt;
Le modifiche verranno apportate solamente alle proprietà sotto elencate, alle altre verranno lasciati i valori di default.&lt;br /&gt;
&lt;br /&gt;
* FFrameBox&lt;br /&gt;
 Name = FFrameBox&lt;br /&gt;
 Arrangemet = Fill&lt;br /&gt;
Impostando questa proprietà, gli oggetti figli con proprietà Expand = TRUE si andranno a ridimensionare in automatico alle dimensioni del Form.&lt;br /&gt;
&lt;br /&gt;
* DrawingArea&lt;br /&gt;
 Name = DrawingArea1&lt;br /&gt;
 Expand = TRUE&lt;br /&gt;
&lt;br /&gt;
* Panel&lt;br /&gt;
 Name = Panel1&lt;br /&gt;
 Expan = TRUE&lt;br /&gt;
&lt;br /&gt;
=====Stesura del Codice=====&lt;br /&gt;
&lt;br /&gt;
Come prima cosa si dovranno decidere le varie proprietà che andranno a variare graficamente il Frame:&lt;br /&gt;
&lt;br /&gt;
* Titolo&lt;br /&gt;
* Colore testo&lt;br /&gt;
* Tipo di carattere&lt;br /&gt;
* Bordi visibili&lt;br /&gt;
* Colore bordi&lt;br /&gt;
&lt;br /&gt;
''Dichiarazione delle Variabili Private''&lt;br /&gt;
 Private $Text As String&lt;br /&gt;
 Private $TextColor As Integer&lt;br /&gt;
 Private $Font As New Font&lt;br /&gt;
 Private $Border As Boolean = True&lt;br /&gt;
 Private $BorderColor As Integer&lt;br /&gt;
&lt;br /&gt;
Essendo il codice 'di uso interno' andremo a creare solamente dei metodi per il settaggio di proprietà grafiche:&lt;br /&gt;
&lt;br /&gt;
 Public Sub SetText(Value As String)&lt;br /&gt;
   $Text = Value&lt;br /&gt;
   Me.DrawingArea1.Refresh()&lt;br /&gt;
 End&lt;br /&gt;
 &lt;br /&gt;
 Public Function GetText() As String&lt;br /&gt;
   Return $Text&lt;br /&gt;
 End&lt;br /&gt;
  &lt;br /&gt;
 Public Sub SetTexColor(Value As Integer)&lt;br /&gt;
   $TextColor = Value&lt;br /&gt;
   Me.DrawingArea1.Refresh()&lt;br /&gt;
 End &lt;br /&gt;
 &lt;br /&gt;
 Public Function GetTextColor() As Integer&lt;br /&gt;
   Return $TextColor&lt;br /&gt;
 End&lt;br /&gt;
 &lt;br /&gt;
 Public Sub SetFont(Value As Font)&lt;br /&gt;
   $Font = Value&lt;br /&gt;
   Me.DrawingArea1.Refresh()&lt;br /&gt;
 End&lt;br /&gt;
 &lt;br /&gt;
 Public Function GetFont() As Font&lt;br /&gt;
   Return $Font&lt;br /&gt;
 End&lt;br /&gt;
 &lt;br /&gt;
 Public Sub SetBorder(Value As Boolean)&lt;br /&gt;
   $Border = Value&lt;br /&gt;
   Me.DrawingArea1.Refresh()&lt;br /&gt;
 End&lt;br /&gt;
 &lt;br /&gt;
 Public Function GetBorder() As Boolean&lt;br /&gt;
   Return $Border&lt;br /&gt;
 End&lt;br /&gt;
 &lt;br /&gt;
 Public Sub SetBorderColor(Value As Integer)&lt;br /&gt;
   $BorderColor = Value&lt;br /&gt;
   Me.DrawingArea1.Refresh()&lt;br /&gt;
 End&lt;br /&gt;
 &lt;br /&gt;
 Public Function GetBorderColor() As Integer&lt;br /&gt;
   Return $BorderColor&lt;br /&gt;
 End&lt;br /&gt;
&lt;br /&gt;
A questo punto creiamo il disegno del Frame all'interno dell'evento Draw della DrawingArea:&lt;br /&gt;
 Public Sub DrawingArea1_Draw()&lt;br /&gt;
 &lt;br /&gt;
   Paint.Begin(Me.DrawingArea1)&lt;br /&gt;
     Paint.Font = $Font&lt;br /&gt;
     Paint.Brush = Paint.Color($TextColor)&lt;br /&gt;
     Paint.Text($Text, 0, 0, Me.DrawingArea1.W, Paint.Font.TextHeight($Text) + 3, Align.Center)&lt;br /&gt;
     Paint.Fill()&lt;br /&gt;
     If $Border Then&lt;br /&gt;
       Paint.LineWidth = 0.5&lt;br /&gt;
       Paint.Brush = Paint.Color($BorderColor)&lt;br /&gt;
       Paint.MoveTo((Me.DrawingArea1.W - 5 - Paint.Font.TextWidth($Text)) / 2, Paint.Font.TextHeight($Text) / 2)&lt;br /&gt;
       Paint.LineTo(0, Paint.Font.TextHeight($Text) / 2)&lt;br /&gt;
       Paint.LineTo(0, Me.DrawingArea1.H)&lt;br /&gt;
       Paint.LineTo(Me.DrawingArea1.W, Me.DrawingArea1.H)&lt;br /&gt;
       Paint.LineTo(Me.DrawingArea1.w, Paint.Font.TextHeight($Text) / 2)&lt;br /&gt;
       Paint.LineTo(Me.DrawingArea1.W - ((Me.DrawingArea1.W - 5 - Paint.Font.TextWidth($Text)) / 2), Paint.Font.TextHeight($Text) / 2)&lt;br /&gt;
       Paint.Stroke()&lt;br /&gt;
     Endif&lt;br /&gt;
   Paint.End()&lt;br /&gt;
 &lt;br /&gt;
 End&lt;br /&gt;
&lt;br /&gt;
E per finire creiamo i metodi per variare la Proprietà Arrangement del Panel, in quanto sarà il vero contenitore del Frame:&lt;br /&gt;
 Public Sub SetArrange(Value As Integer)&lt;br /&gt;
   Me.Panel1.Arrangement = Value&lt;br /&gt;
 End&lt;br /&gt;
 &lt;br /&gt;
 Public Function GetArrange() As Integer&lt;br /&gt;
   Return Me.Panel1.Arrangement&lt;br /&gt;
 End&lt;br /&gt;
&lt;br /&gt;
====Classe FrameBox====&lt;br /&gt;
&lt;br /&gt;
Se nel Form appena creato abbiamo avuto una certa 'libertà' nella stesura del codice, adesso dobbiamo procedere con 'rigidità' per poter avere un componente pienamente funzionante nell'ide di Gambas.&lt;br /&gt;
&lt;br /&gt;
=====Dichiarazione Proprietà, Costanti e Variabili Private=====&lt;br /&gt;
Per prima cosa andremo a dichiarare la classe Genitore:&lt;br /&gt;
 Export&lt;br /&gt;
 &lt;br /&gt;
 Inherits UserContainer&lt;br /&gt;
In questo modo abbiamo ereditato proprietà, metodi ed eventi dell'oggetto UserContainer&amp;lt;br&amp;gt;&lt;br /&gt;
Poi andremo a dichiarare le costanti che serviranno all'ide di Gambas per l'integrazione del controllo:&lt;br /&gt;
 Public Const _Properties As String = &amp;quot;*,Text,Foreground{Color}=&amp;amp;H000000&amp;amp;,BorderColor{Color}=&amp;amp;H000000H,Border=True&amp;quot;&lt;br /&gt;
 Public Const _Group As String = &amp;quot;Gambas-it.org&amp;quot;&lt;br /&gt;
 Public Const _Arrangement As Integer = 0&lt;br /&gt;
 Public Const _Size As String = &amp;quot;36;36&amp;quot;&lt;br /&gt;
Dichiarazione delle Proprietà:&lt;br /&gt;
 Property Text As String&lt;br /&gt;
 Property Foreground As Integer&lt;br /&gt;
 Property BorderColor As Integer&lt;br /&gt;
 Property {Border} As Boolean&lt;br /&gt;
 Property {Font} As Font&lt;br /&gt;
 Property Arrangement As Integer&lt;br /&gt;
La Proprietà Arrangement è già compresa nelle Proprietà della classe genitore UserContainer. Dichiarandola nella classe figlia verrà automaticamente gestita da quest'ultima. &lt;br /&gt;
 Private Obs As Observer&lt;br /&gt;
L'oggetto Observer intercetta gli eventi dell'oggetto a lui legato, prima che passino alla classe genitore del medesimo oggetto. Questo è utile per creare condizioni nell'oggetto, prima che scateni un evento. Nel nostro esempio non sarà indispensabile, ma siccome è un oggetto molto usato nei componenti, è bene sapere come funzioni.&amp;lt;br&amp;gt;&lt;br /&gt;
Ed ora la FFrameBox che genererà la parte grafica del controllo:&lt;br /&gt;
 Private F As FFrameBox&lt;/div&gt;</summary>
		<author><name>Milio</name></author>
	</entry>
	<entry>
		<id>https://www.gambas-it.org/wiki/index.php?title=Tutorial_-_creare_un_componente:_il_frame&amp;diff=2499</id>
		<title>Tutorial - creare un componente: il frame</title>
		<link rel="alternate" type="text/html" href="https://www.gambas-it.org/wiki/index.php?title=Tutorial_-_creare_un_componente:_il_frame&amp;diff=2499"/>
		<updated>2010-09-24T23:00:08Z</updated>

		<summary type="html">&lt;p&gt;Milio: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduzione==&lt;br /&gt;
&lt;br /&gt;
Questo tutorial vuol essere di esempio per la realizzazione di un oggetto Frame, che andrà ad integrarsi come componente nell'ambiente di sviluppo del linguaggio di programmazione Gambas versione 3.&lt;br /&gt;
&lt;br /&gt;
L'oggetto Frame, farà utilizzo di una classe genitore di tipo Container il quale verrà utilizzato per ereditare tutte le proprietà, metodi ed eventi che può un contenitore, di una Form che conterrà a sua volta una DrawingArea per il disegno dei bordi e del titolo, e di un Panel che sarà il reale contenitore di oggetti del Frame.&lt;br /&gt;
&lt;br /&gt;
==Creazione del Progetto==&lt;br /&gt;
&lt;br /&gt;
Una volta avviato Gambas, andiamo a selezionare le seguenti voci:&lt;br /&gt;
&lt;br /&gt;
* Tipo Progetto: Applicazione Grafica&lt;br /&gt;
* Opzioni: Creazione di un componente&lt;br /&gt;
&lt;br /&gt;
Dopo aver scelto la cartella che andrà a contenere il Progetto, inseriamo il titolo: gb.framebox.&lt;br /&gt;
&lt;br /&gt;
A questo punto il nostro [[Media:Esploratore1.png|Esploratore di Progetti]] conterrà due classi di esempio che vengono generate di default, una Form di test e la cartella control dove risiederanno le icone dei vari oggetti del componente.&lt;br /&gt;
Andiamo ad eliminare le due classi e le due icone, creando una nuova classe FrameBox, con opzione 'Esportato', e una Form a cui daremo il nome di FFrameBox.&lt;br /&gt;
&lt;br /&gt;
====Form FFrameBox====&lt;br /&gt;
&lt;br /&gt;
L'utilizzare una Form per la realizzazione di un oggetto grafico non è strettamente indispensabile in quanto si possono creare tutti gli oggetti grafici all'interno di una classe. Il solo scopo del suo utilizzo è per semplificare le operazioni di posizionamento e ridimensionamento degli oggetti che andranno a comporre il Frame.&lt;br /&gt;
&lt;br /&gt;
Prima di tutto andiamo a posizionare la DrawingArea come primo strato del nostro oggetto, in quanto l'immagine che andrà a creare dovrà essere obbligatoriamente sul fondo, altrimenti non sarà possibile selezionare gli oggetti contenuti nel Frame. Dopodiché andremo ad inserire il Panel, senza preoccuparci della sua posizione.&lt;br /&gt;
&lt;br /&gt;
=====Impostazioni degli oggetti=====&lt;br /&gt;
&lt;br /&gt;
Le modifiche verranno apportate solamente alle proprietà sotto elencate, alle altre verranno lasciati i valori di default.&lt;br /&gt;
&lt;br /&gt;
* FFrameBox&lt;br /&gt;
 Name = FFrameBox&lt;br /&gt;
 Arrangemet = Fill&lt;br /&gt;
Impostando questa proprietà, gli oggetti figli con proprietà Expand = TRUE si andranno a ridimensionare in automatico alle dimensioni del Form.&lt;br /&gt;
&lt;br /&gt;
* DrawingArea&lt;br /&gt;
 Name = DrawingArea1&lt;br /&gt;
 Expand = TRUE&lt;br /&gt;
&lt;br /&gt;
* Panel&lt;br /&gt;
 Name = Panel1&lt;br /&gt;
 Expan = TRUE&lt;br /&gt;
&lt;br /&gt;
=====Stesura del Codice=====&lt;br /&gt;
&lt;br /&gt;
Come prima cosa si dovranno decidere le varie proprietà che andranno a variare graficamente il Frame:&lt;br /&gt;
&lt;br /&gt;
* Titolo&lt;br /&gt;
* Colore testo&lt;br /&gt;
* Tipo di carattere&lt;br /&gt;
* Bordi visibili&lt;br /&gt;
* Colore bordi&lt;br /&gt;
&lt;br /&gt;
''Dichiarazione delle Variabili Private''&lt;br /&gt;
 Private $Text As String&lt;br /&gt;
 Private $TextColor As Integer&lt;br /&gt;
 Private $Font As New Font&lt;br /&gt;
 Private $Border As Boolean = True&lt;br /&gt;
 Private $BorderColor As Integer&lt;br /&gt;
&lt;br /&gt;
Essendo il codice 'di uso interno' andremo a creare solamente dei metodi per il settaggio di proprietà grafiche:&lt;br /&gt;
&lt;br /&gt;
 Public Sub SetText(Value As String)&lt;br /&gt;
   $Text = Value&lt;br /&gt;
   Me.DrawingArea1.Refresh()&lt;br /&gt;
 End&lt;br /&gt;
 &lt;br /&gt;
 Public Function GetText() As String&lt;br /&gt;
   Return $Text&lt;br /&gt;
 End&lt;br /&gt;
  &lt;br /&gt;
 Public Sub SetTexColor(Value As Integer)&lt;br /&gt;
   $TextColor = Value&lt;br /&gt;
   Me.DrawingArea1.Refresh()&lt;br /&gt;
 End &lt;br /&gt;
 &lt;br /&gt;
 Public Function GetTextColor() As Integer&lt;br /&gt;
   Return $TextColor&lt;br /&gt;
 End&lt;br /&gt;
 &lt;br /&gt;
 Public Sub SetFont(Value As Font)&lt;br /&gt;
   $Font = Value&lt;br /&gt;
   Me.DrawingArea1.Refresh()&lt;br /&gt;
 End&lt;br /&gt;
 &lt;br /&gt;
 Public Function GetFont() As Font&lt;br /&gt;
   Return $Font&lt;br /&gt;
 End&lt;br /&gt;
 &lt;br /&gt;
 Public Sub SetBorder(Value As Boolean)&lt;br /&gt;
   $Border = Value&lt;br /&gt;
   Me.DrawingArea1.Refresh()&lt;br /&gt;
 End&lt;br /&gt;
 &lt;br /&gt;
 Public Function GetBorder() As Boolean&lt;br /&gt;
   Return $Border&lt;br /&gt;
 End&lt;br /&gt;
 &lt;br /&gt;
 Public Sub SetBorderColor(Value As Integer)&lt;br /&gt;
   $BorderColor = Value&lt;br /&gt;
   Me.DrawingArea1.Refresh()&lt;br /&gt;
 End&lt;br /&gt;
 &lt;br /&gt;
 Public Function GetBorderColor() As Integer&lt;br /&gt;
   Return $BorderColor&lt;br /&gt;
 End&lt;br /&gt;
&lt;br /&gt;
A questo punto creiamo il disegno del Frame all'interno dell'evento Draw della DrawingArea:&lt;br /&gt;
 Public Sub DrawingArea1_Draw()&lt;br /&gt;
 &lt;br /&gt;
   Paint.Begin(Me.DrawingArea1)&lt;br /&gt;
     Paint.Font = $Font&lt;br /&gt;
     Paint.Brush = Paint.Color($TextColor)&lt;br /&gt;
     Paint.Text($Text, 0, 0, Me.DrawingArea1.W, Paint.Font.TextHeight($Text) + 3, Align.Center)&lt;br /&gt;
     Paint.Fill()&lt;br /&gt;
     If $Border Then&lt;br /&gt;
       Paint.LineWidth = 0.5&lt;br /&gt;
       Paint.Brush = Paint.Color($BorderColor)&lt;br /&gt;
       Paint.MoveTo((Me.DrawingArea1.W - 5 - Paint.Font.TextWidth($Text)) / 2, Paint.Font.TextHeight($Text) / 2)&lt;br /&gt;
       Paint.LineTo(0, Paint.Font.TextHeight($Text) / 2)&lt;br /&gt;
       Paint.LineTo(0, Me.DrawingArea1.H)&lt;br /&gt;
       Paint.LineTo(Me.DrawingArea1.W, Me.DrawingArea1.H)&lt;br /&gt;
       Paint.LineTo(Me.DrawingArea1.w, Paint.Font.TextHeight($Text) / 2)&lt;br /&gt;
       Paint.LineTo(Me.DrawingArea1.W - ((Me.DrawingArea1.W - 5 - Paint.Font.TextWidth($Text)) / 2), Paint.Font.TextHeight($Text) / 2)&lt;br /&gt;
       Paint.Stroke()&lt;br /&gt;
     Endif&lt;br /&gt;
   Paint.End()&lt;br /&gt;
 &lt;br /&gt;
 End&lt;br /&gt;
&lt;br /&gt;
E per finire creiamo i metodi per variare la Proprietà Arrangement del Panel, in quanto sarà il vero contenitore del Frame:&lt;br /&gt;
 Public Sub SetArrange(Value As Integer)&lt;br /&gt;
   Me.Panel1.Arrangement = Value&lt;br /&gt;
 End&lt;br /&gt;
 &lt;br /&gt;
 Public Function GetArrange() As Integer&lt;br /&gt;
   Return Me.Panel1.Arrangement&lt;br /&gt;
 End&lt;br /&gt;
&lt;br /&gt;
====Classe FrameBox====&lt;br /&gt;
&lt;br /&gt;
Se nel Form appena creato abbiamo avuto una certa 'libertà' nella stesura del codice, adesso dobbiamo procedere con 'rigidità' per poter avere un componente pienamente funzionante nell'ide di Gambas.&lt;br /&gt;
&lt;br /&gt;
=====Dichiarazione Proprietà, Costanti e Variabili Private=====&lt;br /&gt;
Per prima cosa andremo a dichiarare la classe Genitore:&lt;br /&gt;
 Export&lt;br /&gt;
 &lt;br /&gt;
 Inherits UserContainer&lt;br /&gt;
In questo modo abbiamo ereditato proprietà, metodi ed eventi dell'oggetto UserContainer&amp;lt;br&amp;gt;&lt;br /&gt;
Poi andremo a dichiarare le costanti che serviranno all'ide di Gambas per l'integrazione del controllo:&lt;br /&gt;
 Public Const _Properties As String = &amp;quot;*,Text,Foreground{Color}=&amp;amp;H000000&amp;amp;,BorderColor{Color}=&amp;amp;H000000H,Border=True&amp;quot;&lt;br /&gt;
 Public Const _Group As String = &amp;quot;Gambas-it.org&amp;quot;&lt;br /&gt;
 Public Const _Arrangement As Integer = 0&lt;br /&gt;
 Public Const _Size As String = &amp;quot;36;36&amp;quot;&lt;br /&gt;
Dichiarazione delle Proprietà:&lt;br /&gt;
 Property Text As String&lt;br /&gt;
 Property Foreground As Integer&lt;br /&gt;
 Property BorderColor As Integer&lt;br /&gt;
 Property {Border} As Boolean&lt;br /&gt;
 Property {Font} As Font&lt;br /&gt;
 Property Arrangement As Integer&lt;br /&gt;
La Proprietà Arrangement è già compresa nelle Proprietà della classe genitore UserContainer. Dichiarandola nella classe figlia verrà automaticamente gestita da quest'ultima. &lt;br /&gt;
 Private Obs As Observer&lt;br /&gt;
L'oggetto Observer intercetta gli eventi dell'oggetto a lui legato, prima che passino alla classe genitore del medesimo oggetto. Questo è utile per creare condizioni nell'oggetto, prima che scateni un evento. Nel nostro esempio non sarà indispensabile, ma siccome è un oggetto molto usato nei componenti, è bene sapere come funzioni.&amp;lt;br&amp;gt;&lt;br /&gt;
Ed ora il Form che genererà la parte grafica del controllo:&lt;br /&gt;
 Private F As FFrameBox&lt;/div&gt;</summary>
		<author><name>Milio</name></author>
	</entry>
	<entry>
		<id>https://www.gambas-it.org/wiki/index.php?title=Guide_della_comunit%C3%A0&amp;diff=2497</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=2497"/>
		<updated>2010-09-24T22:23:49Z</updated>

		<summary type="html">&lt;p&gt;Milio: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Raccolta di guide sui componenti, sui metodi e sugli algoritmi del linguaggio Gambas scritti e mantenuti dalla comunità italiana Gambas-it&lt;br /&gt;
&lt;br /&gt;
== Componenti ==&lt;br /&gt;
&lt;br /&gt;
* [[Come creare un componente]]&lt;br /&gt;
&lt;br /&gt;
* [[Tutorial - creare un componente: il frame]]&lt;br /&gt;
&lt;br /&gt;
== Interfacciare Gambas con librerie esterne ==&lt;br /&gt;
&lt;br /&gt;
* [[Documento originale (Inglese)]]&lt;br /&gt;
* [[Traduzione della comunità di Gambas-it]]&lt;br /&gt;
&lt;br /&gt;
== Pdfwriter ==&lt;br /&gt;
&lt;br /&gt;
*[[Guida ai report]]&lt;br /&gt;
&lt;br /&gt;
== Gestione dei dati MIDI ==&lt;br /&gt;
&lt;br /&gt;
*[[Gestione del MIDI con O.S.S.]]&lt;br /&gt;
&lt;br /&gt;
*[[Gestione del MIDI con ALSA]]&lt;br /&gt;
&lt;br /&gt;
== Componente gb.GridBox ==&lt;br /&gt;
&lt;br /&gt;
*[[Introduzione]]&lt;br /&gt;
*[[Installazione]]&lt;br /&gt;
*[[Guida a Gridbox]]&lt;/div&gt;</summary>
		<author><name>Milio</name></author>
	</entry>
	<entry>
		<id>https://www.gambas-it.org/wiki/index.php?title=Guide_della_comunit%C3%A0&amp;diff=2496</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=2496"/>
		<updated>2010-09-24T22:23:15Z</updated>

		<summary type="html">&lt;p&gt;Milio: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Raccolta di guide sui componenti, sui metodi e sugli algoritmi del linguaggio Gambas scritti e mantenuti dalla comunità italiana Gambas-it&lt;br /&gt;
&lt;br /&gt;
== Componenti ==&lt;br /&gt;
&lt;br /&gt;
* [[Come creare un componente]]&lt;br /&gt;
&lt;br /&gt;
* [[Tutorial - creare un componente: il Frame]]&lt;br /&gt;
&lt;br /&gt;
== Interfacciare Gambas con librerie esterne ==&lt;br /&gt;
&lt;br /&gt;
* [[Documento originale (Inglese)]]&lt;br /&gt;
* [[Traduzione della comunità di Gambas-it]]&lt;br /&gt;
&lt;br /&gt;
== Pdfwriter ==&lt;br /&gt;
&lt;br /&gt;
*[[Guida ai report]]&lt;br /&gt;
&lt;br /&gt;
== Gestione dei dati MIDI ==&lt;br /&gt;
&lt;br /&gt;
*[[Gestione del MIDI con O.S.S.]]&lt;br /&gt;
&lt;br /&gt;
*[[Gestione del MIDI con ALSA]]&lt;br /&gt;
&lt;br /&gt;
== Componente gb.GridBox ==&lt;br /&gt;
&lt;br /&gt;
*[[Introduzione]]&lt;br /&gt;
*[[Installazione]]&lt;br /&gt;
*[[Guida a Gridbox]]&lt;/div&gt;</summary>
		<author><name>Milio</name></author>
	</entry>
	<entry>
		<id>https://www.gambas-it.org/wiki/index.php?title=Tutorial_-_creare_un_componente:_il_frame&amp;diff=2495</id>
		<title>Tutorial - creare un componente: il frame</title>
		<link rel="alternate" type="text/html" href="https://www.gambas-it.org/wiki/index.php?title=Tutorial_-_creare_un_componente:_il_frame&amp;diff=2495"/>
		<updated>2010-09-24T22:21:24Z</updated>

		<summary type="html">&lt;p&gt;Milio: /* Stesura del Codice */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduzione==&lt;br /&gt;
&lt;br /&gt;
Questo tutorial vuol essere di esempio per la realizzazione di un oggetto Frame, che andrà ad integrarsi come componente nell'ambiente di sviluppo del linguaggio di programmazione Gambas versione 3.&lt;br /&gt;
&lt;br /&gt;
L'oggetto Frame, farà utilizzo di una classe genitore di tipo Container il quale verrà utilizzato per ereditare tutte le proprietà, metodi ed eventi che può un contenitore, di una Form che conterrà a sua volta una DrawingArea per il disegno dei bordi e del titolo, e di un Panel che sarà il reale contenitore di oggetti del Frame.&lt;br /&gt;
&lt;br /&gt;
==Creazione del Progetto==&lt;br /&gt;
&lt;br /&gt;
Una volta avviato Gambas, andiamo a selezionare le seguenti voci:&lt;br /&gt;
&lt;br /&gt;
* Tipo Progetto: Applicazione Grafica&lt;br /&gt;
* Opzioni: Creazione di un componente&lt;br /&gt;
&lt;br /&gt;
Dopo aver scelto la cartella che andrà a contenere il Progetto, inseriamo il titolo: gb.framebox.&lt;br /&gt;
&lt;br /&gt;
A questo punto il nostro [[Media:Esploratore1.png|Esploratore di Progetti]] conterrà due classi di esempio che vengono generate di default, una Form di test e la cartella control dove risiederanno le icone dei vari oggetti del componente.&lt;br /&gt;
Andiamo ad eliminare le due classi e le due icone, creando una nuova classe FrameBox, con opzione 'Esportato', e una Form a cui daremo il nome di FFrameBox.&lt;br /&gt;
&lt;br /&gt;
====Form FFrameBox====&lt;br /&gt;
&lt;br /&gt;
L'utilizzare una Form per la realizzazione di un oggetto grafico non è strettamente indispensabile in quanto si possono creare tutti gli oggetti grafici all'interno di una classe. Il solo scopo del suo utilizzo è per semplificare le operazioni di posizionamento e ridimensionamento degli oggetti che andranno a comporre il Frame.&lt;br /&gt;
&lt;br /&gt;
Prima di tutto andiamo a posizionare la DrawingArea come primo strato del nostro oggetto, in quanto l'immagine che andrà a creare dovrà essere obbligatoriamente sul fondo, altrimenti non sarà possibile selezionare gli oggetti contenuti nel Frame. Dopodiché andremo ad inserire il Panel, senza preoccuparci della sua posizione.&lt;br /&gt;
&lt;br /&gt;
=====Impostazioni degli oggetti=====&lt;br /&gt;
&lt;br /&gt;
Le modifiche verranno apportate solamente alle proprietà sotto elencate, alle altre verranno lasciati i valori di default.&lt;br /&gt;
&lt;br /&gt;
* FFrameBox&lt;br /&gt;
 Name = FFrameBox&lt;br /&gt;
 Arrangemet = Fill&lt;br /&gt;
Impostando questa proprietà, gli oggetti figli con proprietà Expand = TRUE si andranno a ridimensionare in automatico alle dimensioni del Form.&lt;br /&gt;
&lt;br /&gt;
* DrawingArea&lt;br /&gt;
 Name = DrawingArea1&lt;br /&gt;
 Expand = TRUE&lt;br /&gt;
&lt;br /&gt;
* Panel&lt;br /&gt;
 Name = Panel1&lt;br /&gt;
 Expan = TRUE&lt;br /&gt;
&lt;br /&gt;
=====Stesura del Codice=====&lt;br /&gt;
&lt;br /&gt;
Come prima cosa si dovranno decidere le varie proprietà che andranno a variare graficamente il Frame:&lt;br /&gt;
&lt;br /&gt;
* Titolo&lt;br /&gt;
* Colore testo&lt;br /&gt;
* Tipo di carattere&lt;br /&gt;
* Bordi visibili&lt;br /&gt;
* Colore bordi&lt;br /&gt;
&lt;br /&gt;
''Dichiarazione delle Variabili Private''&lt;br /&gt;
 Private $Text As String&lt;br /&gt;
 Private $TextColor As Integer&lt;br /&gt;
 Private $Font As New Font&lt;br /&gt;
 Private $Border As Boolean = True&lt;br /&gt;
 Private $BorderColor As Integer&lt;br /&gt;
&lt;br /&gt;
Essendo il codice 'di uso interno' andremo a creare solamente dei metodi per il settaggio di proprietà grafiche:&lt;br /&gt;
&lt;br /&gt;
 Public Sub SetText(Value As String)&lt;br /&gt;
   $Text = Value&lt;br /&gt;
   Me.DrawingArea1.Refresh()&lt;br /&gt;
 End&lt;br /&gt;
 &lt;br /&gt;
 Public Function GetText() As String&lt;br /&gt;
   Return $Text&lt;br /&gt;
 End&lt;br /&gt;
  &lt;br /&gt;
 Public Sub SetTexColor(Value As Integer)&lt;br /&gt;
   $TextColor = Value&lt;br /&gt;
   Me.DrawingArea1.Refresh()&lt;br /&gt;
 End &lt;br /&gt;
 &lt;br /&gt;
 Public Function GetTextColor() As Integer&lt;br /&gt;
   Return $TextColor&lt;br /&gt;
 End&lt;br /&gt;
 &lt;br /&gt;
 Public Sub SetFont(Value As Font)&lt;br /&gt;
   $Font = Value&lt;br /&gt;
   Me.DrawingArea1.Refresh()&lt;br /&gt;
 End&lt;br /&gt;
 &lt;br /&gt;
 Public Function GetFont() As Font&lt;br /&gt;
   Return $Font&lt;br /&gt;
 End&lt;br /&gt;
 &lt;br /&gt;
 Public Sub SetBorder(Value As Boolean)&lt;br /&gt;
   $Border = Value&lt;br /&gt;
   Me.DrawingArea1.Refresh()&lt;br /&gt;
 End&lt;br /&gt;
 &lt;br /&gt;
 Public Function GetBorder() As Boolean&lt;br /&gt;
   Return $Border&lt;br /&gt;
 End&lt;br /&gt;
 &lt;br /&gt;
 Public Sub SetBorderColor(Value As Integer)&lt;br /&gt;
   $BorderColor = Value&lt;br /&gt;
   Me.DrawingArea1.Refresh()&lt;br /&gt;
 End&lt;br /&gt;
 &lt;br /&gt;
 Public Function GetBorderColor() As Integer&lt;br /&gt;
   Return $BorderColor&lt;br /&gt;
 End&lt;br /&gt;
&lt;br /&gt;
A questo punto creiamo il disegno del Frame all'interno dell'evento Draw della DrawingArea:&lt;br /&gt;
 Public Sub DrawingArea1_Draw()&lt;br /&gt;
 &lt;br /&gt;
   Paint.Begin(Me.DrawingArea1)&lt;br /&gt;
     Paint.Font = $Font&lt;br /&gt;
     Paint.Brush = Paint.Color($TextColor)&lt;br /&gt;
     Paint.Text($Text, 0, 0, Me.DrawingArea1.W, Paint.Font.TextHeight($Text) + 3, Align.Center)&lt;br /&gt;
     Paint.Fill()&lt;br /&gt;
     If $Border Then&lt;br /&gt;
       Paint.LineWidth = 0.5&lt;br /&gt;
       Paint.Brush = Paint.Color($BorderColor)&lt;br /&gt;
       Paint.MoveTo((Me.DrawingArea1.W - 5 - Paint.Font.TextWidth($Text)) / 2, Paint.Font.TextHeight($Text) / 2)&lt;br /&gt;
       Paint.LineTo(0, Paint.Font.TextHeight($Text) / 2)&lt;br /&gt;
       Paint.LineTo(0, Me.DrawingArea1.H)&lt;br /&gt;
       Paint.LineTo(Me.DrawingArea1.W, Me.DrawingArea1.H)&lt;br /&gt;
       Paint.LineTo(Me.DrawingArea1.w, Paint.Font.TextHeight($Text) / 2)&lt;br /&gt;
       Paint.LineTo(Me.DrawingArea1.W - ((Me.DrawingArea1.W - 5 - Paint.Font.TextWidth($Text)) / 2), Paint.Font.TextHeight($Text) / 2)&lt;br /&gt;
       Paint.Stroke()&lt;br /&gt;
     Endif&lt;br /&gt;
   Paint.End()&lt;br /&gt;
 &lt;br /&gt;
 End&lt;br /&gt;
&lt;br /&gt;
E per finire creiamo i metodi per variare la Proprietà Arrangement del Panel, in quanto sarà il vero contenitore del Frame:&lt;br /&gt;
 Public Sub SetArrange(Value As Integer)&lt;br /&gt;
   Me.Panel1.Arrangement = Value&lt;br /&gt;
 End&lt;br /&gt;
 &lt;br /&gt;
 Public Function GetArrange() As Integer&lt;br /&gt;
   Return Me.Panel1.Arrangement&lt;br /&gt;
 End&lt;/div&gt;</summary>
		<author><name>Milio</name></author>
	</entry>
	<entry>
		<id>https://www.gambas-it.org/wiki/index.php?title=Tutorial_-_creare_un_componente:_il_frame&amp;diff=2494</id>
		<title>Tutorial - creare un componente: il frame</title>
		<link rel="alternate" type="text/html" href="https://www.gambas-it.org/wiki/index.php?title=Tutorial_-_creare_un_componente:_il_frame&amp;diff=2494"/>
		<updated>2010-09-24T22:15:53Z</updated>

		<summary type="html">&lt;p&gt;Milio: /* Stesura del Codice */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduzione==&lt;br /&gt;
&lt;br /&gt;
Questo tutorial vuol essere di esempio per la realizzazione di un oggetto Frame, che andrà ad integrarsi come componente nell'ambiente di sviluppo del linguaggio di programmazione Gambas versione 3.&lt;br /&gt;
&lt;br /&gt;
L'oggetto Frame, farà utilizzo di una classe genitore di tipo Container il quale verrà utilizzato per ereditare tutte le proprietà, metodi ed eventi che può un contenitore, di una Form che conterrà a sua volta una DrawingArea per il disegno dei bordi e del titolo, e di un Panel che sarà il reale contenitore di oggetti del Frame.&lt;br /&gt;
&lt;br /&gt;
==Creazione del Progetto==&lt;br /&gt;
&lt;br /&gt;
Una volta avviato Gambas, andiamo a selezionare le seguenti voci:&lt;br /&gt;
&lt;br /&gt;
* Tipo Progetto: Applicazione Grafica&lt;br /&gt;
* Opzioni: Creazione di un componente&lt;br /&gt;
&lt;br /&gt;
Dopo aver scelto la cartella che andrà a contenere il Progetto, inseriamo il titolo: gb.framebox.&lt;br /&gt;
&lt;br /&gt;
A questo punto il nostro [[Media:Esploratore1.png|Esploratore di Progetti]] conterrà due classi di esempio che vengono generate di default, una Form di test e la cartella control dove risiederanno le icone dei vari oggetti del componente.&lt;br /&gt;
Andiamo ad eliminare le due classi e le due icone, creando una nuova classe FrameBox, con opzione 'Esportato', e una Form a cui daremo il nome di FFrameBox.&lt;br /&gt;
&lt;br /&gt;
====Form FFrameBox====&lt;br /&gt;
&lt;br /&gt;
L'utilizzare una Form per la realizzazione di un oggetto grafico non è strettamente indispensabile in quanto si possono creare tutti gli oggetti grafici all'interno di una classe. Il solo scopo del suo utilizzo è per semplificare le operazioni di posizionamento e ridimensionamento degli oggetti che andranno a comporre il Frame.&lt;br /&gt;
&lt;br /&gt;
Prima di tutto andiamo a posizionare la DrawingArea come primo strato del nostro oggetto, in quanto l'immagine che andrà a creare dovrà essere obbligatoriamente sul fondo, altrimenti non sarà possibile selezionare gli oggetti contenuti nel Frame. Dopodiché andremo ad inserire il Panel, senza preoccuparci della sua posizione.&lt;br /&gt;
&lt;br /&gt;
=====Impostazioni degli oggetti=====&lt;br /&gt;
&lt;br /&gt;
Le modifiche verranno apportate solamente alle proprietà sotto elencate, alle altre verranno lasciati i valori di default.&lt;br /&gt;
&lt;br /&gt;
* FFrameBox&lt;br /&gt;
 Name = FFrameBox&lt;br /&gt;
 Arrangemet = Fill&lt;br /&gt;
Impostando questa proprietà, gli oggetti figli con proprietà Expand = TRUE si andranno a ridimensionare in automatico alle dimensioni del Form.&lt;br /&gt;
&lt;br /&gt;
* DrawingArea&lt;br /&gt;
 Name = DrawingArea1&lt;br /&gt;
 Expand = TRUE&lt;br /&gt;
&lt;br /&gt;
* Panel&lt;br /&gt;
 Name = Panel1&lt;br /&gt;
 Expan = TRUE&lt;br /&gt;
&lt;br /&gt;
=====Stesura del Codice=====&lt;br /&gt;
&lt;br /&gt;
Come prima cosa si dovranno decidere le varie proprietà che andranno a variare graficamente il Frame:&lt;br /&gt;
&lt;br /&gt;
* Titolo&lt;br /&gt;
* Colore testo&lt;br /&gt;
* Tipo di carattere&lt;br /&gt;
* Bordi visibili&lt;br /&gt;
* Colore bordi&lt;br /&gt;
&lt;br /&gt;
''Dichiarazione delle Variabili Private''&lt;br /&gt;
 Private $Text As String&lt;br /&gt;
 Private $TextColor As Integer&lt;br /&gt;
 Private $Font As New Font&lt;br /&gt;
 Private $Border As Boolean = True&lt;br /&gt;
 Private $BorderColor As Integer&lt;br /&gt;
&lt;br /&gt;
Essendo il codice 'di uso interno' andremo a creare solamente dei metodi per il settaggio di proprietà grafiche:&lt;br /&gt;
&lt;br /&gt;
 Public Sub SetText(Value As String)&lt;br /&gt;
   $Text = Value&lt;br /&gt;
   Me.DrawingArea1.Refresh()&lt;br /&gt;
 End&lt;br /&gt;
 &lt;br /&gt;
 Public Function GetText() As String&lt;br /&gt;
   Return $Text&lt;br /&gt;
 End&lt;br /&gt;
  &lt;br /&gt;
 Public Sub SetTexColor(Value As Integer)&lt;br /&gt;
   $TextColor = Value&lt;br /&gt;
   Me.DrawingArea1.Refresh()&lt;br /&gt;
 End &lt;br /&gt;
 &lt;br /&gt;
 Public Function GetTextColor() As Integer&lt;br /&gt;
   Return $TextColor&lt;br /&gt;
 End&lt;br /&gt;
 &lt;br /&gt;
 Public Sub SetFont(Value As Font)&lt;br /&gt;
   $Font = Value&lt;br /&gt;
   Me.DrawingArea1.Refresh()&lt;br /&gt;
 End&lt;br /&gt;
 &lt;br /&gt;
 Public Function GetFont() As Font&lt;br /&gt;
   Return $Font&lt;br /&gt;
 End&lt;br /&gt;
 &lt;br /&gt;
 Public Sub SetBorder(Value As Boolean)&lt;br /&gt;
   $Border = Value&lt;br /&gt;
   Me.DrawingArea1.Refresh()&lt;br /&gt;
 End&lt;br /&gt;
 &lt;br /&gt;
 Public Function GetBorder() As Boolean&lt;br /&gt;
   Return $Border&lt;br /&gt;
 End&lt;br /&gt;
 &lt;br /&gt;
 Public Sub SetBorderColor(Value As Integer)&lt;br /&gt;
   $BorderColor = Value&lt;br /&gt;
   Me.DrawingArea1.Refresh()&lt;br /&gt;
 End&lt;br /&gt;
 &lt;br /&gt;
 Public Function GetBorderColor() As Integer&lt;br /&gt;
   Return $BorderColor&lt;br /&gt;
 End&lt;/div&gt;</summary>
		<author><name>Milio</name></author>
	</entry>
	<entry>
		<id>https://www.gambas-it.org/wiki/index.php?title=Tutorial_-_creare_un_componente:_il_frame&amp;diff=2493</id>
		<title>Tutorial - creare un componente: il frame</title>
		<link rel="alternate" type="text/html" href="https://www.gambas-it.org/wiki/index.php?title=Tutorial_-_creare_un_componente:_il_frame&amp;diff=2493"/>
		<updated>2010-09-24T22:11:30Z</updated>

		<summary type="html">&lt;p&gt;Milio: /* Stesura del Codice */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduzione==&lt;br /&gt;
&lt;br /&gt;
Questo tutorial vuol essere di esempio per la realizzazione di un oggetto Frame, che andrà ad integrarsi come componente nell'ambiente di sviluppo del linguaggio di programmazione Gambas versione 3.&lt;br /&gt;
&lt;br /&gt;
L'oggetto Frame, farà utilizzo di una classe genitore di tipo Container il quale verrà utilizzato per ereditare tutte le proprietà, metodi ed eventi che può un contenitore, di una Form che conterrà a sua volta una DrawingArea per il disegno dei bordi e del titolo, e di un Panel che sarà il reale contenitore di oggetti del Frame.&lt;br /&gt;
&lt;br /&gt;
==Creazione del Progetto==&lt;br /&gt;
&lt;br /&gt;
Una volta avviato Gambas, andiamo a selezionare le seguenti voci:&lt;br /&gt;
&lt;br /&gt;
* Tipo Progetto: Applicazione Grafica&lt;br /&gt;
* Opzioni: Creazione di un componente&lt;br /&gt;
&lt;br /&gt;
Dopo aver scelto la cartella che andrà a contenere il Progetto, inseriamo il titolo: gb.framebox.&lt;br /&gt;
&lt;br /&gt;
A questo punto il nostro [[Media:Esploratore1.png|Esploratore di Progetti]] conterrà due classi di esempio che vengono generate di default, una Form di test e la cartella control dove risiederanno le icone dei vari oggetti del componente.&lt;br /&gt;
Andiamo ad eliminare le due classi e le due icone, creando una nuova classe FrameBox, con opzione 'Esportato', e una Form a cui daremo il nome di FFrameBox.&lt;br /&gt;
&lt;br /&gt;
====Form FFrameBox====&lt;br /&gt;
&lt;br /&gt;
L'utilizzare una Form per la realizzazione di un oggetto grafico non è strettamente indispensabile in quanto si possono creare tutti gli oggetti grafici all'interno di una classe. Il solo scopo del suo utilizzo è per semplificare le operazioni di posizionamento e ridimensionamento degli oggetti che andranno a comporre il Frame.&lt;br /&gt;
&lt;br /&gt;
Prima di tutto andiamo a posizionare la DrawingArea come primo strato del nostro oggetto, in quanto l'immagine che andrà a creare dovrà essere obbligatoriamente sul fondo, altrimenti non sarà possibile selezionare gli oggetti contenuti nel Frame. Dopodiché andremo ad inserire il Panel, senza preoccuparci della sua posizione.&lt;br /&gt;
&lt;br /&gt;
=====Impostazioni degli oggetti=====&lt;br /&gt;
&lt;br /&gt;
Le modifiche verranno apportate solamente alle proprietà sotto elencate, alle altre verranno lasciati i valori di default.&lt;br /&gt;
&lt;br /&gt;
* FFrameBox&lt;br /&gt;
 Name = FFrameBox&lt;br /&gt;
 Arrangemet = Fill&lt;br /&gt;
Impostando questa proprietà, gli oggetti figli con proprietà Expand = TRUE si andranno a ridimensionare in automatico alle dimensioni del Form.&lt;br /&gt;
&lt;br /&gt;
* DrawingArea&lt;br /&gt;
 Name = DrawingArea1&lt;br /&gt;
 Expand = TRUE&lt;br /&gt;
&lt;br /&gt;
* Panel&lt;br /&gt;
 Name = Panel1&lt;br /&gt;
 Expan = TRUE&lt;br /&gt;
&lt;br /&gt;
=====Stesura del Codice=====&lt;br /&gt;
&lt;br /&gt;
Come prima cosa si dovranno decidere le varie proprietà che andranno a variare graficamente il Frame:&lt;br /&gt;
&lt;br /&gt;
* Titolo&lt;br /&gt;
* Bordi&lt;br /&gt;
* Colore testo&lt;br /&gt;
* Tipo di carattere&lt;br /&gt;
* Colore bordi&lt;br /&gt;
&lt;br /&gt;
''Dichiarazione delle Variabili Private''&lt;br /&gt;
 Private $Text As String&lt;br /&gt;
 Private $BorderColor As Integer&lt;br /&gt;
 Private $TextColor As Integer&lt;br /&gt;
 Private $Border As Boolean = True&lt;br /&gt;
 Private $Font As New Font&lt;br /&gt;
&lt;br /&gt;
Essendo il codice 'di uso interno' andremo a creare solamente dei metodi per il settaggio di proprietà grafiche:&lt;br /&gt;
&lt;br /&gt;
 Public Sub SetFont(Value As Font)&lt;br /&gt;
   $Font = Value&lt;br /&gt;
   Me.DrawingArea1.Refresh()&lt;br /&gt;
 End&lt;br /&gt;
 &lt;br /&gt;
 Public Function GetFont() As Font&lt;br /&gt;
   Return $Font&lt;br /&gt;
 End&lt;br /&gt;
 &lt;br /&gt;
 Public Sub SetBorder(Value As Boolean)&lt;br /&gt;
   $Border = Value&lt;br /&gt;
   Me.DrawingArea1.Refresh()&lt;br /&gt;
 End&lt;br /&gt;
 &lt;br /&gt;
 Public Function GetBorder() As Boolean&lt;br /&gt;
   Return $Border&lt;br /&gt;
 End&lt;br /&gt;
 &lt;br /&gt;
 Public Sub SetText(Value As String)&lt;br /&gt;
   $Text = Value&lt;br /&gt;
   Me.DrawingArea1.Refresh()&lt;br /&gt;
 End&lt;br /&gt;
 &lt;br /&gt;
 Public Function GetText() As String&lt;br /&gt;
   Return $Text&lt;br /&gt;
 End&lt;br /&gt;
 &lt;br /&gt;
 Public Sub SetBorderColor(Value As Integer)&lt;br /&gt;
   $BorderColor = Value&lt;br /&gt;
   Me.DrawingArea1.Refresh()&lt;br /&gt;
 End&lt;br /&gt;
 &lt;br /&gt;
 Public Function GetBorderColor() As Integer&lt;br /&gt;
   Return $BorderColor&lt;br /&gt;
 End &lt;br /&gt;
 &lt;br /&gt;
 Public Sub SetTexColor(Value As Integer)&lt;br /&gt;
   $TextColor = Value&lt;br /&gt;
   Me.DrawingArea1.Refresh()&lt;br /&gt;
 End &lt;br /&gt;
 &lt;br /&gt;
 Public Function GetTextColor() As Integer&lt;br /&gt;
   Return $TextColor&lt;br /&gt;
 End&lt;/div&gt;</summary>
		<author><name>Milio</name></author>
	</entry>
	<entry>
		<id>https://www.gambas-it.org/wiki/index.php?title=Tutorial_-_creare_un_componente:_il_frame&amp;diff=2491</id>
		<title>Tutorial - creare un componente: il frame</title>
		<link rel="alternate" type="text/html" href="https://www.gambas-it.org/wiki/index.php?title=Tutorial_-_creare_un_componente:_il_frame&amp;diff=2491"/>
		<updated>2010-09-24T21:58:20Z</updated>

		<summary type="html">&lt;p&gt;Milio: /* Scrittura Codice */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduzione==&lt;br /&gt;
&lt;br /&gt;
Questo tutorial vuol essere di esempio per la realizzazione di un oggetto Frame, che andrà ad integrarsi come componente nell'ambiente di sviluppo del linguaggio di programmazione Gambas versione 3.&lt;br /&gt;
&lt;br /&gt;
L'oggetto Frame, farà utilizzo di una classe genitore di tipo Container il quale verrà utilizzato per ereditare tutte le proprietà, metodi ed eventi che può un contenitore, di una Form che conterrà a sua volta una DrawingArea per il disegno dei bordi e del titolo, e di un Panel che sarà il reale contenitore di oggetti del Frame.&lt;br /&gt;
&lt;br /&gt;
==Creazione del Progetto==&lt;br /&gt;
&lt;br /&gt;
Una volta avviato Gambas, andiamo a selezionare le seguenti voci:&lt;br /&gt;
&lt;br /&gt;
* Tipo Progetto: Applicazione Grafica&lt;br /&gt;
* Opzioni: Creazione di un componente&lt;br /&gt;
&lt;br /&gt;
Dopo aver scelto la cartella che andrà a contenere il Progetto, inseriamo il titolo: gb.framebox.&lt;br /&gt;
&lt;br /&gt;
A questo punto il nostro [[Media:Esploratore1.png|Esploratore di Progetti]] conterrà due classi di esempio che vengono generate di default, una Form di test e la cartella control dove risiederanno le icone dei vari oggetti del componente.&lt;br /&gt;
Andiamo ad eliminare le due classi e le due icone, creando una nuova classe FrameBox, con opzione 'Esportato', e una Form a cui daremo il nome di FFrameBox.&lt;br /&gt;
&lt;br /&gt;
====Form FFrameBox====&lt;br /&gt;
&lt;br /&gt;
L'utilizzare una Form per la realizzazione di un oggetto grafico non è strettamente indispensabile in quanto si possono creare tutti gli oggetti grafici all'interno di una classe. Il solo scopo del suo utilizzo è per semplificare le operazioni di posizionamento e ridimensionamento degli oggetti che andranno a comporre il Frame.&lt;br /&gt;
&lt;br /&gt;
Prima di tutto andiamo a posizionare la DrawingArea come primo strato del nostro oggetto, in quanto l'immagine che andrà a creare dovrà essere obbligatoriamente sul fondo, altrimenti non sarà possibile selezionare gli oggetti contenuti nel Frame. Dopodiché andremo ad inserire il Panel, senza preoccuparci della sua posizione.&lt;br /&gt;
&lt;br /&gt;
=====Impostazioni degli oggetti=====&lt;br /&gt;
&lt;br /&gt;
Le modifiche verranno apportate solamente alle proprietà sotto elencate, alle altre verranno lasciati i valori di default.&lt;br /&gt;
&lt;br /&gt;
* FFrameBox&lt;br /&gt;
 Name = FFrameBox&lt;br /&gt;
 Arrangemet = Fill&lt;br /&gt;
Impostando questa proprietà, gli oggetti figli con proprietà Expand = TRUE si andranno a ridimensionare in automatico alle dimensioni del Form.&lt;br /&gt;
&lt;br /&gt;
* DrawingArea&lt;br /&gt;
 Name = DrawingArea1&lt;br /&gt;
 Expand = TRUE&lt;br /&gt;
&lt;br /&gt;
* Panel&lt;br /&gt;
 Name = Panel1&lt;br /&gt;
 Expan = TRUE&lt;br /&gt;
&lt;br /&gt;
=====Stesura del Codice=====&lt;/div&gt;</summary>
		<author><name>Milio</name></author>
	</entry>
	<entry>
		<id>https://www.gambas-it.org/wiki/index.php?title=Tutorial_-_creare_un_componente:_il_frame&amp;diff=2489</id>
		<title>Tutorial - creare un componente: il frame</title>
		<link rel="alternate" type="text/html" href="https://www.gambas-it.org/wiki/index.php?title=Tutorial_-_creare_un_componente:_il_frame&amp;diff=2489"/>
		<updated>2010-09-24T21:55:45Z</updated>

		<summary type="html">&lt;p&gt;Milio: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduzione==&lt;br /&gt;
&lt;br /&gt;
Questo tutorial vuol essere di esempio per la realizzazione di un oggetto Frame, che andrà ad integrarsi come componente nell'ambiente di sviluppo del linguaggio di programmazione Gambas versione 3.&lt;br /&gt;
&lt;br /&gt;
L'oggetto Frame, farà utilizzo di una classe genitore di tipo Container il quale verrà utilizzato per ereditare tutte le proprietà, metodi ed eventi che può un contenitore, di una Form che conterrà a sua volta una DrawingArea per il disegno dei bordi e del titolo, e di un Panel che sarà il reale contenitore di oggetti del Frame.&lt;br /&gt;
&lt;br /&gt;
==Creazione del Progetto==&lt;br /&gt;
&lt;br /&gt;
Una volta avviato Gambas, andiamo a selezionare le seguenti voci:&lt;br /&gt;
&lt;br /&gt;
* Tipo Progetto: Applicazione Grafica&lt;br /&gt;
* Opzioni: Creazione di un componente&lt;br /&gt;
&lt;br /&gt;
Dopo aver scelto la cartella che andrà a contenere il Progetto, inseriamo il titolo: gb.framebox.&lt;br /&gt;
&lt;br /&gt;
A questo punto il nostro [[Media:Esploratore1.png|Esploratore di Progetti]] conterrà due classi di esempio che vengono generate di default, una Form di test e la cartella control dove risiederanno le icone dei vari oggetti del componente.&lt;br /&gt;
Andiamo ad eliminare le due classi e le due icone, creando una nuova classe FrameBox, con opzione 'Esportato', e una Form a cui daremo il nome di FFrameBox.&lt;br /&gt;
&lt;br /&gt;
====Form FFrameBox====&lt;br /&gt;
&lt;br /&gt;
L'utilizzare una Form per la realizzazione di un oggetto grafico non è strettamente indispensabile in quanto si possono creare tutti gli oggetti grafici all'interno di una classe. Il solo scopo del suo utilizzo è per semplificare le operazioni di posizionamento e ridimensionamento degli oggetti che andranno a comporre il Frame.&lt;br /&gt;
&lt;br /&gt;
Prima di tutto andiamo a posizionare la DrawingArea come primo strato del nostro oggetto, in quanto l'immagine che andrà a creare dovrà essere obbligatoriamente sul fondo, altrimenti non sarà possibile selezionare gli oggetti contenuti nel Frame. Dopodiché andremo ad inserire il Panel, senza preoccuparci della sua posizione.&lt;br /&gt;
&lt;br /&gt;
=====Impostazioni degli oggetti=====&lt;br /&gt;
&lt;br /&gt;
Le modifiche verranno apportate solamente alle proprietà sotto elencate, alle altre verranno lasciati i valori di default.&lt;br /&gt;
&lt;br /&gt;
* FFrameBox&lt;br /&gt;
 Name = FFrameBox&lt;br /&gt;
 Arrangemet = Fill&lt;br /&gt;
Impostando questa proprietà, gli oggetti figli con proprietà Expand = TRUE si andranno a ridimensionare in automatico alle dimensioni del Form.&lt;br /&gt;
&lt;br /&gt;
* DrawingArea&lt;br /&gt;
 Name = DrawingArea1&lt;br /&gt;
 Expand = TRUE&lt;br /&gt;
&lt;br /&gt;
* Panel&lt;br /&gt;
 Name = Panel1&lt;br /&gt;
 Expan = TRUE&lt;br /&gt;
&lt;br /&gt;
=====Scrittura Codice=====&lt;/div&gt;</summary>
		<author><name>Milio</name></author>
	</entry>
	<entry>
		<id>https://www.gambas-it.org/wiki/index.php?title=File:Esploratore1.png&amp;diff=2483</id>
		<title>File:Esploratore1.png</title>
		<link rel="alternate" type="text/html" href="https://www.gambas-it.org/wiki/index.php?title=File:Esploratore1.png&amp;diff=2483"/>
		<updated>2010-09-24T20:53:29Z</updated>

		<summary type="html">&lt;p&gt;Milio: Esploratore di Progetto Gambas3&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Esploratore di Progetto Gambas3&lt;/div&gt;</summary>
		<author><name>Milio</name></author>
	</entry>
</feed>