如何更新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();
);