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

Interfaces Graphiques Discussion :

Problème de Timer avec le GUIDE


Sujet :

Interfaces Graphiques

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert
    Avatar de kmaniche
    Inscrit en
    Janvier 2006
    Messages
    1 717
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 717
    Par défaut Problème de Timer avec le GUIDE
    Bonjour,

    Pour simplifier les choses, je prends une IHM créée avec GUIDE, contenant un static text et deux boutons.

    A l'ouverture de :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
        handles.compteur = 10 ;
        set(handles.text1, 'String', handles.compteur) ;
    
        
        handles.ttimer = timer('TimerFcn',{@timefct handles}, ...
                                      'Period', 1.0, ...
                                      'ExecutionMode','fixedRate');
    Le premier démarre le timer, :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    start(handles.ttimer) ;
    et le second l'arrête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    stop(handles.ttimer) ;
    Le timer incrémente le compteur et affiche sa valeur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    function timefct(hObject, eventdata, handles)
    handles.compteur = handles.compteur + 1 ;
    set(handles.text1, 'String', handles.compteur) ;
    Avec la fonction timefct qui se déclenche à chaque interval du Timer j'arrive bien à accéder aux objets (handles.compteur, handles.text1).
    Cependant, j'appliques :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    guidata(hObject, handles);

    J'ai l'erreur suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Error using ==> guidata at 89
    H must be the handle to a figure or figure descendent.
    c'est normal, car je n'arrive pas à passer hObject comme paramètre lorsque je crée mon timer. pour résoudre, j'ai essayé avec gcf, gcbo mais je n'arrive pas ?

    Je cherche à passer hObject dans la ligne ci-dessous pour pouvoir réaliser ceci guidata(hObject, handles)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
        handles.ttimer = timer('TimerFcn',{@timefct handles}, ...
                                      'Period', 1.0, ...
                                      'ExecutionMode','fixedRate');

  2. #2
    Expert confirmé
    Avatar de duf42
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    Novembre 2007
    Messages
    3 111
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Formateur en informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 111
    Par défaut
    Bonjour,

    Perso je ferais plutôt un entête comme ca:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    function timefct(handles)
    Avec une définition du timer comme cela:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    handles.ttimer = timer('TimerFcn',@(x) timefct(handles), ...
                                      'Period', 1.0, ...
                                      'ExecutionMode','fixedRate');
    Par contre dans ce cas tu as la structure handles dans l'état au moment de la création du timer, pour contourner le problème (et donc avoir la structure handles à jour) je ferais quelquechose comme ca:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    function timefct(handles)
    handles = guidata(handles.text1);
    Bon il faut tester...

    Bonne apm,
    Duf

  3. #3
    Membre Expert
    Avatar de kmaniche
    Inscrit en
    Janvier 2006
    Messages
    1 717
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 717
    Par défaut
    Dans OpeningFcn
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
        handles.ttimer = timer('TimerFcn',@(x) timefct(handles), ...
                                      'Period', 1.0, ...
                                      'ExecutionMode','fixedRate');

    Dans timefct :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    function timefct(handles)
    handles.compteur = handles.compteur + 1 ;
    set(handles.text1, 'String', handles.compteur) ; 
    guidata(handles);
    L'erreur est la suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    ??? Error while evaluating TimerFcn for timer 'timer-6' 
     
    Error using ==> Incrementation>@(x)timefct(handles)
    Too many input arguments.
    Il y a un truc qui m'échappes

  4. #4
    Expert confirmé
    Avatar de duf42
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    Novembre 2007
    Messages
    3 111
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Formateur en informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 111
    Par défaut
    Autant pour moi, il fonctionne comme tous les autres objets apparemment:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    @(obj,evt) timefct(handles)
    Ca devrait résoudre le problème mais au final tu peux récupérer directement le handle de l'objet timer:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    @(obj,evt) timefct(obj)
    Avec une fonction comme ca:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    function timefct(hObject)
    A tester et voir ce qui convient le mieux...

  5. #5
    Membre Expert
    Avatar de kmaniche
    Inscrit en
    Janvier 2006
    Messages
    1 717
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 717
    Par défaut
    Toujours une erreur, ci-rattaché le fichier programme :
    Fichiers attachés Fichiers attachés

  6. #6
    Expert confirmé
    Avatar de duf42
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    Novembre 2007
    Messages
    3 111
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Formateur en informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 111
    Par défaut
    Chez moi j'ai une erreur de segmentation, à priori ca vient de ton .fig qui à l'air vérolé...

    Vérifie si tu peux ouvrir ton .fig, si non je vois pas d'autre solutions que de le recréer

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

Discussions similaires

  1. Problème de boucle avec Timer
    Par SandrillonC dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 28/04/2010, 12h40
  2. Problème Timer avec vb 2008
    Par walid kh dans le forum VB.NET
    Réponses: 2
    Dernier message: 29/03/2010, 10h35
  3. Problème de précision avec un Timer
    Par cs_ntd dans le forum C#
    Réponses: 7
    Dernier message: 29/06/2008, 23h51
  4. [C#][service windows] problème de débutant avec 1 timer
    Par Nycos62 dans le forum Windows Forms
    Réponses: 3
    Dernier message: 14/10/2005, 11h22
  5. Problèmes de versions avec Xalan, Xerces et Java
    Par honeyz dans le forum XML/XSL et SOAP
    Réponses: 4
    Dernier message: 05/06/2003, 10h18

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