IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Scheme Discussion :

Problème graphique


Sujet :

Scheme

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    10
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 10
    Points : 9
    Points
    9
    Par défaut Problème graphique
    Salut à tous !!
    J'ai à nouveau un problème graphique,
    j'ai créé une frame% à l'intérieur de laquelle j'ai mis plein de panel% et un canvas, mais j'ai besoin de cliquer dans le canvas et qd je défini la fonction
    (define click (get-mouse-click canvas)) ça ne marche pas, il me dit qu'il faut un viewport, comment pourrais-je faire pour ne pas avois à tout recommencer dans un viewport ???
    Merci pour vos réponses

  2. #2
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Points : 6 498
    Points
    6 498
    Par défaut
    Ce petit bout de code te montre comment faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    (namespace-require (quote (lib "../htdch/graphics/rename.ss" ))) 
    
    
    ; fonctions de gestion d'évènements associés aux éléments des boîtes de dialogues
    ;; elles doivent être définies avant les éléments eux-mêmes
    
    ;; fonction de dessin des canvas deux arguments, le canvas et le contexte de dessin
    (define (canvas_draw cv dc)
      ;; j'obtiens le texte associé au canvas
      (let ((txt (send cv get-label)))
         ;; j'obtiens la taille du canvas
         (letrec-values ([(x y) (send cv get-size)]) 
           ;; j'obtiens la taille de la zone d'écriture
           (letrec-values ([(dx dy f1 f2) (send dc get-text-extent txt)])
             ;; j'écris en centrant le dessin
             (send dc draw-text txt (/ (- x dx) 2) (- (/ y 2) dy))
    ) ) )  )
    
    ;; fonction appelée par le bouton, elle affiche un "message box"
    (define (button_fonc x y)
      (let ((x (make-object dialog% "Message Box" maFenetre 100 80 500 100)))
            (let ((y (make-object canvas% x null canvas_draw "Click")))
              (send x show #t) 
     )   )  )
    
    ;; définition de la boîte de dialogue
    ;; définition de la fenêtre principale
    (define maFenetre (make-object frame% "Ma première fenêtre")) ; création de l'objet maFenetre
    
    (send maFenetre min-width 200) ; définition de sa largeur mini
    (send maFenetre min-height 200) ; définition de sa hauteur mini
    (send maFenetre resize 300 300) ; redimensionnement de la fenetre
                         
    ;; je lui adjoins une aire de dessin ou d'écriture avec un texte associé
    (define monCanvas1 (make-object canvas% maFenetre null canvas_draw "Premier Canvas"))
    
    ;; je définis mon propre canvas 
    (define my-canvas%
      (class canvas%
        (define/override (on-subwindow-event  receiver mouse-event)
          (when (eqv? (send mouse-event get-event-type) 'enter)
            (display 'got)
            (newline)) 
          ;;(send this on-subwindow-event this mouse-event)
          #f)
        (define/override (on-event mouse-event)
          (cond ((eqv? (send mouse-event get-event-type) 'enter)
                 (let ((x (send mouse-event get-x))
                  (y (send mouse-event get-y)))
                   (display (list 'enter )))
                 (newline))
                ( (eqv? (send mouse-event get-event-type) 'left-up)
                  (let ((x (send mouse-event get-x))
                        (y (send mouse-event get-y)))
                    (display (list '"click en " x y)))
                  (newline)
                (send this on-subwindow-event this mouse-event)))
           #f)
        (super-instantiate ()))) 
      
          ;; j'adjoins maintenant à ma fenêtre un bouton (qui sera centré) sous le canvas
    (define monBouton (make-object button% "Bouton" maFenetre button_fonc)) ; création de l'objet bouton
    (send monBouton min-width 150) ; définition de sa largeur mini
    (send monBouton min-height 20) ; définition de sa hauteur mini
    
    ;; je lui adjoins une aire de dessin ou d'écriture avec un texte associé
    (define monCanvas2 (make-object my-canvas% maFenetre null canvas_draw "Second canvas"))
    
    
    
    (send maFenetre show #t) ; affichage de la fenetre
    Un document bien pratique trouvable sur Internet : mred.pdf qui décrit toutes les interfaces graphiques de MScheme

Discussions similaires

  1. Problème graphique : Elargir un trait
    Par wolfmegur80 dans le forum Delphi
    Réponses: 2
    Dernier message: 20/12/2006, 10h04
  2. Problème graphique & calcul dans champ
    Par jacquesprogram dans le forum Access
    Réponses: 1
    Dernier message: 08/09/2006, 15h09
  3. [Cacti ] Problèmes graphiques
    Par seumeneur dans le forum Développement
    Réponses: 2
    Dernier message: 23/07/2006, 16h14
  4. Gros problème graphique
    Par Blo0d4x3 dans le forum Windows XP
    Réponses: 7
    Dernier message: 16/06/2006, 21h12
  5. Problème graphique (Vectoriel?...)
    Par Aloneghost dans le forum Langage
    Réponses: 3
    Dernier message: 25/04/2006, 17h38

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo