|
|
|
2011/6/4(Sat) 18:26:16|NO.39538
現在、時間指定で音楽を再生するタイマーを作っています(WindowsXP及びWindows7)。
設定できる時間の初期値を現在時刻から5分後にしたいのですが、
DTPコントロールの表示を変更する方法が分かりません。
教えて頂きたいのですが・・・。
dim SYSTEMTIME, 4
pos 90,79
objsize 60,25
winobj "sysdatetimepick32", "", , $50000000 , 120:
hDtp.0 = objinfo(stat, 2)
pos 37,80
color 0
mes "date"
pos 235,82
mes "time"
pos 280,80
dim SYSTEMTIME, 4
winobj "sysdatetimepick32", "", , $50000000 | $9, 90
hDtp.2 = objinfo(stat, 2)
pos 380,77
objmode 0
objsize 60,30
button "OK",*kakunin
stop
*kakunin
color 255,255,255
boxf 40,124,200,150
repeat 3
sendmsg hDtp.cnt, $1001, , varptr(SYSTEMTIME)
if cnt=0{
year5= wpeek(SYSTEMTIME,0)
month5= wpeek(SYSTEMTIME,2)
day5=wpeek(SYSTEMTIME,6)
}
if cnt=2{
hour5= wpeek(SYSTEMTIME, 8)
minute5=wpeek(SYSTEMTIME, 10)
}
loop
color 0
pos 40,124
mes ""+year5+"/"+month5+"/"+day5+" - " +hour5+":"+minute5
stop
;現在から5分後の時間を取得
#module
#deffunc monthendday var prm1,int prm2,int prm3
; prm1 : 取得用変数, prm2 : 年(yyyy形式), prm3 : 月(mm)
nyear = prm2 : if (nyear<=0)|(nyear>3000) : nyear =gettime(0)
nMonth = prm3 : if (nMonth<=0)|(nMonth>12) : nMonth =gettime(1)
;▼月末日
md=31,28,31,30,31,30,31,31,30,31,30,31
;▼うるう年計算
if (((nyear\4=0)&(nyear\100!0))|(nyear\400=0)) {
md(1) = 29
}
prm1=md(nMonth-1)
return 0
#global
last=0
year0=int(year0)
month0=int(month0)
day0=int(day0)
hour0=int(hour0)
minute0=int(minute0)
year0=gettime(0)
month0=gettime(1)
day0=gettime(3)
hour0=gettime(4)
minute0=gettime(5)
n=year0
m=100*month0+day0
l=100*hour0+minute0
pos 10,10
mes "5分後の時間を表示"
pos 10,40
objmode 0
input n,40,30,500:obj1=stat
pos 60,40
input m,40,30,500:obj2=stat
pos 110,40
input l,40,30,500:obj3=stat
pos 200,40
button gosub "OK",*get
stop
*get
year0=n
month0=int(m/100)
day0=m-100*month0
monthendday lastday,year0,month0
if day0=lastday:last=1
hour0=int(l/100)
minute0=l-100*hour0
if minute0<55{
year55=year0
month55=month0
day55=day0
hour55=hour0
minute55=minute0+5
goto *value
}
if hour0!23{
if minute0>54{
year55=year0
month55=month0
day55=day0
hour55=hour0+1
minute55=minute0-55
goto *value
}}
if hour0=23{
if minute0>54{
if last!1{
year55=year0
month55=month0
day55=day0+1
hour55=0
minute55=minute0-55
goto *value
}}
if last=1{
if month0!12{
year55=year0
month55=month0+1
day55=1
hour55=0
minute55=minute0-55
goto *value
}}
if month0=12{
year55=year0+1
month55=1
day55=1
hour55=0
minute55=minute0-55
goto *value
}}
*value
objmode 0
n=year55
m=100*month55+day55
l=100*hour55+minute55
objprm obj1,""+n
objprm obj2,""+m
objprm obj3,""+l
return
| |
|
2011/6/4(Sat) 21:01:45|NO.39541
少しだけ取得や設定のヒントを提示します。
自分のスクリプトに当てはめて見て下さい。
hwndDate = hDtp.0 // winobjで作成した(MC type)のハンドル
hwndTime = hDtp.2 // winobjで作成した(DTP type)のハンドル
;***** (例)取得の場合 *****
;prm1(0)〜prm1(6)までを文字列として編集
;yyyy年mm月dd日XX曜日 hh:mm:ss 形式として取得
;
#define DTM_GETSYSTEMTIME $00001001
dim st,8
sendmsg hwndDate,DTM_GETSYSTEMTIME,0,varptr(st)
week="日","月","火","水","木","金","土"
;文字列として編集した形式で取得値を返す
;年,月,日,曜日
prm1(0) = str(wpeek(st,0))+"年"
prm1(1) = strf("%02d",peek (st,2))+"月"
prm1(2) = strf("%02d",peek (st,6))+"日"
prm1(3) = " "+week(peek (st,4))+"曜日"
sendmsg hwndTime,DTM_GETSYSTEMTIME,0,varptr(st)
;時,分,秒
prm1(4) = " "+strf("%02d",peek (st,8))+":"
prm1(5) = strf("%02d",peek (st,10))+":"
prm1(6) = strf("%02d",peek (st,12))
;***** (例)設定の場合 *****
;年 ,月 ,日 ,時 ,分 ,秒の形式で5分後のデータを渡す
;nYear,nMonth,nDay,nHH,nMM,nSS
;
#define DTM_SETSYSTEMTIME $00001002
dim st,8 ;SystemTime構造体
wpoke st,0, nYear ;年
poke st,2, nMonth ;月
poke st,6, nDay ;日
poke st,8, nHH ;時
poke st,10,nMM ;分
poke st,12,nSS ;秒
sendmsg hwndDate,DTM_SETSYSTEMTIME,0,varptr(st)
sendmsg hwndTime,DTM_SETSYSTEMTIME,0,varptr(st)
| |
|
2011/6/4(Sat) 21:47:32|NO.39543
コメント部分を少し間違えました。
(誤)
> hwndDate = hDtp.0 // winobjで作成した(MC type)のハンドル
> hwndTime = hDtp.2 // winobjで作成した(DTP type)のハンドル
(正)
hwndDate = hDtp.0 // winobjで作成した(DTP type)のカレンダ部分のハンドル
hwndTime = hDtp.2 // winobjで作成した(DTP type)の時刻部分のハンドル
※hwndDateを直接書き換えて、hDtp.0としても良い
hwndTimeを直接書き換えて、hDtp.2としても良い
>;年 ,月 ,日 ,時 ,分 ,秒の形式で5分後のデータを渡す
指定した西暦日付と任意の時刻 (5分後であればその時刻)
#追記
モジュールにすると便利だと思います。
|
|
2011/6/4(Sat) 23:55:52|NO.39545
出来ました。ありがとうございます!!
;5分後の時刻を表示
#module
#deffunc monthendday var prm1,int prm2,int prm3
; prm1 : 取得用変数, prm2 : 年(yyyy形式), prm3 : 月(mm)
nyear = prm2 : if (nyear<=0)|(nyear>3000) : nyear =gettime(0)
nMonth = prm3 : if (nMonth<=0)|(nMonth>12) : nMonth =gettime(1)
;▼月末日
md=31,28,31,30,31,30,31,31,30,31,30,31
;▼うるう年計算
if (((nyear\4=0)&(nyear\100!0))|(nyear\400=0)) {
md(1) = 29
}
prm1=md(nMonth-1)
return 0
#global
last=0
year0=gettime(0)
month0=gettime(1)
day0=gettime(3)
hour0=gettime(4)
minute0=gettime(5)
monthendday lastday,year0,month0
if day0=lastday:last=1
if minute0<55{
year55=year0
month55=month0
day55=day0
hour55=hour0
minute55=minute0+5
goto *value
}
if hour0!23{
if minute0>54{
year55=year0
month55=month0
day55=day0
hour55=hour0+1
minute55=minute0-55
goto *value
}}
if hour0=23{
if minute0>54{
if last!1{
year55=year0
month55=month0
day55=day0+1
hour55=0
minute55=minute0-55
goto *value
}}
if last=1{
if month0!12{
year55=year0
month55=month0+1
day55=1
hour55=0
minute55=minute0-55
goto *value
}}
if month0=12{
year55=year0+1
month55=1
day55=1
hour55=0
minute55=minute0-55
goto *value
}}
*value
dim SYSTEMTIME, 4
pos 90,79
objsize 60,25
#define DTM_SETSYSTEMTIME $00001002
dim st,8 ;SystemTime構造体
wpoke st,0, year55 ;年
poke st,2, month55 ;月
poke st,6, day55 ;日
poke st,8, hour55 ;時
poke st,10,minute55 ;分
poke st,12,0 ;秒
winobj "sysdatetimepick32", "", , $50000000 , 120:
hDtp.0 = objinfo(stat, 2)
pos 37,80
color 0
mes "date"
pos 235,82
mes "time"
pos 280,80
dim SYSTEMTIME, 4
winobj "sysdatetimepick32", "", , $50000000 | $9, 90
hDtp.2 = objinfo(stat, 2)
sendmsg hDtp.0,DTM_SETSYSTEMTIME,0,varptr(st)
sendmsg hDtp.2,DTM_SETSYSTEMTIME,0,varptr(st)
pos 380,77
objmode 0
objsize 60,30
button "OK",*kakunin
stop
*kakunin
color 255,255,255
boxf 40,124,200,150
repeat 3
sendmsg hDtp.cnt, $1001, , varptr(SYSTEMTIME)
if cnt=0{
year5= wpeek(SYSTEMTIME,0)
month5= wpeek(SYSTEMTIME,2)
day5=wpeek(SYSTEMTIME,6)
}
if cnt=2{
hour5= wpeek(SYSTEMTIME, 8)
minute5=wpeek(SYSTEMTIME, 10)
}
loop
color 0
pos 40,124
mes ""+year5+"/"+month5+"/"+day5+" - " +hour5+":"+minute5
stop
| |
|