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

2.4 - Gli eventi delle finestre (parte 1)

edited May 2016 in Italian
In questo tutorial vedremo come metterci in "ascolto" degli eventi generati dalla finastra e quindi come sia possibile assegnare delle funzioni di callback a questi eventi. Le funzioni di callback sono delle funzioni che saranno eseguite automaticamente ogni volta che l'evento associato ad esse sarà rilevato.
Ogni singola finestra che compone la nostra interfaccia grafica è in grado di rilevare svariati eventi tra cui:

OnClose
- Evento generato quando la finestra viene chiusa (l'evento viene generato prima della chiusura)
OnMove
- Evento generato ogni volta che la finestra viene spostata
OnActivate
- Evento generato ogni volta che la finestra diventa attiva e quindi in grado di ricevere l'input dall'utente
OnDeactivate
- Evento generato ogni volta che la finestra perdo lo stato "attivo"
OnHide
- Evento generato ogni volta che la finestra viene iconificata
OnShow
- Evento generato ogni volta che la finestra viene ripristinata dalla riduzione ad icona
OnSize
- Evento generato ogni volta che la finestra viene ridimensionata

Durante il processo di creazione dell'oggetto Window è possibile specificare una o più funzioni di callback assegnandole agli eventi che intendiamo rilevare, come vedremo nell'esempio seguente:

Create un nuovo script e digitate il seguente programma:
; Includiamo la libreria HGui nella nostra applicazione
@INCLUDE "yourpath/+Includes.hws"
@INCLUDE #INC_HGUI

Questa volta non abiliteremo il debug dell'applicazione per mantenere lo schermo pulito per mostrare i messaggi di questo script:
; Per adesso disabilitiamo il debug commentando le linee seguenti
; DBG.Console.Enable(True, False)
; DBG.Console.AddChannel(HGui.DebugChannel)

Le funzioni di callback possono essere specificate attraverso la tabella Events ma prima di fare ciò abbiamo bisogno di definire le funzioni di callback stesse, creiamo quindi due funzioni, una da eseguire quando la finestra verrà spostata e un'altra da eseguire quando la finestra sarà ridimensionata:
Function windowMoved(msg, win)
  ; Questa funzione sarà eseguita ogni volta che la finestra sarà spostata
  DebugPrint("::: CALLBACK FUNCTION :::")
  DebugPrint(GetTime(True), "OnMove event for window " .. win.Name)
  DebugPrint("--- message contents ---")
  ForEach(msg, DebugPrint)
  DebugPrint("")
EndFunction

Function windowResized(msg, win)
  ; Questa funzione sarà eseguita ogni volta che la finestra sarà ridimensionata
  DebugPrint("::: CALLBACK FUNCTION :::")
  DebugPrint(GetTime(True), "OnSize event for window " .. win.Name)
  DebugPrint("--- message contents ---")
  ForEach(msg, DebugPrint)
  DebugPrint("")
EndFunction
Da notare che le funzioni di callback saranno eseguite con due argomenti, il primo è una tabella che contiene le informazioni relative all'evento appena rilevato mentre il secondo argomento è l'oggetto Window dal quale è partito l'evento.

Adesso creiamo una finestra:
Local myWin0 = HGui.Window:new(
  { title = "My first window",
    name = "win0",
    position = { x = 20, y = 20 },
    size = { w = 400, h = 100 },
    ; qui di seguito definiamo le funzioni di callback
    events = 
      { OnMove = windowMoved,
        OnSize = windowResized }
  })
Infine il nostro ciclo infinito:
Repeat
  WaitEvent()
Forever
Adesso lanciate lo script e vi accorgerete che saranno mostrati i messaggi definiti nelle funzioni di callback ogni volta che la finestra sarà spostata o ridimensionata, come esercizio potete creare un nuovo script in grado di rilevare gli altri eventi supportati dalle finestra come ad esempio OnClose, OnActivate, ecc...
Sign In or Register to comment.