[PowerBuilder] タイマー処理

タイマー処理を使用すると、指定した秒数ごとに処理を繰り返し実行することができる。
例としては、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オブジェクト」タブ→「標準クラス」と選択すると、

timing1.png

「標準クラス データ型の選択」という選択画面が出るので、「timing」を選択する。

timing2.png

そして、作ったユーザオブジェクトを画面の「非ビジュアル オブジェクトに配置する。

 

そうすると「timing から継承した (タイトル未設定)」というウィンドウタイトルで新規ユーザオブジェクトが作成されるので、
「イベントリスト」タブから「timer」イベントを選択し、そこにタイマー発動時に処理を書く。

処理が書けたらユーザーオブジェクトをいったん保存。

そしてタイマーを起動したいウィンドウを開き、先ほど作成したtimer用のユーザオブジェクトをウィンドウにドロップする。
(もしくは、「挿入(I)」→「コントロール」→「ユーザオブジェクト」→作成したユーザオブジェクトを選択)

 

ユーザーオブジェクトには、DWを持つ「ビジュアルオブジェクト」とDWを持たない「非ビジュアルオブジェクト」がある。
(今回作ったtimingユーザオブジェクトは 非ビジュアルの方)

「ビジュアルオブジェクト」を画面に追加(ドロップ)すると、ウィンドウ上のドロップした場所に(ユーザーオブジェクトが持つ)DWが表示されるが、
「非ビジュアルオブジェクト」は追加しても画面は何も変化せず、「非ビジュアルオブジェクト リスト」に追加される。

timing4.jpg

これが見つけづらく、見落としがちなので注意。コントロール リストやイベント リストと同じ場所に配置されていることが多い。

timing3.png
もし表示されていない場合は、「ビュー(V)」→「非ビジュアルオブジェクト リスト」をクリックして表示しておこう。

 

ウィンドウにユーザオブジェクトを追加したら、下記の記述でタイマーを起動・停止する。

uo_timing.Start(10) //10秒間隔で実行
uo_timing.Stop() //タイマーを停止

※「uo_timing」は、ウィンドウに追加したユーザーオブジェクト名

このtimingオブジェクトは、ひとつにつき1タイマーとして動作するため、これまでの操作を繰り返してユーザーオブジェクトをたくさん作れば何個でもタイマーを設置できるようになる。

コメントする