;★変数 mode=0;モード(0時計 1タイマー) breaktimer=0;タイマー開始後の中止をチェックする変数 timelimit=0;タイマーの秒数の入力ボックス用変数 ;画像の準備 buffer 1 picload "number.png" ;メインウインドウを設定 gsel 0 title "clock" width 16*12,32 gmode 2,16,32 ;ずっと同じ設定なのでここでセット *startclock ;時計モードの開始位置。 ;画面の初期化も含む clrobj pos 16*11,0 objsize 16,32 button gosub "",*timeron ;モードを0(時計)にしておく mode=0 repeat ;★タイマーボタンが押されたかチェック if mode==1 { break } ;時刻更新 hor=gettime(4) if hor<12 { time="<" }else{ time(0)=">" } if hor>12 { hor-=12 } time+=strf("=;%02d:%02d:%02d",hor,gettime(5),gettime(6)) gosub *drawtime await 1000 loop *settimer ;タイマーボタンが押されるとループを抜けて ;自動的にここへ来る ;タイマー画面の作成 ;★画面を背景色で塗りつぶすだけ ; でも、背景を描く作業も一つの箇所にまとめたいので、 ; 文字は何も表示しないdrawtimeを呼ぶ time="" : gosub *drawtime ;オブジェクト clrobj pos 0,0 objsize 16*6,32 font msgothic,24 ;★fontで設定したフォントでオブジェクト上の文字も表示 objmode 2 input timelimit;★入力ボックスの表示 pos 16*6,0 objsize 16*5,32 button "strat",*starttimer pos 16*11,0 objsize 16,32 button gosub "",*startclock;★時計へ戻るボタンを表示 stop *starttimer ;タイマースタート! ;キャンセルボタンを作っとく clrobj pos 0,0 pos 16*11,0 objsize 16,32 button gosub "",*canceltimer breaktimer=0;キャンセル用の変数を一応0に ;タイマースタート repeat timelimit ;時刻更新 i=timelimit-cnt time=strf("%04d:%02d",i/60,i\60) gosub *drawtime ;タイマーのキャンセルを監視 if breaktimer==1 { break } await 1000 loop ;途中で中止されずにループを終了した場合のみ ;アラームを鳴らす if breaktimer==0 { dialog "時間です",1,"timer" } goto *settimer *canceltimer ;タイマー開始後、キャンセルされた場合に ;breaktimer=1とするだけ breaktimer=1 return *timeron ;タイマーモードのボタンが押されたことを ;変数に記録するだけのルーチン ;modeを1(タイマー)にする mode=1 return *drawtime ;★timeに書かれた文字列を画像でウインドウに表示する ;(<がA,=がm,>がP,スペースが;) redraw 0 color 185,122,87 boxf repeat strlen(time);★文字列の長さ文反復 pos 16*cnt,0 : gcopy 1,16*(peek(time,cnt)-'0'),0 loop redraw 1 return