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 :

Callback sur le focus d'un objet graphique


Sujet :

Interfaces Graphiques

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    20
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 20
    Points : 10
    Points
    10
    Par défaut Callback sur le focus d'un objet graphique
    Bonjour,

    Je suis toujours sur mon GUI Matlab et je suis de nouveau confronté à un problème.

    Maintenant que j'ai réussi à détecter les objets grace à leurs tags et une boucle (cf. http://www.developpez.net/forums/sho...d.php?t=376864) j'aimerai pouvoir éxécuter une fonction au moment d'une action sur un objet 'edit'.

    Pour rappel mon GUI est constitué de plusieurs textes éditables et menus déroulants organisés en lignes.
    Chaque ligne dispose de 2 'edit' permettant de saisir une vitesse initiale et une vitesse finale et de 2 'popupmenu' permettant de sélectionner des fichiers.
    Ce que je voudrai c'est que les menus déroulants s'activent quand vitesses saisies respectent certaines conditions et que ces mêmes listes soient désactivées quand aucunes valeurs de vitesses n'est rentré ou en cas de valeurs débiles.

    Je suis sur ce problème depusi hier et j'ai pas mal fouiner sur internet.
    J'ai, entre autre, essayer la solution du buttondownfcn sur le popupmenu mais le bilan est mitigé, puisque en effet je peu vérifier la validité des valeurs au moment du clique sur le popupmenu mais cela oblige à faire un clique droit sur le popupmenu avant de pouvoir sélectionner un fichier. Le plus gros soucis vient du fait que si une vitesse est modifier le popupmenu ne se réinitialise pas.

    Dans le pire des cas j'essaierai de simuler un fonctionnement identique avec plusieur Buttondownfcn et callback sur les differents objets mais cela risque d'être très lourd, d'autant qu'il y à 36 lignes de ce type...

    Existerait-il une solution plus sympa pour ce genre de traitement ?

    Merci d'avance

  2. #2
    Nouveau membre du Club
    Inscrit en
    Juillet 2007
    Messages
    49
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 49
    Points : 25
    Points
    25
    Par défaut
    Alors j'ai eu ce cas, ça a fait l'objet d'un de mes posts un peu plus bas, et voilà ce que j'en ai tiré :

    Dans ton popumenu tu mets ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    function popupCallback(hObject, eventdata, handles)
     
    set(hObject, 'String', handles.names);
    Le handles.names se référant à la valeur saisie dans ton edit. Maintenant, dans ton edit, tu fais ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    function edittext_Callback(hObject, eventdata, handles)
     
    names = str2double(get(hObject, 'String'));
    if isnan(names)
        set(hObject, 'String', 0);
        errordlg('Names must be a number','Error');
    end
     
    handles.input = input;
    guidata(hObject,handles)
    En rajoutant des conditions sur le names rentré dans ton edit et récupéré, tu peux facilement afficher dans ton popupmenu si la valeur convient ou ne rien afficher dans le cas contraire.

    Et après tu peux mettre une warndlg pour dire quand la valeur entrée ne va pas ... J'espère que ça répond grossièrement à ta question, je rentre pas dans les détails mais tu devrais avec un petit coup d'oeil dans l'aide voir ce que je veux dire et le compléter ... Je pense

    Julien

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    20
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 20
    Points : 10
    Points
    10
    Par défaut
    Merci beaucoup,

    Par contre ce script s'applique a une interface faite à partir du GUIDE mais fonctionnerait-il pour une interface codé ?

    Sinon merci, ça me donne déjà une direction, je m'en vais étudier ta proposition

    J'avou ne plus avoir beaucoup d'idée de mon coté

  4. #4
    Expert éminent sénior
    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
    Points : 14 828
    Points
    14 828
    Par défaut
    Attention le problème du callback de l'objet edit est qu'il ne se lance qu'une fois que l'utilisateur a tapé "Enter"...
    Après il n'y a à ma connaissance qu'un seul moyen de vérifier ce qui est rentré à chaque frappe de l'utilisateur et c'est assez lourd :
    • Mettre l'objet edit en 'enable'='inactive'
    • Utiliser le KeyPressFcn
    • Dans la fonction appelée dans le KeyPressFcn, récupérer le dernier caractère frappé (get(gcbo,'currentcharacter'))
    • Mettre à jour la propriété 'string' de l'edit avec ce nouveau caractère (attention au cas du backspace => regarder ce post)
    • Et enfin vérifier la valeur pour savoir si tu mets ton popup menu en 'enable'='on'
    C'est un peu compliqué mais c'est ce qui est utilisé aussi en général pour faire des interfaces de renseignement de mot de passe.

    Bon courage

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    20
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 20
    Points : 10
    Points
    10
    Par défaut
    J'avais passé un peu de temps sur le site de Mathworks et il me semblait bien avoir vu une solution de ce type avec le KeyPressFcn le 'enable', etc...

    C'est vrai que j'avais pas tout compris et ça m'avait parut en plus assez lourd.

    L'idée me semble qd même intéressante, mais au vue du temps qu'il me reste je pense que je vais passer à la suite.
    Ce n'était pas indispensable, je pensais que ce serait un élément de comfort et de sécurité appréciable pour le codage du reste du programme et pour les utilisateur après.

    En plus que j'ai cru comprendre de la part de mon supérieur que l'obligation d'appuyer sur 'enter' serait assez génante.

    Bon en tout cas merci beaucoup et je pense me repencher sur la question quand même quand j'aurais terminé histoire de voir un peu comment ça fonctionne.

Discussions similaires

  1. Effet Glow sur un Objet Graphique
    Par jeffray03 dans le forum Langage
    Réponses: 9
    Dernier message: 22/07/2008, 18h07
  2. Comment fusionner plusieurs callback pour un même objet graphique
    Par biquet dans le forum Interfaces Graphiques
    Réponses: 8
    Dernier message: 19/04/2007, 10h39
  3. manipuler les objets graphique d'excel sur access
    Par technopole dans le forum Access
    Réponses: 4
    Dernier message: 21/07/2006, 10h37
  4. Export JPG sur objet graphique - Pb OLE
    Par Invité dans le forum Access
    Réponses: 6
    Dernier message: 12/05/2006, 16h38
  5. action sur objet graphique???
    Par ricardvince dans le forum AWT/Swing
    Réponses: 6
    Dernier message: 27/04/2006, 18h53

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