Bonjour et merci d'avance à ceux qui prendront la peine de me lire =)
Voila je réalise un programme, et j'ai besoin d'écrire dans des "cases" et ce graphiquement (pas dans le terminal de dr scheme) vu que je dessine a coté de ce que je dois écrire.
Comment écrire une variable dans une case directement, y a t'il une fonction prévu pour cela ?
Sinon comment écrire à l'écran, je dessinerais un rectangle moi-même autour.
Voila mon erreur...
Code :
- projet.scm:130:16: initialization for editor-canvas%: expected argument of type <built-in container<%> object>; given #<viewport>
|
Et voici mon code !
(require (lib "graphics.ss" "graphics" ))
; Les variables globales
(define !dimX! 300)
(define !dimY! 300)
(define !port! #f) ;Fenêtre
(define !origine! #f) ;Origine du graphe
(define !black! #f) ;Couleur noire
(define !pos! #f) ;Position du pointeur Courant
(define !rgb! #f) ;Couleur du tracé (par défaut !black!)
(define !longboite! 20) ;Longueur d'un coté dune boite
; Ouvre une fenetre graphiques de haut sur large pixels
; Par defaut haut=600 et large=600
; Maximum haut=800 large=1200
; Origine du repere au centre de la fenetre, couleur du crayon : noir
(define init-graphics
(lambda (args)
(begin
(if (pair? args)
(begin
(if (<= (car args) 1200)
(set! !dimX! (quotient (car args) 2))
)
(if (and
(pair? (cdr args))
(<= (cadr args) 800)
)
(set! !dimY! (quotient (cadr args) 2))
)
)
)
(open-graphics)
(set! !port! (open-viewport "Graphics Window" (* !dimX! 2) (* !dimY! 2)))
(set! !origine! (make-posn !dimX! !dimY!))
(set! !black! (make-rgb 0 0 0))
(set! !pos! !origine!)
(set! !rgb! !black!)
)
)
)
; Place le crayon au point (x,y)
(define position-pen
(lambda (x y)
(set! !pos! (make-posn (+ !dimX! x) (- !dimY! y)))
)
)
; Dessine une ligne depuis la position courante jusqu'a la position (x,y)
; La nouvelle position du crayon est (x,y)
(define draw-line-to
(lambda (x y)
(let (
(point (make-posn (+ x !dimX!) (- !dimY! y)))
)
((draw-line !port!) !pos! point !rgb!)
(set! !pos! point)
)
)
)
;Dessine un cercle "solide" de centre (x,y)
;Le cercle respecte le ratio de dimensions avec la boite
(define cercle-centre
(lambda (x y)
(let*(
(rayon (quotient !longboite! 7))
(diametre (* 2 rayon))
)
(position-pen (- x rayon) (+ y rayon))
((draw-solid-ellipse !port!) !pos! diametre diametre !rgb!)
)
)
)
;Dessine un carré de centre (x,y)
;Le coté du carré est de taille !longboite!
(define boite
(lambda (x y)
(let(
(dim (quotient !longboite! 2))
)
(position-pen (+ x dim) (- y dim))
(draw-line-to (- x dim) (- y dim))
(draw-line-to (- x dim) (+ y dim))
(draw-line-to (+ x dim) (+ y dim))
(draw-line-to (+ x dim) (- y dim))
(cercle-centre x y)
(position-pen x y)
)
)
)
; Affiche dans une boite la variable a
; (define affichage
; (lambda (a)
; Add a text field to the dialog
; (new text-field% [parent dialog] [label "Your name"])
;Fonctions pour déterminer le nombre de chiffres d'un nombre
(define taille-nombre
(lambda (n)
(taille-nombre-it n 1)
)
)
(define taille-nombre-it
(lambda (n i)
(if (< (/ n 10) 1)
i
(taille-nombre-it (quotient n 10) (+ i 1))
)
)
)
;Variables pour la fenetre
(define hauteur 640)
(define largeur 480)
(define window (list hauteur largeur))
;On ouvre la fenetre
(init-graphics window)
(boite 0 0)
(boite -100 -100)
(boite 100 100)
(boite -100 100)
(boite 100 -100)
(define editeur (new editor-canvas% [parent !port!]))
(define texte (new text%))
(send editeur set-editor texte)
(send texte insert "SALUT LOL" )