#lang racket/gui ;;; scroll-fac-gui.rkt - Les barres de defilement sont automatiques (exercice 14.5.4 page 338) ;;; Chapitre 14 (Objets et API graphique) ;;; Livre PCPS : "Premiers Cours de Programmation avec Scheme" ;;; Langage determine par le source "INTERFACE GRAPHIQUE : LA FACTORIELLE AVEC SCROLLING VERTICAL" (define FRAME (new frame% (label "Factorielle") (stretchable-height #f))) (define VPANEL (new vertical-panel% (parent FRAME) (alignment '(left center)))) (define (fac n) (apply * (build-list n add1))) (define (updateText1 n) (send TEXT lock #f) (send TEXT erase) (send TEXT insert (format "Sa factorielle vaut ~a" (fac n))) (send TEXT lock #t) (send TEXT hide-caret #t)) (define TEXT-FIELD (new text-field% (parent VPANEL) (min-width 300) (stretchable-width #f) (label "Donnez la valeur de n : ") (init-value "1") (callback (lambda (obj evt) (when (equal? (send evt get-event-type) 'text-field-enter) (let ((n (string->number (send TEXT-FIELD get-value)))) (printf "Dans le text-field : ~a\n" n) (updateText1 n))))))) (define TEXT (new text%)) (send TEXT lock #t) (send TEXT hide-caret #t) (define ECANVAS (new editor-canvas% (parent FRAME) (min-height 50) (editor TEXT))) (send TEXT insert "Sa factorielle vaut 1") (define HPANEL (new horizontal-panel% (parent VPANEL) (alignment '(center center)))) (define BOUTON (new button% (parent HPANEL) (label "Random") ;(style '(border)) ; Attention : ceci capturerait l'evenement 'text-field-enter ! (callback (lambda (obj evt) (let ((n (+ 2 (random 40)))) (send TEXT-FIELD set-value (number->string n)) (updateText1 n)))))) (send FRAME show #t)