Successfully upgraded to Vanilla Forums v2.6. Please report any issue you may find.

2.3 - Le basi delle finestre

edited May 2016 in Italian
Adesso vedremo come lavorare con le finestre in modo più dettagliato dal momento che la finestra è una classe HGui fondamentale. Tutti gli elementi dell'interfaccia grafica mostrata in una finestra fanno parte della finestra stessa e sono visti e memorizzati come figli, per essere precisi tutti i gadget (attivi e passivi) che compongono un'interfaccia sono organizzati con una struttura ad albero che fa capo ad un gadget comune a tutte le finestre chiamato Root Gadget.

Ogni elemento dell'interfaccia, compresa la finestra, può avere un nome univoco che possiamo usare successivamente per recuperare informazioni o per modificare il nostro oggetto, tuttavia specificare un nome non è obbligatorio e se decidiamo di non farlo il sistema ne assegnerà uno semi casuale, in questa eventualità l'unico modo che avremo per fare riferimento all'oggetto in futuro è utilizzare l'oggetto stesso restituito in fase di creazione.

Create un nuovo script e digitate il seguente programma:
; Includiamo la libreria HGui nella nostra applicazione
@INCLUDE "yourpath/+Includes.hws"
@INCLUDE #INC_HGUI
Anche questa volta abilitiamo il debug dell'applicazione per seguire il flusso del programma durante la sua esecuzione:
; Attiviamo il sistema di debug con il seguente codice:
DBG.Console.Enable(True, False)
DBG.Console.AddChannel(HGui.DebugChannel)
Adesso creiamo un nuovo oggetto Window con il seguente codice:
; Crea una nuova finestra
Local myWindow =
	HGui.Window:new(
		{ title = "My first window",
		  name = "Win0",
		  position = { x = 20, y = 20 },
		  size = { w = 400, h = 100 }
		  })
Il metodo di creazione della finestra permette di specificare un'enorme quantità di parametri che permette una grande flessibilità per il programmatore, in questo caso abbiamo specificato, oltre al titolo della finestra ed al suo nome, la posizione che questa dovrà occupare sullo schermo e la sua dimensione, entrambe queste misure sono espresse in pixel.

Come possiamo vedere abbiamo salvato il nostro oggetto Window nella variabile myWindow questa volta abbiamo specificato un nome per la nostra finestra chiamandola Win0, in questo breve codice che segue vedremo come possiamo utilizzare il nome per recuperare l'oggetto Window associato:
; Vediamo come utilizzare il nome della finestra per recuperarne l'oggetto associato
Local searchedWindow = HGui.WindowFindByName("Win0")
NPrint("Window Object   : ", ToString(myWindow))
NPrint("Searched Object : ", ToString(searchedWindow))
NPrint("The two objects are the same Window object!")
La funzione HGui.WindowFindByName() permette di cercare un oggetto Window a partire dal proprio nome, la funzione ritorna l'oggetto trovato oppure resistuisce False se nessuna finestra corrisponde al nome specificato.

Ecco perchè il nome degli oggetti deve essere unico, perchè nel momento in cui andremo ad utilizzare delle funzioni di ricerca non dobbiamo avere ambiguità e dobbiamo ricevere come risposta un solo oggetto. Nel caso si provasse, per errore o volutamente, a creare due oggetti con il medesimo nome il processo di creazione fallirà.

Adesso siamo in grado di creare delle finestre con una posizione e una dimensione iniziale specificandole come parametri del metodo :new(), questo meccanismo è utilizzato per tutti gli oggetti che andremo a creare, compresi i gadget.

Per concludere digitiamo il ciclo infinito che ci permetterà comunque di rilevare gli eventi:
Repeat
   WaitEvent()
Forever
Provate a fare qualche esperimento modificando questo tutorial cambiando la posizione iniziale della finestra, la sua dimensione iniziale oppure provate ad utilizzare le constanti di posizione di Hollywood : #LEFT, #RIGHT, #TOP, #BOTTOM e #CENTER.
Sign In or Register to comment.