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


HSPTV!掲示板


未解決 解決 停止 削除要請

2012
0419
大富豪Aカレンダー6解決


大富豪A

リンク

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



この記事に返信する


cats

リンク

2012/4/19(Thu) 20:29:37|NO.46155

その年がうるう年かは調べることができます。

#define global ctype Isleapyear(%1) (((%1\4=0)&(%1\100!0))|(%1\400=0)) if Isleapyear(gettime(0)) : mes "閏年" : else : mes "閏年以外" stop
http://hspnext.com/hspkura/hspkura07.htm#contents05



大富豪A

リンク

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
思った以上に汚くなってしまって少しわかりづらいかもしれません。



大富豪A

リンク

2012/4/20(Fri) 21:49:38|NO.46193

>てれてれ様
てれてれ様の
「Data = 31,28,31,30,31,30,31,31,30,31,30,31 //各月が何日まであるか」
の考え方に感動しました!
こうゆーやり方があたのか!
コメント付きでスクリプトのだいたいの流れが把握できます!



spider

リンク

2012/4/22(Sun) 12:46:26|NO.46207

解決してますが一応書きます。
単にカレンダーをおきたいだけでしたら

winobj "sysmonthcal32", "", , $50000000, 300, 200
でいと思います。



大富豪A

リンク

2012/4/22(Sun) 15:47:50|NO.46209

>spider様
今回はちょっとした予定表を作ろうと思っているので、オブジェクトだと上から書き込めないし
書き込めるスペースがないので自作しようと思いました。
失礼ですが、僕の作ろうと思っている予定表の性質上、上記に示したとおり、spider様の提案で
は書き込みができないため致命的なものになるとおもわるれので、spider様の提案は、将来への
開発などに役立てようと思います。
このことを最初に言わず申し訳ありませんでした。



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