HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2009
0421
hspailネストエラー7解決


hspail

リンク

2009/4/21(Tue) 11:38:52|NO.24731

下記のスクリプトを実行するとネストエラー(9)で終了してしまします。
エラーの原因はわかるのですが対処法がわかりません。
スクリプト内のコメントを参照して下さい。

#include "user32.as" #define WM_TIMER 0x0113 #module #deffunc enterloop repeat title ""+cnt wait 1 loop return #global SetTimer hWnd, 1, 50, 0 oncmd gosub *timer, WM_TIMER stop *timer ; ここで enterloop 内のループを一度抜けたい ; そしてもう一度 enterloop を実行 enterloop return
わかる方居ましたら教えていただけるとありがたいです。
よろしくお願いします。



この記事に返信する


SYAM

リンク

2009/4/21(Tue) 11:58:48|NO.24732

やりたいことがよくわからないので適切かわかりませんが…

stopの代わりに enterloop 命令の処理に相当するループを用意しておいて、
そのカウンタを *timer でリセットするようにしては どうでしょう?


#include "user32.as" #define WM_TIMER 0x0113 SetTimer hWnd, 1, 50, 0 oncmd gosub *timer, WM_TIMER lpcount = 0 *@ title ""+lpcount wait 1 lpcount++ goto *@b *timer oncmd 0 lpcount=0 oncmd 1 return



hspail

リンク

2009/4/21(Tue) 12:40:14|NO.24734

SYAMさん ありがとうございます。
いいアイディアだと思いますが、理由は説明が難しいのですが、enterloop命令の中でループさせたいと思っています。



荒河 軒持

リンク

2009/4/21(Tue) 12:56:35|NO.24735

こんなのどう?

#include "user32.as"
#define WM_TIMER 0x0113 #module #deffunc enterloop str prm1 repeat prm1 title ""+cnt wait 1 loop return #global SetTimer hWnd, 1, 50, 0 oncmd gosub *timer, WM_TIMER stop *timer ; とりあえず、50回で enterloop 内のループを一度抜ける。 enterloop 50 return



hspail

リンク

2009/4/21(Tue) 13:08:46|NO.24737

荒河 軒持さん、ありがとうございます。その発想はありませんでした。

このサンプルでは簡略化するために WM_TIMER を使っているのでこの方法はアリだと思いますが、
実際には WM_MOUSEMOVE を使っているので、いつ enterloop を呼び出すのか不確定なのです。
次の enterloop が来るまではループを続けさせたいので、この方法は使えません。



SYAM

リンク

2009/4/21(Tue) 13:54:32|NO.24738

これでは?(-ω-`

#include "user32.as" #define WM_TIMER 0x0113 #module #deffunc resetloop reset=1 return #deffunc enterloop repeat reset=0 repeat title ""+cnt if(reset):break wait 1 loop loop return #global SetTimer hWnd, 1, 50, 0 oncmd gosub *timer, WM_TIMER enterloop stop *timer resetloop return



hspail

リンク

2009/4/21(Tue) 15:20:03|NO.24740

>SYAMさん
おおっ! できました!!

最初は↓のようにでやっていたのですが、エラーが出てしまって……

#include "user32.as" #define WM_TIMER 0x0113 #module #deffunc breakloop br = 1 return #deffunc enterloop br = 0 repeat title ""+cnt if br = 1 : break wait 1 loop return #global SetTimer hWnd, 1, 50, 0 oncmd gosub *timer, WM_TIMER stop *timer breakloop enterloop return

回答して下さった皆さんありがとうございました!(>o<)



osakana

リンク

2009/4/22(Wed) 00:58:53|NO.24755

一応原型に近い形で出来た様なので
解決後ですが貼っておきます。

#include "user32.as" #define WM_TIMER 0x0113 #module #deffunc enterloop repeat title ""+cnt wait 1 loop return #global SetTimer hWnd, 1, 50, 0 oncmd gosub *timer, WM_TIMER stop *timer if f :return f++ enterloop f-- return
上のサンプルでは f-- は無くても大丈夫です。
(enterloop 内の return から戻るような処理が有る場合だけ必要)



ONION software Copyright 1997-2023(c) All rights reserved.