« Découvrir Scilab/Créer une interface graphique GUI » : différence entre les versions

Contenu supprimé Contenu ajouté
Correction du code de 2 callbacks : une chaine ouverte ne peut pas être poursuivie à la ligne par "..." sans être fermée.
Ligne 164 :
"string", "$x^2$",...
"position", [100 0 100 20], ...
"callback", "x = evstr(e.string);" + ...
"y = x^2;" + ...
"t.string = string(y);" + ...
"plot2d(x, y, style = -1);");
</source>
Essayer l'exemple en prenant des valeurs successives sans interrompre le programme. Par exemple commencer par des valeurs extrêmes — <code>0</code> puis <code>10</code> — pour fixer l'échelle graphique, et « remplir » par des valeurs intermédiaires (<code>2</code>, <code>5</code>, <code>7</code>, …).
 
Analysons la fonction de rappel :
* <code>x = evstr(e.string)</code> : récupère la chaîne de caractères de la zone d'édition (pointeur <code>e</code>), la transforme en nombre (« évaluation » de la chaîne) et la place dans la variable <code>x</code>. ;On prendra toutefois garde au fait qu'au moment où le script sera exécuté (lorsque le bouton sera pressé, possiblement longtemps après la création des composants interactifs), la variable <code>e</code> peut ne plus exister. Pour conserver l'"adresse" de la zone d'édition en zone sûre, on peut par exemple la sauvegarder dans le champ <code>userdata</code> du bouton (voir plus loin).
* <code>y = x^2</code> : calcule le carré de <code>x</code> et place le résultat dans la variable <code>y</code> ;
* <code>t.string = string(y)</code> : transforme la valeur en chaîne de caractère, et place le résultat dans la chaîne de caractères de la zone de texte (pointeur <code>t</code>) ; cela provoque l'affichage de la valeur. ;<code>t<code> est aussi sujet que <code>e</code> à effacement ou écrasement intermédiaire.
* <code>plot2d(x, y, style = -1)</code> : place le point sur le graphique.
 
Ligne 296 :
"position", [50 280 50 20], ...
"userdata", [N1, N2, aff_pgcd, aff_ppcm], ...
"callback", "n1 = eval(gcbo.userdata(1).string);" + ...
"n2 = eval(gcbo.userdata(2).string);...
"pgcd = euclide(n1, n2);" + ...
"ppcm = n1*n2/pgcd;" + ...
"gcbo.userdata(3).string = string(pgcd);" + ...
"gcbo.userdata(4).string = string(ppcm);");
endfunction