ページ 11

SetTimerで

Posted: 2005年9月22日(木) 17:55
by Mario2
Sub 識別名_Timer(TimerID As DWord)

End Sub
と言うのを「識別名ファイル.abp」以外のファイルに記入すると動作しないのですが、これは仕様なのでしょうか?
(MainWnd.sbpに通常は記入しますが、新しくWindowTimer.abpにSub 識別名_Timer~と記入してSetTimerで呼び出しても動作しない)

処理が多いので別のファイルに記入して見やすくしたいのですが・・・

Re: SetTimerで

Posted: 2005年9月22日(木) 21:38
by てふろん
こんばんは、てふろんです。

恐らく仕様でしょう。

MainWnd.sbp しか見ないのはたしかに不便ではありますが、
callback.wbp はプロジェクトエディタで管理されていると思うので、
ファイル全てを字句検索して callback.wbp の更新をするとなると、
場合によってはコンパイル速度にかなり影響がでそうな気がします。

(コンパイラとは別なので字句解析が二度手間になる可能性が...)

MainWnd.sbp が肥大化するのが問題なのでしたら、WM_TIMER に限らず、
イベントプロシージャからそのまま別のプロシージャを呼び出すよう、
コードを書きかえる事で問題は解決するかなぁとも思います。

コード: 全て選択


' MainWnd.sbp
Sub MainWnd_Create( ByRef CreateStruct As CREATESTRUCT )
OnCreate(CreateStruct)
End Sub

Sub MainWnd_Timer( TimerID As DWord )
OnTimer( TimerID )
End Sub

' 別ファイル1
Sub OnCreate( ByRef CreateStruct As CREATESTRUCT )
End Sub

' 別ファイル2
Sub OnTimer( TimerID As DWord )
End Sub
これだけでも MainWnd.sbp はすっきりすると思います。

Re: SetTimerで

Posted: 2005年9月22日(木) 22:01
by Mario2
>

コード: 全て選択


> ' MainWnd.sbp
> Sub MainWnd_Create( ByRef CreateStruct As CREATESTRUCT )
> OnCreate(CreateStruct)
> End Sub
> 
> Sub MainWnd_Timer( TimerID As DWord )
> OnTimer( TimerID )
> End Sub
> 
> ' 別ファイル1
> Sub OnCreate( ByRef CreateStruct As CREATESTRUCT )
> End Sub
> 
> ' 別ファイル2
> Sub OnTimer( TimerID As DWord )
> End Sub
> 
>
> これだけでも MainWnd.sbp はすっきりすると思います。

そうですね、そうしてみます。
てふろんさん、ありがとうございます。

Re: SetTimerで

Posted: 2005年9月23日(金) 00:13
by Tomorrow
> (MainWnd.sbpに通常は記入しますが、新しくWindowTimer.abpにSub 識別名_Timer~と記入してSetTimerで呼び出しても動作しない)
とりあえず.abpを.sbpに変えて(これは本質的ではないですが..)、
プロジェクトビュー→[File]タブの[Source Files]を右クリック→[ファイルを挿入]で先ほどの.sbpファイルを指定すればOKだと思います。

Re: SetTimerで

Posted: 2005年9月23日(金) 00:25
by Mario2
Tomorrowさん、回答ありがとうございます。
しかし、動作しませんでした。(AB 4.10.00)

やっぱりMainWnd.sbp経由で書くしかないのですかね・・・

Re: SetTimerで

Posted: 2005年9月23日(金) 00:45
by Tomorrow
> Tomorrowさん、回答ありがとうございます。
> しかし、動作しませんでした。(AB 4.10.00)
>
> やっぱりMainWnd.sbp経由で書くしかないのですかね・・・
よく調べずに答えてしまってすみません。こちらでも動作しなかったです。
やはり***_Timer()などのイベント処理関数は***.sbpファイルに書くしかないみたいです。(てふろん さんが答えているように***.sbpから関数を削除するとCallback.wbpからの呼び出し部分も削除されるため)