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

2.5 - Gli eventi delle finestre (parte 2)

Questo tutorial è praticamente identico al precedente ma mostra una tecnica di programmazione che può risultare utile in svariate circostanze, chi programma con LUA conosce molto bene questo metodo che prende il nome di "funzioni anonime", ossia funzioni senza nome.
In pratica consiste nel definire le funzioni di callback direttamente dove necessario, ossia dove queste dovrebbero essere assegnate all'evento da rilevare. Questa tecnica si può applicare ovunque in Hollywood e non solo in questo singolo caso.

Riprendiamo l'esempio precedente con le opportune modifiche evitando di commentare il codice che è quasi identico al precedente:
; Includiamo la libreria HGui nella nostra applicazione
@INCLUDE "yourpath/+Includes.hws"
@INCLUDE #INC_HGUI

; Per adesso disabilitiamo il debug commentando le linee seguenti
; DBG.Console.Enable(True, False)
; DBG.Console.AddChannel(HGui.DebugChannel)

Local myWin0 = HGui.Window:new(
  { title = "My first window",
    name = "win0",
    position = { x = 20, y = 20 },
    size = { w = 400, h = 100 },
    ; Ecco qua dove utilizzeremo le funzioni anonime
    events = 
      { OnMove = Function(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,
        OnSize = Function(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 }
  })

Repeat
  WaitEvent()
Forever
Anche se questa tecnica non è strettamente correlata ad HGui ritengo sia veramente utile conoscerla per poterla utilizzare ove necessario.
Provate a creare un nuovo script in grado di rilevare altri eventi utilizzando le funzioni anonime.
Sign In or Register to comment.