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 sauvegarde de données avec Guidata


Sujet :

Interfaces Graphiques

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    171
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juillet 2009
    Messages : 171
    Par défaut Problème de sauvegarde de données avec Guidata
    Bonjour,

    Je suis actuellement en cours de développement d'un logiciel sous matlab avec IHM.

    Pour faire passer des données entre différentes fonctions, j'utilise la méthode avec Guidata décrite dans le tutoriel.
    Le logiciel est déjà bien avancé et pour l'instant je n'ai eu aucun soucis... jusqu'à aujourd'hui!!

    Voila un extrait d'une des fonctions :

    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
    function affichageRendementProduction
     
        h = findobj('tag','tableauAffichage');
        hp = findobj( 'tag', 'tableauPanel' );
     
        setInfoOperationInvisible;
     
        hpanelRendementProductionMC = findobj( 'tag', 'panel_RendementProductionMC');
        set( hpanelRendementProductionMC, 'Visible', 'On' );
     
        donnees = guidata(gcf);
        if( donnees.CalculRendementProdMCFait == 0)
            cd('..');
            cd('CalculsSystemesOKKO\');
            calculRendementProdMC; 
        end
        donnees = guidata(gcf);
        set(hp, 'Title', 'Rendement de production MC');
        set(h,'data',donnees.RendementOkParCritereCouleur);  
        set(h,'RowName',donnees.nomsParamSystemes);
        set(h,'ColumnName', 'Rendement de production (%)');
        hEditRdmtGlobal = findobj( 'tag', 'tag_RendementGlobalEdit');
        set( hEditRdmtGlobal,'String',  num2str( donnees.RendementGlobalMC ));
     
        cd('..');
        cd('Callback\');
     
    end
    et voici un extrait de la fonction calculRendementProdMC

    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
    function calculRendementProdMC
        donnees = guidata(gcf);
        etatSysteme = donnees.etatSysteme;
        % calcul rendement par critère
        nbSimusOKParCritere = zeros( 1, size( donnees.etatSysteme,2 ));
        for i=1:1:size( etatSysteme,2 )
            nbSimusOKParCritere(1,i) = size( find( strcmp( etatSysteme(:,i), 'OK' )),1);
        end
        RdmtOkParCritere = nbSimusOKParCritere/donnees.NbSimu * 100;
        donnees.RendementOkParCritere = RdmtOkParCritere;
        % calcul rendement global
        ligneTypeSimuOK = cell(1, size( etatSysteme,2));
        for i=1:1: size( etatSysteme,2 )
            ligneTypeSimuOK{i} = 'OK';
        end
        simuOK = zeros( donnees.NbSimu, 1);
        for i=1:1:donnees.NbSimu
            simuOK(i) = isequal( ligneTypeSimuOK, etatSysteme(i,:));
        end
        nbSimuOK = size(find( simuOK == 1),1);
     
        donnees.RendementGlobalMC = nbSimuOK/donnees.NbSimu * 100;
     
        donnees.CalculRendementProdMCFait = 1;
     
        % mise en couleur
     
        cd( '..' );
        cd( 'ColorationTableau\' );
     
        % Données résultats + état 
        RendementOkParCritereCouleur = cell( size( RdmtOkParCritere,2 ),1 );
        for i=1:1: size( donnees.etatSysteme,2 )
                if ( RdmtOkParCritere(i) <= 50 )
                    RendementOkParCritereCouleur{i,1}= colTextBG( num2str( RdmtOkParCritere(i),6), 'FF0000');
                elseif( RdmtOkParCritere(i) >50 && RdmtOkParCritere(i) < 100 )
                    RendementOkParCritereCouleur{i,1} = colTextBG( num2str( RdmtOkParCritere(i),6), 'FFFF00');
                elseif( RdmtOkParCritere(i) == 100 )
                    RendementOkParCritereCouleur{i,1} = colTextBG( num2str( RdmtOkParCritere(i),6), '00FF00');
                else
                    RendementOkParCritereCouleur{i,1} = colTextBG( num2str( RdmtOkParCritere(i),6), 'FF8C00');                
                end
        end
        donnees.RendementOkParCritereCouleur = RendementOkParCritereCouleur;
        %%
        guidata(gcf,donnees);
    end
    Le problème que j'ai est le suivant : les nouveaux paramètres enregistrés dans guidata dans la sous fonction sont bien récupérables dans la fonction affichageRendementProduction, mais reprennent leur valeur d'initialisation (cad 0 ) une fois que je sors de cette fonction !!
    Qd je sors de la fonction affichageRendementProduction, c'est comme ci les paramètres RendementOkParCritereCouleur, RendementGlobalMC... etc n'avaient pas été modifié...

    Quelqu'un aurait il une idée du problème ?
    Car j'ai effectué la même méthode dans d'autres fonctions et je n'ai aucun soucis...

    Merci !!

  2. #2
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 317
    Par défaut
    As-tu plusieurs fenêtres ouvertes en même temps (plusieurs objet Figure) ?

    Il faut se méfier de gcf et lui préférer souvent gcbf ou bien le vrai identifiant de l'objet Figure

  3. #3
    Membre confirmé
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    171
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juillet 2009
    Messages : 171
    Par défaut
    Merci pour ta réponse !
    Non je n'ai qu'une seule figure.
    Je vais tester en mettant directement l'identifiant de la figure !

  4. #4
    Membre confirmé
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    171
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juillet 2009
    Messages : 171
    Par défaut
    Le résultat est malheureusement identique...

    à la fin de la fonction affichageRendementProduction, je regarde ce qui a dans guidata(h) où h est le handle de ma figure et j'ai (entre autres) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
                           RendementOkParCritere: [1x33 double]
                       CalculRendementProdMCFait: 1
                               RendementGlobalMC: 0.4484
                    RendementOkParCritereCouleur: {33x1 cell}
    et quand je tape ensuite "guidata(h)" directement dans la fenetre de commande j'ai :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
                           RendementOkParCritere: 0
                       CalculRendementProdMCFait: 0
                               RendementGlobalMC: 0
                    RendementOkParCritereCouleur: 0

  5. #5
    Membre confirmé
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    171
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juillet 2009
    Messages : 171
    Par défaut
    C'est bon j'ai résolu mon problème...
    Il fallait que je regarde un fonction plus haut ! au niveau du callback qui appelle la fonction affichageRendementProduction!
    J'avais écrit :

    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
    function m5sm1_callback(hObject, eventdata, handles)
    % Calcul Rendement Production
        donnees = guidata(gcf);
        if( donnees.FichierConfigSystemeExist ~= 0 )
            cd('..');
            cd('IHM\');
            affichageRendementProduction;
            cd('..');
            cd('Callback\'); 
        else
            msgErreur = sprintf( 'ERREUR : Vous devez d abord sélectionner le fichier de configuration système avant de calculer les rendements.');
            msgbox(msgErreur,'Erreur configuration système manquante','error'); 
        end
        guidata(gcf,donnees);
    end
    A cause de la ligne en rouge, j'écrasais ce qui avait été sauvegarder dans la sous fonction d'affichage !

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

Discussions similaires

  1. Problème de sauvegarde des données avec ADO.net
    Par xave4552 dans le forum Framework .NET
    Réponses: 2
    Dernier message: 20/02/2013, 04h26
  2. [1.x] Problème de sauvegarde des données avec embed form
    Par Vicrabb dans le forum Symfony
    Réponses: 2
    Dernier message: 24/11/2010, 12h11
  3. Problème Update Base de données avec les composants ADO
    Par lingli dans le forum Bases de données
    Réponses: 5
    Dernier message: 20/04/2006, 00h41
  4. Problème d'affichage de données avec crystal report
    Par napegadie dans le forum VB 6 et antérieur
    Réponses: 19
    Dernier message: 07/12/2005, 15h45
  5. Réponses: 2
    Dernier message: 14/05/2004, 14h32

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