タイマー処理を使用すると、指定した秒数ごとに処理を繰り返し実行することができる。
例としては、1分ごとに自動でデータを再取得して画面のグラフを再表示したり、タイムアウト処理に使ったり。
タイマーには2種類ある
このタイマー処理には2種類あり、ひとつはウィンドウが持つtimerイベント、もう一つがtimingユーザーオブジェクト。
前者はウィンドウが持つイベントのため実装が楽だが1ウィンドウにつき1つのみという制約がある。
後者は制約はないが、別途ユーザーオブジェクトを作成しないといけないのがやや手間だ。
ウィンドウが持つ「timerイベント」
ウィンドウペインタを開いて、「イベント リスト」から「timer」イベントを選択する。
そしてそのtimerイベントにタイマー起動時の処理を記述するしておく。
(例えば、グラフ用DWのRetrieveなど)
そして、タイマーを起動したいイベントで
Timer(60)
を呼んでやることで60秒ごとに先に書いたtimerイベントが実行される。グラフ用DWのRetrieve処理が走り、新たなデータが取得され画面のグラフ表示が更新される。
停止する場合は、
Timer(0)
を呼んでやればいい。
タイマーが起動しているかどうかが見た目では分かりにくいので、
画面にスタティックテキスト等で「タイマーON」「タイマーOFF」の表示を出しておくと分かりやすいと思う。
複数起動できる「timingユーザオブジェクト」
上記timerイベントは画面ごとに用意されているイベント(pbm_timer)で、これは同時に1つしか使えない(1画面1timer)。
複数タイマーを使う場合は、別途タイマー用のユーザオブジェクトを作成する必要がある。
「ファイル(F)」→「新規作成(N)」→「PBオブジェクト」タブ→「標準クラス」と選択すると、
「標準クラス データ型の選択」という選択画面が出るので、「timing」を選択する。
そして、作ったユーザオブジェクトを画面の「非ビジュアル オブジェクト」※に配置する。
そうすると「timing から継承した (タイトル未設定)」というウィンドウタイトルで新規ユーザオブジェクトが作成されるので、
「イベントリスト」タブから「timer」イベントを選択し、そこにタイマー発動時に処理を書く。
処理が書けたらユーザーオブジェクトをいったん保存。
そしてタイマーを起動したいウィンドウを開き、先ほど作成したtimer用のユーザオブジェクトをウィンドウにドロップする。
(もしくは、「挿入(I)」→「コントロール」→「ユーザオブジェクト」→作成したユーザオブジェクトを選択)
※ユーザーオブジェクトには、DWを持つ「ビジュアルオブジェクト」とDWを持たない「非ビジュアルオブジェクト」がある。
(今回作ったtimingユーザオブジェクトは 非ビジュアルの方)
「ビジュアルオブジェクト」を画面に追加(ドロップ)すると、ウィンドウ上のドロップした場所に(ユーザーオブジェクトが持つ)DWが表示されるが、
「非ビジュアルオブジェクト」は追加しても画面は何も変化せず、「非ビジュアルオブジェクト リスト」に追加される。
これが見つけづらく、見落としがちなので注意。コントロール リストやイベント リストと同じ場所に配置されていることが多い。
もし表示されていない場合は、「ビュー(V)」→「非ビジュアルオブジェクト リスト」をクリックして表示しておこう。
ウィンドウにユーザオブジェクトを追加したら、下記の記述でタイマーを起動・停止する。
uo_timing.Start(10) //10秒間隔で実行
uo_timing.Stop() //タイマーを停止
※「uo_timing」は、ウィンドウに追加したユーザーオブジェクト名
このtimingオブジェクトは、ひとつにつき1タイマーとして動作するため、これまでの操作を繰り返してユーザーオブジェクトをたくさん作れば何個でもタイマーを設置できるようになる。
コメントする