同じ用途のウィンドウを重複して開かない
日付 | 2020/03/11 |
---|---|
ID | 20-001 |
バージョン | v17以降 |
プラットフォーム | Windows, Mac |
複数のウィンドウを開いて処理をしたいが、同じ処理(同じメソッド)のウィンドウを複数開くたくないことは良くあります。ここで紹介する例題は、同じ処理のウィンドウが既に存在するときは、ウィンドウを開かず、当該処理のウィンドウを最前面にします。
ポイントは、New procesに*オプションを渡すことと、プロセスに処理の内容を反映する名前をつけることです。例題では、メソッド名をそのままプロセス名に転用しています。
//同じ用途のウィンドウを重複して開かない If (Current process name=Current method name) C_LONGINT($window) //メソッド名と同じプロセス名のときはウィンドウを表示 $window:=Open form window("Form Dialog") DIALOG("Form Dialog") Else C_LONGINT($proc;$loop) C_BOOLEAN($is_opened) ARRAY LONGINT($list;0) //メソッド名と異なるプロセス名のときは新しいプロセスを起動する $proc:=New process(Current method name;0;Current method name;*) //*オプション:同じ名称のプロセスは起動しない //ウィンドウが開かれるのを待つ $is_opened:=False For ($loop;60;0;-1) //60回(3秒)待っても開かないときはタイムアウトとしてループを抜ける WINDOW LIST($list) For ($i;1;Size of array($list)) If (Window process($list{$i})=$proc) $is_opened:=True //起動したプロセスでウィンドウが開かれた End if End for If ($is_opened) $loop:=0 //ループを終了する Else DELAY PROCESS(Current process;5) //ウィンドウが開かれていなければ待ち合わせする End if End for //ウィンドウが開かれたなら最前面に移動する BRING TO FRONT($proc) End if