0

重複の可能性:
OpenEdge ABL は、一定時間貼り付けた後、yes/no メッセージを自動的に閉じます。

14 秒経過したらクリアしたい yes/no メッセージ ボックスがあります。これを行うための最初のステップは、メッセージ ボックスのハンドルを取得して非表示にすることだと思います。

4

2 に答える 2

1

残念ながら、単純な答えは「できません」です。

これは 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 に設定することを忘れないでください。そうしないと、デフォルト フレームの上に表示されません。

于 2012-02-14T13:37:55.880 に答える
0

次のように、ウィジェットのハンドルを使用するか、直接管理することができます。

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」属性を設定します。

于 2012-02-08T16:05:10.257 に答える