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 :

Mise à jour temps réel d'un slider


Sujet :

Interfaces Graphiques

  1. #1
    Membre à l'essai
    Inscrit en
    Avril 2012
    Messages
    59
    Détails du profil
    Informations forums :
    Inscription : Avril 2012
    Messages : 59
    Points : 21
    Points
    21
    Par défaut Mise à jour temps réel d'un slider
    Bonjour !

    Voilà mon soucis : j'ai un slider dans une fenêtre graphique, et j'aimerais faire en sorte qu'en bougeant le curseur, la valeur du slider bouge en même temps et pas seulement quand je lâche le bouton de la souris.

    Comment est-il possible de faire ?

    Merci d'avance !

  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 302
    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 302
    Points : 52 884
    Points
    52 884
    Ingénieur indépendant en mécatronique - Conseil, conception et formation
    • Conception mécanique (Autodesk Fusion 360)
    • Impression 3D (Ultimaker)
    • Développement informatique (Python, MATLAB, C)
    • Programmation de microcontrôleur (Microchip PIC, ESP32, Raspberry Pi, Arduino…)

    « J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" » (Saint Huck)

  3. #3
    Membre à l'essai
    Inscrit en
    Avril 2012
    Messages
    59
    Détails du profil
    Informations forums :
    Inscription : Avril 2012
    Messages : 59
    Points : 21
    Points
    21
    Par défaut
    Merci pour la réponse ! Je suis peut-être difficile, mais là c'est avec un slider "home-made", serait-il possible d'avoir un peu des astuces en utilisant le slider fourni dans GUIDE ?

  4. #4
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 302
    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 302
    Points : 52 884
    Points
    52 884
    Par défaut
    Il faudra alors passer par Java => Undocumented Matlab - Continuous slider callback
    Ingénieur indépendant en mécatronique - Conseil, conception et formation
    • Conception mécanique (Autodesk Fusion 360)
    • Impression 3D (Ultimaker)
    • Développement informatique (Python, MATLAB, C)
    • Programmation de microcontrôleur (Microchip PIC, ESP32, Raspberry Pi, Arduino…)

    « J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" » (Saint Huck)

  5. #5
    Membre à l'essai
    Inscrit en
    Avril 2012
    Messages
    59
    Détails du profil
    Informations forums :
    Inscription : Avril 2012
    Messages : 59
    Points : 21
    Points
    21
    Par défaut
    Oui j'étais tombé sur cette page et j'ai essayé d'appliquer la méthode 3 sans succès. J'aimerais éviter d'utiliser Java car j'imagine que ça allourdi pas mal le temps de calcul et la réactivité, sans compter le fait que si je compte compiler le tout par la suite, peut-être que je risque de rencontrer des problèmes non ?

  6. #6
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 302
    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 302
    Points : 52 884
    Points
    52 884
    Par défaut
    Tous les objets graphiques de MATLAB sont déjà créés en Java.
    Ces modification n'ont donc généralement pas de répercution sur le temps de réponse de l'interface graphique.

    La compilation avec le MATLAB Compiler se passe généralement sans problème avec ce genre de modifications.

    Pourquoi ne pas avoir simplement utilisé la première méthode avec FINDJOBJ ?
    Ingénieur indépendant en mécatronique - Conseil, conception et formation
    • Conception mécanique (Autodesk Fusion 360)
    • Impression 3D (Ultimaker)
    • Développement informatique (Python, MATLAB, C)
    • Programmation de microcontrôleur (Microchip PIC, ESP32, Raspberry Pi, Arduino…)

    « J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" » (Saint Huck)

  7. #7
    Membre à l'essai
    Inscrit en
    Avril 2012
    Messages
    59
    Détails du profil
    Informations forums :
    Inscription : Avril 2012
    Messages : 59
    Points : 21
    Points
    21
    Par défaut
    Merci pour la réponse !

    J'en sais plus maintenant et oui du coup pourquoi pas la 1ère solution, mais étant débutant dans matlab je n'arrive pas à l'implanter dans mon fichier .m.

    Introduire directement les 3 lignes de code dans le callback du slider ne fonctionne pas.


  8. #8
    Invité
    Invité(e)
    Par défaut
    Montre-nous ton code, que l'on puisse t'expliquer tes erreurs tout en te les corrigeant.

  9. #9
    Membre à l'essai
    Inscrit en
    Avril 2012
    Messages
    59
    Détails du profil
    Informations forums :
    Inscription : Avril 2012
    Messages : 59
    Points : 21
    Points
    21
    Par défaut
    Malheureusement mon code fait 2200 lignes donc ça serait impossible de les inclure ici mais en gros voici ce que je dois faire :

    J'ai un slider que j'ai importé grâce à GUIDE, donc j'ai le code suivant pour ce slider :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    function slider3_Callback(hObject, eventdata, handles)
    val=get(handles.slider3,'value');
    assignin('base', 'val', val);
    set(handles.text118, 'String', val);
     
    function slider3_CreateFcn(hObject, eventdata, handles)
    if isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
        set(hObject,'BackgroundColor',[.9 .9 .9]);
    end
    Ici grâce à la valeur du slider, j'update le champ d'un static texte, et ça fonctionne bien. La seule chose c'est que ça update la valeur seulement quand je lâche le bouton alors qu'il faudrait que ça update en continu !

    Merci d'avance en tout cas !

  10. #10
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Xen956 Voir le message
    Malheureusement mon code fait 2200 lignes donc ça serait impossible de les inclure ici
    Seules les parties qui nous intéressent ici, cela va de soi

    Citation Envoyé par Xen956 Voir le message
    La seule chose c'est que ça update la valeur seulement quand je lâche le bouton alors qu'il faudrait que ça update en continu !
    Oui on en revient à la question de départ et les mêmes réponses qui en découlent. Tu dis avoir choisi la première solution donnée... tu as essayé de faire quelque chose dans ce sens ?

  11. #11
    Membre à l'essai
    Inscrit en
    Avril 2012
    Messages
    59
    Détails du profil
    Informations forums :
    Inscription : Avril 2012
    Messages : 59
    Points : 21
    Points
    21
    Par défaut
    Merci pour l'intérêt à mon problème !

    Concernant la première solution proposée dans le lien, je ne la comprends pas bien car je n'utilise pas de uicontrol dans mon code, du coup le peu que j'ai testé n'a rien donné. Je me rapproche plus de la 3ème solution, dans la conception de mon code, mais comme il semble que la 1ère solution soit bonne, pourquoi ne pas l'utiliser.

    Faut-il inclure les 3 lignes de code dans le Callback du slider ? J'ai essayé cela mais cela ne fonctionne pas. Je me doute bien qu'il faille faire quelques ajustements, mais je ne comprends pas bien le principe !


  12. #12
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Xen956 Voir le message
    Concernant la première solution proposée dans le lien, je ne la comprends pas bien car je n'utilise pas de uicontrol dans mon code
    Et si tu en utilises
    Sauf que tu les crées "graphiquement" sur GUIDE et non à l'aide de la fonction uicontrol

    Mets simplement le code dans le OutputFcn en remplaçant hSlider par handles.TonSlider.

  13. #13
    Membre à l'essai
    Inscrit en
    Avril 2012
    Messages
    59
    Détails du profil
    Informations forums :
    Inscription : Avril 2012
    Messages : 59
    Points : 21
    Points
    21
    Par défaut
    Ok !

    Alors j'ai créé la fonction OutpufFcn pour mon slider, et j'ai mis le code, or j'ai une erreur :

    "Error: File: simpletab.m Line: 1953 Column: 11
    The expression to the left of the equals sign is not a valid target for an
    assignment."

    La ligne 1953 étant la ligne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    jScrollBar=findjobj(handles.slider5);
    Voici le code du slider complet :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    function slider5_Callback(hObject, eventdata, handles)
     
    function slider5_OutputFcn(hObject, eventdata, handles)
    handles.slider5 = uicontrol('style','slider', ...);
    jScrollBar=findjobj(handles.slider5);
    jScrollBar.AdjustmentValueChangedCallback = @myCbFcn;
     
    function slider5_CreateFcn(hObject, eventdata, handles)
    if isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
        set(hObject,'BackgroundColor',[.9 .9 .9]);
    end
    J'avoue que j'ai un peu de mal ! J'ai un livre à dispo mais il ne m'est pas utile ici.

  14. #14
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 302
    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 302
    Points : 52 884
    Points
    52 884
    Par défaut
    Il faut supprimer quelques caractères en trop à la fin de la ligne suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    handles.slider5 = uicontrol('style','slider', ...);
    Ingénieur indépendant en mécatronique - Conseil, conception et formation
    • Conception mécanique (Autodesk Fusion 360)
    • Impression 3D (Ultimaker)
    • Développement informatique (Python, MATLAB, C)
    • Programmation de microcontrôleur (Microchip PIC, ESP32, Raspberry Pi, Arduino…)

    « J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" » (Saint Huck)

  15. #15
    Invité
    Invité(e)
    Par défaut
    Attention ! comme je te l'ai dit
    Citation Envoyé par Winjerome Voir le message
    Sauf que tu les crées "graphiquement" sur GUIDE et non à l'aide de la fonction uicontrol
    Donc ta ligne (fausse comme te l'a fait remarqué Dut) contenant uicontrol est inutile ici puisque tu as déjà créé ton objet Uicontrol de style Slider sur GUIDE.
    Ensuite, les objets Uicontrol ne possèdent pas de propriété OutputFcn, je parlais de celle de ton interface (objet Figure) qui est normalement déjà créée automatiquement.

  16. #16
    Membre à l'essai
    Inscrit en
    Avril 2012
    Messages
    59
    Détails du profil
    Informations forums :
    Inscription : Avril 2012
    Messages : 59
    Points : 21
    Points
    21
    Par défaut
    Re-bonjour !

    Je n'ai toujours pas saisi comment faire fonctionner cette histoire !

    J'ai donc ce slider de base :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    function slider11_Callback(hObject, eventdata, handles)
    a1=get(handles.slider33,'value');
    assignin('base', 'a1', a1);
    set(handles.text11, 'String', a1);
     
    function slider11_CreateFcn(hObject, eventdata, handles)
    if isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
        set(hObject,'BackgroundColor',[.9 .9 .9]);
    end
    Je n'ai toujours pas saisi comment intégrer le code pour récupérer la position du slider !

  17. #17
    Membre éclairé
    Homme Profil pro
    Doctorant automatique
    Inscrit en
    Janvier 2012
    Messages
    446
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Doctorant automatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2012
    Messages : 446
    Points : 719
    Points
    719
    Par défaut
    Cette question m'intéresse et le lien donné m'a l'air de donner une bonne aide... Voici ce que j'en comprends, et j'espère que ces quelques explications vont t'aider pour ton code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    function test
        hSlider = uicontrol('style','slider');    % création d'un slider
        jScrollBar = findjobj(hSlider);    % récupération de l'objet java associé à ce slider
        jScrollBar.AdjustmentValueChangedCallback = @myCbFcn;    % lors du déplacement du slider, celui-ci déclenche un callback... que tu peux personnaliser en créant une fonction myCbFcn comme par exemple :
     
        function myCbFcn
            disp('salut')
        end
    end
    Par contre, il te faut télécharger FindJObj selon le site :
    As explained in an earlier article, Matlab uicontrols are basically Java Swing objects that possess a large number of useful callbacks. Matlab sliders’ underlying Java objects, which are really not JSliders but JScrollBars, have an AdjustmentValueChangedCallback property that is useful for our purposes and is accessible using the FindJObj utility. Simply download FindJObj from the File Exchange, and then:
    [EDIT] : si tu copies le code du dessus tel quel dans un fichier test.m dans le même dossier que findjobj.m, normalement ça marche... par contre, j'ai intégré ça dans une sorte de classe qui s'occupe de créer et de gérer un slider avec titre, bornes min/max et valeur du slider affiché et modifiable etc... qui marchait très bien jusque là. Après intégration, le slider seul fonctionne bien, mais est un peu plus long à créer et à se mettre à jour (du moins au démarrage) mais ça a l'air de fonctionner... par contre, dans mon application complète qui utilise une dizaine de ces sliders "évolués", le premier slider a l'air de se charger correctement mais dès le chargement du second, j'obtiens :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    ??? No public field AdjustmentValueChangedCallback exists for class handle.
    
    Error in ==> uislider at 128
            jScrollBar.AdjustmentValueChangedCallback = @realTimeUpdateSlider;
    ... erreur que je n'avais pas avant d'utiliser ce findjobj.

    hmm ça ne m'a pas l'air très au point tout ça...

    Après il faut faire attention à une chose : l'inconvénient d'un tel slider "temps réel" est que si tu dois effectuer de gros calculs qui prennent du temps à chaque fois que tu changes la valeur du slider, ça risque de se mettre à ramer dans tous les cas... c'est d'ailleurs pour ça que personnellement j'ai un peu laissé tombé cette affaire, mais s'il y a une solution fonctionnelle je suis preneur.

    N.B. : j'utilise personnellement la version "7.1.0.183 (R14) Service Pack 3"
    Je ne réponds pas aux MP techniques. Le forum est là pour ça.
    La raison est simple : il est ennuyeux de répondre à une seule personne, alors que la réponse peut servir à tout le monde.
    Conclusion : n'hésitez pas à utiliser le forum pour poser vos questions.
    Matlab 2005 - ver.7.1.0.183 (R14) Service Pack 3

Discussions similaires

  1. Réponses: 6
    Dernier message: 28/11/2013, 11h55
  2. Réponses: 14
    Dernier message: 11/06/2008, 09h21
  3. Mise à jour des données d'un CListCtrl en temps réel
    Par PetitPapaNoël dans le forum MFC
    Réponses: 4
    Dernier message: 31/01/2008, 11h27
  4. ETL et mise à jour temps-réel d'un entrepôt de données
    Par Maitre B dans le forum Alimentation
    Réponses: 6
    Dernier message: 29/01/2007, 17h37
  5. Mise à jour en temps réel de la base de données
    Par Clotilde dans le forum Bases de données
    Réponses: 2
    Dernier message: 11/06/2004, 22h09

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