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 :

Uipanel ne possède pas de propriété 'enable'


Sujet :

Interfaces Graphiques

  1. #1
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Juin 2009
    Messages
    4 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 481
    Points : 13 677
    Points
    13 677
    Billets dans le blog
    1
    Par défaut Uipanel ne possède pas de propriété 'enable'
    Bonjour,

    Problème : Comme l'indique le titre, je cherche un moyen de contourner le fait qu'un uipanel n'a pas de propriété 'enable'.

    Contexte : ma fenêtre comporte 4 uipanels, dont certains contiennent des boutons. En particulier, il y a un togglebutton dans l'un des panneaux et j'aimerais que quand il est relâche (sa valeur est donc a max), tous les autres boutons voient leur propriété 'enable' passée à 'off' ou 'inactive'. En clair, tant que ce togglebutton n'a pas été enfoncé, les autres trucs ne marchent pas.

    Idées de solution :
    • Les rendre invisibles au lieu de inactif mais c'est tres moche
    • Régler à la main et un à un la propriété 'enable' de tous mais uicontrol, mais c'est très fastidieux et très peu évolutif si je veux rajouter de nouveaux boutons
    • Avoir une liste de tous les handles sur uicontrols pour les desactiver. Je ne vois pas trop comment faire...


    Il faut dire que j'ai pour l'instant, dans ma courte vie de codeur de GUI Matlab, pris l''habitude d'utiliser la méthode SetAppData / GetAppData / FindObj. Or, j'ai déjà vu sur ce forum des codes du genre , quelle est la technique pour arriver à ça ?


    @Caroline : tiens, ça me fait penser qu'une fois tu m'avais dit que FindObj c'était un peu dépassé. Pourquoi et quoi faire de mieux ?

  2. #2
    Expert éminent sénior
    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
    Points : 14 830
    Points
    14 830
    Par défaut
    Les objets de ton uipanel sont (normalement) les enfants de celui-ci.
    Tu as donc la liste des handles enfants dans la propriété Children de ton uipanel : et voilà !

    Petit exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    h=uipanel;
    h1=uicontrol('parent',h,'string','h1','pos',[10 10 100 20]);
    h2=uicontrol('parent',h,'string','h2','pos',[10 40 100 20]);
    h3=uicontrol('parent',h,'string','h3','pos',[10 70 100 20]);
    enfants = get(h,'Children');
    %Tous en enable off sauf h3
    set(enfants,'enable','off');
    set(h3,'enable','on');
    PS : Je n'aime pas FINDOBJ car tu n'es jamais sur à 100% de trouver l'élément que tu veux.
    En général il s'utilise avec Tag, mais il suffit que tu aies donné le même Tag à 2 objets et patatras !

    Pour obtenir une structure handles il faut utiliser GUIHANDLES (tu me diras que cela nécessite aussi des propriétés Tag uniques car cela repose sur les Tags) et GUIDATA,
    ou la construire à la main.

    Je reprends mon exemple :
    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
    handles.fig = figure;
    handles.panel=uipanel;
    handles.h(1)=uicontrol('parent',h,'string','h1','pos',[10 10 100 20]);
    handles.h(2)=uicontrol('parent',h,'string','h2','pos',[10 40 100 20]);
    handles.h(3)=uicontrol('parent',h,'string','h3','pos',[10 70 100 20]);
    %Tous en enable off sauf h3
    set(handles.h(2:3),'enable','off');
     
    %Je l'enregistre pour plus tard :
    guidata(handles.fig,handles);
     
     
    %Et ailleurs je pourrais faire :
    handles = guidata(hanldeFigure);
    %handleFigure est suivant les cas :
    % gcf, je suis sure qu'il n'y a qu'une seule figure
    % gcbf, je suis dans le callback d'un objet de ma figure, c'est plus sur
    % je connais la valeur par un autre moyen (genre passée en paramètre)

  3. #3
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Juin 2009
    Messages
    4 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 481
    Points : 13 677
    Points
    13 677
    Billets dans le blog
    1
    Par défaut
    Mais oui la propriété children ! Merci ! Je pense que j'aurais déjà de quoi faire avec ça.


    Pour Guidata / Guihandle : j'avais développé la 1ere version de mon interface avec SetAppData / GetAppData / Findobj mais je vais voir si changer de technique pour coder la 2e version pourrait m'être bénéfique. Déjà pour la gestion des handles dans ce cas précis, ça semble utile.

    Merci bien

  4. #4
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Juin 2009
    Messages
    4 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 481
    Points : 13 677
    Points
    13 677
    Billets dans le blog
    1
    Par défaut
    Quelques questions supplémentaires:

    - Peut-on mixer les techniques ? Est ce propre ? Par exemple, si je gère mes structures de données avec SetAppData et GetAppData et que je gère les handles avec GuiHandle / GuiData. Parce qu'à la lecture de la doc, GuiData ne gère qu'une seule variable. Je me verrais obligé de faire une structure contenant mes différentes structures et les handles, et ça me semble problématique pour parcourir la liste des handles. C'est un peu bâtard comme solution non ?

    - Ca marche très bien l'histoire des children, sauf quand l'un des ces children n'est pas un uicontrol et nécessite de refaire un children. Très concrètement, j'ai un uibuttongroup dans l'un de mes panels. Je suis obligé de tester à chaque fois le type de l'objet pointé, pour savoir si ce n'est pas le fameux uibuttongroupe? Auquel cas, je fais de très nombreuses fois des tests inutiles. Ne serait-il pas plus simple de chercher avec un FindObj les objets possédant une propriété enable (ça ne règle pas le probleme du uibuttongroup...)?

  5. #5
    Expert éminent sénior
    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
    Points : 14 830
    Points
    14 830
    Par défaut
    1. Tu fais comme tu veux

    2. A essayer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    h=findall(hPanel,'-property','enable')
    Désolée je n'ai pas le courage de tester avec les uibuttongroup.
    Peut-être réjouter aussi un '-depth', pour plus d'informations voir :

  6. #6
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Juin 2009
    Messages
    4 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 481
    Points : 13 677
    Points
    13 677
    Billets dans le blog
    1
    Par défaut
    Je vais regarder tout ça

  7. #7
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Juin 2009
    Messages
    4 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 481
    Points : 13 677
    Points
    13 677
    Billets dans le blog
    1
    Par défaut
    J'ai trouvé une solution assez simple Mon callback teste l'état du bouton (enfoncé ou relevé) et agit en fonction.

    Niveau code, on a :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
              h = findobj('-property','enable');
              set(h,'enable','off');
              set(gcbo,'enable','on');
    Ainsi, je trouve tout ce qui peuvent être désactivé, je le fais, et je réactive le bouton courant pour pouvoir faire l'opération inverse, c'est à dire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
              h = findobj('-property','enable');
              set(h,'enable','on');
    Si jamais je voulais laisser activé un bouton autre que gcbo, il me reste le findobj pour trouver ce bouton en question.

    Merci pour vos conseils, le problème est résolu on dirait

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

Discussions similaires

  1. VB6, Combobox ne possède pas la propriété Sorted
    Par Samyy17 dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 18/11/2011, 11h38
  2. TWebBrowser - propriété Enabled
    Par asuka_l2 dans le forum Delphi
    Réponses: 2
    Dernier message: 16/05/2006, 14h40
  3. [VBA][Excel] SaveCopyAs ne possède pas un frère OpenCopyAs ?
    Par WebPac dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 02/09/2005, 21h01
  4. Composant TMenuitem et propriété Enabled
    Par supercyprien dans le forum Composants VCL
    Réponses: 7
    Dernier message: 10/07/2005, 01h46
  5. Réponses: 12
    Dernier message: 06/04/2005, 11h54

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