14 秒経過したらクリアしたい yes/no メッセージ ボックスがあります。これを行うための最初のステップは、メッセージ ボックスのハンドルを取得して非表示にすることだと思います。
2 に答える
残念ながら、単純な答えは「できません」です。
これは Progress の制限ではなく、使用するプログラミング言語に関係なく、Windows メッセージ ボックスに固有のものです。メッセージ ボックスは親アプリケーションに対してモーダルです。つまり、メッセージ ボックスが閉じられるまでアプリケーションはフリーズします。メッセージ ボックスを閉じるためにどのようなコーディングを記述しても、メッセージ ボックスが開いている間は実行されません。
それほど単純ではない答えには、2 つの可能性があります。モーダル フォームが表示されているときにアプリケーションの一部がフリーズしないようにするには、マルチスレッドが必要です。もう 1 つのオプションは、メッセージ ボックスを非モーダルとして表示することです。つまり、アプリをフリーズしません。これを実現するために、MESSAGE VIEW-AS ALERT-BOX を使用することはできません。これは常にモーダルになるためです。独自のメッセージ ボックス (必要に応じて表示および非表示にできるウィンドウまたはフレーム) を作成する必要があります。
ウィンドウよりもフレームを使用することを好みます。デフォルトのフレームを無効にし、Yes/No ボタンを含むメッセージ フレームを表示します。アプリはフリーズしていませんが、ユーザーはメッセージ フレームのみを操作できます。ユーザーがボタンをクリックするか、時間切れになったら、メッセージ フレームを非表示にして、既定のフレームを再度有効にします。
FRAME Message-Frame:VISIBLE = TRUE.
FRAME default-frame:SENSITIVE = FALSE.
/* do your thing */
FRAME Message-Frame:VISIBLE = FALSE.
FRAME default-frame:SENSITIVE = TRUE.
メッセージ フレームの TOP-ONLY 属性を TRUE に設定することを忘れないでください。そうしないと、デフォルト フレームの上に表示されません。
次のように、ウィジェットのハンドルを使用するか、直接管理することができます。
DEF VAR ch-field AS CHARACTER.
DEF FRAME f-test
ch-field.
ch-field:Visible = yes.
pause 14 no-message.
ch-field:visible = no.
または - ウィジェットのハンドルを取得し、必要に応じて「Visible」属性を設定します。