AKIHIROさん、
処理中にクローズボックスを押されてから
元の処理を飛んだところからやり直すとい
うのならば、ソース内の
onexit goto *label
を、
onexit gosub *label
に
変えてサブルーチンジャンプを行わせれば
得策かと?
そのさい、処理に入ればある変数を何かに変更し、
onexitのとび先でそのある変数がその何かの数になったならば、
直ちにreturnし、処理を再開。
もし、onexitで飛ばずに処理が終了したならば、
ある変数を決めておいた値にする。(0など)
また、処理が終了し、onexitで飛んできたならば、
endで終わる。
以下、そのサンプル
/*上に示した方法のデモ。*/
onexit gosub *SubRoutinue /*問題のonexit*/
EndFlags=0 /*初期値*/
title "SampreProgram"
/*今回取り上げる時間のかかる処理は、
ネガ反転です。
取り上げたわけは、目で見やすく、
1dotごとの処理なので、そこそこ時間が
かかるからです。
ただの処理だなとしか見ないで結構です。
なので、処理部にはコメントは入れません。*/
/*時間のかかる処理、はじめっ*/
EndFlags=1 /*実行中の印をつける*/
dialog "bmp;*.gif;*.jpg;*.ico",16
if stat=0 {end} /*拒否されちゃーおしめいよう!*/
picload refstr
for x,0,ginfo_winx,1
for y,0,ginfo_winy,1
pget x,y
color ginfo_r^$FF,ginfo_g^$FF,ginfo_b^$FF
pset x,y
next
wait 1
next
/*処理終了*/
EndFlags=0 /*初期値に戻す。*/
dialog "処理終了"
stop
*SubRoutinue
if EndFlags=1 {
dialog "処理中です。\n処理を続行します。",1 /*これが出りゃー処理中*/
return
}else{
repeat /*念のためループ*/
end
loop
}