1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71
| (namespace-require (quote (lib "../htdch/graphics/rename.ss" )))
; fonctions de gestion d'évènements associés aux éléments des boîtes de dialogues
;; elles doivent être définies avant les éléments eux-mêmes
;; fonction de dessin des canvas deux arguments, le canvas et le contexte de dessin
(define (canvas_draw cv dc)
;; j'obtiens le texte associé au canvas
(let ((txt (send cv get-label)))
;; j'obtiens la taille du canvas
(letrec-values ([(x y) (send cv get-size)])
;; j'obtiens la taille de la zone d'écriture
(letrec-values ([(dx dy f1 f2) (send dc get-text-extent txt)])
;; j'écris en centrant le dessin
(send dc draw-text txt (/ (- x dx) 2) (- (/ y 2) dy))
) ) ) )
;; fonction appelée par le bouton, elle affiche un "message box"
(define (button_fonc x y)
(let ((x (make-object dialog% "Message Box" maFenetre 100 80 500 100)))
(let ((y (make-object canvas% x null canvas_draw "Click")))
(send x show #t)
) ) )
;; définition de la boîte de dialogue
;; définition de la fenêtre principale
(define maFenetre (make-object frame% "Ma première fenêtre")) ; création de l'objet maFenetre
(send maFenetre min-width 200) ; définition de sa largeur mini
(send maFenetre min-height 200) ; définition de sa hauteur mini
(send maFenetre resize 300 300) ; redimensionnement de la fenetre
;; je lui adjoins une aire de dessin ou d'écriture avec un texte associé
(define monCanvas1 (make-object canvas% maFenetre null canvas_draw "Premier Canvas"))
;; je définis mon propre canvas
(define my-canvas%
(class canvas%
(define/override (on-subwindow-event receiver mouse-event)
(when (eqv? (send mouse-event get-event-type) 'enter)
(display 'got)
(newline))
;;(send this on-subwindow-event this mouse-event)
#f)
(define/override (on-event mouse-event)
(cond ((eqv? (send mouse-event get-event-type) 'enter)
(let ((x (send mouse-event get-x))
(y (send mouse-event get-y)))
(display (list 'enter )))
(newline))
( (eqv? (send mouse-event get-event-type) 'left-up)
(let ((x (send mouse-event get-x))
(y (send mouse-event get-y)))
(display (list '"click en " x y)))
(newline)
(send this on-subwindow-event this mouse-event)))
#f)
(super-instantiate ())))
;; j'adjoins maintenant à ma fenêtre un bouton (qui sera centré) sous le canvas
(define monBouton (make-object button% "Bouton" maFenetre button_fonc)) ; création de l'objet bouton
(send monBouton min-width 150) ; définition de sa largeur mini
(send monBouton min-height 20) ; définition de sa hauteur mini
;; je lui adjoins une aire de dessin ou d'écriture avec un texte associé
(define monCanvas2 (make-object my-canvas% maFenetre null canvas_draw "Second canvas"))
(send maFenetre show #t) ; affichage de la fenetre |
Partager