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
fenetre avec son ascenceur
Bonjour,
Un exemple :
Code:
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)); |
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.
1 pièce(s) jointe(s)
fenetre avec ascenseur : les fichiers dans le ZIO
Pièce jointe 368837
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
Fenetre avec ascenseur. Pas de solution à ce jour
Fenetre avec ascenseur. Pas de solution à ce jour
1 pièce(s) jointe(s)
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