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

wxWidgets Discussion :

Événements


Sujet :

wxWidgets

  1. #1
    Candidat au Club
    Inscrit en
    Janvier 2007
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 5
    Points : 2
    Points
    2
    Par défaut Événements
    Bonjour,

    je suis débutant en C++ avec wxWidget.
    j'ai un programme avec un spinctrl dont la valeur sert de facteur de zoom.
    J'ai un évènement EVT_SPINCTRL(ID_ZOOM, GUIFrame::OnZoomChange) sur le spincrtl.
    Dans l’évènement, je recalcule et affiche des images, ce qui prend assez bien de temps(2 ou 3 sec).
    Mon problème c'est que si je clique plusieurs fois sur le spinctrl pour diminuer sa valeur, l’évènement est déclenché plusieurs fois, et je dois attendre.

    Y aurait-il un moyen pour passer au dessus des évènements intermédiaires ?
    Par Ex: je démarre à 100 pour diminuer vers 95, et je voudrais que le recalcul ne se fasse qu'une fois à 95

    Merci d'avance

  2. #2
    Expert confirmé

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2007
    Messages
    1 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 895
    Points : 4 551
    Points
    4 551
    Par défaut
    Citation Envoyé par castagnier Voir le message
    Bonjour,

    je suis débutant en C++ avec wxWidget.
    j'ai un programme avec un spinctrl dont la valeur sert de facteur de zoom.
    J'ai un évènement EVT_SPINCTRL(ID_ZOOM, GUIFrame::OnZoomChange) sur le spincrtl.
    Dans l’évènement, je recalcule et affiche des images, ce qui prend assez bien de temps(2 ou 3 sec).
    Mon problème c'est que si je clique plusieurs fois sur le spinctrl pour diminuer sa valeur, l’évènement est déclenché plusieurs fois, et je dois attendre.

    Y aurait-il un moyen pour passer au dessus des évènements intermédiaires ?
    Par Ex: je démarre à 100 pour diminuer vers 95, et je voudrais que le recalcul ne se fasse qu'une fois à 95

    Merci d'avance
    A moins de trouver un ordinateur qui sais lire les esprits, non.

    Ton programme ne peut pas savoir qu'à 95, tu va t'arrêter. Que doit-il faire si tu fais une pause d'une seconde entre 96 et 95 ?
    [FAQ des forums][FAQ Développement 2D, 3D et Jeux][Si vous ne savez pas ou vous en êtes...]
    Essayez d'écrire clairement (c'est à dire avec des mots français complets). SMS est votre ennemi.
    Evitez les arguments inutiles - DirectMachin vs. OpenTruc ou G++ vs. Café. C'est dépassé tout ça.
    Et si vous êtes sages, vous aurez peut être vous aussi la chance de passer à la télé. Ou pas.

    Ce site contient un forum d'entraide gratuit. Il ne s'use que si l'on ne s'en sert pas.

  3. #3
    Expert éminent sénior

    Avatar de dragonjoker59
    Homme Profil pro
    Software Developer
    Inscrit en
    Juin 2005
    Messages
    2 045
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Software Developer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2005
    Messages : 2 045
    Points : 11 368
    Points
    11 368
    Billets dans le blog
    10
    Par défaut
    Selon cette page, il n'y a pas possibilité de faire ce genre de choses sur un wxSpinCtrl.
    Ca tiendrait plus de l'event de wxSlider : EVT_SCROLL_THUMBRELEASE ou EVT_COMMAND_SCROLL_THUMBRELEASE selon que tu dérives wxSlider ou pas
    Si vous ne trouvez plus rien, cherchez autre chose...

    Vous trouverez ici des tutoriels OpenGL moderne.
    Mon moteur 3D: Castor 3D, presque utilisable (venez participer, il y a de la place)!
    Un projet qui ne sert à rien, mais qu'il est joli (des fois) : ProceduralGenerator (Génération procédurale d'images, et post-processing).

  4. #4
    Candidat au Club
    Inscrit en
    Janvier 2007
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 5
    Points : 2
    Points
    2
    Par défaut
    Merci, c'est bien ce que je pensais.
    Je vais regarder la proposition avec le slider.

  5. #5
    Membre averti Avatar de wxXav
    Homme Profil pro
    Développeur amateur
    Inscrit en
    Décembre 2008
    Messages
    214
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur amateur

    Informations forums :
    Inscription : Décembre 2008
    Messages : 214
    Points : 354
    Points
    354
    Par défaut
    Hello

    Tu as quand même plusieurs possibilités pour limiter ce genre de problème.

    La plus simple serait, de désactiver le wxSpinCtrl tant que l'événement n'est pas traité, mais c'est quand même moyen comme solution.

    La deuxième serait l'utilisation d'une variable booléenne statique permettant de savoir si l'événement n'est pas déjà en cours de traitement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    void GUIFrame::OnZoomChange(wxSpinEvent &event)
    {
        static bool bIsWorking=false;
        if (bIsWorking) return;
        bIsWorking=true;
     
        ....
     
        bIsWorking=false;
    }
    La dernière possibilité serait de gérer les événement "EVT_SPIN_UP" et "EVT_SPIN_DOWN", et de modifier la valeur toi-même afin de ne bouger que de 5 unités au lieu d'une seule.

    @+
    Xav'

  6. #6
    Candidat au Club
    Inscrit en
    Janvier 2007
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 5
    Points : 2
    Points
    2
    Par défaut
    Merci,
    je vais essayer ça tout de suite

  7. #7
    Candidat au Club
    Inscrit en
    Janvier 2007
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 5
    Points : 2
    Points
    2
    Par défaut
    Bonjour,

    j'ai essayé mais ça ne fonctionne pas, le programme attend toujours que l'event en cours soit terminé et les autres clicks sur le spinctrl arrive en chaine après.
    Je crois qu'il ne me reste plus qu'à rentre le spinctrl disabled pendant le traitement de l'event.

Discussions similaires

  1. Pas d'événement OnClose quand on arrête W2K
    Par Altau dans le forum C++Builder
    Réponses: 9
    Dernier message: 26/01/2009, 18h36
  2. Réponses: 5
    Dernier message: 09/01/2003, 11h55
  3. exploiter un évènement d'un sous composant dans un
    Par bjl dans le forum Composants VCL
    Réponses: 2
    Dernier message: 20/12/2002, 16h44
  4. Modification de l'évènement OnClick
    Par MrJéjé dans le forum C++Builder
    Réponses: 9
    Dernier message: 22/08/2002, 12h52
  5. Redéfinir l'événement OnExit de mon composant TEditFloat
    Par Seb des Monts dans le forum C++Builder
    Réponses: 5
    Dernier message: 18/06/2002, 16h10

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