Private Sub T_Byou_Timer()
Static varTimeOld As Variant
Dim varTime As Variant
Dim deg As Double
Dim sngRound As Single
Dim sngDefix As Single
Dim iSecond As Integer
Dim iMinute As Integer
Dim iHour As Integer
'現在の時間を代入します
'Time関数を毎回参照していると
'処理中に時間が進んでしまうで
'値が変動しないようにするため代入しています
varTime = Time
'現在の時間と前に保存していた時間を見比べます
'同じであれば、時間の針を動かす必要がないので、
'このプロシージャから出ます
If varTime = varTimeOld Then
Exit Sub
End If
'再度、時間を見比べるときに使う
varTimeOld = varTime
ラジアン値に変換するために使用する値
deg = 3.14159265358979 / 180
'秒、分、時間を代入します
iSecond = Second(varTime)
iMinute = Minute(varTime)
iHour = Hour(varTime) Mod 12
'秒針の針を動かす
sngRound = (iSecond * 6 - 90) * deg
Byou.X1 = Byou.X2 + Cos(sngRound) * 2000
Byou.Y1 = Byou.Y2 + Sin(sngRound) * 2000
'分針の針を動かす
sngDefix = iSecond / 10 '分針は、60秒/6度 → 10秒に1度進む
sngRound = (iMinute * 6 - 90 + sngDefix) * deg
Hun.X1 = Hun.X2 + Cos(sngRound) * 1900
Hun.Y1 = Hun.Y2 + Sin(sngRound) * 1900
'時針の針を動かす
sngDefix = iMinute / 2 '時針は、60分/30度 → 2分に1度進む
sngRound = (iHour * 30 - 90 + sngDefix) * deg
Ji.X1 = Ji.X2 + Cos(sngRound) * 1000
Ji.Y1 = Ji.Y2 + Sin(sngRound) * 1000
End Sub
このプログラムはTimeでシステム時計の時間をとって動かしているのですが
Timeを使わずに独立して動かしたいのですがどうすればいいか分かりません。
教えていただけないでしょうか、よろしくお願い致します。
>Timeを使わずに独立して動かしたいのですが
その前に、時間を調べて計算して描画するのではなく、1秒毎に表示する
ようにし、前もって表示位置は計算しておくようにするべきかと思います。
(計算しなくてもどの位置に表示すべきかが解っているはず)
(同じ計算は何度もしない、定数値でもっておく deg = 3.14159265358979 / 180 然り)
1.秒針は、6度づつ位置を変える
2.分針は10秒に1回書き換える
3.....
このように前もって次の表示位置を計算しておいて、時間が来たら
その位置に表示するようにすれば、プログラムがもっと軽くなるのでは。
>Timeを使わずに独立して動かしたいのですが
何か問題があるのでしょうか? それによっても変わってくるかと?
Time 関数 と Loop を使ったり、Win32API 関数を使う等がありますが。
ご意見ありがとうございます。参考にさせてもらいます。
TIMEを使わず動かしたいのには
電波時計キット→システム時計を合わして→VBで作ったアナログ時計
というふうな感じでプログラムを作ったのですが…
電波時計キット→VBで作ったアナログ時計 みたいにシステム時計を介さずに作りたいからです。
その為にはアナログ時計の針を動かすプログラムが必要となると思いまして…
どうぞよろしくお願い致します。
ツイート | ![]() |