Bonjour.
J'ai cherche comment faire un slider TR, mais malheureusement pas d'information sur les forums ou sur les sites collaboratifs si ce n'est un exemple en anglais de 400 lignes dont j'ai abandonne l'idee de dechiffrer au bout de 3 min.

Je me suis donc battu toute un apres-midi pour faire ma propre version (je partais de loin je n'avais jamais fait de GUI avant).

Je vous fait profiter de ce petit bout de programme parfait pour comprendre les callbacks, les handles, recuperer la position de la souris et faire un slider temps reel.
En esperant que ca vous epargne la migraine que cela m'a donne.

Lau


--------------------------------------------------------------------------


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
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
%slider_temps_reel - Exemple de slider en temps reel
%
%Utilisation :
% slider_temps_reel
%
% Affiche une figure avec un slider personnalise
% Le slider se deplace a l'aide de la souris
% La valeur courante est affichee sous le slider
%
% La position de la souris dans la figure est aussi affichee
%
% 9 juin 2009 / Laurent seigner
%%
function slider_temps_reel
 
clc %nettoyage ecran Command Windows
 
%% Conditions initiales
etat_souris=0;
valeur_min=0;
valeur_max=100;
decallage_x=0;
valeur_curseur=0; %entre 0 et 100%
etat=0;
 
%% Creation des objets
handles(1)=figure('units','pixels',...
    'position',[100 100 800 200],...
    'name','custom_showmotion',...
    'numbertitle','off',...
    'tag','interface',...
    'WindowButtonMotionFcn',@motion,...
    'WindowButtonDownFcn',@down,...
    'WindowButtonUpFcn',@up);
%afficheur x_souris
handles(2)=uicontrol('style','text','position',[125 20 20 10]);
%afficheur y_souris
handles(3)=uicontrol('style','text','position',[100 20 20 10]);
%creation du dessin
handles(4)=axes('unit','pixel','position',[0 0 800 600],...
    'visible','off','xlim',[0 1],'ylim',[0 1]);
%creation de la glissiere
handles(5)=rectangle('position',[0.1 0.1 0.8 0.1],...
    'edgecolor',[0 1 0],'facecolor',[0 1 0]);
%creation du curseur
handles(7)=rectangle('position',[0.1 0.1 0.02 0.1],...
    'edgecolor',[0 0 0],'facecolor',[0 0 0]);
%creation affichage valeur mini (0)
handles(8)=uicontrol('style','text',...
    'position',[80 50 20 10],...
    'string', valeur_min );
%creation affichage valeur max (100)
handles(9)=uicontrol('style','text',...
    'position',[702 50 20 10],...
    'string', valeur_max );
%creation affichage valeur curseur (valeur entre 0 et 100)
handles(10)=uicontrol('style','text',...
    'position',[400 50 20 10],...
    'string', valeur_curseur );
 
%% Callback WindowButtonMotionFcn : déplacement de la souris
    function motion (obj,event)
 
        %% Recuperation de la position de la souris et affichage
        P=get(handles(1),'CurrentPoint');
        x_souris=P(1);
        y_souris=P(2);
 
        set(handles(2),'string',x_souris); %mise a jour affichage
        set(handles(3),'string',y_souris);
 
        %% Recuperation de la position du curseur
 
        position_curseur=get(handles(7),'position');
        x_curseur=position_curseur(1)*800; %x_curseur en pixel
        y_curseur=position_curseur(2)*600;
 
        %% Gestion du grafcet
 
        if ( (etat==2) && (etat_souris==0) )
            etat=0;  %retour a l'etat attente
        elseif (etat==1)
            etat=2; %mouvement curseur
        elseif ((etat==0) && (etat_souris==1) && ...
                (x_souris >= x_curseur) && ...
                (x_souris <= (x_curseur + (0.02*800))) && ...
                (y_souris >= y_curseur) && ...
                (y_souris <=(  y_curseur + (0.1*600)))  && ...
                (valeur_curseur >=0) && (valeur_curseur<=100) )
            etat=1; %prise ref
        end
 
        %% Gestion des actions
 
        switch etat
            case 0
                %attente
            case 1
                %decallage entre la souris et la ref du curseur en pixel
                decallage_x=x_souris-x_curseur; 
                %curseur gris
                set(handles(7),'edgecolor',[0.5 0.5 0.5],...
                    'facecolor',[0.5 0.5 0.5]); 
            case 2
                %new x curseur en %
                new_x_curseur= ((x_souris-decallage_x)/800); 
                %correction du bug du a la vitesse de rafraichissement
                if new_x_curseur<0.1 
                    new_x_curseur=0.1;
                end
                if new_x_curseur>0.88
                    new_x_curseur=0.88;
                end
                new_position=[new_x_curseur 0.1 0.02 0.1];
                valeur_curseur= (((new_x_curseur-0.1)*1.0256)/0.8)*100;
                %mise a jour position curseur et affichage
                set(handles(7),'position',new_position); 
                set(handles(10),'string',valeur_curseur);
 
        end
    end
 
%% Callback WindowButtonDownFcn : Appui sur le bouton de la souris
    function down(obj,event)
        etat_souris=1; %on declare la souris appuyee
    end
 
%% Callback WindowButtonUpFcn : Relachement du bouton de la souris
    function up(obj,event)
        etat_souris=0; %on declare la souris relachee
        set(handles(7),'edgecolor',[0 0 0],'facecolor',[0 0 0]);
    end
end