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 :

Valeur Exacte Slider


Sujet :

Interfaces Graphiques

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 6
    Par défaut Valeur Exacte Slider
    Bonjour, je cherche à programmer un slider me renvoyant la valeur sur un textbox.

    Le slider fonctionne, quand je clique sur les flèches la valeur varie de "1" avec le max de 100 et le "SliderStep" de 0,01 mais :

    Quand je déplace manuellement le rectangle du slider et que je le stoppe nimpote ou je tombe sur une valeur décimale. Or mon objectif et d'avoir un pas de 1 et que le rectangle se deplace aussi d'un pas de 1, manuellement.

    Extrait du code :

    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
    48
    49
    {
    function slider_g
     
    ant = 0;
    valeur = 0;
     
    fig = figure('Position',[250 250 350 350]);
     
    sli = uicontrol(fig, ...
        'Style','slider',...
        'Max',100, ...
        'Min',0, ...
        'value',0,...
        'SliderStep',[0.01 0],...
        'Position',[125 150 150 15],...
        'Callback',@sli_callback,...
        'userdata',ant,...
        'tag','sli');
     
    edi = uicontrol(fig, ...
        'Style','edit',...
        'String',num2str(get(sli,'value')),...
        'Position',[30 175 240 20],...
        'Callback',@edi_callback,...
        'tag','edi');
     
    edt = uicontrol(fig, ...
        'Style','text',...
        'String','Nombre de courbes désirées',...
        'Position',[30 215 240 20]);
     
    function sli_callback(hObject,eventdata)
     
        edi=findobj('tag','edi');
        valeur = get(hObject,'value');
        set(hObject,'userdata',valeur);
        set(edi,'String',num2str(valeur));
     
    function edi_callback(hObject,eventdata)
     
    	sli=findobj('tag','sli');
    	valeur = str2double(get(hObject,'String'))
    	if isnumeric(valeur)
            if valeur>=get(sli,'min') & valeur<=get(sli,'max')
                set(sli,'value',valeur);
                set(sli,'userdata',valeur);
            end
    	end
    }
    J'ai cherché sur le forum, pas trouvé d'infos à ce sujet si quelqun à une idée ou connait les paramètres...merci

  2. #2
    Membre émérite Avatar de tubaas
    Homme Profil pro
    Acousticien
    Inscrit en
    Août 2009
    Messages
    641
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Acousticien
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2009
    Messages : 641
    Par défaut
    je ne sais pas si on peut le faire.
    pour faire des pas de 1 quand on clique dans la barre (mais pas quand on déplace manuellement) tu mets le SliderStep max à 1
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    sli = uicontrol(fig, ...
        'Style','slider',...
        'Max',100, ...
        'Min',0, ...
        'value',0,...
        'SliderStep',[0.01 1],...
        'Position',[125 150 150 15],...
        'Callback',@sli_callback,...
        'userdata',ant,...
        'tag','sli');

  3. #3
    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
    Pourquoi ne pas utilise la fonction ROUND pour arrondir la valeur ?

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 6
    Par défaut
    merci pour vos réponses en effet j'ai changé le FLOOR par ROUND.
    Alors pour le problème du slider c'est réglé j'ai trouvé une alternative.

    Par contre, j'ai de nouveau problème en ce qui concerne le remplissage d'un vecteur T.
    Je ne trouve pas d'information à ce sujet, mon objectif étant de faire rentrer à un utilisateur des valeurs numériques dans x "edit" distinctes et de prendre ces valeurs pour les injecter dans le vecteur qui serait :

    T = [ e1 e2 e3 etc...]

    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
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    function temperature
     
    %%% Récupération des données %%%
     
    sli = findobj('tag','sli');
    h2 = findobj('tag','h2');
     
    ncourbe = get(sli,'value');
    Npoints = str2double(get(h2,'String')); 
     
    %%% Création du vecteur T %%%
     
    global T;
    T = zeros(ncourbe);
     
    valeur_position = 30;
     
    %%% Création de la fenêtre %%%
     
    fig = findobj('tag','fenetre');
    delete(fig);
    fig2 =  figure('Position',[250 250 500 200],...
        'units','pixels',...
        'menubar','none',...
        'name','Temperatures');
     
    %%% Création de la boîte texte %%%
     
    bt = uicontrol('style','text',...
        'string','Rentrez les valeurs de températures désirées',...
        'position',[30,150,250,20]);
     
    %%% Création des boîtes de dialogue de température %%%
     
    global z;
    for z = 1 : ncourbe
     
        hz = uicontrol('style','edit',...
            'string','0',...
            'position',[valeur_position 120 30 20],...
            'callback',@h_callback,...
            'tag','hz');  
     
            valeur_position = valeur_position + 50;
    end    
     
    %%% Création du bouton OK %%%
     
    Btn = uicontrol('Style','pushbutton',...
        'String','OK',...
        'Position',[30,90,50,20],...
        'callback','Pluscourbes',...
        'tag','Btn');
     
    function h_callback(hObject,eventdata)
     
    global T;
    global z;
     
        hz =  findobj('tag','hz');
        T(z) = str2double(get(hz,'string'));
    Voila pour le code, la récupération des données c'est les données d'une fenêtre précédente où l'utilisateur choisit pour un tracé de courbe le nombre de courbes et le nombre de points par courbes.

    le code est conçu ainsi car le nombre de courbes doit impérativement être égale au nombre de choix de températures d'où la boucle FOR jusqu'à ncourbes.

    Voila, à l'exécution du code, MATLAB m'écrit sur la fenêtre de commande :


    ??? In an assignment A(I) = B, the number of elements in B and
    I must be the same.

    Error in ==> temp>h_callback at 61
    T(z) = str2double(get(hz,'string'));

    ??? Error while evaluating uicontrol Callback.

    Je pense que l'erreur vient soit de la déclaration du vecteur, de la boucle for ( je ne suis pas sur qu'il ne faille pas la déclarer dans le callback de l'edit), où un mélange dans les variables globales.

    Si quelqun à une solution...Merci beaucoup

  5. #5
    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
    D'abord :
    Aaaaaah des variables globales....!!!
    Développement efficace des interfaces graphiques (GUI)

    Ensuite tu as un problème car tous tes objets edit ont le même Tag hz.

    Donc quand tu fais ton findobj il te retourne un vecteur contenant tous les handles de tous tes edit.
    Ce qui fait que : "str2double(get(hz,'string'))" est un vecteur que tu essayes de faire rentrer dans un scalaire

    Je te conseille fortement de te pencher sur l'utilisation de GUIHANDLES/GUIDATA, ou éventuellement des fonctions imbriquées.

    Car en fait il s'agit là d'un problème de conception.

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 6
    Par défaut
    Merci pour ta réponse.

    J'ai réglé le problème, je n'ai finalement pas utiliser de variables globales ni de GUIDATA/GUIHANDLES même si j'aurais pu. Cela marche comme je voulais.

    Merci encore.

    Ce qui me reste à finir est toujours l'intitulé de ce post, pouvoir déplacer le slider par le rectangle (sans les flèches) en incrémentant la valeur automatiquement.

    Mais après reflexion je ne sais pas si c'est possible car le slider de matlab n'a aucun paramètre lié au déplacement du rectangle milieu du slider...

    Il faudrait en créer un à la main l'aide de plusieurs rectangles d'un calcul de déplacement en pixels à partir de lappui sur la souris mais esthétiquement re-créer les flèches du slider MATLAB...

    Voila si quelqun connait bien les paramètres du slider Matlab et l'a deja fait merci de m'aider

Discussions similaires

  1. valeur max slider
    Par vivi22 dans le forum LabVIEW
    Réponses: 2
    Dernier message: 22/04/2010, 10h31
  2. Réponses: 2
    Dernier message: 04/03/2010, 19h52
  3. Récuperer la valeur exacte
    Par Interface dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 22/02/2010, 16h41
  4. Recherche d'une valeur exacte
    Par JPDU92 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 27/09/2007, 16h48
  5. valeur du slider dans une scrollbar
    Par jc_cornic dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 05/10/2006, 12h34

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