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

Caml Discussion :

Probleme de Key event sur le module Graphique


Sujet :

Caml

  1. #1
    Membre à l'essai
    Inscrit en
    Novembre 2007
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 12
    Points : 10
    Points
    10
    Par défaut Probleme de Key event sur le module Graphique
    Bonjour, j'ai un probleme par rapport au module graphique, alors voila la fonction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    let jeux lu hu k=
    	let i=ref (wait_next_event [ Poll; Key_pressed]) in
    	while !i.key<>'p' do
    	begin
    		read_key();
    		Thread.delay 0.5;
    		jeux2 lu hu k
    	end
    done;;
    et voici mon probleme,
    Enfete je voulais que le programme fasse un tour de boucle toutes les 0.5 secondes (ca marche) mais je voulais qu'il s'arrete de tourner si l'utilisateur presse 'p' dans la fenetre graphique, mais ca marche pas (ca tourne a l'infini sans jamais prendre en compte la touche de clavier pressé apparement)

    j'ai essayé pas mal de combinaisons mais sans succes, donc si vous pouvez m'aider un peu ca serait simpa merci

  2. #2
    Nouveau membre du Club
    Inscrit en
    Avril 2007
    Messages
    31
    Détails du profil
    Informations personnelles :
    Âge : 55

    Informations forums :
    Inscription : Avril 2007
    Messages : 31
    Points : 29
    Points
    29
    Par défaut
    Un "if" à la place du "while" ne fait pas l'affaire?

  3. #3
    Membre à l'essai
    Inscrit en
    Novembre 2007
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 12
    Points : 10
    Points
    10
    Par défaut
    Citation Envoyé par DavidDeharbe Voir le message
    Un "if" à la place du "while" ne fait pas l'affaire?
    alors j'ai tenté en recursif mais ca change pas trop le probleme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    let rec test lu hu k=
    	let i=(wait_next_event [ Key_pressed; Poll]) in
    	if not(i.key='p') then
    	begin
    		Thread.delay 0.5;
    		truc lu hu k;
    		test lu hu k
    	end;;
    le probleme :
    - que j'appuie ou non sur 'p' ca change rien



    Je sais que la syntaxe n'est pas tres optimale pour Ocaml mais j'aimerai savoir comment on fait pour que
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    tant que     utilisateur appuie pas sur 'p'   alors
                 Thread.delay 0.5 (= c'est pour avoir une pause)
                 instruction                 
    fin tant que

    bref j'arrive pas a trouver mon erreur
    pour je penses pas faire de betise en utilisant les fonctions du module graphique Cf http://caml.inria.fr/pub/docs/manual.../Graphics.html


    EDIT : Bon bin j'ai toujours pas trouvé la solution, par contre c'est possible de reinitialiser read_key () quand celui-ci prend une valeur fixe ?? (c'est a dire quand il la garde apres la fin d'une certaine fonction car j'arrive pas a la changer apres cette etape) merci

  4. #4
    Membre actif Avatar de Steki-kun
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    222
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 222
    Points : 281
    Points
    281
    Par défaut
    Citation Envoyé par Dlieu Voir le message
    Bonjour, j'ai un probleme par rapport au module graphique, alors voila la fonction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    let jeux lu hu k=
    	let i=ref (wait_next_event [ Poll; Key_pressed]) in
    	while !i.key<>'p' do
    	begin
    		read_key();
    		Thread.delay 0.5;
    		jeux2 lu hu k
    	end
    done;;
    Salut, ton code me semble assez douteux : tu récupères l'état courant au début de ta fonction (par wait_next_event associé à Poll) puis tu le teste ensuite en boucle alors que rien ne vient le changer. Dans ce programme, passé la deuxième ligne, !i.key sera une constante donc c'est logique que le programme boucle infiniment. En d'autres termes : tu testes systématiquement l'état initial que tu avais sauvé dans i.

    La fonction read_key attend un caractère et le renvoie (elle est de type unit -> char), or tu l'appelles et tu ne fais rien avec le caractère qu'elle renvoie (NB : Caml dois te donner un warning ici => les warnings sont IMPORTANTS en général). Ce que tu voudrais faire, c'est plutôt du genre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    while read_key () <> 'p'
    Et si tu voulais que la boucle s'effectue sans s'arrêter pour attendre une touche, mais jusqu'à ce que tu tapes "p", il faudrait rajouter dans le corps de boucle un polling du statut courant du clavier :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
       while !i.key<>'p' do
     ...
        i := wait_next_event [ Poll; Key_pressed]
       done;;
    J'espère que ca répondra à ton problème,

    SK
    I'm the kind of guy that until it happens, I won't worry about it. - R.H. RoY05, MVP06

  5. #5
    Membre éprouvé
    Avatar de InOCamlWeTrust
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    1 036
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 1 036
    Points : 1 284
    Points
    1 284
    Par défaut
    Bien vu !
    When Colt produced the first practical repeating handgun, it gave rise to the saying God created men, but Colt made them equal.

  6. #6
    Membre à l'essai
    Inscrit en
    Novembre 2007
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 12
    Points : 10
    Points
    10
    Par défaut
    merci de l'aide

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 11/01/2011, 20h01
  2. Cancel event sur Escape Key dans datagridview
    Par garciajulien dans le forum Windows Forms
    Réponses: 1
    Dernier message: 27/02/2010, 20h32
  3. probleme Key event
    Par champity dans le forum Débuter
    Réponses: 2
    Dernier message: 24/04/2009, 17h11
  4. [C#] Key event sur form
    Par kooljy dans le forum Windows Forms
    Réponses: 4
    Dernier message: 28/06/2006, 13h24
  5. [MFC] Probleme Key Events
    Par vainsoul dans le forum MFC
    Réponses: 11
    Dernier message: 08/08/2005, 12h01

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