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

2.6 - Gli eventi delle finestre (parte 3)

edited May 2016 in Italian
Continuiamo con le funzioni di callback nella rilevazione degli eventi legati alle finestre: adesso vedremo come sia possibile modificare le funzioni di callback durante l'esecuzione del programma introducendo il metodo :set() dell'oggetto Window.

L'esempio di questo tutorial lo abbiamo già visto in precedenza ma sono stati aggiunti due comandi alla fine delle funzioni di callback che appunto si occupano di scambiare le funzioni di callback stesse.
; 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)

Attenzione alla parte finale delle funzioni di callback:
Function windowMoved1(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("")

  ; Cambiamo la funzione di callback con il metodo :set()
  win:set({ events = { OnMove = windowMoved2 }})
EndFunction

Function windowMoved2(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("")

  ; Cambiamo la funzione di callback con il metodo :set()
  win:set({ events = { OnMove = windowMoved1 }})
EndFunction
Come si può intuire le funzioni di callback si alterneranno una con l'altra cambiando dinamicamente la funzione di callback stessa assegnata all'evento OnMove.
Il metodo :set() permette di modificare qualsiasi parametro dell'oggetto Window, è quindi uno strumento molto potente che ritroveremo spesso nei nostri esempi e non solo associato alle finestre ma anche ai vari gadget.
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 = windowMoved1 }
  })

Repeat
  WaitEvent()
Forever
Provate a rilevare più eventi e ad utilizzare il metodo :set() nelle funzioni di callback per altri scopi.
Sign In or Register to comment.