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 :

[pause] Alternative à la fonction pause?


Sujet :

Interfaces Graphiques

  1. #1
    Modérateur

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Août 2014
    Messages
    1 295
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2014
    Messages : 1 295
    Points : 2 385
    Points
    2 385
    Par défaut [pause] Alternative à la fonction pause?
    Bonjour à toutes et à tous.

    Je travaille actuellement sur une interface graphique au sein de laquelle un identifiant et un mot de passe sont demandés afin de réaliser certaines fonctions. Pour entrer ce login et ce mot de passe, j'utilise un clavier virtuel que j'ai crée via une autre figure; cet interface graphique est en effet destiné à un écran tactile et la commande dos('osk') comporte des problèmes de compatibilité ( je ne vais pas rentre dans les détails, si le clavier virtuel intéresse quelqu'un, je peux toujours le partager).

    Quoiqu'il en soit, j'aimerai que lorsque j'écris le mot de passe, la lettre sur laquelle on appuie apparaît pendant un très court moment sur le static text dans lequel le mot de passe est affiché, puis soit transformé en '*'. Pour ce faire, j'utilise par exemple pour la touche 1 de mon clavier virtuel les commandes ci dessous:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    if get(handles.visible,'Value') == 1  %handles.visible est la checkbox qui permet d'afficher le mot de passe ou de le remplacer par des '*'
        set(handles.text_written,'String',cat(2,get(handles.text_written,'String'),get(handles.one,'String')));  %handles.text_written est le static text dans lequel le mdp est affiché
    elseif get(handles.visible,'Value') == 0
        set(handles.text_written,'String',cat(2,get(handles.text_written,'String'),get(handles.one,'String'))); %handles.ones est le push button de la touche 1
        pause(0.2);
        temp = get(handles.text_written,'String');
        set(handles.text_written,'String',cat(2,temp(1:end-1),'*'));
    end
    Le problème est lorsque j'appuie rapidement sur mes pushbutton représentant les caractères de mon clavier virtuel, je court-circuite ce qui se trouve après la pause (en rouge dans le code ci dessus) et mon caractère n'est pas remplacé par un astérisque. Voyez-vous une solution pour pallier à ce problème?

    En vous remerciant par avance,

    Gooby
    Si vous cherchez des réponses sur ce forum il faudra avant tout expliquer clairement votre problème et exposer la démarche que vous avez entreprise pour le résoudre. Fournissez une base de travail et de réflexion à vos interlocuteurs!

  2. #2
    Membre régulier
    Inscrit en
    Décembre 2012
    Messages
    97
    Détails du profil
    Informations forums :
    Inscription : Décembre 2012
    Messages : 97
    Points : 87
    Points
    87
    Par défaut
    Bonjour,

    Pour contourner le problème tu pourrais permettre de masquer le mot de passe seulement lorsque ce dernier est complètement renseigné dans ton champ. Cette vérification pourrait se faire en comptant le nombre de caractères par exemple. Pas sûr que ce soit ce que tu recherches ceci dit.

  3. #3
    Modérateur

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Août 2014
    Messages
    1 295
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2014
    Messages : 1 295
    Points : 2 385
    Points
    2 385
    Par défaut
    Bonjour,

    Actuellement j'ai déjà une checkbox à côté de mon static text qui sert à masquer(remplacer les caractères par des '*')/afficher le mot de passe. Ce que je désire faire c'est que même quand le mot de passe est en mode masqué, on puisse voir pendant un très court laps de temps la lettre sur laquelle on a appuyé avant que celle ci se transforme en un astérisque. Un peu comme un code pin de téléphone par exemple.
    Si vous cherchez des réponses sur ce forum il faudra avant tout expliquer clairement votre problème et exposer la démarche que vous avez entreprise pour le résoudre. Fournissez une base de travail et de réflexion à vos interlocuteurs!

  4. #4
    Membre actif
    Homme Profil pro
    Inscrit en
    Avril 2013
    Messages
    189
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2013
    Messages : 189
    Points : 242
    Points
    242
    Par défaut
    salut,
    alors ça va peut-être pas t'aider des masses (et ça fera sans doute hurler tous les informaticiens de métier), mais tu peux faire une boucle infinie en faisant du tic-toc, tout en mettant un callback sur le clic du bouton dans la figure (la fameuse "windowbuttondownfcn").

    la fonction ci-dessous attend 5 sec ou le clic dans la figure pour afficher un truc dans le command window.

    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
     
    function lalala()
     
    h_fig = figure(1)
    setappdata(h_fig,'clic',0)
    set(h_fig,'windowbuttondownfcn',@clic_listener)
     
     
    drawnow
    t = 0;
    clic = getappdata(h_fig,'clic');
    tic
    while (t<5 && clic == 0 )
        t = toc;
        clic = getappdata(h_fig,'clic');
        drawnow
    end
    str_dsp = sprintf('temps avant clic = %f',t);
    disp(str_dsp)
        function clic_listener(src,evt)
            setappdata(h_fig,'clic',1)
        end
    end

    le problème c'est que le clic sur un uicontrol exécutera le callback de l'uicontrol, et ne considère pas ca comme un clic sur la figure...

    une autre solution est de mettre la propriété 'Interruptible' de tes uicontrol "clavier virtuel" sur 'Off'. Je suppose que le traitement qui te pose problème se trouve au sein d'un callback associé au clavier virtuel. dans ce cas, il va prendre en copte le clic rapide sur la lettre d'après mais ne jouera le callback considéré qu'après la fin du précédant, et donc de la pause.
    Petit exemple : dans le cas ci-dessous, il y a une pause de 5 secondes sur le bouton 1 avant d'afficher du texte, aucune latence en revanche sur le bouton 2. Si tu cliques sur le bouton 1 puis très vite sur le bouton 2, le texte du bouton 1 va bel et bien s'afficher avant celui du bouton 2. Cependant, si tu enlèves la ligne en rouge ('Interruptible','off'), tu n'afficheras jamais le texte associé au bouton 1.

    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
    function lala()
    
    h_fig = figure(1)
    setappdata(h_fig,'clic',0)
    set(h_fig,'windowbuttondownfcn',@clic_listener)
    hpt = uicontrol(h_fig,'style','pushbutton',...
        'Position',[10 10 100 100],...
        'Callback',...
        @cllbck_button_1,...
        'ButtonDownFcn',@clic_listener,...
        'Interruptible','Off');
    hpt2 = uicontrol(h_fig,'style','pushbutton',...
        'Position',[200 10 100 100],...
        'Callback',...
        @cllbck_button_2,...
        'ButtonDownFcn',@clic_listener,...
        'Interruptible','Off');
    
    drawnow
    
    
        function clic_listener(src,evt)
            setappdata(h_fig,'clic',1)
        end
        function cllbck_button_1(src,evt)
            pause(5)
            disp('youpla bouton 1')
        end
        function cllbck_button_2(src,evt)
            drawnow
            disp('youpi bouton 2')
        end
    end

    Bon la, l'inconvénient c'est que ca met du lag en quelque sorte : le mec appuie sur une lettre mais elle ne s'affichera que quand la précédente sera devenue une petite étoile.

    voila, en espérant t'avoir été utile....

  5. #5
    Membre actif
    Homme Profil pro
    Inscrit en
    Avril 2013
    Messages
    189
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2013
    Messages : 189
    Points : 242
    Points
    242
    Par défaut Pratiquement trouvé?
    Re-salut,

    en farfouillant un peu sur le net, j'ai trouvé une magnifique fonction isMultipleCall(), à cet endroit.

    http://undocumentedmatlab.com/blog/c...ck-re-entrancy

    en gros, si tu mets a chaque lettre de ton clavier virtuel le même callback, tu peux controller son comportement lors d'un appel multiple. j'ai fait un petit exemple qui pourrait t'intéresser. le comportement est le suivant :

    -J'appuie sur un bouton, et j'affiche que le clic est pris en compte.
    -Je raffiche un truc au bout de trois secondes ou quand je réappuie sur le bouton.
    - le deuxième clic sur le bouton déclenche lui aussi le même comportement, ainsi de suite...

    pour être plus clair, je te conseille de tester ça (oui c'est plus pratique à comprendre avec un exemple)

    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
     
    function lalalala()
     
    h_fig = figure(1)
    hpt = uicontrol(h_fig,'style','pushbutton',...
        'Position',[10 10 100 100],...
        'Callback',...
        @cllbck_button_1);%,...
    %     'Interruptible','Off');
     
    drawnow
    setappdata(h_fig,'nombre_clic',0)
     
     
        function cllbck_button_1(src,evt)
            disp('on detecte l''appui sur le bouton');
            t = 0;
            tic;
            while (t<3 && ~isMultipleCall() )
                t = toc;
                drawnow
            end
            nb_clic = getappdata(h_fig,'nombre_clic') + 1;
            disp(['fin du callback associe au ', num2str(nb_clic), ' clic'])
            setappdata(h_fig,'nombre_clic',nb_clic),
        end
    end
    avec

    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
    function flag=isMultipleCall()
      flag = false; 
      % Get the stack
      s = dbstack();
      if numel(s)<=2
        % Stack too short for a multiple call
        return
      end
     
      % How many calls to the calling function are in the stack?
      names = {s(:).name};
      TF = strcmp(s(2).name,names);
      count = sum(TF);
      if count>1
        % More than 1
        flag = true; 
      end
    end

  6. #6
    Modérateur

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Août 2014
    Messages
    1 295
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2014
    Messages : 1 295
    Points : 2 385
    Points
    2 385
    Par défaut
    Salut Dombrai,

    Merci pour les réponses, je travaille sur un autre truc là mais je passe tout ça sous crible très bientôt!
    Si vous cherchez des réponses sur ce forum il faudra avant tout expliquer clairement votre problème et exposer la démarche que vous avez entreprise pour le résoudre. Fournissez une base de travail et de réflexion à vos interlocuteurs!

  7. #7
    Modérateur

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Août 2014
    Messages
    1 295
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2014
    Messages : 1 295
    Points : 2 385
    Points
    2 385
    Par défaut
    J'ai testé dans un premier temps de mettre mes pushbuttons en interruptible Off, malheureusement cela ne met pas en fil d'attente les prochains clics sur les les différents pushbutton (=un double clique ne va afficher qu'une seule lettre).

    La fonction multipleCall a l'air sympa, je vais voir pour l'intégrer quand je reviendrais sur mon IHM.

    Merci des suggestions en tout cas.
    Si vous cherchez des réponses sur ce forum il faudra avant tout expliquer clairement votre problème et exposer la démarche que vous avez entreprise pour le résoudre. Fournissez une base de travail et de réflexion à vos interlocuteurs!

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

Discussions similaires

  1. Video Fonction pause
    Par oliv27400 dans le forum Images
    Réponses: 0
    Dernier message: 18/06/2010, 09h45
  2. Pause sur une fonction
    Par D3bian dans le forum Général Python
    Réponses: 14
    Dernier message: 30/10/2009, 14h26
  3. Mettre fonction pause lors d'un clic
    Par play_all dans le forum Tkinter
    Réponses: 5
    Dernier message: 22/08/2007, 14h39
  4. [JavaScript] [SRC] - Sleep - Faire une pause dans une fonction Javascript
    Par buzzkaido dans le forum Contribuez
    Réponses: 2
    Dernier message: 16/07/2007, 13h06
  5. [PHP-JS] Fonction pause en php
    Par cokilulu dans le forum Langage
    Réponses: 5
    Dernier message: 14/06/2006, 11h11

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