[Scheme] Ecrire dans une boite

Ecrire dans une boite [Scheme] - Divers - Programmation

Marsh Posté le 12-04-2010 à 18:45:47    

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 :
  1. 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" )  
 
   
 

Reply

Marsh Posté le 12-04-2010 à 18:45:47   

Reply

Marsh Posté le 12-04-2010 à 23:34:46    

Apparemment, les editor-canvas% ont comme parent des containers%, du style frame dialog, panel pane (voir ici : http://docs.plt-scheme.org/gui/editor-canvas_.html
Il faut que tu trouves comment obtenir un container adéquat à partir d'un viewport.

Reply

Marsh Posté le 13-04-2010 à 11:21:37    

Coucou Trap D ! Merci de te pencher sur mon cas !
 
Quelle est la différence entre un viewport et un "frame dialog, panel pane" ?

Reply

Marsh Posté le 13-04-2010 à 13:12:36    

apaachee a écrit :

Coucou Trap D ! Merci de te pencher sur mon cas !
 
Quelle est la différence entre un viewport et un "frame dialog, panel pane" ?


Si on lit ce qui est écrit ici : http://docs.plt-scheme.org/graphics/index.html la bibliothèque "viewport graphics" est assez pauvre et ne permet pas des constructions évoluées comme avec les frame, dialog et autres.
Il faut peut-être que tu revoies ta conception !?

Reply

Marsh Posté le 14-04-2010 à 13:02:10    

Re Trap ^^
J'ai effectivement regardé et le prog que je dois écrire ne necessite pas une librairie trop évolué, "viewport graphics" est suffisante :)
 
Tu peux peut-être maider sur quelque chose de très simple je pense :
 
(define a 10)
(define b '(a 4))
 
(car b) = a
et non
(car b) = 10
 
Comment faire pour lister la valeur des variables ?
 
Merci :)

Reply

Marsh Posté le 14-04-2010 à 23:18:03    

La valeur de (car b) est a et non pas 10 qui est la valeur de a, si tu demandes (eval (car b)) tu obtiendras effectivement 10.
 
Pour le binding tu devrais peut-être regarder cette page http://docs.plt-scheme.org/referen [...] ech._bind)
 
Pour eval celle-ci : http://mitpress.mit.edu/sicp/full- [...] %_idx_4230

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed