2017-08-14 4 views
0

J'essaye d'ajouter un paramètre à un onglet de masque, en utilisant m-code. Supposons que je souhaite ajouter un paramètre 'edit' et un paramètre 'popup'. Jusqu'à présent, je ne peux pas les mettre dans l'onglet, ils restent dans le groupe général. La documentation MathWorks ne parvient pas à fournir des directives de travail:Simulink: Ajouter des contrôles pour simuler l'onglet de masque par programme

  • La méthode addDialogControl est échec pour tout le reste que les articles « texte » et « lien hypertexte »
  • La question du paramètre « TabName » un avertissement (va être enlevé, pas autorisé à utiliser). L'avertissement dit "Utilisez les commandes de dialogue de l'onglet pour ajouter des paramètres aux onglets". Il n'y a pas de documentation à ce sujet, nulle part.
  • L'exemple qu'ils fournissent est incomplète et va donne pas le résultat affiché (paramètres restent hors de l'onglet), voir ce lien: https://www.mathworks.com/help/simulink/ug/control-masks-programmatically.html#bu47973-4

J'ai remarqué qu'il ya une classe Simulink.dialog.Control qui ont un méthode 'moveTo', mais les paramètres ne sont pas Simulink.dialog.Control, ils sont l'instance Simulink.MaskParameter. Il existe également une classe Simulink.dialog.parameter.Control mais je ne sais pas quels objets lui appartiennent réellement ni si cela pourrait m'aider. Merci pour l'aide, j'ai juste besoin d'un exemple minimal pour me montrer comment faire ceci.

+1

Si possible, vous êtes mieux souvent la conception de la boîte de dialogue pour que tous les contrôles prévus à ce sujet au début, et puis juste basculer la propriété Visible 'lorsque vous avez besoin/don Pas besoin d'un contrôle particulier. –

+0

C'est ce que nous ferons parce que le masque ouf n'a pas besoin d'être dynamique de toute façon (nous avons juste besoin de plusieurs masques différents pour la même classe d'interface). Cependant j'ai trouvé une solution – Zangdar

Répondre

0

Voici la bonne façon de procéder: en utilisant la méthode 'moveTo' dont j'ai parlé plus haut.

Pour accéder au paramètre Simulink.dialog.parameter (qui contient la méthode moveTo) du Simulink.MaskParameter que vous venez de créer, vous devez utiliser le getDialogControl sur le Maskparameter

et complexe Convoluted? Oui, mais c'est ce que vous devez faire.

Voici un MWE:

block = 'Untitled1/Atomic Subsystem'; 

wMask = Simulink.Mask.get(block); 

if ~isempty(wMask) 
    wMask.delete(); 
end 

wMask = Simulink.Mask.create(block); 

wMask.addDialogControl('tabcontainer','tabContainer'); 

wTabContainer = wMask.getDialogControl('tabContainer'); 

wTab1 = wTabContainer.addDialogControl('tab', 'Tab1'); 
wTab2 = wTabContainer.addDialogControl('tab', 'Tab2'); 

wTab1.Prompt = 'Programatically added tab1'; 
wTab2.Prompt = 'Programatically added tab2'; 

wTextOnFirst   = wTab1.addDialogControl('text', 'textOnFirst'); 
wTextOnFirst.Prompt  = 'Some text on the first tab'; 
wTextOnSecond   = wTab2.addDialogControl('text', 'textOnSecond'); 
wTextOnSecond.Prompt = 'Some text on the first tab'; 

wField = wMask.addParameter('Name', 'TextField' ... 
    , 'Type', 'edit'... 
    , 'Prompt', 'Programatically added text field'... 
    , 'Value', 'Toto'... 
    , 'Evaluate', 'on'... 
    , 'Tunable', 'off'... 
    , 'Enabled', 'on'... 
    , 'Visible', 'on'... 
    , 'Callback', 'disp(get_param(gcb, ''TextField''))'); 


wPopup = wMask.addParameter('Name', 'PopupField' ... 
    , 'Type', 'popup'... 
    , 'Prompt', 'Programatically added popup field'... 
    , 'TypeOptions', {'Value1', 'Value2', 'Value3'}... 
    , 'Evaluate', 'on'... 
    , 'Tunable', 'off'... 
    , 'Enabled', 'on'... 
    , 'Visible', 'on'... 
    , 'Callback', 'disp(get_param(gcb, ''PopupField''))'); 

wFieldDialog = wMask.getDialogControl('TextField'); 
wPopupDialog = wMask.getDialogControl('PopupField'); 

wFieldDialog.moveTo(wTab1); 
wPopupDialog.moveTo(wTab2);