アナログ時計の針を動かすには?


ben  2007-01-19 02:47:12  No: 134902

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を使わずに独立して動かしたいのですがどうすればいいか分かりません。

教えていただけないでしょうか、よろしくお願い致します。


VBレスキュー(花ちゃん)  2007-01-19 18:48:26  No: 134903

>Timeを使わずに独立して動かしたいのですが
その前に、時間を調べて計算して描画するのではなく、1秒毎に表示する
ようにし、前もって表示位置は計算しておくようにするべきかと思います。
(計算しなくてもどの位置に表示すべきかが解っているはず)
(同じ計算は何度もしない、定数値でもっておく  deg = 3.14159265358979 / 180  然り)
1.秒針は、6度づつ位置を変える
2.分針は10秒に1回書き換える
3.....
このように前もって次の表示位置を計算しておいて、時間が来たら
その位置に表示するようにすれば、プログラムがもっと軽くなるのでは。

>Timeを使わずに独立して動かしたいのですが
何か問題があるのでしょうか?  それによっても変わってくるかと?
Time 関数 と Loop を使ったり、Win32API 関数を使う等がありますが。


ben  2007-01-20 03:35:51  No: 134904

ご意見ありがとうございます。参考にさせてもらいます。

TIMEを使わず動かしたいのには
電波時計キット→システム時計を合わして→VBで作ったアナログ時計
というふうな感じでプログラムを作ったのですが…

電波時計キット→VBで作ったアナログ時計  みたいにシステム時計を介さずに作りたいからです。
その為にはアナログ時計の針を動かすプログラムが必要となると思いまして…

どうぞよろしくお願い致します。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加