クリエイター手抜きプロジェクト[141]Fireworks CS3編 一年分のカレンダーを生成する/古籏一浩

投稿:  著者:  読了時間:9分(本文:約4,100文字)


今回は、Fireworks CS3で一年分のカレンダーを生成するスクリプトです。Photoshopとは異なり、非常に高速に生成されます。Photoshopより数百倍は高速です(多分)。

実行する前に、あらかじめ大きなサイズのキャンバスを用意しておく必要があります。今回のサンプルの場合は横100ピクセル、縦1200ピクセルほど必要になります(解像度は72dpi)。


カレンダーの表示方法は■〜の部分の値を変えてください。

// Calendar Script for Adobe Fireworks CS3
baseX = 10; //■カレンダーの最初の表示位置(X座標)
baseY = 10; //■カレンダーの最初の表示位置(Y座標)
calDX = 30; //■カレンダーの1日あたりの横幅
calDY = 30; //■カレンダーの1日あたりの縦幅
blockX = 250; //■1月あたりの横の差
blockY = 250; //■1月あたりの縦の差
dRed = 0;
dGreen = 0;
dBlue = 0;
textBlock = 20; // テキストのブロックサイズ (1文字10ポイント)
docObj = fw.getDocumentDOM();
textR = { initialAttrs:{ alignment : "center", size:"10pt" },
textRuns:[ { changedAttrs:{}, characters:"" } ]
}
function calendar(theYear__,theMonth__){
var wrtMonth= new Array(0,31,28,31,30,31,30,31,31,30,31,30,31);
var wrtDate = new Array("日","月","火","水","木","金","土");
//■一週間分の色(赤輝度,青輝度,緑輝度)
var wrtColor= new Array([255,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0,255]);
var special = new Array(3,21, 9,23, 1,1, 2,11, 4,29, 5,3, 5,4, 5,5, 11,3, 11,23, 12,23);
var specCnt = 15;
var specCol = [255,0,0]; // 休日の文字色
var theDate = new Date(); // 日付オブジェクトを生成
specCnt = 13; // Happy Monday対策
if (theYear__){ // 年月が指定されていた場合は年月を再設定
theDate.setYear(theYear__); // 指定年を設定
theDate.setMonth(theMonth__-1); // 指定月を設定
}
theYear__ = theDate.getFullYear();
theMonth__= theDate.getMonth()+1;
if (((theYear__ % 4 == 0) && (theYear__ % 100 != 0)) || (theYear__ % 400 == 0)){
wrtMonth[2] = 29; // 閏年だったら2月を29日にする
}
// 春分/秋分の日を求める(1980-2099まで)
special[1] = Math.floor(20.8431 + 0.242194 * (theYear__ - 1980) - Math.floor((theYear__ - 1980)/4));
special[3] = Math.floor(23.2488 + 0.242194 * (theYear__ - 1980) - Math.floor((theYear__ - 1980)/4));
theDate.setFullYear(theYear__); // 指定年を設定
theDate.setMonth(theMonth__-1); // 指定月を設定
theDate.setDate(1); // 日付を1日にし曜日を次の行で取得
var count = theDate.getDay();
var day = 0; // 曜日カウンタを0にする
var date = 1; // 日付を1日にする
var flag = false; // 休日&日曜日フラグ
var hFlag = false; // 休日フラグ
var xFlag = false; // 成人の日/体育の日
var i,j;
var week = 0; // 2000年からの体育の日と成人の日対策
calX = 0; //■カレンダーを表示する相対座標(X)
calY = 60; //■カレンダーを表示する相対座標(Y)
drawColor([0,0,0]); // 色の初期化
write(theYear__+"年"+theMonth__+"月", 95, 0); // 相対座標(95pt,0pt)に描画
for(i=0;i< 7;i++) write(wrtDate[i], 0+i*calDX, 30); // 曜日書き出し
flag = false; // 休日が日曜日だった場合true
for(i=1;i< =wrtMonth[theMonth__]+count;i++){
hFlag = false; // 休日だったらtrue
if (day >=count){
wrt = ""+date;
for(j=0; j< specCnt; j++){
if ((special[j*2] == theMonth__) && (special[j*2+1] == date)){
drawColor(specCol);
// 休日が日曜日だったらtrue
if ((day % 7) == 0) flag = true;
hFlag = true;
}
}
date++;
if ((day % 7) == 1) week++; // 月曜日の場合は週の数を増やす
}else{ wrt = " "; }
// 1月と7月と10月の休日処理(Happy Mondayの処理)
xFlag = false;
if ( ((theMonth__ == 1) || (theMonth__ == 10)) && (week == 2) && ((day % 7) == 1)) xFlag = true;
if ( ((theMonth__ == 7) || (theMonth__ == 9)) && (week == 3) && ((day % 7) == 1)) xFlag = true;
if (xFlag){ drawColor(specCol);
}else{
if ((hFlag == false) && flag == false) drawColor(wrtColor[day % 7]);
if (((day % 7) == 1) && flag == true) { drawColor(specCol); flag = false;}
}
write(wrt, calX, calY);
calX += calDX;
if (day % 7 == 6) { calX = 0; calY += calDY; }
day++; // 1日増やす
}
}
function write(txt, x,y){
var R = dRed.toString(16);
var G = dGreen.toString(16);
var B = dBlue.toString(16);
if (R.length < 2) R = "0" + R;
if (G.length < 2) G = "0" + G;
if (B.length < 2) B = "0" + B;
textR.initialAttrs.fillColor = "#"+R+G+B;
textR.textRuns[0].characters = txt;
var tmp = textBlock; // ブロックサイズを一時保存
if (txt.length > 2) textBlock = 10 * txt.length;
docObj.addNewText({left:baseX+x, top:baseY+y, right:baseX+x+textBlock, bottom:baseY+y+textBlock},true);
docObj.setTextRuns(textR);
textBlock = tmp;
}
function drawColor(col){
dRed = col[0];
dGreen = col[1];
dBlue = col[2];
}
calYear = 2008; // 作成する年数を4桁で指定
storeX = baseX;
cal = 1;
for (cy=0; cy< 4; cy++){ //■縦に4つ
for (cx=0; cx< 3; cx++){ //■横に3つ
calendar(calYear, cal);
baseX += blockX;
cal++;
}
baseX = storeX;
baseY += blockY;
}


【古籏一浩】openspc@po.shiojiri.ne.jp
< http://www.openspc2.org/ >
今週中には新サーバーに入れ替えたいところです。とりあえず新しいサーバーのURLです。
< http://60.32.158.22/ >
2TB近く転送したので10日近くかかりました……
Google Desktop(Mac)入れたけど、インデックス作成がいつまでたっても終わらず… Spotlightは割と速かったのですが……

GAME SIDE (ゲームサイド) 2007年 10月号 [雑誌]昔作ったゲームが、雑誌「ゲームサイド」に載ってますf(^^;
P152です。mz-700時代を知っている人には懐かしいかも。

photo
ActionScript逆引きクイックリファレンス―5&MX&MX2004&8対応 for Windows & Macintosh
田中 康博 古籏 一浩 林 拓也
毎日コミュニケーションズ 2005-12
おすすめ平均 star
starFlash(ActionScript)の開発前の調査にも役立ちます
star良書です。

Flash逆引きクイックリファレンス 8&MX2004対応for Windows & Macintosh Flash Hacks―プロが教えるテクニック&ツール100選 FLASH ActionScript 2.0入門完全ガイド+実践サンプル集 [CD-ROM付] 速習Webテクニック FLASH8 ActionScript 実例サンプル47 (Quick master of web technique) おしえて!!FLASH 8 ActionScript (毎コミおしえて!!シリーズ)



photo
改訂第4版 JavaScript ポケットリファレンス
古籏 一浩
技術評論社 2006-10-18
おすすめ平均 star
starJavaScript仮免者以上の方へ
starバランスの良いバイブル
star中級者向けです。

[改訂版] PHP ポケットリファレンス (Pocket reference) 改訂新版 SQLポケットリファレンス (Pocket reference) 基礎 Ajax + JavaScript 標準DOMスクリプティング JavaScript+DOMによるWebアプリデザインの基礎 改訂第5版 オールカラー  HTML ポケットリファレンス (POCKET REFERENCE)



photo
Ajaxライブラリリファレンス
古籏 一浩
ビー・エヌ・エヌ新社 2007-01
おすすめ平均 star
starまずはAjaxを使ってみたい

まるごとJavaScript & Ajax ! Vol.1 標準DOMスクリプティング JavaScript+DOMによるWebアプリデザインの基礎 Ajaxハッカーズ・プログラミング―基礎からprototype.js、Yahoo!UIライブラリ、HTML_AJAXの活用までWebアプリケーション制作のプログラミング・テクニック Ajaxテクニックブック DHTML & AJAX アイデア見本帖 ワンランク上のWebインターフェイスを実現する




photo
GAME SIDE (ゲームサイド) 2007年 10月号 [雑誌]
マイクロマガジン社 2007-09-03

コンティニューvol.35 ガチャフォース オトナファミ 2007年 9/28号 [雑誌] ファミ通Wave (ウェイブ) DVD 2007年 10月号 [雑誌] ゾルゲ大全集(下)初回限定版

by G-Tools , 2007/09/10