jmp で表示ボックスを更新するにはどうすればよいですか?こんにちは、
for ループで更新したい表示ボックス (テキスト ボックス) があります。
ループ内でテキスト ボックスを確実に更新できないことがわかります。
処理するファイルがたくさんあり、処理することができないため、これは本当に面倒です。
常にドライブを物理的にチェックして、ファイルが処理されているかどうかを確認してください。
jmp が追いつくことができるように Wait(0) を使用しています。 ビジーライトを試してみた
同じ問題を抱えているものもあります。 最終的にはすべてが更新されます。
Wait(1) も試してみましたが、これも機能しますが、やはりそれほど信頼性は高くありません。
単純なテキスト ボックスのステータス更新を作成するにはどうすればよいですか?
ご意見ありがとうございます!
Re: jmp で表示ボックスを更新するにはどうすればよいですか?はい、見たことがあります。 プログレスバーはきちんとしたものです。 ただし、新しいウィンドウにポップアップが表示されるため、1 つのウィンドウですべてを修正しようとするとうまく機能しません。 でも有望です。 何らかの方法で私のUIで動作させることができるかどうかを確認してみます。 もう 1 つは単なるテキスト ボックス メソッドであり、前述したように、少なくとも私の場合は機能しません。問題は、実際には、forループに多くのものが含まれている場合に表示を更新するのに十分な時間がないことだと思います(ウィンドウが時間内に表示ボックスを更新できないことと関係があるといくつかの投稿で言及されていました)。 テキスト ボックスの方法は、待ち時間を長くすると機能します。 待機時間 0 は常に機能するわけではありません (つまり、多くの場合、for ループの終了後にすべてが更新されます)。
確実に更新できる一般的な進行状況トラッカーを作成してみます。 成功したらまた投稿します。
ご協力と忍耐に感謝いたします。
Re: jmp で表示ボックスを更新するにはどうすればよいですか?このフォーラムで「進行状況バー」を検索したところ、2 つの有用なリンクが見つかりました。
コードをチェックアウトしてください@msharpここ:中間テーブルの開閉の代わりに進行状況バーを表示する方法
同様のコードから@SDF1ここ:モデリング用の小さな更新/進行ウィンドウをスクリプト化する方法に関する提案
Re: jmp で表示ボックスを更新するにはどうすればよいですか?ありがとう。 あなたが提供したスニペットはもちろん機能しますが、できるものを探しています
私のUIに統合します。 ポップアップメッセージを表示したくないのですが。 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 ループ内に単純なカウントではなく多数のテーブル操作がある場合に、上記の部分が修正された場合に機能するかどうかはわかりません。 wait を使用する必要があるかもしれません。 だからこそ、私はテキストボックスオプションにこだわっています。
複数の要素が同じステータス表示ボックスにアクセスできる UI シナリオで使用できる他のソリューションを高く評価します。
ありがとう!
Re: 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);Re: jmp で表示ボックスを更新するにはどうすればよいですか?コメントありがとうございます。 確かに、私はこれを知っています。 あなたが私に与えたコードは、番号を含むウィンドウを生成するだけです。
すべてが非常に高速に行われるため、最後の番号が出力されていると思います。
私はあなたが示したようなことをしています: 内部に多数のテーブル操作とテキスト更新を含むループ
それからループの終わり。 信頼できると言うのは、for ループの最後に更新を配置すると、テキストが変更されるはずであることを意味します。
その瞬間に。多くの場合、最後の更新のみが表示されます。
実際に現在動作していることがわかったのは、別の投稿から得たものです (かなりの数を調べていたため、どれかはわかりません)。
したがって、基本的には、ループ内でテキスト ボックスを作成および削除できます。 どういうわけかテキストを更新してもテキスト ボックスが更新されません。これは奇妙です。
とにかく、現時点では、テキストボックスを削除して、新しいテキストを含む正確な場所に再作成することでうまくいきます。
ご意見ありがとうございます!
Re: jmp で表示ボックスを更新するにはどうすればよいですか?「確実に更新できない」というコメントを理解するには、おそらく詳細が必要です。 以下のコードはそのアイデアを示していますが、これはすでにご存知かと思います。 通常、「Wait()」は JSL では避けるべきであり、ここでは他の処理の継続時間をシミュレートしているだけであることに注意してください。
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();
);