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 :

Bouton pour revenir en arrière


Sujet :

Interfaces Graphiques

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2007
    Messages : 58
    Par défaut Bouton pour revenir en arrière
    Bonjour les gens,

    Après quelques recherches je n'ai rien trouvé alors je m'adresse directement à vous dans l'espoir que vous pourrez m'aider.

    Voilà mon problème. J'ai fait un gui qui par étape mène l'utilisateur vers une fonction finale. A chaque étape il a des embranchements qui font apparaitre et disparaitres des uicontrol spécifique à chaque étapes. J'aurais aimé savoir s'il y avait un moyen de générer un bouton retour qui pourrait aider l'utilisateur qui s'est trompé a revenir en arrière d'une étape sans devoir relancer le tout...

    Est-ce que quelque chose du genre est possible sans devoir générer pour chaque étape un bouton retour différent avec un callback différent pour réafficher les bon uicontrols ???


    Merci d'avance.

    Pour le code, je pense qu'il est un peu long pour le poster mais si vous le voulez vraiment.

  2. #2
    Expert confirmé
    Avatar de duf42
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    Novembre 2007
    Messages
    3 111
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Formateur en informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 111
    Par défaut
    Bonjour,

    Je pense qu'un peu de code pourrait être utile en effet, car de toutes façons tu vas devoir coder toi même la fonction de retour en arrière donc le fonctionnement dépend énormément de la manière dont tu génères tes boutons. Sachant qu'il y a à mon avis plusieurs solutions pour arriver à tes fins.

    Bonne apm,
    Duf

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2007
    Messages : 58
    Par défaut
    Voilà une partie du code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    %Simple alignement or multiple alignement choose
    uicontrol('style','pushbutton','units','normalized','position',[0.27 0.4 0.2 0.05],'string','Pairwise alignements','Tag','simplealign','Visible','on','callback',@show_editbox);
    uicontrol('style','text','units','normalized','position',[0.01 0.44 0.09 0.05],'HorizontalAlignment', 'left','string','Enter your sequence','BackgroundColor',[1 1 1],'Visible','off', 'Tag','textenter');
    uicontrol('style','edit','units','normalized','position',[0.1 0.19 0.85 0.3],'HorizontalAlignment', 'left','max',13,'BackgroundColor',[1 1 1],'Tag','editbox','Visible','off');
    Et la fonction appelée
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    function[] = show_editbox(varargin)
    handles = guihandles(gcbo);
    set(handles.editbox,'Visible','on');
    set(handles.textenter,'Visible','on');
    set(handles.simplealign,'Visible','off');
    end
    Voilà, je fais pas mal de chose du genre dans mon code. Voilà le problème: le gars appuie sur simple align et se rends compte qu'en fait il voulait faire un multiplealign(autre bouton). Du coup il aimerait revenir en arrière... Mais là c'est pas possible sans relancer tout...

  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 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
    Et ce que tu cherches à faire s'appelle un historique des opérations

    Pour faire simple, il suffit d'associer à chaque action possible l'action inverse permettant de revenir en arrière. Dis comme ça, ça peut paraître simple... mais pas toujours...

    Par exemple, l'utilisateur met une partie de texte en couleur rouge.
    Pour annuler cette action, il faut avoir stocké la partie du texte sélectionnée et la couleur du texte avant la modification pas nécessairement noire et surtout pas nécessairement de la même couleur partout.

    Dans le cas d'une interface graphique, il "suffit" de conserver les identifiants des objets concernés et leurs états (visible/invisible, couleur, texte inclu ou pas,...)

    Ensuite, il faut trouver où stocker ces informations ?

    Soit dans un fichier, soit dans une variable (tableau de cellules par exemple)...

  5. #5
    Expert confirmé
    Avatar de duf42
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    Novembre 2007
    Messages
    3 111
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Formateur en informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 111
    Par défaut
    Une solution dans le même ordre d'idée pourrait être de mettre tous les composants de chaque fenêtre dans un panel et d'afficher le panel correspondant à ton niveau d'avancement (avec le possibilité de se déplacer vers l'avant ou vers l'arrière).

    Il suffit ensuite de sauvegarder tous les champs des panels (visibles ou invisibles) lorsque l'utilisateur valide à la fin du traitement.

    EDIT : Un exemple est peut-être plus parlant:

    Création de la figure, des panels et des boutons Next et Prev
    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
     
    % Create handles.figure
    handles.fig = figure(...
        'DockControl','off', ...
        'NumberTitle','off', ...
        'Menubar','none', ...
        'Toolbar','none', ...
        'Name', 'Next prev', ...
        'UserData', 1, ...
        'Units', 'pixels', ...
        'Position', [0 0 400 300]);
    movegui(handles.fig,'center');
     
    % Create Next button
    handles.next = uicontrol(...
        'Parent',   handles.fig, ...
        'Units',    'pixels', ...
        'Position', [310 10 80 20], ...
        'String',   'Next', ...
        'Callback', @(obj,evt) Next(obj));
     
    % Create Prev button
    handles.prev = uicontrol(...
        'Parent',   handles.fig, ...
        'Units',    'pixels', ...
        'Position', [220 10 80 20], ...
        'String',   'Prev', ...
        'Callback', @(obj,evt) Prev(obj));
     
    % Create first panel
    handles.pane(1) = uipanel(...
        'Parent',   handles.fig, ...
        'Units',    'pixels', ...
        'Position', [10 40 380 240], ...
        'Title',    'Premier jeu de donnees', ...
        'BackgroundColor', get(handles.fig, 'Color'), ...
        'Visible',  'off');
     
    % Create second panel
    handles.pane(2) = uipanel(...
        'Parent',   handles.fig, ...
        'Units',    'pixels', ...
        'Position', [10 40 380 240], ...
        'Title',    'Deuxieme jeu de donnees', ...
        'BackgroundColor', get(handles.fig, 'Color'), ...
        'Visible',  'off');
     
    % Create third panel
    handles.pane(3) = uipanel(...
        'Parent',   handles.fig, ...
        'Units',    'pixels', ...
        'Position', [10 40 380 240], ...
        'Title',    'Troisieme jeu de donnees', ...
        'BackgroundColor', get(handles.fig, 'Color'), ...
        'Visible',  'off');
     
    % Update handles structure
    guidata(handles.fig, handles);
     
    % Update display
    UpdateDisplay(handles);
    Fonction de mise à jour de l'affichage
    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
     
    function UpdateDisplay(handles)
     
    % Get current selected panel
    current_selected = get(handles.fig, 'UserData');
     
    % Get number of panels
    panel_nb = length(handles.pane);
     
    % Hide all panels
    set(handles.pane, 'Visible', 'off');
     
    % Unhide selected panel
    set(handles.pane(current_selected), 'Visible', 'on');
     
    % Verify if Next button as to be displayed
    if (current_selected == panel_nb)
        set(handles.next, 'Enable', 'off');
    else
        set(handles.next, 'Enable', 'on');
    end
     
    % Verify if Next button as to be displayed
    if (current_selected == 1)
        set(handles.prev, 'Enable', 'off');
    else
        set(handles.prev, 'Enable', 'on');
    end
    Fonctions de gestion des Next et Prev
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    function Prev(hObject)
     
    % Get figure handles
    handles = guidata(hObject);
     
    % Change current selected panel
    set(handles.fig, 'UserData', get(handles.fig, 'UserData')-1);
     
    % Update display
    UpdateDisplay(handles);
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    function Next(hObject)
     
    % Get figure handles
    handles = guidata(hObject);
     
    % Change current selected panel
    set(handles.fig, 'UserData', get(handles.fig, 'UserData')+1);
     
    % Update display
    UpdateDisplay(handles);
    A tester et améliorer

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2007
    Messages : 58
    Par défaut
    Merci pour vos réponses.
    J'essaierai de les mettre en place plus tard. Pour l'instant je suis un peu pressé par le temps alors j'ai juste fait un bouton reset qui ferme la figure et rappelle le fonction du gui.
    C'est encore bon pour l'instant. Je verrai pour les frames quand j'aurais plus de temps (et surtout une motivation d'enfer )

    Merci pour vos réponses encore une fois.


    Buide

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

Discussions similaires

  1. [débutant] gotoandstop pour revenir ?!?
    Par ajor dans le forum Flash
    Réponses: 13
    Dernier message: 27/09/2007, 16h55
  2. bouton pour revenir en arrière
    Par Matil2 dans le forum AWT/Swing
    Réponses: 1
    Dernier message: 02/04/2007, 22h26
  3. Réponses: 13
    Dernier message: 29/07/2006, 19h59
  4. [FLASH 5]un bouton dans une image pour revenir sur une scene
    Par patato valdes dans le forum Flash
    Réponses: 7
    Dernier message: 28/04/2004, 20h21

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