Barre de progression montré comment faire une barre de progression. @abmayfield question dans "ne répond pas" vs. "pense encore" m'a incité à revoir cela. Voici une autre prise, y compris un bouton d'annulation.
not cancelednot cancelednot cancelednot cancelednon annulé
Cancel button pressed.Cancel button pressed.Cancel button pressed.Cancel button pressed.Bouton Annuler enfoncé.
progressBarWidth = 500;
progressUpdatesSeconds = 1 / 4; // 1/2 sec updates -> 1300ips, 1/30 -> 1000ips (1/4 compromise speed vs appearance)
cancel = 0; // clear the cancel flag
New Window( "Progressbar demo", //
V List Box( //
cats = Text Box( "" ), // output from the work function
t = Text Box( "", <<SETWRAP> ^workCalls/runSeconds^ ips" ) );
t << updatewindow; // this works without the wait
);
totalCats = 0;
dowork = Function( {},
x = "";
For( i = 1, i <= 1000, i += 1, x = x || "." );
totalCats += 1000;
cats << settext( Eval Insert( "total concatenations=^totalCats^" ) );
);
While( runSeconds < limitSeconds & !cancel, // change this to represent the work you are doing
// do some work, simulated by concatenating strings...
dowork();
// update the progressbar
workCalls += 1;
nowMicroSeconds = HP Time();
// how often does it need to update on the screen?
If( (nowMicroSeconds - recentUpdateMicroSeconds) / 1e6 > progressUpdatesSeconds,
// in this example I'm using a fixed time duration of "limitSeconds" to represent the
// amount of work to be done. And "runSeconds" to represent the amount of work done so far.
// Usually you'll have something other than time: number of rows in a table perhaps, or
// number of categories to make reports for. As long as you know how many total and how
// many completed, you can compute this fraction...
updateProgress( runSeconds / limitSeconds ); // change this to represent the fraction of work finished
recentUpdateMicroSeconds = nowMicroSeconds;
Wait( 0 ); // this wait is needed to let the cancel button work
);
runSeconds = (nowMicroSeconds - startMicroSeconds) / 1e6;
);
If( cancel, // test the cancel flag
Beep(); // audio flag
left << color( "dark red" ); // visual flag something is awry
right << color( "red" );
, //
updateProgress( 1.0 ); // people like to see the bar go to 100%
);
cancelButton << setbuttonname( "Close" ); // visual flag the button function is changed
cancelButton << setscript( (cancelButton << closewindow) ); // and what to do if the button is pressed
</SETWRAP>
En testant entre JMP 15 et 16, j'ai remarqué que 16 est un parcelle plus rapide sur cette charge de travail de concaténation de chaînes ! Bon travail!
Modifier : si JMP exécute une plate-forme qui n'a pas sa propre barre de progression annulable et qu'elle s'exécute pendant une longue période, cela ne va pas aider. Le support technique serait un bon endroit pour demander le support de la plate-forme pour une barre de progression. Sans cela, il n'y a aucun moyen (à moins de fermer JMP de force) de l'arrêter jusqu'à ce qu'il soit terminé.
Il ne veut être emballé, merci!
Dans votre exemple, pb<
Vous avez également souligné quelque chose que j'ai raté dans Comment utiliser Définir une classe : Je pensais que je devais exposer explicitement les membres de la classe dans le prototype de classe de définition, mais ce: peut aussi les créer.
Define Class("bubble",
//not needed: m_xpos = .;
_init_ = Method( {x}, <BR />//because using explicit this: ...
this:m_xpos = x;
Merci @Craige_Hales ! Il se trouve que j'avais besoin d'une barre de progression (ou quelque chose de similaire) pour l'un de mes scripts, alors j'ai pris ceci et l'ai légèrement modifié pour l'adapter à mes besoins. Je l'ai transformé en cours (je suis très débutant avec les cours de JMP et les cours en général) pour pratique et parce que j'avais l'impression qu'il pouvait s'intégrer dans un seul. J'ai également ajouté de la documentation qui peut être analysée avec Natural Docs.
Code:
Voir plus...Les documents naturels ressembleront à ceci :
