◎ 例題−2 タイマー処理[時刻表示]

 

[例題−2」 作成のポイント


◎ テキストボックスを作成し、ソース(S)に #TIME を、設定しただけでは、時刻表示は更新されません
  タイマーイベントを使用します。タイマーは、一つのフォームに2個設定できます
  単位は、0.01秒〜93,600秒(26時間)の範囲内です(桐自体は、1000分の1秒まで、対応しています)

◎ 設定(単位)値より、時間のかかる処理は、注意が必要です

◎ 説明途中では、テスト用がありますので、ご注意下さい  

 

[例題−2] 作成手順 備 考 & 補 足
説明−1 ・白紙のフォームから作成します。
・テキストボックスを配置します
関数(#時刻)でも、変数を利用した表示でも可能です
目的によって使い分け下さい
説明−2 イベント(タイマー)を設定します 今回は、秒の表示まで行いますので、0.1を使います
説明−3 KEVファイルを作成します 作成方法は、例題−1と、同様です
タイマーを利用した処理例:

 タイマーの利用といえば最初に思いつくのが、時刻表示ですが、ある一定時毎にイベント処理を行うと考えれば、いろいろ便利な使い方があります。今回は、おまけとして、「現在編集中の表ファイル(TBL)の、定期的なバックアップをとる」も、一緒に紹介いたします

 

説明−1 フォーム作成
オブジェクトはテキストボックスです

 時刻表示は、通常1画面に1個あればいいのですが、時刻更新状況を見るために同じ物を2個作成します

理由:左図のように、設定のしかたによっては、時刻のずれが発生しますのでその説明用です

オブジェクトの属性設定で、ソースに、#TIME を設定します

現在の時刻を取り出す関数です。( #時刻 も可です)

表示される時刻文字列は、環境によって異なります


 補 足
  1. テキストボックスの名前は、表示1・表示2と、します
  2. 1個作成して、編集→複製を利用して、画面のように配置して下さい)
  3. 他(背景やフォント等)は、自由に設定しておいて下さい
  4. タイマーはフォームのイベントですから、テキストボックスのイベントは、今回は使用しません。

 

説明−2 イベント設定
 

《フォームのイベント属性設定画面》

 タイマーのオブジェクト属性設定はフォームから行います

 《完成編》

 ・イベント(E) の下方にある、タイマー1を、チェックします
 ・右側のタイマー値は、1だけ使用します
 ・タイマー値は0.1を設定します

 《テスト編》

 ・イベント(E) の下方にある、タイマー1・2を、チェックします
 ・右側のタイマー値は、両方使用します
 ・タイマー値1は、1を、タイマー値2は、0.1を設定します

    正確にはこれでも誤差が発生する場合があります                     

 

 テスト用と完成品を作成した理由
  • ここでの目的は、時刻表示の正確さを見るために、わざと時刻表示を2個表示しています
  • タイマー値1で1を設定してますので、表示1は1秒ごとに更新されますが、表示2は、0.1秒ごとに更新されます。
  • しかし、タイマーイベントが0.00秒から始まるのではなく、フォームが表示されてからの経過時間ですから、2個の時刻表示が、同時には更新されません。(文章で書くと理解しづらいのですが、実際試すとすぐわかります)

 

説明−3 イベント処理作成

 #time 関数は、時刻取得はできますが、表示の更新はできません。そこで、時刻の表示画面を、最新状態に更新させる必要があります

《 完成編 》

名札 メイン


手続き定義開始 フォーム::タイマー1()
  メソッド呼び出し @フォーム.再描画()
手続き定義終了

《 テスト用 》

名札 メイン


手続き定義開始 フォーム::タイマー1()
  オブジェクト操作 @表示1.始点X = "10.0 pt"
手続き定義終了

手続き定義開始 フォーム::タイマー2()
  オブジェクト操作 @表示1.始点X = "10.0 pt"
手続き定義終了


上記イベント処理説明

《 完成編 》

手続き定義開始 フォーム::タイマー1()
 メソッド呼び出し @フォーム.再描画()

 タイマー1のイベントが発生するたびに、メソッド呼び出しで、画面の再描写、つまり、フォーム上のオブジェクト全部を一度に更新します

《 テスト用 》

手続き定義開始 フォーム::タイマー1()
  オブジェクト操作 @表示1.始点X = "10.0 pt"
手続き定義終了

手続き定義開始 フォーム::タイマー2()
  オブジェクト操作 @表示2.始点X = "10.0 pt"
手続き定義終了

 それぞれタイマーの発生により、オブジェクトを操作しています。別に、始点の変更でもなくて、なんでもかまいません。
オブジェクト操作を呼び出した対象のオブジェクトのみ、表示が更新されます。

 通常は、メソッド呼び出し @フォーム.再描画()の書き方でいいのですが、フォーム上にたくさんのオブジェクトの配置がされてる場合は多少時間がかかります。今回は、わざと表示のずれを見るため、オブジェクト操作 を利用してそれぞれを更新していますいます。

 是非テスト用で、症状をご確認下さい。

 

 タイマーを利用した、自動バックアップ処理の概略

 1.タイマーイベント用プログラムを起動する

    back_tbl.wfm を、起動します
    (本当は、桐を起動と同時に、自動起動させる方が手間がかからず忘れる事もありません)

 2.起動時に、環境設定ファイルがあれば、読み込みます

    現在未対応ですが、タイマーの時間等を定義画面へ戻らず設定変更出来るようにします
    また、一覧画面の保存初期設定の、「する・しない」の、設定等も行います

 3.あとはタイマーイベントで定期的に保存確認を行います

    現在、編集している表ファイル名を、取得。
    各ファイル毎に、保存する・しないをチェックする
    保存チェックにより、ファイル毎に処理を行う

 4.保存終了後、最小化で、常駐します


 お断り(タイマーイベント説明用のプログラムなので、機能はなにも付けていません。)

 したがいまして、あとは、ご自由に必要な機能を追加して下さい。

 1.保存処理する前にウインドウの位置やサイズ等を、変数に保存しておき、保存終了後、元に戻す
 2.タイマーイベントに入る前の処理表の名前を取得し、終了後、編集対象表をもどす
 3.上書き保存前の、並べ替え・絞り込み索引等も上記の処理を行う
 4.再編集の必要のない表は保存後、終了してしまう
 5.1回も保存していない表の編集時間の表示等・・・・・・・まだまだたくさんあると思いますがご自由に変更下さい


    説明に使用いたしましたファイルのダウンロードコーナです