settimerとkilltimer

ActiveBasicでのプログラミングでわからないこと、困ったことなどがあったら、ここで質問してみましょう(質問を行う場合は、過去ログやWeb上であらかじめ問題を整理するようにしましょう☆)。
返信する
メッセージ
作成者
初心者

settimerとkilltimer

#1 投稿記事 by 初心者 »

開始ボタンでタイマーを00000秒から開始。
終了ボタンでタイマーを止める。
その時間をエデッタボックスに表示。

settimerとkilltimer命令で出来そうなんですが、書き方がよくわかりません。
教えてください。
konisi
記事: 893
登録日時: 2005年7月25日(月) 13:27
お住まい: 埼玉県東松山市
連絡する:

#2 投稿記事 by konisi »

コード: 全て選択

'-----------------------------------------------------------------------------
'  イベント プロシージャ
'-----------------------------------------------------------------------------
' このファイルには、ウィンドウ [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を主として使用。

に署名を書き換えて欲しいと言われたので暇だしやってみるテスト。
初心者

#3 投稿記事 by 初心者 »

konisi様、レスをありがとうございます。
でも、うまく動作しません。

SetTimer(hMainWnd,1,1000,AddressOf(Timer))  =
MainWnd.sbp(46) - [警告] "SetTimer"の第4パラメータが、VoidPtrからDWordに強制変換されています。

Time++  =
MainWnd.sbp(50) - 文法が間違っています

上記でした。
全くの初心者でして勉強中です。
宜しくお願いします。
Mario2
記事: 205
登録日時: 2005年5月31日(火) 13:31
お住まい: 大阪市
連絡する:

#4 投稿記事 by Mario2 »

konisiさんではないですが、

>SetTimer(hMainWnd,1,1000,AddressOf(Timer))  =
> MainWnd.sbp(46) - [警告] "SetTimer"の第4パラメータが、VoidPtrからDWordに強制変換されています。
これは"警告"なので一応大丈夫です。

> Time++  =
> MainWnd.sbp(50) - 文法が間違っています

これは
Time=Time+1
とすれば大丈夫かと。
確か、"Time++"と言う記述はAB5から可能だったような気がします。
多分初心者さんはAB4を使っているため、"文法が間違っています"ってエラーが出るんだと思います。
のぶあや
記事: 22
登録日時: 2006年10月14日(土) 10:52
お住まい: 愛知

#5 投稿記事 by のぶあや »

>>SetTimer(hMainWnd,1,1000,AddressOf(Timer))  =
>> MainWnd.sbp(46) - [警告] "SetTimer"の第4パラメータが、VoidPtrからDWordに強制変換されています。
>これは"警告"なので一応大丈夫です。
補足ですが、DWord型にキャストすることで[警告]が消せます。

コード: 全て選択

SetTimer(hMainWnd,1,1000,AddressOf(Timer) As DWord)
これはDWord型(32bit整数値)の引数に関数ポインタ(32bit)を代入しているということで、コンパイラが「型が違うのでバグではないか?」とユーザーに警告しているのです。

今回の場合は両方とも32bit整数値で表されているので問題ないのですが、Word型(16bit整数値)にDWord型(32bit整数値)を代入したり、Long型(符号付32bit整数値)に符号無32bit整数値を代入したりする場合は、正常に代入されない場合があります(処理としては正常に行われる)。

前者(Word=DWord)の例え 後者の例え
MML
記事: 154
登録日時: 2006年5月02日(火) 16:27

#6 投稿記事 by MML »

>確か、"Time++"と言う記述はAB5から可能だったような気がします。
AB4でもOKですよ???
konisi
記事: 893
登録日時: 2005年7月25日(月) 13:27
お住まい: 埼玉県東松山市
連絡する:

#7 投稿記事 by konisi »

あぁ、Time++と言う表記はAB4.2系から可能になったものだったと思います。
AB3系やAB4.1系では使えなかったかと。
Website→http://web1.nazca.co.jp/himajinn13sei/top.html
ここ以外の場所では「暇人13世」というHNを主として使用。

に署名を書き換えて欲しいと言われたので暇だしやってみるテスト。
初心者

#8 投稿記事 by 初心者 »

konisiさん、Mario2さん、のぶあやさん、ゆちポンさん。
動作しました。ありがとうございました。
私、ヘルプのトピックで単語?(文法)を見ながら書いていますが、
どう考えれば理解できるのでしょうかね。
頭が固い???(泣)
返信する