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 :

Passe d'argument dans un callback


Sujet :

Interfaces Graphiques

  1. #1
    Membre du Club
    Homme Profil pro
    Analyse système
    Inscrit en
    Juin 2014
    Messages
    82
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Analyse système
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juin 2014
    Messages : 82
    Points : 45
    Points
    45
    Par défaut Passe d'argument dans un callback
    Bonjour

    Mr Briot m'a expliqué comment "passer des arguments" vers une fonction dans un callback , ainsi que la subtilité des 2 argument implicites.

    'callback',{@ A_Aditione1,Somme,Resultat}
    A_Aditione1 est le nom de la fonctioon
    Somme,Resultat sont les parametres

    merci beaucoup

    Maintenant je ne trouve pas comment on retourne un resultat de la fonction

    l'équivalent de
    Resultat=FonctionCalcul (Arg1, Arg2) ou FonctionCalcul est le nom de la fonction

    je sèche encore et je ne trouve rien dans la documentation...

    j'ai bien vu la page "' https://fr.mathworks.com/help/matlab...efinition.html
    Mais il n'est pas expliqué comment renvoyer un résultat, ce que je faisait facilerment avec un callback defini en texte (la variable était dans le workspace).

    Merci

  2. #2
    Membre du Club
    Homme Profil pro
    Analyse système
    Inscrit en
    Juin 2014
    Messages
    82
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Analyse système
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juin 2014
    Messages : 82
    Points : 45
    Points
    45
    Par défaut
    Bon j'ai trouvé 2 choses plus ou moins interressantes sur le forum de mathworks

    1) Une personne qui explique que il n'est pas possible avec un callback de la forme {@ NonFonction, argument1, argument2} de retourner un résultat en retour, car le callback existe alors que la fonction qui a crée de callback n'existe plus. Donc il n'y a rien a qui retourner un résultat donc il n'existe pas de possibilité de le faire....

    je peux comprendre cela sauf que le Workspace existe toujours et que un callback définit part la methode string "Resultat=NonFonction(argument1, argument2)" fonctionne parfaitement si argument1, argument2 et Resultat sotn des variables du workspace.
    J'ai utilisé beaucoup cette méthode dans mon application et ca marchait assez bien en R2013. (cela fonctionne aussi en R2016, ce sont juste lespointeurs des uicontrol qui ont disparu)

    Cette méthode est elle déconseillée et si oui pourquoi

    2) J'ai trouvé le lien suivant https://fr.mathworks.com/help/matlab...callbacks.html
    Share Data Among Callbacks

    qui introduit diverses methodes pour gerer des DATA

    UserData pour associer une variable dans la proprité user date de chaque objet graphique
    pour cette methode quelle sont les limitations (une variable, peut on mettre une matrice ? peut on mettre une String ? peut on mettre une Cell etc

    L'usage de setappdata(obj,name,value); et data = getappdata(obj,name); qui est assez similaire sauf que on cré les variables dont on a besoin et qui seront stockées avec l'objet graphique.
    je comprends que dans ce cas on peut stocker dans l'objet graphique une Structure complexe par exemple.

    3) au final je vois que:
    Dans mon application:
    les DATA de l'application sont mémorisées sous forme de structures dans le workspace. Et les call back générés sous forme de texte modifie ses structures du Workspace (et la partie graphique suit car j'ai les handle de chaque élément graphique dans les structures)

    Avec setappdata(obj,name,value); et getappdata(obj,name);
    les DATA de l'application sont mémorisées dans les objets graphiques eux même et le callback trouve les data dans le paramatre implicite hObjet.

    4) je trouve assez etrange de stoker les DATA dans les objets graphique... (entre autre car des datas peuvent n'être associés à aucun graphique...
    Quel est réellement l'avantage de cette méthode?

    5) mon application (qui est "pas petite" est construite avec les DATA mémorisées dans le workspace principalement sous forme de structures; et les fonction qui modifient ces DATA (y compris les callback prennent ces structure dans le workspace, les modifient et les restituent (le graphique suit). Changer cette methode me parait tout refaire .
    Je prévois 1 an de delai. Sachant que je travaill sur cette application depuis 18 mois au rythme de environ 10h/semaine (j'admets être très lent)

    Ca donne a réflechir avant d'agir !

  3. #3
    Membre du Club
    Homme Profil pro
    Analyse système
    Inscrit en
    Juin 2014
    Messages
    82
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Analyse système
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juin 2014
    Messages : 82
    Points : 45
    Points
    45
    Par défaut
    bonjour

    Dans une discussion récente vous m'avez indiqué que la définition de callback sous forme de texte était incompatible avec "le compiler"

    Comme renoncer a cela m'obligerait à refaire un gros travail j'ai fait un test avec une application toute petite dont j'ai écrit 2 versions
    une utilisant des callback en texte un script en fichier de tête et potentiellement des variables dans le woirkspace

    une utilisant des callback avec l'operateur @ (pointeur de fonction) une fonction sans parametres en fichier de tête et des DATA stockés en UserData dans les objets graphiques

    Au final j'ai bien pu générer une application standalone (qui fonctionne) dans les 2 cas en utilisant l'outil "Application Compiler" disponible dans le menu APS
    Dois je en déduire que les callback en texte sont compatibles de l'outil matlab compiler ?

    Par contre le Package Application demande une fonction File comme fichier de tête (donc pas un script) et dans ce cas il n'y a plus de solution "Callback en texte" car ces call back sont evalué dans le workspace (ou donc il doit exister des variables)

    je ne vois pas la différence entre "Package Application" et le "Application Compiler" (ou cd MCC) ??

    J'ai par ailleurs réussit à refaire fonctionner mon application en R2016 (modification mineure mais il a fallut chercher...), avec comme inconvénioent que les structure de DATA du WortkSpace qui en 2013 contenait les pointeurs des objet graphiques Contienne maintenant les objet eux même (ou une copier de ces objets?) ce qui est probablement peu efficace ?

    avez vous un conseil ?

    Merci

Discussions similaires

  1. Arguments dans un callback
    Par Ranfan dans le forum GTK+ avec C & C++
    Réponses: 3
    Dernier message: 16/04/2013, 20h31
  2. Saisie d'arguments dans la ligne de commande
    Par sangei dans le forum Général Java
    Réponses: 20
    Dernier message: 06/12/2009, 16h08
  3. [Tableaux] double argument dans un lien
    Par ptit_bou dans le forum Langage
    Réponses: 4
    Dernier message: 15/01/2006, 01h21
  4. [Struts] Passer un argument dans un property
    Par Malaussene dans le forum Struts 1
    Réponses: 4
    Dernier message: 07/09/2004, 10h11
  5. [C#] Arguments dans Projet VS
    Par MALAGASY dans le forum EDI/Outils
    Réponses: 3
    Dernier message: 07/07/2004, 15h32

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