#lang racket/gui ;;; api1.rkt - Presentation de resultats de calcul (page 319) ;;; Chapitre 14 (Objets et API graphique) ;;; Livre PCPS : "Premiers Cours de Programmation avec Scheme" ;;; Langage determine par le source (define FRAME (new frame% (label "Factorielle"))) (define VPANEL (new vertical-panel% (parent FRAME) (alignment '(left center)))) (define TEXT-FIELD (new text-field% (parent VPANEL) (label "Valeur de n : ") (min-width 140) (init-value "0") (stretchable-width #f) (callback (lambda (obj evt) (when (equal? (send evt get-event-type) 'text-field-enter) (let ((n (string->number (send TEXT-FIELD get-value)))) (send MSG set-label (format "Factorielle : ~a" (fac n))))))))) (define MSG (new message% (parent VPANEL) (label "Factorielle : 1") (min-width 500))) (define HPANEL (new horizontal-panel% (parent VPANEL) (alignment '(center center)))) (define BUTTON (new button% (parent HPANEL) (label "Random") (callback (lambda (obj evt) ; ici obj et evt ne sont pas utilisés ! (let ((n (random 41))) ; n dans [0,40] (send TEXT-FIELD set-value (number->string n)) (send MSG set-label (format "Factorielle : ~a" (fac n)))))))) (define (fac n) (apply * (build-list n add1))) (send FRAME show #t)