開始ボタンでタイマーを00000秒から開始。
終了ボタンでタイマーを止める。
その時間をエデッタボックスに表示。
settimerとkilltimer命令で出来そうなんですが、書き方がよくわかりません。
教えてください。
settimerとkilltimer
コード: 全て選択
'-----------------------------------------------------------------------------
' イベント プロシージャ
'-----------------------------------------------------------------------------
' このファイルには、ウィンドウ [MainWnd] に関するイベントをコーディングします。
' ウィンドウ ハンドル: hMainWnd
' TODO: この位置にグローバルな変数、構造体、定数、関数を定義します。
Dim Time As Long
Dim StopFlag As Long
'-----------------------------------------------------------------------------
' ウィンドウメッセージを処理するためのコールバック関数
Function MainWndProc(hWnd As HWND, dwMsg As DWord, wParam As WPARAM, lParam As LPARAM) As DWord
' TODO: この位置にウィンドウメッセージを処理するためのコードを記述します。
' イベントプロシージャの呼び出しを行います。
MainWndProc=EventCall_MainWnd(hWnd,dwMsg,wParam,lParam)
End Function
'-----------------------------------------------------------------------------
' ここから下は、イベントプロシージャを記述するための領域になります。
Sub MainWnd_Destroy()
timer_DestroyObjects()'プロジェクト名をtimerにしたためこの名前になった。適切なものに変更しておくこと。
PostQuitMessage(0)
End Sub
Sub MainWnd_CommandButton1_Click()
If StopFlag=1 then Exit Sub
StopFlag=1
Time=0
SetWindowText(GetDlgItem(hMainWnd,EditBox1),Str$(Time))
SetTimer(hMainWnd,1,1000,AddressOf(Timer))
End Sub
Sub Timer()
Time++
SetWindowText(GetDlgItem(hMainWnd,EditBox1),Str$(Time))
End Sub
Sub MainWnd_CommandButton2_Click()
KillTimer(hMainWnd,1)
StopFlag=0
End Sub
Website→http://web1.nazca.co.jp/himajinn13sei/top.html
ここ以外の場所では「暇人13世」というHNを主として使用。
に署名を書き換えて欲しいと言われたので暇だしやってみるテスト。
ここ以外の場所では「暇人13世」というHNを主として使用。
に署名を書き換えて欲しいと言われたので暇だしやってみるテスト。
konisiさんではないですが、
>SetTimer(hMainWnd,1,1000,AddressOf(Timer)) =
> MainWnd.sbp(46) - [警告] "SetTimer"の第4パラメータが、VoidPtrからDWordに強制変換されています。
これは"警告"なので一応大丈夫です。
> Time++ =
> MainWnd.sbp(50) - 文法が間違っています
これは
Time=Time+1
とすれば大丈夫かと。
確か、"Time++"と言う記述はAB5から可能だったような気がします。
多分初心者さんはAB4を使っているため、"文法が間違っています"ってエラーが出るんだと思います。
>SetTimer(hMainWnd,1,1000,AddressOf(Timer)) =
> MainWnd.sbp(46) - [警告] "SetTimer"の第4パラメータが、VoidPtrからDWordに強制変換されています。
これは"警告"なので一応大丈夫です。
> Time++ =
> MainWnd.sbp(50) - 文法が間違っています
これは
Time=Time+1
とすれば大丈夫かと。
確か、"Time++"と言う記述はAB5から可能だったような気がします。
多分初心者さんはAB4を使っているため、"文法が間違っています"ってエラーが出るんだと思います。
>>SetTimer(hMainWnd,1,1000,AddressOf(Timer)) =
>> MainWnd.sbp(46) - [警告] "SetTimer"の第4パラメータが、VoidPtrからDWordに強制変換されています。
>これは"警告"なので一応大丈夫です。
補足ですが、DWord型にキャストすることで[警告]が消せます。
これはDWord型(32bit整数値)の引数に関数ポインタ(32bit)を代入しているということで、コンパイラが「型が違うのでバグではないか?」とユーザーに警告しているのです。
今回の場合は両方とも32bit整数値で表されているので問題ないのですが、Word型(16bit整数値)にDWord型(32bit整数値)を代入したり、Long型(符号付32bit整数値)に符号無32bit整数値を代入したりする場合は、正常に代入されない場合があります(処理としては正常に行われる)。
前者(Word=DWord)の例え
>> MainWnd.sbp(46) - [警告] "SetTimer"の第4パラメータが、VoidPtrからDWordに強制変換されています。
>これは"警告"なので一応大丈夫です。
補足ですが、DWord型にキャストすることで[警告]が消せます。
コード: 全て選択
SetTimer(hMainWnd,1,1000,AddressOf(Timer) As DWord)
今回の場合は両方とも32bit整数値で表されているので問題ないのですが、Word型(16bit整数値)にDWord型(32bit整数値)を代入したり、Long型(符号付32bit整数値)に符号無32bit整数値を代入したりする場合は、正常に代入されない場合があります(処理としては正常に行われる)。
前者(Word=DWord)の例え
[ここをクリックすると内容が表示されます]
とした場合、デバッグウィンドウには
と表示されます。
65537を16進数で表すと「01 00 01」となり、それぞれの型に代入をすると
DWord型 00 01 00 01=65537(正常に代入される)
Word型 ** ** 00 01=1(16bitしかないため、*の部分の数値は切り捨てられる)
となるからです。
後者の例えコード: 全て選択
Dim _DWord As DWord, _Word As Word
_DWord=65537
_Word=_DWord
OutputDebugString2(Str$(_DWord))
OutputDebugString2(Str$(_Word))
コード: 全て選択
65537
1
65537を16進数で表すと「01 00 01」となり、それぞれの型に代入をすると
DWord型 00 01 00 01=65537(正常に代入される)
Word型 ** ** 00 01=1(16bitしかないため、*の部分の数値は切り捨てられる)
となるからです。
[ここをクリックすると内容が表示されます]
とした場合、デバッグウィンドウには
と表示されます。
2147483648を2進数で表すと「10000000 00000000 00000000 00000000」となり、それぞれの型に代入をすると
DWord型 10000000 00000000 00000000 00000000(負数は無いので正常)
Long型 10000000 00000000 00000000 00000000(最上位ビットは負数を意味するので数値が壊れる)
となるからです。
この説明では分かりづらいかも知れないので「2進数 負数」、「2進数 補数」などで検索すると分かりやすい説明が見つかると思います。
コード: 全て選択
Dim _DWord As DWord, _Long As Long
_DWord=2147483648
_Long=_DWord
OutputDebugString2(Str$(_DWord))
OutputDebugString2(Str$(_Long))
コード: 全て選択
2147483648
-2147483648
2147483648を2進数で表すと「10000000 00000000 00000000 00000000」となり、それぞれの型に代入をすると
DWord型 10000000 00000000 00000000 00000000(負数は無いので正常)
Long型 10000000 00000000 00000000 00000000(最上位ビットは負数を意味するので数値が壊れる)
となるからです。
この説明では分かりづらいかも知れないので「2進数 負数」、「2進数 補数」などで検索すると分かりやすい説明が見つかると思います。
あぁ、Time++と言う表記はAB4.2系から可能になったものだったと思います。
AB3系やAB4.1系では使えなかったかと。
AB3系やAB4.1系では使えなかったかと。
Website→http://web1.nazca.co.jp/himajinn13sei/top.html
ここ以外の場所では「暇人13世」というHNを主として使用。
に署名を書き換えて欲しいと言われたので暇だしやってみるテスト。
ここ以外の場所では「暇人13世」というHNを主として使用。
に署名を書き換えて欲しいと言われたので暇だしやってみるテスト。