#lang racket/gui ;;; api2.rkt - Editeurs de texte (page 322) ;;; Chapitre 14 (Objets et API graphique) ;;; Livre PCPS : "Premiers Cours de Programmation avec Scheme" ;;; Langage determine par le source (require (only-in mzlib/string read-from-string-all expr->string)) "INTERFACE GRAPHIQUE : EDITEURS DE TEXTE" (define-values (w h) (get-display-size)) (define FRAME (let-values (((w h) (get-display-size))) (new frame% (min-width (quotient w 3)) (label "Editeurs") (x (quotient w 3)) (y 30)))) (define VPANEL (new vertical-panel% (parent FRAME) (alignment '(center center)))) (define TEXT1 (new text%)) (define TEXT2 (new text%)) (define ECANVAS1 (new editor-canvas% (parent VPANEL) (min-height 200) (editor TEXT1))) (define ECANVAS2 (new editor-canvas% (parent VPANEL) (min-height 200) (editor TEXT2))) (define ns (make-base-namespace)) (eval '(require scheme) ns) (define BUTTON-EVAL (new button% (parent VPANEL) (label "Evaluer") (style '(border)) (callback (lambda (b e) ; b=button, e=event (send TEXT2 erase) (changer-le-style! TEXT2) (let ((L (read-from-string-all (send TEXT1 get-text)))) (for-each (lambda (expr) (send TEXT2 insert (expr->string (eval expr ns))) (send TEXT2 insert "\n")) L)))))) (define (changer-le-style! t) (send t change-style (make-object style-delta% 'change-family 'modern)) ; (send t change-style ; (make-object style-delta% 'change-bold)) (send t change-style (make-object style-delta% 'change-size 20))) (changer-le-style! TEXT1) (send TEXT1 insert "; Entrez des expressions Scheme\n; dans le cadre du haut.\n") (send FRAME show #t) ; run, Forrest, run !