|
|
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は大変参考資料が豊富ですので割とすぐに問題が解決すると思います。
とにかく、何も調べず、考えず、人に聞くだけというのは自身の成長を妨げる原因となるのでやめましょう。
|
|
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
最後にもし学校や図書館などの不特定多数が触るところからの投稿の場合、後ろからパスワードを入力しているところをのぞき見される、パスワードがそのまま保存されているなどによって、
だれかがパスワードを入手しいたずらで投稿を消すということが考えられるので気をつけてください。
| |
|
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は文字列も数値も扱えます。)
| |
|
2015/8/24(Mon) 21:00:53|NO.71041
LAP,5週目になってとめてまたスタートするとエラーが発生する
|
|
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秒まで測定する機能を追加するなどをすれば使いやすくなるのではないでしょうか。
| |
|
2015/8/26(Wed) 17:15:24|NO.71069
#ああ。"
|
|
2015/8/26(Wed) 18:36:03|NO.71071
ありがとうございます!また、4649です!
|
|