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 :

Callback popupmenu


Sujet :

Interfaces Graphiques

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    12
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Mars 2008
    Messages : 12
    Par défaut Callback popupmenu
    Bonjour,
    J'ai un petit soucis concernant le callback des popupmenu
    J'ai une erreur qui concerne à mon avis la ligne en rouge mais je ne comprend pas pourquoi.
    Si quelqu'un pouvait m'aider ça serait sympa. J'ai cherché un peu partout dans l'aide et sur le net mais je vois pas pourquoi.

    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
    function callbacktestboucle(src,evt)   
    
             val1=get(findobj(gcbo,'tag','boucle1'),'Value')
             val2=get(findobj(gcbo,'tag','boucle2'),'Value');
             val3=get(findobj(gcbo,'tag','boucle3'),'Value');
             val4=get(findobj(gcbo,'tag','boucle4'),'Value');
             
             str1=get(findobj(gcbo,'tag','boucle1'),'String');
             str2=get(findobj(gcbo,'tag','boucle2'),'String');
             str3=get(findobj(gcbo,'tag','boucle3'),'String');
             str4=get(findobj(gcbo,'tag','boucle4'),'String');
        
         
             if(strcmp(cellstr(str1{val1}),'frequence')==true)   
                 set(findobj(gcbf,'tag','boucle2'),'String',{'angle','polarisation','commutation'});
                 set(findobj(gcbf,'tag','boucle3'),'String',{'angle','polarisation','commutation'});
                 set(findobj(gcbf,'tag','boucle4'),'String',{'angle','polarisation','commutation'});
                 
             elseif(strcmp(cellstr(str1{val1}),'frequence')==true && strcmp(cellstr(str2{val2}),'angle')==true)             set(findobj(gcbf,'tag','boucle3'),'String',{'polarisation','commutation'});
                 set(findobj(gcbf,'tag','boucle4'),'String',{'polarisation','commutation'});
             end
    L'erreur :
    Cell contents reference from a non-cell array object.

  2. #2
    Expert confirmé
    Avatar de Caro-Line
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    9 458
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 9 458
    Par défaut
    Pourquoi fais-tu à chaque fois :str1 est (normalement) un tableau de cellule, en prenant {val1} tu dois récupérer une chaine de caractères puis avec CELLSTR tu le retransformes en tableau de cellules pour le transformer en tableau de cellules

    Tu pourrais tout simplement faire (car le ==true n'est pas nécessaire) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if strcmp(str1{val1},'frequence')
    Sinon tu es sur que l'erreur arrive sur la ligne en rouge ?
    Si oui à mon avis str2 ne doit pas être un tableau de cellule, tu ne peux donc pas faire str2{val2}.
    Pour en être sur il faudrait savoir ce qu'il y a dans str2.

    Et enfin ton IF/ELSEIF est étrange puisque :
    - 1ère condition : si str1{val1} est 'frequence' alors
    - 2ème contion : sinon (si str1{val1} n'est pas 'frequence') alors si str1{val1} est 'fréquence' => contradiction. Il s'arrêtere là puisque s'il arrive ici c'est que str1{val1} est différent de 'frequence'.

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    12
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Mars 2008
    Messages : 12
    Par défaut
    Tu as raison je me suis compliqué la vie pour rien ça marche tout simplement avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if strcmp(str1{val1},'frequence')
    En ce qui concerne le elsif.
    En fait j'ai 4 popupmenu et j'aimerais qu'il dépendent les uns des autres
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    paramBoucle1=uicontrol('Parent',paramDialog,'Style','popupmenu','String',{'frequence','angle','polarisation','commutation'},'units','normalized','position',[0.02 0.57 0.20 0.05],'backgroundcolor','w','tag','boucle1','callback',@callbacktestboucle);
    paramBoucle2=uicontrol('Parent',paramDialog,'Style','popupmenu','String',{'frequence','angle','polarisation','commutation'},'units','normalized','position',[0.273 0.57 0.20 0.05],'backgroundcolor','w','tag','boucle2','callback',@callbacktestboucle);
    paramBoucle3=uicontrol('Parent',paramDialog,'Style','popupmenu','String',{'frequence','angle','polarisation','commutation'},'units','normalized','position',[0.526 0.57 0.20 0.05],'backgroundcolor','w','tag','boucle3','callback',@callbacktestboucle);
    paramBoucle4=uicontrol('Parent',paramDialog,'Style','popupmenu','String',{'frequence','angle','polarisation','commutation'},'units','normalized','position',[0.78 0.57 0.20 0.05],'backgroundcolor','w','tag','boucle4','callback',@callbacktestboucle);
    J'aimerais que lorsque je sélectionne par exemple 'frequence' dans le premier popupmenu il faudrait que les 3 autres popupmenu s'actualise pour n'offrir la possibilité de selectionner 'angle', 'polarisation' ou 'commutation'. 'frequence' ayant déjà été choisi.
    Je me suis surement mal prise avec des if et elseif mais je vois pas comment faire pour les rendre dépendants.
    J'espère avoir été assez clair.
    Merci pour ta reponse rapide

  4. #4
    Expert confirmé
    Avatar de Caro-Line
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    9 458
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 9 458
    Par défaut
    L'idée me parait pas mal mais il faudrait faire des tests différents dans chaque Callback de chaque popup.

    En fait le 1 b'agirait que sur le 2.
    Le 2 tiendrait compte de la valeur du 1 et donc 1+2 agirait uniquement sur le 3.
    Etc...

    Quand est appelé au juste ta fonction callbacktestboucle ?

    Maintenant : as-tu toujours ton erreur qui apparait ?

    Conseils : il faut éviter de rappeler plusieurs fois les mêmes lignes de code.

    Petite optimisation de ton code pour te donner des idées :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    function callbacktestboucle(src,evt)
    %Récupération des handles des popup, de leurs valeurs, de leurs chaines de
    %caractères
    for k=1:4
        hPopup(k) = findobj(gcbf,'tag',sprintf('boucle%d',k));
        val(k) = get(hPopup(k),'Value');
        str{k} = get(hPopup(k),'String');
    end
     
    if(strcmp(str1{val1},'frequence')
        set(hPopup(2:4),'String',{'angle','polarisation','commutation'});
    end

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    12
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Mars 2008
    Messages : 12
    Par défaut
    Merci ça marche nickel.
    Il me reste plus qu'à optimiser le code.
    Encore merci

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

Discussions similaires

  1. Popupmenu et callbacks (sans GUIDE)
    Par pwfsic dans le forum Interfaces Graphiques
    Réponses: 1
    Dernier message: 08/06/2007, 17h31
  2. Fonction callback dans une classe
    Par julian_ross dans le forum MFC
    Réponses: 8
    Dernier message: 02/03/2004, 11h42
  3. [MFC] Un callback dans des MFC ...
    Par elsargento dans le forum MFC
    Réponses: 3
    Dernier message: 18/02/2004, 16h04
  4. Un Hint sur un PopupMenu ne fonctionne pas !!??
    Par momox dans le forum C++Builder
    Réponses: 6
    Dernier message: 26/05/2003, 16h48
  5. PopupMenu sur item de TListBox
    Par nmathon dans le forum Composants VCL
    Réponses: 4
    Dernier message: 17/03/2003, 17h28

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