Précédent   Forum du club des développeurs et IT Pro > C et C++ > Bibliothèques > wxWidgets
wxWidgets Forums d'entraide pour la programmation wxWidgets en C++
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 13/10/2011, 15h33   #1
castagnier
Invité de passage
 
Inscription : janvier 2007
Messages : 5
Détails du profil
Informations forums :
Inscription : janvier 2007
Messages : 5
Points : 0
Points : 0
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
castagnier est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/10/2011, 15h41   #2
Emmanuel Deloget
Expert Confirmé Sénior
 
Homme Emmanuel Deloget
Développeur informatique
Inscription : septembre 2007
Messages : 1 828
Détails du profil
Informations personnelles :
Nom : Homme Emmanuel Deloget
Âge : 37
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 828
Points : 4 396
Points : 4 396
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.
Emmanuel Deloget est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/10/2011, 15h45   #3
dragonjoker59
Membre Expert
 
Homme Sylvain DOREMUS
Développeur informatique
Inscription : juin 2005
Messages : 646
Détails du profil
Informations personnelles :
Nom : Homme Sylvain DOREMUS
Âge : 31
Localisation : France, Alpes de Haute Provence (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Développeur informatique
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : juin 2005
Messages : 646
Points : 1 551
Points : 1 551
Envoyer un message via MSN à dragonjoker59
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...

Chef de projet (et unique exécutant pour l'instant) pour Castor 3D
dragonjoker59 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/10/2011, 03h32   #4
castagnier
Invité de passage
 
Inscription : janvier 2007
Messages : 5
Détails du profil
Informations forums :
Inscription : janvier 2007
Messages : 5
Points : 0
Points : 0
Merci, c'est bien ce que je pensais.
Je vais regarder la proposition avec le slider.
castagnier est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/10/2011, 13h57   #5
wxXav
Membre confirmé
 
Avatar de wxXav
 
Homme Xavier Perrissoud
Développeur amateur
Inscription : décembre 2008
Messages : 139
Détails du profil
Informations personnelles :
Nom : Homme Xavier Perrissoud
Localisation : France

Informations professionnelles :
Activité : Développeur amateur

Informations forums :
Inscription : décembre 2008
Messages : 139
Points : 231
Points : 231
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 :
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'
wxXav est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/10/2011, 04h54   #6
castagnier
Invité de passage
 
Inscription : janvier 2007
Messages : 5
Détails du profil
Informations forums :
Inscription : janvier 2007
Messages : 5
Points : 0
Points : 0
Merci,
je vais essayer ça tout de suite
castagnier est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/10/2011, 08h11   #7
castagnier
Invité de passage
 
Inscription : janvier 2007
Messages : 5
Détails du profil
Informations forums :
Inscription : janvier 2007
Messages : 5
Points : 0
Points : 0
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.
castagnier est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 12h19.


 
 
 
 
Partenaires

Hébergement Web