ストップウォッチを作りたい

ストップウォッチを作りたいです。
ループ文で1秒経過するごとにFUKIDASIで時間を表示するところまではできました。
ただ、FUKIDASI中に別の処理をするのはどうすればよいのかわかりません。
SLCTBOXと、タイムアウト秒設定を使いましょう

FUKIDASIによる時間制御まで来ているのは、
とってもよいアプローチです。

時間の表示までは出来ているので、スタートとストップボタンも併せて出すようにしましょう。

と言ってもFUKIDASI関数にはそのような機能はないので、
SLCTBOX関数の出番です。

まずはただの時間表示スクリプト

ご質問にあるようなループ文とFUKIDASIによる時間表示スクリプトは以下の通りです。

TIME = 0
WHILE TRUE
 TIME = TIME + 1
 SLEEP(1)
 FUKIDASI(TIME + "秒経過",0,0,0,20)
 //一応10秒経ったら終了
 IF TIME > 10 THEN EXIT
WEND

スクリプト

では、ストップウォッチを作りましょう。
ループ文の中にSLCTBOXを記述します。
これだと、スクリプトが選択肢が出てきた所で、
進まないんじゃないのかという懸念がありますよね。
でも大丈夫、タイムアウト秒の設定というものがあり、
指定時間を経過すると次のステップに進むことができます。
スクリプトは以下のようになります。

//開始時間
START = GETTIME()
//スタート、ストップの状態を判別
CNTFLG = 1

WHILE TRUE
  //開始時間 - 現在時間で経過時間取得
  NOW = GETTIME() - START 

  //ストップウォッチ、CNTFLG=0の場合はタイムアウト無し=ストップ状態
  SELECT SLCTBOX(SLCT_BTN,CNTFLG,NOW + "秒","スタート","ストップ")

    //スタート
    CASE SLCT_1
      //再スタートはリセット
      START = GETTIME()
      CNTFLG = 1


    //ストップ
    CASE SLCT_2
      CNTFLG = 0

    SELEND
WEND

どうでしょう。期待通りの動きをしていますか。
まずはスクリプト起動時に時間カウントがスタートし、秒数が表示されます。
ストップを押せば、カウントは止まります。
そして再び、スタートをクリックすれば、時間がリセットされてカウントがリスタートします。

しかし、上記のスクリプトでも
少し不親切な気がします。
時間計測中(スタート中)にスタートを押した場合はどうなるでしょうか。
強制的に終了したい場合はどうでしょうか。
少しスクリプトを親切にしてみましょう。
以下のようになります。

この投稿の続きを読む »

タグ

2012年6月24日 | コメントは受け付けていません。 |

カテゴリー:Q&A

SLCTBOX

SLCTBOX関数

セレクトボックスを表示
戻値 = SLCTBOX(種別, タイムアウト秒, [x, y,] [表示メッセージ], 項目, [項目, 項目, ...]) 

引数
種別:
   SLCT_BTN・・・ボタン
   SLCT_CHK・・・チェックボックス
   SLCT_RDO・・・ラジオボタン
   SLCT_CMB・・・コンボボックス
   SLCT_LST・・・リストボックス
   SLCT_STR・・・戻り値を項目名で返す(他の種別に付加して使用)
   SLCT_NUM・・・戻り値を位置数で返す(他の種別に付加して使用)
タイムアウト・・・指定秒を過ぎるとゼロを返します(0指定でタイマーは無効)
X, Y・・・表示位置(デフォルトは中央)
表示メッセージ・・・セレクトボックスに表示するメッセージ
項目・・・選択項目名、配列変数も可
戻値
 1つ目が選択されたならば SLCT_1 が返される
 2つ目が選択されたならば SLCT_2 が返される
 SLCT_CHK(チェックボックス)選択時はビット演算して返される
 SLCT_STR 付加時は項目名で返される(複数選択時はタブにて結合される)
 SLCT_NUM 付加時は位置数で返される(複数選択時はタブにて結合される)
 ※閉じボタンによる終了時は-1を返してくる(SLCT_CHKにてビットチェックする場合は注意)
 ※項目数は最大31まで(SLCT_STR、SLCT_NUM の場合は制限なし)

SLCT_BOX
SLCT_CHK
SLCT_RDO
SLCT_CMB
SLCT_CMB(プルダウン内)
SLCT_LST

セレクトボックスを表示する

セレクトボックスを表示するだけの簡単なスクリプトです。

SLCTBOX(SLCT_BTN,0,"SLCT_BTN","オブジェクト1","オブジェクト2","オブジェクト3")
SLCTBOX(SLCT_CHK,0,"SLCT_CHK","オブジェクト1","オブジェクト2","オブジェクト3")
SLCTBOX(SLCT_RDO,0,"SLCT_RDO","オブジェクト1","オブジェクト2","オブジェクト3")
SLCTBOX(SLCT_CMB,0,"SLCT_CMB","オブジェクト1","オブジェクト2","オブジェクト3")
SLCTBOX(SLCT_LST,0,"SLCT_LST","オブジェクト1","オブジェクト2","オブジェクト3")
MSGBOX(SLCTBOX(SLCT_LST + SLCT_STR,0,"SLCT_LST(選択した値が文字列+タブで返る)","オブジェクト1","オブジェクト2","オブジェクト3"))
MSGBOX(SLCTBOX(SLCT_LST + SLCT_NUM,0,"SLCT_LST(選択した値が位置数+タブで返る)","オブジェクト1","オブジェクト2","オブジェクト3"))

セレクトボックスで押されたボタンに対応した処理を実施

セレクトボックスで返される値をもとに
対応した処理を実施させるスクリプトは以下の通りです。

この投稿の続きを読む »

タグ

2012年3月31日 | コメントは受け付けていません。 |

カテゴリー:関数一覧

このページの先頭へ