|
|
|
2012/4/19(Thu) 16:55:14|NO.46153
今、カレンダーを作っているのですが、閏年や31日ある日の設定など細かい設定が出来ません
閏年や31日ある日の設定など細かい設定の仕方を教えてください。
かなり無駄のあるスクリプトでスイマセン。
Year=gettime(0):Month=gettime(1)
tuki=((Year)+(Year/4)-(Year/100)+(Year/400)+((13*Month+8)/5)+(1))\7
screen 0,850,500
*cradr
redraw 0
a=-tuki+1:px=220:py=55:ppx=254:ppy=52
Day="日月火水木金土"
Day2="246911"
objsize 30,30
pos 250,0:button "<",*cradr1
pos 810,0:button ">",*cradr2
color 255,255,255:boxf 250,0,840,470
color
font msgothic,30
YM=""+Year+"/"+Month+""
pos 1010/2-strlen(YM),0:mes ""+Year+"/"+Month+""
font msgothic,16
boxf 253,35,834,466
repeat 7,1
color 255,255,255
boxf ppx,ppy-16,ppx+81,ppy-2
color
b=strmid(Day,cnt*2-2,2)
pos px+70*cnt,py-19:mes b
ppx+83:px+12
loop
color 255,255,255
ppx=254:px=220
repeat 5
repeat 7
boxf ppx,ppy,ppx+81,ppy+81
ppx+83
loop
ppy+83:ppx=254
loop
color
repeat 5
repeat 7,1
if cnt=1:color 255,50,0
if cnt=7:color 0,50,255
if (a=gettime(3))and(Year=gettime(0))and(Month=gettime(1)):color 155,0,155
if a>0 {
if a<10:pos px+67*cnt,py:mes " "+a
if a>9:pos px+67*cnt,py:mes a
}
color
a++:px+16
if (gettime(1)=2)and(a=27):redraw 1:stop
repeat 5
if ((strmid(Day2,cnt,1)=gettime(1))and(a=31)){
redraw 1:stop
}
loop
if a=32:redraw 1:stop
loop
px=220:py+83
loop
if a>9:pos px+85*1,py-83:mes "/"+a
redraw 1
stop
*cradr1
Month--
if Month=0:Month=12:Year--
tuki=((Year)+(Year/4)-(Year/100)+(Year/400)+((13*Month+8)/5)+(1))\7
goto *cradr
*cradr2
Month++
if Month=13:Month=1:Year++
tuki=((Year)+(Year/4)-(Year/100)+(Year/400)+((13*Month+8)/5)+(1))\7
goto *cradr
| |
|
2012/4/19(Thu) 21:05:14|NO.46159
>cats様
その手があったか!!(タメ口でスミマセン)
って言うか、(((%1\4=0)&(%1\100!0))|(%1\400=0))は(Year/4)-(Year/100))+(Year/400)
と同じようなことをしてるような気がするんですがこれをちょっと改造すればを出来るような
気がします。
(まあcats様の提案した方がらくだとおもいますが...)
if a=32:redraw 1:stop
で32回繰り返しをしたらstopするように設定しましたが効果がありません。
Day2="246911"
repeat 5
if ((strmid(Day2,cnt,1)=gettime(1))and(a=31)){
redraw 1:stop
}
loop
は、2.4.6.9.11月は31回繰り返ししたらstopするようにしてます。
|
|
2012/4/19(Thu) 22:12:35|NO.46161
あ… ありのまま今起こったことを話すぜ…
大富豪さんのスクリプトをちょこちょこ引用して組んでたと思ったら全くの別物になっていた
な… 何を言ってるのか わからねーと思うが おれも何をしたのかわからなかった…
#module
#include "Kernel32.as"
#deffunc boxf_h int hx_1 ,int hy_1 ,int hx_2 ,int hy_2 //中抜きのboxf描画
Color_h = ginfo_r,ginfo_g,ginfo_b
color : boxf hx_1,hy_1,hx_2,hy_2
color Color_h(0),Color_h(1),Color_h(2) : boxf hx_1+1,hy_1+1,hx_2-1,hy_2-1
return
#defcfunc CalWeek int Year, int Month //曜日取得
sdim data,32 : wpoke data,0,Year : wpoke data,2,Month : wpoke data,6,1
SystemTimeToFileTime varptr(data),varptr(data) : FileTimeToSystemTime varptr(data),varptr(data)
return peek(data,4)
#defcfunc CalLeap int Year //閏年チェック
if Year\4 != 0 : return 0
if Year\400 = 0 : return 1
if Year\100 = 0 : return 0
return 1
#global
Year = gettime(0) : Month = gettime(1) //年と月を初期化
Day = "日","月","火","水","木","金","土" //七曜
Data = 31,28,31,30,31,30,31,31,30,31,30,31 //各月が何日まであるか
Px = 5 : Py = 100 //カレンダーの左上座標
Osize = 90 ,20 //カレンダーの曜日表示欄のサイズ
Csize = 90 ,60 //カレンダーのマス目のサイズ
objsize 30,30
pos Px-2,Py-30:button "<",*cradr1
pos Px+Csize(0)*7-27,Py-30:button ">",*cradr2
*cradr //メインの処理ここから
redraw 0
syscolor 15 : boxf
color : font msgothic,30
pos 270,Py-30:mes strf("%4d/%2d",Year,Month) //[○○○○年/○○月]
font msgothic,16,1
repeat 7 //マス目、曜日を表示
color 210,210,210 : boxf_h Px+Osize(0)*cnt,Py,Px+Osize(0)*(cnt+1),Py+Osize(1)
color : pos Px+Osize(0)*cnt + Osize(0)/2-8,Py+3 : mes Day(cnt)
loop
SPos = CalWeek(Year,Month),0 : sid = 0 : LeapFlag = 0 //曜日取得や使用する変数の初期化
if CalLeap(Year) = 1 and Month = 2 : LeapFlag = 1 //閏年時は例外
repeat 6 : cn = cnt
repeat 7 : color 255,255,255
if cn <= 4{
if cnt = 0 : color 255,210,210
if cnt = 6 : color 210,210,255
boxf_h Px+Csize(0)*cnt,Py+Osize(1)+cn*Csize(1),Px+Csize(0)*(cnt+1),Py+Osize(1)+Csize(1)+cn*Csize(1) //マス目描画
}
if cnt >= Spos or cn != 0 and sid < Data(Month-1)+LeapFlag{ //(cn,cnt)のマス目に日にちを表示するかチェック
color : sid++ //[sid]表示する日にち
if cn != 5 : pos Px+Csize(0)*cnt+Csize(0)/2-8,Py+Osize(1)+cn*Csize(1)+3 : mes strf("%2d",sid) //日にち表示
if cn = 5 : pos Px+Csize(0)*cnt+Csize(0)/2-8,Py+Osize(1)+4*Csize(1)+3 : mes strf(" /%2d",sid) //日にち表示(6列目)
}
loop
loop
redraw 1 //描画
stop //メインの処理ここまで
*cradr1
Month-- : if Month == 0 : Month = 12 : Year--
goto *cradr
*cradr2
Month++ : if Month == 13 : Month = 1 : Year++
goto *cradr
思った以上に汚くなってしまって少しわかりづらいかもしれません。
| |
|
2012/4/20(Fri) 21:49:38|NO.46193
>てれてれ様
てれてれ様の
「Data = 31,28,31,30,31,30,31,31,30,31,30,31 //各月が何日まであるか」
の考え方に感動しました!
こうゆーやり方があたのか!
コメント付きでスクリプトのだいたいの流れが把握できます!
|
|
2012/4/22(Sun) 12:46:26|NO.46207
解決してますが一応書きます。
単にカレンダーをおきたいだけでしたら
winobj "sysmonthcal32", "", , $50000000, 300, 200
でいと思います。
|
|
2012/4/22(Sun) 15:47:50|NO.46209
>spider様
今回はちょっとした予定表を作ろうと思っているので、オブジェクトだと上から書き込めないし
書き込めるスペースがないので自作しようと思いました。
失礼ですが、僕の作ろうと思っている予定表の性質上、上記に示したとおり、spider様の提案で
は書き込みができないため致命的なものになるとおもわるれので、spider様の提案は、将来への
開発などに役立てようと思います。
このことを最初に言わず申し訳ありませんでした。
|
|