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


HSPTV!掲示板


未解決 解決 停止 削除要請

2015
0823
MitukiRTAストップウォッチ的なやつにLAP機能をつけてください。9解決


Mituki

リンク

2015/8/23(Sun) 14:33:13|NO.71002

タイトルどおり、LAP機能をつけてほしいんです。

goto *soa *dot cc-- goto *soa stop *soa time = strf("%02d:", aa) + strf("%02d:", bb) + strf("%02d", cc) title ""+time+" stoping" screen 0,250,500 pos 25,25 objsize 80,20 font "メイリオ",50 color 255,10,10 time = strf("%02d:", aa) + strf("%02d:", bb) + strf("%02d", cc) mes time pos 0,0 button"START",*start button"RESET",*reset stop *start screen 0,500,500 objsize 80,20 button"STOP",*dot repeat redraw 0 color 255,255,255:boxf color 0,0,0 pos 25,25 font"メイリオ",50 color 10,10,255 time = strf("%02d:", aa) + strf("%02d:", bb) + strf("%02d", cc) mes time title ""+time+" starting" cc++ if cc=60 :bb++ :cc=0 if bb=60 :aa++ :bb=0 redraw 1 wait 100 loop stop *reset aa=0:bb=0:cc=0 goto *soa stop
47行です



この記事に返信する


葡萄色

リンク

2015/8/23(Sun) 21:10:19|NO.71009

自分で書いてください。
プログラミングというのは自分でプログラムを実際に書いて身に付くものです。
目的のプログラムを組むにはどうしたら良いか検索サイトで検索してみてください。
幸い、HSPは大変参考資料が豊富ですので割とすぐに問題が解決すると思います。

とにかく、何も調べず、考えず、人に聞くだけというのは自身の成長を妨げる原因となるのでやめましょう。



Noa

リンク

2015/8/23(Sun) 21:11:02|NO.71010

質問する際はもう少しどこがどう分からないのかを挙げたほうが回答者に分かりやすくなるのでいいです。
この場合はこのようにAPIでタイマーを使って実装するのがいいかと思います。
サンプルなのでつくりは甘いです。後は自分でしてください。

#define INTSIZE 4 //整数のバイト数 #define WM_TIMER $00000113//一定の時間ごとにウィンドウに来るメッセージ #define SW_SHOW 5 #define SW_HIDE 0 #uselib "user32.dll" #func SetTimer "SetTimer" int,int,int,sptr//タイマー #func KillTimer "KillTimer" int,int #func ShowWindow "ShowWindow" int,int dim nanshuu dim shuuhozon shuuhozon=5 dim jikan,3 //今の時間 dim jikanshuu,shuuhozon,3 //各周ごとの時間(時、分、秒) dim jikanshuub,shuuhozon,3//各周ごとの時間(コピー用) dim jikangoukei,3 //それまでの時間の合計 sdim jikanmoji,128 sdim kekka,10240 dim handles,7 nanshuu=1 screen 0,250,250,screen_hide pos 0,0 objsize 80,20 button "START", *start handles(stat)=objinfo_hwnd(stat) button gosub "RESET", *reset handles(stat)=objinfo_hwnd(stat) pos 0,0 button gosub "STOP", *tomeru handles(stat)=objinfo_hwnd(stat) button gosub "1周目",*shuume handles(stat)=objinfo_hwnd(stat) pos 80,ginfo_winy-20 button gosub "周まで記録する",*shuukiroku handles(stat)=objinfo_hwnd(stat) pos 0,ginfo_winy-20 input shuuhozon handles(stat)=objinfo_hwnd(stat) pos 0,ginfo_winy-120 mesbox kekka,ginfo_winx,100,0 handles(stat)=objinfo_hwnd(stat) gosub *tomeru oncmd gosub *jikanhyouji,WM_TIMER gsel 0,1 stop *start ShowWindow handles(2),SW_SHOW ShowWindow handles(3),SW_SHOW foreach handles if cnt==2 | cnt==3:continue ShowWindow handles(cnt),SW_HIDE loop gosub *jikanhyouji SetTimer hwnd , 1 , 1000 , 0 stop *jikanhyouji //複数タイマーが使いたかったらwparamを参照してください jikanmoji=strf("%02d:", jikan(0)) + strf("%02d:", jikan(1)) + strf("%02d", jikan(2)) color 255,255,255 boxf pos 25,25 font "メイリオ",50 color 10,10,255 mes jikanmoji jikan(2)++ if jikan(2)=60{//秒 jikan(1)++ jikan(2)=0 } if jikan(1)=60{//分 jikan(0)++ jikan(1)=0 } return *reset memset jikan,0,INTSIZE*3 dim jikanshuu,,3 memset jikangoukei,0,INTSIZE*3 nanshuu=0 objprm 5,"0" gosub *tomeru return *shuukiroku if shuuhozon<=1 : shuuhozon=1 memcpy jikanshuub,jikanshuu,length(shuuhozon)*3*INTSIZE dim jikanshuu,shuuhozon,3 memcpy jikanshuu,jikanshuub,length(shuuhozon)*3*INTSIZE dim jikanshuub,shuuhozon,3 return *tomeru KillTimer hwnd , 1 ShowWindow handles(2),SW_HIDE ShowWindow handles(3),SW_HIDE foreach handles if cnt==2 | cnt==3 : continue ShowWindow handles(cnt),SW_SHOW loop jikanmoji=strf("%02d:", jikan(0)) + strf("%02d:", jikan(1)) + strf("%02d", jikan(2)) color 255,255,255 boxf pos 25,25 font "メイリオ",50 color 255,10,10 mes jikanmoji kekka="" repeat length(jikanshuu),1 if cnt>1:kekka+="\n" kekka+=""+cnt+"回目 "+jikanshuu(cnt-1,0)+":"+jikanshuu(cnt-1,1)+":"+jikanshuu(cnt-1,2) loop objprm 6,kekka return *shuume if shuuhozon<=1 : shuuhozon=1 : objprm 5,"1" foreach jikan jikanshuu(nanshuu-1,cnt)=jikan(cnt)-jikangoukei(cnt) jikangoukei(cnt)+=jikanshuu(nanshuu-1,cnt) loop if nanshuu<shuuhozon : nanshuu++ objprm 3,""+nanshuu+"周目" return
最後にもし学校や図書館などの不特定多数が触るところからの投稿の場合、後ろからパスワードを入力しているところをのぞき見される、パスワードがそのまま保存されているなどによって、
だれかがパスワードを入手しいたずらで投稿を消すということが考えられるので気をつけてください。



Mituki

リンク

2015/8/24(Mon) 16:39:11|NO.71035

こんなのを作ったら

#define INTSIZE 4 //整数のバイト数 #define WM_TIMER $00000113//一定の時間ごとにウィンドウに来るメッセージ #define SW_SHOW 5 #define SW_HIDE 0 #include "user32.as" #uselib "user32.dll" dim nanshuu dim shuuhozon shuuhozon=5 dim jikan,3 //今の時間 dim jikanshuu,shuuhozon,3 //各周ごとの時間(時、分、秒) dim jikanshuub,shuuhozon,3//各周ごとの時間(コピー用) dim jikangoukei,3 //それまでの時間の合計 sdim jikanmoji,128 sdim kekka,10240 dim handles,7 #func SetTimer "SetTimer" int,int,int,sptr//タイマー #func KillTimer "KillTimer" int,int #func ShowWindow "ShowWindow" int,int nanshuu=1 // ↑ 必要なファイルや変数初期化 サンプルコード ↓ screen 0,250,250,screen_hide pos 0,0 objsize 80,20 button "START", *start handles(stat)=objinfo_hwnd(stat) button gosub "RESET", *reset handles(stat)=objinfo_hwnd(stat) pos 0,0 button gosub "STOP", *tomeru handles(stat)=objinfo_hwnd(stat) button gosub "1周目",*shuume handles(stat)=objinfo_hwnd(stat) pos 80,ginfo_winy-20 button gosub "周まで記録する",*shuukiroku handles(stat)=objinfo_hwnd(stat) pos 0,ginfo_winy-20 mesbox shuuhozon hMesbox = objinfo(stat, 2) GetWindowLong hMesbox, -16 SetWindowLong hMesbox, -16, stat | $2000 handles(stat)=objinfo_hwnd(stat) pos 0,ginfo_winy-120 mesbox kekka,ginfo_winx,100,0 handles(stat)=objinfo_hwnd(stat) gosub *tomeru oncmd gosub *jikanhyouji,WM_TIMER gsel 0,1 stop *start ShowWindow handles(2),SW_SHOW ShowWindow handles(3),SW_SHOW foreach handles if cnt==2 | cnt==3:continue ShowWindow handles(cnt),SW_HIDE loop gosub *jikanhyouji SetTimer hwnd , 1 , 1000 , 0 stop *jikanhyouji //複数タイマーが使いたかったらwparamを参照してください jikanmoji=strf("%02d:", jikan(0)) + strf("%02d:", jikan(1)) + strf("%02d", jikan(2)) color 255,255,255 boxf pos 25,25 font "メイリオ",50 color 10,10,255 mes jikanmoji jikan(2)++ if jikan(2)=60{//秒 jikan(1)++ jikan(2)=0 } if jikan(1)=60{//分 jikan(0)++ jikan(1)=0 } return *reset memset jikan,0,INTSIZE*3 dim jikanshuu,,3 memset jikangoukei,0,INTSIZE*3 nanshuu=0 objprm 5,"0" gosub *tomeru return *shuukiroku if shuuhozon<=1 : shuuhozon=1 memcpy jikanshuub,jikanshuu,length(shuuhozon)*3*INTSIZE dim jikanshuu,shuuhozon,3 memcpy jikanshuu,jikanshuub,length(shuuhozon)*3*INTSIZE dim jikanshuub,shuuhozon,3 return *tomeru KillTimer hwnd , 1 ShowWindow handles(2),SW_HIDE ShowWindow handles(3),SW_HIDE foreach handles if cnt==2 | cnt==3 : continue ShowWindow handles(cnt),SW_SHOW loop jikanmoji=strf("%02d:", jikan(0)) + strf("%02d:", jikan(1)) + strf("%02d", jikan(2)) color 255,255,255 boxf pos 25,25 font "メイリオ",50 color 255,10,10 mes jikanmoji kekka="" repeat length(jikanshuu),1 if cnt>1:kekka+="\n" kekka+=""+cnt+"回目 " + strf("%02d" , jikanshuu(cnt-1,0))+":" + strf("%02d" , jikanshuu(cnt-1,1))+":" + strf("%02d" , jikanshuu(cnt-1,2)) loop objprm 6,kekka return *shuume if shuuhozon<=1 : shuuhozon=1 : objprm 5,"1" foreach jikan jikanshuu(nanshuu-1,cnt)=jikan(cnt)-jikangoukei(cnt) jikangoukei(cnt)+=jikanshuu(nanshuu-1,cnt) loop if nanshuu<shuuhozon : nanshuu++ objprm 3,""+nanshuu+"周目" return
これ実行したら

#HSP script preprocessor ver3.4 / onion software 1997-2014(c) #Use file [hspdef.as] #Error:symbol in use in line 19 [???] #Fatal error reported.
が出てきてよー。



チャーくん

リンク

2015/8/24(Mon) 17:05:56|NO.71036

symbol in use in line 19というのは、
「19行目ですでに書かれた内容が重複してる」的な内容です。
6行目で、「user32.as」をインクルードした状態でSetTimerが登録されて、
、さらに「user32.dll」からSetTimerを登録しているのでなっています。
「line 19」なので、19行目丸ごと消してやってみてください。
たぶん19行目消してもまたなるので、出てきた行を丸ごと消してみてください。



くちくん

リンク

2015/8/24(Mon) 17:15:18|NO.71037

こう直しました。

#include "user32.as" #define INTSIZE 4 //整数のバイト数 #define WM_TIMER $00000113//一定の時間ごとにウィンドウに来るメッセージ #define SW_SHOW 5 #define SW_HIDE 0 dim nanshuu dim shuuhozon shuuhozon=5 dim jikan,3 //今の時間 dim jikanshuu,shuuhozon,3 //各周ごとの時間(時、分、秒) dim jikanshuub,shuuhozon,3//各周ごとの時間(コピー用) dim jikangoukei,3 //それまでの時間の合計 sdim jikanmoji,128 sdim kekka,10240 dim handles,7 nanshuu=1 // ↑ 必要なファイルや変数初期化 サンプルコード ↓ screen 0,250,250,screen_hide pos 0,0 objsize 80,20 button "START", *start handles(stat)=objinfo_hwnd(stat) button gosub "RESET", *reset handles(stat)=objinfo_hwnd(stat) pos 0,0 button gosub "STOP", *tomeru handles(stat)=objinfo_hwnd(stat) button gosub "1周目",*shuume handles(stat)=objinfo_hwnd(stat) pos 80,ginfo_winy-20 button gosub "周まで記録する",*shuukiroku handles(stat)=objinfo_hwnd(stat) pos 0,ginfo_winy-20 input shuuhozon hMesbox = objinfo(stat, 2) handles(stat)=objinfo_hwnd(stat) GetWindowLong hMesbox, -16 SetWindowLong hMesbox, -16, stat | $2000 pos 0,ginfo_winy-120 mesbox kekka,ginfo_winx,100,0 handles(stat)=objinfo_hwnd(stat) gosub *tomeru oncmd gosub *jikanhyouji,WM_TIMER gsel 0,1 stop *start ShowWindow handles(2),SW_SHOW ShowWindow handles(3),SW_SHOW foreach handles if cnt==2 | cnt==3:continue ShowWindow handles(cnt),SW_HIDE loop gosub *jikanhyouji SetTimer hwnd , 1 , 1000 , 0 stop *jikanhyouji //複数タイマーが使いたかったらwparamを参照してください jikanmoji=strf("%02d:", jikan(0)) + strf("%02d:", jikan(1)) + strf("%02d", jikan(2)) color 255,255,255 boxf pos 25,25 font "メイリオ",50 color 10,10,255 mes jikanmoji jikan(2)++ if jikan(2)=60{//秒 jikan(1)++ jikan(2)=0 } if jikan(1)=60{//分 jikan(0)++ jikan(1)=0 } return *reset memset jikan,0,INTSIZE*3 dim jikanshuu,,3 memset jikangoukei,0,INTSIZE*3 nanshuu=0 objprm 5,"0" gosub *tomeru return *shuukiroku if shuuhozon<=1 : shuuhozon=1 memcpy jikanshuub,jikanshuu,length(shuuhozon)*3*INTSIZE dim jikanshuu,shuuhozon,3 memcpy jikanshuu,jikanshuub,length(shuuhozon)*3*INTSIZE dim jikanshuub,shuuhozon,3 return *tomeru KillTimer hwnd , 1 ShowWindow handles(2),SW_HIDE ShowWindow handles(3),SW_HIDE foreach handles if cnt==2 | cnt==3 : continue ShowWindow handles(cnt),SW_SHOW loop jikanmoji=strf("%02d:", jikan(0)) + strf("%02d:", jikan(1)) + strf("%02d", jikan(2)) color 255,255,255 boxf pos 25,25 font "メイリオ",50 color 255,10,10 mes jikanmoji kekka="" repeat length(jikanshuu),1 if cnt>1:kekka+="\n" kekka+=""+cnt+"回目 " + strf("%02d" , jikanshuu(cnt-1,0))+":" + strf("%02d" , jikanshuu(cnt-1,1))+":" + strf("%02d" , jikanshuu(cnt-1,2)) loop objprm 6,kekka return *shuume if shuuhozon<=1 : shuuhozon=1 : objprm 5,"1" foreach jikan jikanshuu(nanshuu-1,cnt)=jikan(cnt)-jikangoukei(cnt) jikangoukei(cnt)+=jikanshuu(nanshuu-1,cnt) loop if nanshuu<shuuhozon : nanshuu++ objprm 3,""+nanshuu+"周目" return
問題解説的に

#uselib "user32.dll" #func SetTimer "SetTimer" int,int,int,sptr//タイマー #func KillTimer "KillTimer" int,int #func ShowWindow "ShowWindow" int,int
チャーくんさんと同じく、上の命令はuser32.asでされているので、#include "user32.as"だけでよかったのと、
mesboxは文字列専用のため(*1)、shuuhozonを入れることができないので、inputにすべきでした。
*1
hspのヘルプ(HSP Document Library)にも書いてあります。

mesbox p1,p2,p3,p4,p5 p1=変数 : 表示メッセージが代入された文字列型変数 p2,p3 : メッセージボックスのサイズ(ドット単位) p4=0〜(1) : メッセージボックスのスタイル p5=0〜(-1) : 入力できる最大文字数
mesboxのp1 = 表示メッセージが代入された「文字列型変数」 なので。
そこら辺、気をつけてください。(inputは文字列も数値も扱えます。)



Mituki

リンク

2015/8/24(Mon) 21:00:53|NO.71041

LAP,5週目になってとめてまたスタートするとエラーが発生する



Noa

リンク

2015/8/24(Mon) 23:31:36|NO.71045

すみません。それはリセットした後にnanshuuが0になっていてnanshuu-1で配列の-1を参照してエラーになる不具合です。
以下修正版です。


#define INTSIZE 4 //整数のバイト数 #define WM_TIMER $00000113//一定の時間ごとにウィンドウに来るメッセージ #define SW_SHOW 5 #define SW_HIDE 0 #uselib "user32.dll" #func SetTimer "SetTimer" int,int,int,int//タイマー #func KillTimer "KillTimer" int,int #func ShowWindow "ShowWindow" int,int dim nanshuu dim shuuhozon shuuhozon=5 dim jikan,3 //今の時間 dim jikanshuu,shuuhozon,3 //各周ごとの時間(時、分、秒) dim jikanshuub,shuuhozon,3//各周ごとの時間(コピー用) dim jikangoukei,3 //それまでの時間の合計 sdim jikanmoji,128 sdim kekka,10240 dim handles,7 nanshuu=1 screen 0,250,250,screen_hide pos 0,0 objsize 80,20 button "START", *start handles(stat)=objinfo_hwnd(stat) button gosub "RESET", *reset handles(stat)=objinfo_hwnd(stat) pos 0,0 button gosub "STOP", *tomeru handles(stat)=objinfo_hwnd(stat) button gosub "1周目",*shuume handles(stat)=objinfo_hwnd(stat) pos 80,ginfo_winy-20 button gosub "周まで記録する",*shuukiroku handles(stat)=objinfo_hwnd(stat) pos 0,ginfo_winy-20 input shuuhozon handles(stat)=objinfo_hwnd(stat) pos 0,ginfo_winy-120 mesbox kekka,ginfo_winx,100,0 handles(stat)=objinfo_hwnd(stat) gosub *tomeru oncmd gosub *jikanhyouji,WM_TIMER gsel 0,1 stop *start ShowWindow handles(2),SW_SHOW ShowWindow handles(3),SW_SHOW foreach handles if cnt==2 | cnt==3:continue ShowWindow handles(cnt),SW_HIDE loop gosub *jikanhyouji SetTimer hwnd , 1 , 1000 , 0 stop *jikanhyouji //複数タイマーが使いたかったらwparamを参照してください jikanmoji=strf("%02d:", jikan(0)) + strf("%02d:", jikan(1)) + strf("%02d", jikan(2)) color 255,255,255 boxf pos 25,25 font "メイリオ",50 color 10,10,255 mes jikanmoji jikan(2)++ if jikan(2)=60{//秒 jikan(1)++ jikan(2)=0 } if jikan(1)=60{//分 jikan(0)++ jikan(1)=0 } return *reset memset jikan,0,INTSIZE*3 dim jikanshuu,,3 memset jikangoukei,0,INTSIZE*3 nanshuu=0 objprm 5,"0" objprm 3,"1周目" gosub *tomeru return *shuukiroku if shuuhozon<=1 : shuuhozon=1 memcpy jikanshuub,jikanshuu,length(shuuhozon)*3*INTSIZE dim jikanshuu,shuuhozon,3 memcpy jikanshuu,jikanshuub,length(shuuhozon)*3*INTSIZE dim jikanshuub,shuuhozon,3 return *tomeru KillTimer hwnd , 1 ShowWindow handles(2),SW_HIDE ShowWindow handles(3),SW_HIDE foreach handles if cnt==2 | cnt==3 : continue ShowWindow handles(cnt),SW_SHOW loop jikanmoji=strf("%02d:", jikan(0)) + strf("%02d:", jikan(1)) + strf("%02d", jikan(2)) color 255,255,255 boxf pos 25,25 font "メイリオ",50 color 255,10,10 mes jikanmoji kekka="" repeat length(jikanshuu),1 if cnt>1:kekka+="\n" kekka+=""+cnt+"回目 "+jikanshuu(cnt-1,0)+":"+jikanshuu(cnt-1,1)+":"+jikanshuu(cnt-1,2) loop objprm 6,kekka return *shuume if shuuhozon<=1 : shuuhozon=1 : objprm 5,"1" if nanshuu<=0 : nanshuu=1 foreach jikan jikanshuu(nanshuu-1,cnt)=jikan(cnt)-jikangoukei(cnt) jikangoukei(cnt)+=jikanshuu(nanshuu-1,cnt) loop if nanshuu<shuuhozon : nanshuu++ objprm 3,""+nanshuu+"周目" return

また改善点として100分の1秒まで測定する機能を追加するなどをすれば使いやすくなるのではないでしょうか。



Mituki

リンク

2015/8/26(Wed) 17:15:24|NO.71069

#ああ。"



Mituki

リンク

2015/8/26(Wed) 18:36:03|NO.71071

ありがとうございます!また、4649です!



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