Intercettare Eventi

  1. 2 weeks ago

    Buongiorno,
    è possibile fare in modo che la window possa intercettare gli eventi di tastiera
    ( KeyDown, KeyUp ) prima che questi vengano generati dai rispettivi controlli
    presenti nella windows stessa, anche se hanno il focus ?

    P.S.:
    In un "vecchio linguaggio" c'era la proprietà KEYPREVIEW

  2. Pietro B

    Oct 11 Pre-Release Testers, Xojo Pro Europe (Swiss, Chiasso)

    Credo che gli eventi KeyDown e KeyUp dei controlli abbiano la priorità sulla window ed in qualche modo "rubino" l'evento alla window stessa. L'unico modo che che mi viene in mente per gestire la cosa è:

    • creare 2 metodi a livello di window, per esempio windowKeyDown e windowKeyUp
    • implemetare in ogni controllo presente sulla window gli eventi KeyDown e KeyUp nei quali per prima cosa si richiama il rispettivo metodo a livello di window.

    Mi rendo conto che la cosa, soprattutto se la window ha molti controlli, risulta essere un po' macchinosa, ma al momento non mi viene in mente nient'altro.

  3. Infatti questo che hai indicato è il metodo che attualmente ho adottato.

    Concordo che la cosa è macchinosa ( con molti controlli ) e anche poco elegante.

    Però non mi arrendo e continuo a cercare alternative :)

  4. last week

    Antonio R

    Oct 15 Pre-Release Testers, Xojo Pro Europe (Italy)

    Se vuoi costruire un sistema che invii prima l'evento alla finestra e se non lo gestisce allora scatena l'evento del controllo ti conviene creare una sottoclasse del controllo e una interfaccia.
    Per ogni evento che vuoi prima propagare a livello superiore un evento, definisci un nuovo evento identico per il controllo (c'è la possibilità di farlo dopo aver implementato l'evento) per la gestione normale e definisci anche un'interfaccia che la tua finestra andrà ad implementare. In questo modo non è necessario fare lavori enormi e puoi gestire quando e come vuoi sfruttare questa "deviazione" al meccanismo normale.

  5. 5 days ago

    Ciao Antonio,
    ho usato il seguente approccio:

    ho creato, per ogni controllo che utilizzo, la relativa sottoclasse dove ho implementato l'evento KeyDown il quale invoca un delegate per la cattura del tasto e le relative azioni da svolgere:

    sottoclasse NewTextField - super TextField
    nella sottoclasse NewTextField ho un delegate CatchKeyDown( Key as String ) as Boolean
    nella sottoclasse NewTextField ho definito l'evento KeyDown e nel relativo gestore dell'evento invoco il delegate ( se impostato ).

    Nell'evento Open della Window imposto, sui controlli dove mi serve, l'indirizzo del metodo che voglio richiamare per fare il controllo:

    NewTextField1.CatchKeyDown = AddressOff ControlKey
    NewTextField2.CatchKeyDown = AddressOff ControlKey
    NewTextField3.CatchKeyDown = AddressOff ControlKeyFind
    ....

    I metodi ControlKey e ControlKeyFind hanno come parametro la key passata dall'evento KeyDown del controllo e restituiscono un false o true per fare in modo che il tasto premuto venga o meno elaborato dal controllo.

    Può andare ?

  6. Antonio R

    Oct 19 Pre-Release Testers, Xojo Pro Europe (Italy)

    Può andare.
    Verifica che alla chiusura tutto venga rilasciato correttamente.

or Sign Up to reply!