Comment mettre à jour les boîtes d'affichage dans jmp ?Salut,
J'ai une zone d'affichage (Text Box) que je souhaite mettre à jour dans une boucle for.
Je vois que je ne parviens pas à mettre à jour de manière fiable la zone de texte dans la boucle.
C'est vraiment ennuyeux car j'ai beaucoup de fichiers à traiter et il n'est pas possible de
vérifiez toujours physiquement les lecteurs pour voir si les fichiers sont en cours de traitement.
J'utilise Wait(0) pour permettre à jmp de rattraper son retard. J'ai essayé la lumière occupée
ainsi qui a le même problème. Tout se met à jour à la fin.
J'ai également essayé Wait(1), qui fonctionne mais encore une fois, de manière moins fiable.
Comment puis-je créer une simple mise à jour de l’état d’une zone de texte ?
Merci pour vos contributions !
Re : Comment mettre à jour les boîtes d'affichage dans jmp ?Oui, je les ai vus. La barre de progression est intéressante. Cependant, il apparaît également dans une nouvelle fenêtre et ne fonctionne pas bien si vous essayez de tout réparer dans une seule fenêtre. Prometteur cependant. Je vais essayer de voir si je peux le faire fonctionner d'une manière ou d'une autre dans mon interface utilisateur. L'autre est simplement une méthode de zone de texte qui, comme mentionné, ne fonctionne pas dans mon cas, du moins.Je suppose que le problème vient vraiment du manque de temps pour les mises à jour d'affichage au cas où la boucle for contiendrait trop de choses (certains articles mentionnaient quelque chose à voir avec le fait que Windows ne pouvait pas mettre à jour les zones d'affichage à temps). La méthode de la zone de texte fonctionne si j'attends plus longtemps. Un temps d'attente de 0 ne fonctionne pas tout le temps (ce qui signifie que souvent tout est mis à jour une fois la boucle for terminée).
Je vais essayer de créer un suivi des progrès généraux qui peut être mis à jour de manière fiable. Si je réussis, je posterai à nouveau.
Merci pour votre aide et votre patience !
Re : Comment mettre à jour les boîtes d'affichage dans jmp ?J'ai fait une recherche sur "barre de progression" dans ce forum et j'ai trouvé deux liens utiles :
Consultez le code de @msharp ici: Comment afficher la barre de progression au lieu de l'ouverture et de la fermeture des tables intermédiaires
Code similaire de @SDF1 ici: Suggestion sur la façon de créer un script pour une petite fenêtre de mise à jour/progression pour la modélisation
Re : Comment mettre à jour les boîtes d'affichage dans jmp ?Merci. L'extrait que vous avez fourni fonctionne bien sûr mais je cherche quelque chose que je peux
intégrer dans mon interface utilisateur. Je ne veux pas afficher de message contextuel. Il y a de nombreux éléments dans mon interface utilisateur
qui nécessitent cette fonctionnalité de statut et je veux donc quelque chose que je puisse ajouter à ma nouvelle fenêtre ()
comme boîte d'affichage et utilisé comme barre d'état.
Je recherche quelque chose comme ceci :
cap = "";
some_test_function = Function({},
Show("What?");
for (i = 1, i <= 1000000, i++,
if (mod(i, 1000) == 0,
//Something like this!!! Not working of course.
cap << Set Text("Processing " || char(i) || " records");
wait(0);
);
k = i^3;
l = k * 4 + i^4;
);
);
nw = New Window("test",
bb = Button Box("test caption", some_test_function),
cap = caption("processing"),
);J'ai également essayé d'utiliser le voyant d'occupation, mais cela pose le même problème. De plus, je ne sais pas si l'élément ci-dessus, s'il est corrigé, fonctionnera lorsqu'il y aura beaucoup d'opérations de table à l'intérieur de la boucle for au lieu d'un simple comptage. Je devrais peut-être utiliser wait, peut-être. C'est pourquoi je suis coincé avec l'option zone de texte.
J'apprécierais grandement toute autre solution pouvant être utilisée dans un scénario d'interface utilisateur avec plusieurs éléments ayant accès à la même boîte d'affichage d'état.
Merci!
Re : Comment mettre à jour les boîtes d'affichage dans jmp ?Si vous affichez l'état du traitement à l'utilisateur, vous souhaiterez peut-être essayer la fonction de légende au lieu d'une zone de texte.
for (i = 1, i <= 1000000, i++,
if (mod(i, 1000) == 0,
caption("Processing " || char(i) || " records");
wait(0);
);
k = i^3;
l = k * 4 + i^4;
);
caption(remove);
wait(0);Re : Comment mettre à jour les boîtes d'affichage dans jmp ?Merci pour votre commentaire. En effet, je le sais. Le code que vous m'avez donné génère simplement une fenêtre avec un numéro.
Je suppose qu'il s'agit d'imprimer le dernier numéro puisque tout va très vite.
Je fais quelque chose comme ce que vous avez montré : une boucle avec un tas de manipulations de table à l'intérieur et une mise à jour de texte à
puis fin de boucle. Quand je dis fiable, je veux dire que si je mets une mise à jour à la fin de la boucle for, cela devrait changer le texte
à ce moment là.Souvent, seule la dernière mise à jour est visible.
Ce que j'ai réellement trouvé qui fonctionne maintenant, c'est quelque chose que j'ai obtenu d'un autre article (je ne sais pas lequel puisque j'en regardais plusieurs).
Donc en gros, on peut créer et supprimer une zone de texte en boucle. D'une manière ou d'une autre, la mise à jour du texte n'actualise pas la zone de texte, ce qui est bizarre.
Quoi qu'il en soit, pour le moment, supprimer et recréer la zone de texte à l'endroit exact avec un nouveau texte fonctionne pour moi.
Merci pour vos contributions !
Re : Comment mettre à jour les boîtes d'affichage dans jmp ?Plus de détails sont probablement nécessaires pour comprendre le commentaire "impossible de mettre à jour de manière fiable". Le code ci-dessous montre l'idée, mais je suppose que vous le savez déjà. Notez que 'Wait()' doit généralement être évité en JSL, et ici il s'agit simplement de simuler la durée d'un autre traitement.
NamesDefaultToHere(1);
nw = NewWindow("Update Text Box", tb = TextBox(Char(Today())), << sizeWindow(400, 200));
for(t=1, t<=10, t++,
/// Simulate some activity that takes time
delay = RandomInteger(1, 5);
Wait(delay);
// Update the Text Box
tb << setText(Char(Today()));
Beep();
);