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 :

besoin d'une fenetre avec son ascenceur


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 besoin d'une fenetre avec son ascenceur
    bonjour
    Je fait une IHM dans une figure matlab sous matlab12 , sans utiliser GUI (un script crée ma figure)

    Dans une zone rectangulaire de mon IHM de dimension fixes (ex 500; 400) je dois afficher une liste de données sous forme de lignes chaque ligne comprenant un texte et un UIcontrl de type push button et un Uicontrol de type checkbox.
    Ma liste est de longueur variable et "déborde" de la taille de mon rectangle de dimension fixe. J'ai donc besoin de un ascenseur de fenêtre Windows pour faire défiler la liste et affiche la zone utile. (manuellement ou par le code)
    L'idée est de remplacer le rectangle initial par l'équivalent d'une fenetre windiow avec si besoin son ascenceur. par contre je dois pouvoir y mettre des UIControls
    J'imagine que cette fonction existe dans les "composants" ou "objet" matlab mais je ne sais pas le trouver .
    (le plus drole est que j'écris actuelemetn dans une fenetre avec son ascenceur ... qui me conviendrait tres bien)

    Avez vous une idée pour faire cela dans matlab?

    Merci

  2. #2
    Membre émérite
    Homme Profil pro
    Inscrit en
    Mai 2008
    Messages
    2 040
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 2 040
    Points : 2 841
    Points
    2 841
    Par défaut fenetre avec son ascenceur
    Bonjour,

    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
    function essai_test_ascenceur
    global tx
    tx = uicontrol('Style','text',...
        'Position',[200 280 100 20],...
        'String','Valeur de listbox');
     
    men=uicontrol('style','listbox',...
        'Position',[200 100 100 50],...
        'String',{'a';'b';'3';'4';'5';'6';'7';'8';'9'},...
        'Value',1,...
        'Callback',@menu);
    % Ajout d'une valeur dans listbox
    s=get(men,'String')
    set(men,'String',[s;'0'])
     
    function menu(source,event)
    global tx
    v=get(source,'String');
    r=get(source,'Value');
    set(tx,'string',v(r));

  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
    Merci , le code fonctionne. Cependant ce n'est pas ce dont j'ai besoin. Ma question n'est probablement pas claire.
    En fait j'ai un UI panel de dimensions fixe 500*500. (à l'intérieur d'une figure)
    mais la" taille" du dessin (comportant des elements graphiques tels que traits et rectangle et des Uicontrol (boutton , case à cocher) est variable et peut dépasser la taile fixe du panel.
    J'ai donc besoin d'un ascenseur vertical et horizontal pour déplacer mon dessin sous la fenetre du UIPanel.
    Peut être cela est possible en modifiant les propriété de m'axe associé au UIPanel ?
    mais ca semble pas simple.
    je vais essayer cela !

    je suis surpris qu'il n'y ait pas une telle fonction dans les multiples possibilité graphique de matlab. Et si je trouve une solution elle sera forcément moins bonne (efficace, flexible...) que celle de l'éditeur.

    Au travail

  4. #4
    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 Reste le probleme des UIControls
    Bonjour
    j'ai un peu avancé mais j'ai des soucis avec les UI control
    Résumons:
    j'ai une figure, avec son axe qui couvre tout l'espace de la figure
    je met un UIpanel avec son axe qui couvre tout l'espace du UIpanel
    sur cet axe je fait un dessin avec des objets graphiques rectangles lignes
    le dessin est plus grand que le UIpanel
    En jouant les XLim Ylim de l'axe du UI panel je déplace mon dessin sous le UI Panel et je peux voir la zone que je veux. Super.
    Bien , ensuite j'ai ajouté des sliders qui permettent de définir Xlim et Ylim et donc de déplacer mon grand dessin sous le "petit" panel. Cela fait donc le travail de fenêtre avec ascenceur.
    Sauf que les Boutons (uicontrol) ne "suivent pas " et pire les bouttons or partie visible de la fenetre aparaissent sur la figure en dehors du panel ! (polution du reste de la figure).
    Pour que les bouttons "suivent" il faut déplacer un "panel" grand sous le "petit panel" et "ça marche" les uicontrol suivent le déplacement du segond panel fil du premier panel mais encore 2 pb :
    1) ils restent visible même affichés en dehors du panel père (polution de la figure)
    2) j'ai une erreur d'environ 3 à 5 % sur le positionnement de mes Uicontrol par rapport aux objets graphiques.
    Donc il vient 3 questions
    1) existe-t-il une méthode standard plus adaptée de faire une fenêtre avec ascenceur sous matlab.
    2) Quel est le repère de référence de uicontrol affiché à l'intérieur d'un panel doté d'un axe; et comment faire pour que les coordonnées utilisées pour les objets graphiques et pour les UI control soient identiques.
    3) comment faire disparaitre les UI control hors du panel père? (en dehors de les identifier un à un et changer leur propriété "visible". ça je sais le faire mais c'est bien compliqué parce que il faudrait faire des modifications sur le contenu du panel (les UI control) dans les callback des sliders: les ascenceurs.

    j'ai une application operationelles qui pourrait être échangées pour illustrer mes propos mais les fichiers .m ne sont pa saccepté par l'outil du site : bizare!

    merci à ceux qui liront de me donner des idées pour les 3 points ci avant.

  5. #5
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 302
    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 302
    Points : 52 883
    Points
    52 883
    Par défaut
    Citation Envoyé par Cata25 Voir le message
    j'ai une application operationelles qui pourrait être échangées pour illustrer mes propos mais les fichiers .m ne sont pa saccepté par l'outil du site : bizare!
    Met tous les fichiers dans une archive zip ou rar.
    Ingénieur indépendant en mécatronique - Conseil, conception et formation
    • Conception mécanique (Autodesk Fusion 360)
    • Impression 3D (Ultimaker)
    • Développement informatique (Python, MATLAB, C)
    • Programmation de microcontrôleur (Microchip PIC, ESP32, Raspberry Pi, Arduino…)

    « J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" » (Saint Huck)

  6. #6
    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 fenetre avec ascenseur : les fichiers dans le ZIO
    FenetreAscensseur.zip

    les fichiers sont dans l'archive jointe
    il suffit de de lancer "EssaiPanelAscenseur" (attention il vide l'espace de travail)

    ce fichier crée un objet MonPanelDessin qui est un example (on peut modifier les taille du panel et du dessin)

    le panel dessin est construit par la fonction CreePanelDessin.m

    les fonctions HorPanelSliding et VerPanelSliding sont les call back des ascenseurs

    Quand le dessin est plus gran que le panel les ascenseur apparaissent et les difficultés avec

    1) la position des UI Control n'est pas exactement coh&érente avec celle des objet graphiques

    2) les UIcontrol restent visibles en dehors du panel

    Certainement je m'y prends mal !

    merci de votre aide

  7. #7
    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 Fenetre avec ascenseur. Pas de solution à ce jour
    Fenetre avec ascenseur. Pas de solution à ce jour

  8. #8
    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 Fenetre avec ascneseur dans une figure ; ma solution
    bonjour
    j'ai une solution qui marche à peut près dans l'archive jointe.

    le problème de décalage de position entre les UI Control et les objets graphiques était du au fait que en standard le panel comporte un titre et une bordure d'épaisseur non nulle. L'axe des graphiques est à l'intérieur de la bordure lorsque normalisé en position [0 0 1 1] alors que les UI control étaient sur un repère du panel entier. (le repère des UI control est pour moi pas clair!)
    En mettant l'épaisseur du cadre (bordure) à zero et le titre à Vide ( "" ) le problème de décalage disparait.

    La solution pour mon dessin plus grand que le panel ou je veux l'afficher est de mettre des sliders puis un second panel de la taille du dessin qui se trouve derrière le panel principal. L'axe de se second panel est normalisé en position [0 0 1 1]. mais les objets graphique hors du panel principal ne sont pas visibles. il suffit ensuite de déplacer ce second panel derrière le premier et tout suit. (les UI control à déplacer doivent avoir ce second panel comme parent).

    Pour les UIcontrol j'en fait une liste et je les traite un par un dans les callbacks associés aux sliders pour n'afficher que ceux qui sont entièrement visibles dans le panel.

    Encore une fois il doit exister une solution toute faite, mais je n'ai pas trouvé.

    Pour tester lancer le script "EssaiPanelAscenseur". Vous pouver modifier les dimensions du dessin et du panel.

    Attention le script vide le workspace.

    Merci de vos retours
    Cata
    Fichiers attachés Fichiers attachés

Discussions similaires

  1. Lancer une Fenetre avec une taille precise
    Par K.othmane dans le forum API, COM et SDKs
    Réponses: 8
    Dernier message: 23/02/2006, 19h52
  2. Réponses: 13
    Dernier message: 09/09/2005, 14h34
  3. [Eclipse 3.1] ouvrir une fenetre avec un bouton
    Par Nanoulov dans le forum SWT/JFace
    Réponses: 4
    Dernier message: 01/08/2005, 13h33
  4. Detection d'une fenetre avec la souris
    Par vivi2701 dans le forum C++
    Réponses: 6
    Dernier message: 09/06/2005, 13h37
  5. Déployer une BDD avec son appli
    Par Albertolino dans le forum Décisions SGBD
    Réponses: 9
    Dernier message: 11/03/2004, 18h08

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