Si vous avez beaucoup de ligne à afficher dans la boîte de message, le msgbox
n'est pas la meilleure solution car il n'a pas une barre de défilement et vous ne verrez qu'un ensemble partiel de lignes.
Dans ce cas, une solution simple pourrait être de construire votre propre boîte de message par:
- créer un
figure
- ajouter un
uicontrol editbox
- ajouter un OK
pushbutton
pour fermer la figure (par ce bouton-poussoir `callback
puis dans la boucle, vous pouvez:
- générer la chaîne à chaque itération
- ajouter à la précédente
- définir la chaîne à la propriété
string
du uicontrol editbox
Vous pouvez créer une interface graphique plus sophisticaded avec guide
.
Cette solution est mise en œuvre dans le code suivant:
Création de votre boîte de message onw
% Create the figure
f=figure('unit','normalized','name','MY-_MESSAGE-_BOX','numbertitle','off');
% Add an edit text box
my_msg_box=uicontrol('parent',f,'style','edit','max',3,'unit','normalized', ...
'HorizontalAlignment','left','position',[.1 .1 .7 .7])
% Add the OK button and set its callback to close the figure
ok_bt=uicontrol('parent',f,'style','pushbutton','unit','normalized', ...
'string','OK','position',[.85 .5 .1 .1],'callback','delete(f);clear f')
Créer la chaîne et l'ajouter à la editbox
EDIT rendre plus clair le code suivant le commentaire de l'OP
Dans l'exemple suivant, lors de chaque itération, la chaîne que vous souhaitez afficher est généré (je l'ai remplacé les varaibles luser,dev(ind,1),dev(ind,5),dev(ind,2),dev(ind,6)
avec des « numéros » afin de tester le code)
% Generate the string in the loop
str='';
for i=1:10
% Replace the msgbox instruction with the code to simply print the
% string
% msgbox(sprintf(' Values at %0.3f cd/m^2 for \n %s are:- \n\n Voltage %0.3f V\n Current den. %0.3f mA/cm^2 \n Current %0.3f mA \n Efficiency %0.3f cd/A',luser,forlegend{ab},dev(ind,1),dev(ind,5),dev(ind,2),dev(ind,6)),'Resulting Values');
str=sprintf('%s\n Values at %0.3f cd/m^2 for \n %s are:- \n\n Voltage %0.3f V\n Current den. %0.3f mA/cm^2 \n Current %0.3f mA \n Efficiency %0.3f cd/A', ...
str,123,'abcdef',111,222,333,444);
% str=sprintf('%s This is:\n the STRING #%d\n\n',str,i)
% Add the strong to the edit box
set(my_msg_box,'string',str)
end
Fondamentalement, vous avez pour remplacer l'instruction msgbox
avec simplement l'appel sprintf
.
En ce qui concerne votre mise en œuvre du sprintf
appel (une partie restauration des varaibles luser,dev(ind,1),dev(ind,5),dev(ind,2),dev(ind,6)
), vous devez:
- ajouter
%s
comme un premier descripteur de format
- ajouter
str
comme paramètre d'entrée premier
cela permettra "d'ajouter" les chaînes.
Si vous avez seulement quelques ligne pour afficher
, vous pouvez simplement générer la chaîne à chaque itération de la boucle et de l'annexer à la précédente sans appeler la fonction msgbox
.
A la fin de la boucle, vous pouvez appeler le msgbox
et lui fournir la chaîne "entière".
str='';
% Generate the string in a loop
for i=1:10
str=sprintf('%sThis is:\n the STRING #%d\n\n',str,i)
end
% Display the final string in the msgbox
msgbox(str,'Resulting Values')
Hope this helps.
Qapla »
Pouvez-vous relier une image à ce que la boîte de message ressemblerait si vous imprimez une chaîne qui a rempli une zone plus grande que celle de la boîte de message? Par exemple, 'msgbox (sprintf ('1 \ n2 \ n3 \ n4 \ n5 ... etc'))' – TypeKazt