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 :

Problème de gestion de guidata


Sujet :

Interfaces Graphiques

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2010
    Messages
    86
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2010
    Messages : 86
    Par défaut Problème de gestion de guidata
    Bonjour,

    J’ai un bouton qui me permet d’effacer une base d’image. Lorsqu’on clic sur celui-ci une fenêtre de confirmation s’affiche et après confirmation la fonction d’effacement est appelé. Pendant l’effacement un cercle de progression s’affiche sur mon interface et celui est donc mis à jour pendant la progression.

    Voici comment je procède :

    Bouton de RAZ :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    set(handles.bp_Purge,...
        'Callback', {@warning1,handles.Interface},...
           'Units', 'normalized');
    Confirmation de la suppression :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    function supprimer(obj,event,handle_inter)
    close;
    findAndDeleteResult(handle_inter)
    Fonction de suppression:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    function findAndDeleteResult(handle)
     
       % Appel de mon cercle de progression
      ProgressBarCircular2('action','new','title','','handle',handle);
         ------
     
        for 
            %%%% CODE PR LA SUPPRESSION %%%
             ProgressBarCircular2('action','update','handle',handle,'color',[1 0 0],'value',floor(percent));
            pause(0.01)
        end
        ------
         ProgressBarCircular2('action','finish','handle',handle,'value',100);
    Et voici le code de mon cercle de progression :

    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
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    function obj = ProgressBarCircular2(varargin)
     
    % Input arguments number check
    if ~nargin || mod(nargin,2)
        error('Incorrect number of input arguments');
    end
     
    % Initialize parameters
    action = '';
    value = -1;
    obj = -1;
    tag = '';
    color=[50/255 155/255 255/255 ];
     
    % Input arguments assign
    for k=1:2:nargin
        prop = varargin{k};
        data = varargin{k+1};
        
        if strcmpi(prop,'action')
            action = data;
        elseif strcmpi(prop,'value')
            value = data;
        elseif strcmpi(prop,'handle')
            obj = data;
        elseif strcmpi(prop,'color')
            color =data;
        end
    end
     
    % Process data
    if strcmpi(action,'new')
        % Create a new loader and return handle
        initLoader(obj);
        
    elseif strcmpi(action,'update')
        % Check if a valid value has been specified
        if ~isnumeric(value) || value < 0 || value > 100
            error('Value property value must be a number between 0 and 100')
        end
        
        % Update desired loader
        updateLoader(obj,value,color)
        
    elseif strcmpi(action,'finish')
        if ~isnumeric(value) || value ~= 100
            error('Value property value must be a number between 0 and 100')
        end
        finishLoader(obj,value,color)
    else
        error('Action property value must evaluate to ''new'',''update'' or ''finish''')
    end
     
    end
    %%
    % Create a new loader
    function initLoader(obj)
     
    % Create axes and progress text
    hdl.hAxes = axes(...
        'Parent',obj,...
        'Units','pixels',...
        'Position',[390 158 40 40 ],...
        'Xtick',[],...
        'Ytick',[],...
        'xlim',[-1 1],...
        'ylim',[-1 1],...
        'color',[1 1 1],...
        'XLimMode','manual',...
        'tag','handler_Axe',...
        'YLimMode','manual');
     
     
    hdl.progressText = uicontrol(...
        'style','text',...
        'Units','pixels',...
        'Position',[420 150 150 40],...
        'string','Progress : 0%',...
        'BackgroundColor',[1 1 1],...
        'HorizontalAlignment','left',...
        'tag','handler_Circulaire',...
        'ForegroundColor','r');
     
    set(hdl.hAxes,...
        'Units', 'normalized');
     
    set(hdl.progressText ,...
        'Units', 'normalized');
     
    % Axes settings
    axis equal
    axis off
     
    % Update gui data
    guidata(obj,hdl);
     
    end
     
    %%
    % Update the desired loader
    function updateLoader(obj,value,color)
     
    % Get gui data
    hdl = guidata(obj);
    % Clear axes
    cla(hdl.hAxes)
     
    % draw preloader
    sectors = 360;
    angles = 0:2*pi/sectors : 2*pi*value/100;
    xs = .6*[sin(angles),.5*sin(flipdim(angles,2))];
    ys = .6*[cos(angles),.5*cos(flipdim(angles,2))];
    hdl.pre = fill(xs,ys,color,'Parent',hdl.hAxes);
     
    % Axes settings
     
    axis(hdl.hAxes,'equal')
    axis(hdl.hAxes,'off')
    hold(hdl.hAxes,'off')
     
    set(hdl.hAxes,...
        'Xtick',[],...
        'Ytick',[],...
        'xlim',[-1.5 1.5],...
        'ylim',[-1.5 1.5],...
        'XLimMode','manual',...
        'YLimMode','manual');
     
    % Update progress text
    set(hdl.progressText,'string',sprintf('Effacement en cours : \n          %d %%',value))
     
    % Update gui data
    guidata(obj,hdl);
    end
     
    function finishLoader(obj,value,color)
    % Delete figure if progress has reached 100%
    if value == 100
        
        % Get gui data
        hdl = guidata(obj);
        % Clear axes
        cla(hdl.hAxes)
          
        tic;%depart du chronometre
        for i=1:10000000
            t=toc;
            if t<2
                set(hdl.progressText,'string',sprintf('Effacement en cours : \n          %d %%',value))
             
            elseif t>2 && t<7
                set(hdl.progressText,'string',sprintf('  RAZ Données : \n        Terminée'))
            pause(0.01)
            elseif t>7    
                delete(hdl.progressText)
                delete(hdl.hAxes)
                break;
                
            end
        end
    end
    end
    Le code marche bien... même trop bien car pour la MAJ du mon cercle de progression guidata(obj,hdl); m'efface toute les configurations
    de mon interface et les remplaces par hdl.progressText et hdl.progressText .

    Mon problème vient il directement de guidata ou de l'initialisation de ma fonction initLoader(obj)

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonsoir,

    Ce problème a déjà été rencontré dans cette discussion avec la fonction GIFPLAYER.
    Dans ton cas, rajoute
    Au début de la fonction initLoader.
    Il te faudra faire attention de ne pas avoir les Tags hAxes et progressText déjà présents dans ton interface.
    Dernière modification par Invité ; 09/02/2012 à 23h43.

  3. #3
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2010
    Messages
    86
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2010
    Messages : 86
    Par défaut
    C'était aussi simple que ça hdl = guidata(obj); figuré bien dans ma fonction update et finish mais pas dans le create . Et dire que ça fait plus d'une heure que je cherche à modifier les paramètres de mon data pour corriger le problème .

    Pour les Tag je les aient supprimés. J'avais remarqué que même si il le Tag était défini, lorsque je faisait un get(data) le champ tag resté vide.

    Merci !!! Des fois 3 mots vaux mieux qu'un long discours.

  4. #4
    Invité
    Invité(e)
    Par défaut
    Le fait qu'il figurait dans les autres fonctions est normal: c'est pour récupérer les handles créés justement dans la fonction initLoader.
    À la ligne 95 guidata(obj,hdl); les handles hAxes et progressText sont enregistrés dans ta figure interface (tu as fait passer obj), de la même façon que toi, mais cela écrase le contenu déjà présent
    D'où ma solution de récupérer TON contenu d'abord, de lui faire rajouter ses éléments, puis de sauvegarder le tout

    Citation Envoyé par TheDwarf01 Voir le message
    Pour les Tag je les aient supprimés. J'avais remarqué que même si il le Tag était défini, lorsque je faisait un get(data) le champ tag resté vide.
    Je ne suis pas sûr de comprendre: de quels Tags parles-tu?

  5. #5
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2010
    Messages
    86
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2010
    Messages : 86
    Par défaut
    c'est pour récupérer les handles créés justement dans la fonction initLoader
    Oui c'était logique sur le coup d'écrire cela dans mes sous fonctions... mais j'avoue que sur le coup le mettre aussi dans la fonction init... ça me serai pas venu à l'esprit... j'essaye plus de créer une sauvegarde de mon contenu beaucoup plus en amont lors de ma fenêtre de confirmation pour la RAZ ...

    Encore une fois MERCI.

  6. #6
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2010
    Messages
    86
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2010
    Messages : 86
    Par défaut
    Pour les tags ... pardon c'est moi qui radote et raconte n'importe quoi... j'ai besoin d'une pause

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

Discussions similaires

  1. problème de gestion d'erreurs
    Par champijulie dans le forum PostgreSQL
    Réponses: 3
    Dernier message: 13/05/2005, 17h18
  2. Problème de gestion d'un octree
    Par MaxPayne dans le forum OpenGL
    Réponses: 9
    Dernier message: 06/04/2005, 10h17
  3. problème de gestion de fenêtre
    Par clemsouz dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 03/11/2004, 14h35
  4. Problème de gestion fichiers
    Par glutock dans le forum ASP
    Réponses: 2
    Dernier message: 08/04/2004, 11h55
  5. [TFrame] Problème de gestion du OnMouseDown avec une Frame
    Par xherault dans le forum Composants VCL
    Réponses: 5
    Dernier message: 23/05/2003, 15h35

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