next up previous contents index
Next: Bitmap Up: Primitives Graphiques Previous: Fenêtre   Contents   Index

Subsections

Événements

Attacher une fonction de rappel

Pour attacher une nouvelle procédure de rappel à une fenêtre, on utilise la fonction :

(ok:nom-callback! fenêtre procédure)

nom est le nom de l'événement. Ainsi, on attache une nouvelle fonction de rappel procédure à la fenêtre. Le nombre et le type des paramètres de la procédure dépendent de l'événement, résumés dans le tableau ci-dessous :

Par exemple, si nous voulons afficher un message à l'écran chaque fois que la souris entre dans la fenêtre, nous écrivons :

Osm> (ok:enter-callback! 
      fenêtre 
      (lambda ()
        (format #t
                "entrée dans ~a\n"
                fenêtre)))


Obtenir une fonction de rappel

Pour obtenir la fonction de rappel attachée à une fenêtre, on utilise la fonction :

(ok:nom-callback fenêtre)

Par défaut, lorsqu'une fenêtre est créée, une procédure sans effet est attachée au événements.

Pour chaîner les procédures, on peut utiliser le code :

Osm> (ok:enter-callback! 
      fenêtre
      (let ([ancienne (ok:enter-callback
                       fenêtre)]) 
       (lambda ()
        (ancienne)
        (format #t
                "entrée dans ~a\n"
                fenêtre))))

L'utilisation de Scheme rend la programmation particulièrement aisée du fait de la gestion puissante de variables et des procédures.


Codage des touches

Les procédures de rappel liées aux événements press et release reçoivent comme argument un code de touche sous la forme d'un entier.

Les fonctions suivantes permettent d'extraire l'information contenue dans le code de touche :

Les fonctions suivantes permettent de construire un code de touche, en général pour effectuer des comparaisons :

Nous pourrions avoir comme gestionnaire d'événement :

Osm> (ok:press-callback! 
      fenêtre
      (lambda (key)
       (let ([ascii (ok:alpha key)])
        (cond [(and (ok:conrol? key)
                   (eq? ascii #\a))
              (display "CONTROL+A\n")]
              [(not (or (ok:conrol? key)
                        (ok:shift?  key)
                        (ok:alt?    key))
               (if (char-alphabetic? ascii)
                (format #t 
                        "ASCII:~a\n" 
                        ascii))])))


next up previous contents index
Next: Bitmap Up: Primitives Graphiques Previous: Fenêtre   Contents   Index
© 1993 to 2001 Erian Concept