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


HSPTV!掲示板


未解決 解決 停止 削除要請

2018
0924
Nanashinogon変数の値が勝手に変わる...うぅ、恐ろしぃ!2未解決


Nanashinogon

リンク

2018/9/24(Mon) 00:14:42|NO.85427

どうも、厨房のNanashinogonです。
今作っているソフトで不可解な現象が起きてですね...
どうも変数の値が勝手にかわるんですよ!
使用しているOSが古いからかも...
もしかして、HSPのバグ!?...わからん!
誰か、助けてくださいいいい!

wsx=640 : wsy=480 opt_cpured=0 ;Opt (opt_~) ; cpured CPU負担軽減(CPU load reduction)。計算→表示関連(予定) ;wID ; 0=main (変数:w~) ; 1=move,size ; 2=massage,dialog (変数:w2~) ; 3=icon ;メモ ; ネットに接続をうながすようなものは、ラベルを動作別にラベル分けする bgscr 0 , wsx , wsy , 0 , -1 , -1 #include "form_decode.as" #define wh color 255,255,255 #define bl color : boxf wt="2ch compact viewer" search="" url="@top" ch="2ch" repeat redraw 0 ;基本ここから gosub *win gosub *tit gosub *depinfo ;ネットここから gosub *nurl ; if wnodraw=0:redraw 1 wait 1 getkey k,27 if k>0:end loop ;--------------------------------------------------------------------------------------------------- *nurl ;URL ;丸区切り color circle 8 , 50 , 12 , 54 , 1 line 14,51,wsx-16,51 circle wsx-8 , 50 , wsx-12 , 54 , 1 ;ちゃんねる color 50,50,50:boxf 2,54,wsx-2,75 gradf 4,56,40,18,1,$ff0000,$ffffff wh: font "MS UI Gothic",17,1 pos 8,56 mes ch ;URL入力、表示 font "MS UI Gothic",17 ;フォント変更 line 50,56,50,72 pos 55,56:mes url return ;--------------------------------------------------------------------------------------------------- *win sysfont 17 ;文字はsysfont 、先に命令 ;ウインドウ ;背景表示 if wnodraw=0{ color 100,100,100:boxf color 200,200,200:boxf 2,2,ginfo(10)-2,ginfo(11)-2 } ;ウインドウ移動、リサイズ if ginfo_act=0{ ;w0がアクティブなときにだけ ;キー受付 getkey k,1 ;動かす if mousey<27 &wsizem=0 &wsizex=0&wsizey=0&mousex<wsx-100& k>0 &wmove=0 :wmove=1 if wmove=1&k>0 { smx=mousex smy=mousey bgscr 1 , wsx , wsy , 2 , ginfo(0)-smx,ginfo(1)-smy wmove=2 } if wmove=2&k>0 : width ,,ginfo(0)-smx,ginfo(1)-smy if wmove=2&k=0 { gsel 1,-1 gsel 0 width ,,ginfo(0)-smx,ginfo(1)-smy wmove=0 } ;サイズを変える、手動 ;右端 if mousex>wsx-5&wsizex=0&wsizey=0&k>0&wsizem=0 :wsizex=1 :wnodraw=1 ;wnodraw.. redrawの制御用 if wsizex=1&k>0 { wsx=ginfo(0) if wsx>100:bgscr 0 , wsx,wsy if wsx<150:wsx=200:bgscr 0 , wsx,wsy } if wsizex=1&k=0 :wsizex=0 :wnodraw=0 ;下端 if mousey>wsy-5&wsizey=0&wsizex=0&k>0&wsizem=0 :wsizey=1 :wnodraw=1 ;wnodraw.. redrawの制御用 if wsizey=1&k>0 { wsy=ginfo(1) if wsy>100:bgscr 0 ,wsx,wsy if wsy<150:wsy=200:bgscr 0 ,wsx,wsy } if wsizey=1&k=0 :wsizey=0 :wnodraw=0 ;自動 ;サイズを変える ;左上にウインドウを動かす→最大化 if ginfo(4)<20&ginfo(5)<20&k>0&wsizem=0{ wsizeautoi+1 if wsizeautoi>20{ swsx=wsx :wsx=ginfo(20) swsy=wsy :wsy=ginfo(21)-20 bgscr 0 , wsx,wsy width ,,0,0:wsizem=1 } if k=0 : wsizeautoi=0 } } ;コントロール if k>0&wnodraw=0{ ;ウインドウ関連 ;手動 if mousex>wsx-150&mousey<27{ ;X if mousex>wsx-27&mousex<wsx-11&mousey>10&mousey<26:gosub *quit ;口 if mousex>wsx-49&mousey>11&mousex<wsx-32&mousey<25&sizem=0{ swsx=wsx :wsx=ginfo(20) swsy=wsy :wsy=ginfo(21)-20 bgscr 0 , wsx,wsy width ,,0,0:wsizem=1 } if mousex>wsx-49&mousey>11&mousex<wsx-32&mousey<25&wsizem=1{ wsx=swsx wsy=swsy bgscr 0 ,640 ,480 wsizem=0 } ;- if mousex<wsx-54&mousey>11&mousex>wsx-71&mousey<25:gosub *wsized ;tab////////// if mousex>wsx-76&mousey>11&mousex<wsx-93&mousey<25: } ;ページ関連 if mousey<30+18&wmove=0{ /* boxf 46,30,50+50,30+18 boxf 100+6,30,114+70,30+18 boxf 114+70+6,30,114+70+70,48 boxf 114+70*2+6,30,114+70*2+75,48 boxf 114*3-6,30,114*3+35,48 */ /* color boxf wsx-10,10,wsx-28,26 boxf wsx-31,10,wsx-50,26 boxf wsx-53,10,wsx-72,26 boxf wsx-75,10,wsx-94,26 */ if mousex>46&mousey>30&mousex<50*2&mousey<30+18:url="@top" if mousex>100+6&mousey>30&mousex<114+70&mousey<30+18:url="@category" if mousex>114+70+6&mousex<114+70*2&mousey>30&mousey<30+18:url="@monafind" if mousex>114+70*2+6&mousex<114+70*2+75&mousey>30&mousey<30+18:url="@pic" if mousex>114*3-6&mousex<114*3+35&mousey>30&mousey<30+18:url="@hosisure" } ;検索関連 if mousey<30+18&wmove=0{ /* color 50,200,255:boxf 337+47,30,347+47+80,30+18 color 200,200,200:boxf 380+47*2,30,wsx-70,30+18 color 75,75,200:boxf wsx-70,30,wsx-10,30+18 */ if mousex>337+47&mousey>30&mousex<473&mousey<30+18:gosub *searchtype if mousex>380+47*2&mousey>30&mousex<wsx-70&mousey<30+18:gosub *wsearch } } ; ;表示 //// ;コントローっる枠 ;0状態1 黒枠 color boxf wsx-10,10,wsx-28,26 boxf wsx-31,10,wsx-50,26 boxf wsx-53,10,wsx-72,26 boxf wsx-75,10,wsx-94,26 ;0状態2 色付け color 255,100,100:boxf wsx-11,11,wsx-27,25 color 200,200,200:boxf wsx-32,11,wsx-49,25 wh:boxf wsx-54,11,wsx-71,25 color 100,100,255:boxf wsx-76,11,wsx-93,25 ;0状態3 絵 color line wsx-11,11,wsx-26,24 line wsx-11,25,wsx-26,11 boxf wsx-34,13,wsx-47,23 color 200,200,200:boxf wsx-35,16,wsx-46,22 color:boxf wsx-68,22,wsx-60,24 wh pos wsx-90,11 :mes wno ;wno..ウインドウの数 ;ページ ;元に戻す・やり直し color pos 10,35:mes"←" pos 28,35:mes"→" ;1クロ設置 ; 縦は30から ; 横幅 位置+6+50+適当 ,縦幅 48 ,間8 color 80,80,80 boxf 46,30,50+50,30+18 boxf 100+6,30,114+70,30+18 boxf 114+70+6,30,114+70+70,48 boxf 114+70*2+6,30,114+70*2+75,48 boxf 114*3-6,30,114*3+35,48 ;2色付け color 255,100,100 boxf 47,31,50+49,30+17 color 240,240,240 boxf 100+7,31,114+69,30+17 color 150,150,150 boxf 114+70+7,31,113+70+70,47 color 50,230,100 boxf 115+70*2+6,31,113+70*2+75,47 color 70,70,255 boxf 337,31,376,47 ;3白文字 wh:font "",15,1 pos 56,32:mes"トップ" pos 107+11,32:mes"カテゴリ" pos 114+77,32:mes"探しモナー" pos 115+70*2+12,32:mes"ピクチャ" pos 337,32:mes"★スレ" ;4クロ文字 color:font "",14,1 pos 56,32:mes"トップ" pos 107+11,32:mes"カテゴリ" pos 115+70*2+12,32:mes"ピクチャ" ;検索 font "",15 color 50,200,255:boxf 337+47,30,347+47+80,30+18 wh:boxf 380+47*2,30,wsx-70,30+18 color 50,50,50:boxf wsx-70,30,wsx-10,30+18 color 75,140,200:boxf wsx-68,32,wsx-12,30+16 color:pos 337+50,32 if wseachtype=0:mes"スレタイ検索" if wseachtype=1:mes"本文検索 if wseachtype=2:mes"投稿者検索" wh:pos wsx-56,32:mes"検索" font "",13,2 pos 380+47*2,34 color:mes search //// return *tit ;アイコン buffer 3 picload "logo.bmp" gsel 0 :pos 8,8 gzoom 25,25,3 ;タイトル color:font "MS UI Gothic",15,1 pos 33,11 mes wt:title wt return *depinfo color 230,230,230:boxf 0,100,400,300 pos 0,100:color mes "\n\nマウス座標:"+mousex+","+mousey mes "セーブマウス座標:"+smx+","+smy mes "mouse:"+ginfo(0)+","+ginfo(1) mes "ウインドウサイズ"+wsx+","+wsy mes "sws:"+swsx+","+swsy mes "\nSCR:"+ginfo(20)+","+ginfo(21) mes"MOVE:"+wmove+" SIZEMODE:"+wsizem mes"WNODRAW:"+wnodraw color 255,0,0 line wsx-100,0,wsx-100,100 mes "wsx-100" return *wsized ;最小化 bgscr 0 , 1,1,0,0 redraw 0 repeat if ginfo_act!0:break wait 1 loop wait repeat if ginfo_act=0:break wait 1 loop bgscr 0 , wsx,wsy gsel 0,1 return *searchtype bgscr 2,100,100,0,ginfo(0)+10,ginfo(1)+10 gsel 2,2 title "続き" if ginfo(6)>ginfo(20):width ,,ginfo(20)-200 color 80,80,80:boxf color:boxf 4,4,24,20:boxf 28,4,196,20 sysfont 17 wh:pos 10,8:mes"←" pos 32,8:mes "検索の仕方" pos 4,26 objsize 90 listbox wsearchtype,50,"スレタイ検索\n本文検索\n投稿者検索" repeat ;戻るボタン getkey k,1 if mousex>4&mousey>4&mousex<24&mousey<20{ wh:boxf 4,4,24,20 color pos 10,8:mes"←" if k>0:break } else { color:boxf 4,4,24,20 pos 10,8:wh:mes"←" } redraw 1 wait 1 loop gsel 2,-1 gsel 0,1 return *wsearch bgscr 2,300,120,0,ginfo(0)+10,ginfo(1)+10 gsel 2,2 title "検索" if ginfo(6)>ginfo(20):width ,,ginfo(20)-300 color 100,100,100:boxf color 200,200,220:boxf 1,1,299,119 color 50,50,150:boxf 4,4,24,20:boxf 28,4,296,20 sysfont 17 wh:pos 10,8:mes"←" pos 32,8:mes "検索" pos 4,26 mesbox search,290,50,5,200 color:pos 10,85 mes"Escキーを押すと戻ります。改行はしないでね\n(200文字以内)" repeat ;戻るボタン getkey k,1 getkey k2,27 if k2>0:wait 5:break if mousex>4&mousey>4&mousex<24&mousey<20{ wh:boxf 4,4,24,20 color pos 10,8:mes"←" if k>0:break } else { color 80,80,80:boxf 4,4,24,20 pos 10,8:wh:mes"←" } redraw 1 wait 1 loop gsel 2,-1 gsel 0,1 return *quit ;終了 bgscr 2,200,100,0,ginfo(0),ginfo(1) title "2chcvの終了" if ginfo(6)>ginfo(20):width ,,ginfo(20)-200 color:boxf color 50,50,50:boxf 4,4,24,20:boxf 28,4,196,20 sysfont 17 wh:pos 10,8:mes"←" pos 32,8:mes "終了する" pos 12,26:mes"本当に終了しますか?" ;ボタン repeat redraw 0 getkey k,1 if mousex>12&mousey>100-26&mousex<100+12&mousey<100-8{ color 200,100,100:boxf 12,100-26,100+12,100-8 pos 18,100-22 color:mes">>終了" if k>0:end } else { color:boxf 12,100-26,100+12,100-8 wh line 12,100-14,12,100-8 line 12,100-8,100+12,100-8 pos 18,100-22 mes">>終了" } if mousex>4&mousey>4&mousex<24&mousey<20{ wh:boxf 4,4,24,20 color pos 10,8:mes"←" if k>0:break } else { color 80,80,80:boxf 4,4,24,20 pos 10,8:wh:mes"←" } redraw 1 wait 1 loop wait 5 gsel 2,-1 gsel 0,1 return ;開発中です、オープンソースではありません ;©Kouken Software 2018



この記事に返信する


Nanashinogon

リンク

2018/9/24(Mon) 00:17:45|NO.85428

>>>-----補足-----<<<
変数が勝手に変わると思い込んでいる場所はここです
>*win

>コントロール

>ウインドウ関連


;口 if mousex>wsx-49&mousey>11&mousex<wsx-32&mousey<25&sizem=0{ swsx=wsx :wsx=ginfo(20) swsy=wsy :wsy=ginfo(21)-20 bgscr 0 , wsx,wsy width ,,0,0:wsizem=1 } if mousex>wsx-49&mousey>11&mousex<wsx-32&mousey<25&wsizem=1{ wsx=swsx wsy=swsy bgscr 0 ,640 ,480 wsizem=0 }
の部分です、忘れてましたすんません(ペコ)



MillkeyStars

リンク

2018/9/24(Mon) 15:51:09|NO.85437

一度書き込みしたけど、そのあと詳しく調べてみたら、いろいろ問題がありすぎて書き込み消しました。


【問題点】
1.マウス座標の mousex および mousey は、ウィンドウを初期化と同時に 0 に初期化されます。
(ウィンドウサイズ変更などに bgscr を利用してると思いますが、その時点で mousex / mousey は 0 になりますのでバグの原因になります)
2.ウィンドウを最大化することがある場合は、最初から最大化されたサイズでウィンドウを作成しましょう。
(これも 1 の問題点と同じです)
3.座標を用いて処理をする場合、優先順位をつけてその処理が終わったらサブルーチンを抜けましょう。

if a == 0 : /*なんらかの処理*/ : a = 1 if a == 1 : /*なんらかの処理*/ : a = 0
if a = 0 での処理が終わっているのに、続けて if a = 1 の処理もしちゃってるのでバグの原因です。
【スクリプト抜粋】

;口 if mousex>wsx-49&mousey>11&mousex<wsx-32&mousey<25&sizem=0{ swsx=wsx :wsx=ginfo(20) swsy=wsy :wsy=ginfo(21)-20 bgscr 0 , wsx,wsy width ,,0,0:wsizem=1 } if mousex>wsx-49&mousey>11&mousex<wsx-32&mousey<25&wsizem=1{ wsx=swsx wsy=swsy bgscr 0 ,640 ,480 wsizem=0 }



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