如何更新jmp中的显示框?你好,
我有一个显示框(文本框),我想在 for 循环中更新它。
我发现我无法可靠地更新循环中的文本框。
这真的很烦人,因为我有很多文件要处理,而且不可能
始终对驱动器进行物理检查以查看文件是否正在处理。
我正在使用 Wait(0) 以便让 jmp 赶上。 我尝试过忙灯
以及有同样问题的。 一切最终都会更新。
我也尝试过 Wait(1) ,它有效,但又不太可靠。
如何创建简单的文本框状态更新?
感谢您的投入!
回复: 如何更新jmp中的显示框?是的,我见过他们。 进度条很整齐。 但是,它也会在新窗口中弹出,并且如果您尝试在单个窗口中修复所有内容,则效果不佳。 不过还是有希望的。 我会尝试看看是否可以让它在我的用户界面中工作。 另一种方法只是一种文本框方法,如上所述,至少在我的情况下不起作用。我想问题确实是没有足够的时间来更新显示,以防 for 循环有太多东西(一些帖子提到了与 Windows 无法及时更新显示框有关的事情)。 如果我等待更长的时间,文本框方法就有效。 等待时间为 0 并不总是有效(意味着通常所有内容都会在 for 循环完成后更新)。
我将尝试创建一个可以可靠更新的通用进度跟踪器。 如果我成功了,我会再次发帖。
感谢您的帮助和耐心!
回复: 如何更新jmp中的显示框?我在这个论坛中搜索了“进度条”,发现了两个有用的链接:
查看代码来自@msharp这里:如何显示进度条而不是中间表的打开和关闭
类似的代码来自@SDF1这里:关于如何编写用于建模的小型更新/进度窗口的脚本的建议
回复: 如何更新jmp中的显示框?谢谢。 您提供的代码片段当然有效,但我正在寻找我可以的东西
集成到我的用户界面中。 我不想显示弹出消息。 我的 UI 中有很多元素
需要此状态功能,因此我想要一些可以添加到我的 New Window() 中的东西
作为显示框并用作状态栏。
我正在寻找这样的东西:
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"),
);我也尝试使用忙碌灯,但也有同样的问题。 此外,我不知道上面的内容如果更正的话,当 for 循环中有大量表操作而不是简单的计数时是否会起作用。 也许我必须等待。 这就是为什么我坚持使用文本框选项。
我非常感谢任何其他可以在 UI 场景中使用的解决方案,其中多个元素可以访问相同的状态显示框。
谢谢!
回复: 如何更新jmp中的显示框?如果您要向用户显示处理状态,您可能需要尝试标题功能而不是文本框。
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);回复: 如何更新jmp中的显示框?感谢您的评论。 确实,我知道这一点。 您给我的代码只是生成一个带有数字的窗口。
我猜,它正在打印最后一个数字,因为一切都进展得非常快。
我正在做类似你所展示的事情:一个循环,里面有一堆表操作和一个文本更新
然后循环结束。 当我说可靠时,我的意思是如果我在 for 循环末尾添加更新,它应该更改文本
那一刻。通常,只有最后的更新可见。
我实际上发现现在起作用的是我从另一篇文章中得到的东西(不知道是哪一篇,因为我正在查看其中的一些文章)。
所以基本上,我们可以在循环中创建和删除文本框。 不知何故,更新文本不会刷新文本框,这很奇怪。
无论如何,目前删除并使用新文本在确切位置重新创建文本框对我来说很有效。
感谢您的投入!
回复: 如何更新jmp中的显示框?可能需要更多详细信息才能理解“无法可靠更新”的评论。 下面的代码显示了这个想法,但我怀疑您已经知道这一点。 请注意,在 JSL 中通常要避免使用“Wait()”,这里它只是模拟一些其他处理的持续时间。
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();
);