パチョ奮闘記
2001年10月

  <<< 2001.9 2001.11 >>>  

このページは siteCTS の旧版です。
URI確保のために保存してあるだけで、二度と更新されません。
JavaScript が有効の時は以下に移動先URIが表示されます。

妙に少ない俺用の日付ジャンプ
10.1 続・トラブルは続くよどこまでも
10.2 揺るがざる猫信者
10.4 嘘JavaScript講座
10.6 来たれVGA!
10.7 かわいそなShell Icon Cashe
10.8 DVD-ROMの初舞台
10.10 無駄な進化のパチョ奮闘記
10.12 初めてのCG?
10.15 アプリケーションサイト
10.16 平らの浪漫(意味深)
10.18 Bakaスクリプト第二弾
10.27 Bakaスクリプト第三弾
10.29 紆余曲折の果てに
一番下へ!





 マウスが変です。カーソルの移動速度の項目が変なことになってます。実は今に始まったことじゃないんだけど。
 しかし、症状はさらに不可思議を極め、実害が出るようになりました。俺のマッチスピードは最速から-3なんだけど、リブートするとなぜか不正に遅くなるんです。
 てなもんで最速にするとちょうどいい感じ。

 で、ここまでが今までの症状。
 そこから次にリブートすると、正規の「最速」に直る。速すぎ!
 てなもんで-3ばかり遅くしてマッチスピードに合わせる。
 でも、その次にリブートするとまた不正に遅くなる。
 てなもんで最速にするとちょうどいい感じ。
 だけど、その次にリブートすると正規の「最速」になる。速すぎ!
 てなもんで最速から-3ばかりエンドレス。
 すなわち、起動するごとにマウスのプロパティを開いて調整しないといかんので、面倒くさいにもほどがある状態。

 ドライバを入れ直しても直らず、しかしバグにしては珍妙で、原因もさっぱり特定できなければ、なにとぶつかってるのか想像さえできず、とりあえずスタートアップでマウスのプロパティが開く、おかしなおかしな雪子ちゃんなのであった。


 僕がこよなく愛する猫ちゃんが、うきうきわくわくのバージョンアップです。少し前から実装試験をやってた「いまどっちサービス」なる機能が、やっと正式に搭載されました。
[ 1.4KB ]
 この機能は、こんな感じで「カーソル位置にIMEとCapsLockの状態を表示」してくれるもの。邪魔と言えばまぁ邪魔なんだけど、便利と言えばまぁ便利です。俺っちはHTML(辞書で変換する)とスクリプト(直入力)でIMEを切ったり入れたりするので、なんとなく便利な気分です。
 贅沢を言えば、もうちょっと右の方へ寄ってくれると助かるんだけど……。

 それより喜ばしいのは、ウィンドウ関係の機能が大幅に強化されたことであります。ついに「常時最前面に設定」「最前面を解除」が猫ちゃんだけで可能になってくれました。もうプラグイン代わりに使ってたMax Min Keyboradもいらないし、4.20みたいなバカコマンドを使う必要もないのです。
[ 13KB ]
 最前面設定にできない秀丸も、お好きなキー一発でこの通り。「なにかを参照しながら」って時に非常に便利です。
 あと、「横方向にだけ最大化」が俺的にMax便利かな。俺のエクスプローラは987×351と、ずいぶん横長なんで。(縦にふたつ並べる時に都合がいい)

 ますます便利になる猫ちゃん。さぁみんなも入れてトラブルまで一緒に招こうよ!


 もっと使えるJavaScriptのリファレンスはないものかと、本屋で物色したんです。俺好みのものは見つかんなかったのですが、代わりに立ち読みで新しい知識を増やしてきました。
 それはif 構文に関する情報。

if (a == 0) {
  処理A;
} else if (b != 0) {
  処理B;
} else {
  処理C;
}
       if (!a) {
  処理A;
} else if (b) {
  処理B;
} else {
  処理C;
}

 左の書き方が基本形で、右は省略形。どちらも結果は同じですね。
 省略形の存在自体は経験で感覚的にわかってたんだけど、正しい知識をやっと得られました。手持ちの本には基本形しか書いてないのよねぇ。


● かいせつ ●

 左右ともに「aが0なら処理Aを実行、aとbが0以外なら処理Bを実行、それ以外なら処理Cを実行」という条件式。実際には括弧の中が成立して true が入った時に処理A/処理Bが実行されます。ここが重要。
 なので、aに true が入ってるなら (a == true) は (a) にできます。
 同様に、bに false が入ってるなら (b == false) は (!b) にできます。
 (びっくりマークは「違う」というニュアンスで考えれば結構)

 また、aに true や false が入ってなくても、以下のように判断されます。
 今回お勉強したのは、この4項目。
 つまり、(a == 0) は「aが0だったら実行」、 (!a) は「結果がfalseだったら実行(aに0が入ってればfalse)」というわけで、どちらも同じ結果になるわけです。
 ただ、aに文字列が入ってたりすると (!a) では不完全なので、基本的には (a == 0) と書いた方が安全です。慣れないうちはバグの元です。(いつかやりそう)


 VGA(640×480)対策をいよいよ本格的に始めました。VGAに対応するということは、ウィンドウを最大化しない人にも対応できるってことなので、あながち無意味でもねえンです。特にパチョ奮闘記(とScrawl Notes)は、横に幅広フレームがある関係上、SVGA(800×600)でもだいぶ厳しいのです。
 一応9.12に仮対応はしたものの、フレームサイズを調整可能にした程度ではたいした解決になりません。抜本的な解決は「フレームなし」しかないのであります。

 でも、フレームをなくすとバックナンバーを選べないし、他のページへも行けない。かといって、ひと月ごとにリンクを張っていたらフレーム付きの時に見苦しいし、だいたい俺が面倒くさい。

 しかし! ひと昔前なら非常に悩ましき問題だったが! 今の俺は魔法使いなのダ!
 てなわけで魔法を組み始めます。キーポイントとなる詠唱は top.frames.length です。これはフレームの数を返すもので、なけりゃ0が返ります。
 つまり、if (top.frames.length) {......} とすれば、フレームがある時とない時で処理を分けられるって寸法ですネ。

 それで登場いたしました「フレームを消す」ボタン。フレームがない時は「フレームをつける」ボタンになります。
 なにより苦労したのは「フレームをつける」ボタンですか。
 消すのは単純に目的地のページへ target="_top" で飛ばすだけですが、つける時はそうはいきません。フレームのHTML(snpFrm.htm)に飛ばしても、常に「今月分」が表示されるんであります。あたり前ですね。

 なんとかして同じ月に飛びたい。押す人なんかいないのはわかっております。でも、それが「やらない理由」になるんなら、俺はこんな短期間でこんなに成長してないのです。
 でもまぁ、うまくいかなかったらこんなこと書かないわけです。

 そんな感じで、フレームをつける魔法の呪文を大公開。(関係ないとこは省略してるので、実際のスクリプトとは異なります)

ジャンプ元のボタン
<INPUT onClick="frmCng(top.frames.length,'0103')" type="button" value="フレームをつける"> ▲1

スクリプト本体
function frmCng(frmFlag,swapMth) {
 if (!frmFlag) { ▲2
  top.name = swapMth + "mainSwap"; ▲3
  top.location = "../snpFrm.htm"; ▲4
 }
}

今月分のファイル
if (top.frames.length && top.name.indexOf("mainSwap") != -1) { ▲5
 swapMth = top.name.substring(0,4); ▲6a
 swapURL = "../" +swapMth+ "/_" +swapMth+ ".htm"; ▲6b
 top.name = ""; ▲7
 location.replace(swapURL); ▲8
}
 ウィンドウ名を変数として扱い、他のページへ引数を渡すこの手法。すでに昔話と化したScribble Gardenスクリプトで考えついた手法。
 他の人はどうやって違うページへ引数を渡してんのか気になるけど、そんなスクリプトはお目にかかったことがないです。(素直にCGIを使うから)

 あと、上のセレクトボックスからでもフレームを消せるようにしました。でも今のとこは実行するとページの頭に戻されちゃいます。
 それだとあまり意味ないものの、JavaScriptには「現在のスクロール位置」を取得できる秘密の呪文があるので、今度これを使ってチャレンジしてみましょう。お楽しみに。(?)

 ちなみにIE5以上とネスケ6以上では、右上にある「GTS」を押すとNCF版表示(IE4やネスケ4用)にできますが、これも同じ手法を用いております。
 具体的には「ウィンドウ名にchangeと入れてリロード→実は読みこむ時に毎回ウィンドウ名をチェックしてる→ウィンドウ名にchangeと入ってたら、ブラウザのマーキングをNCFにする→表示する時の条件分岐でNCF版に流れる→戻す時も同じ方法でGTSに戻す」という感じ。
 今はGTSもNCFもタイトルのとこがちょっと違うだけですが、今度のフルリニューアルでだいぶ差別化されるかと思います。


 アイコンが正しく表示されなくなっちゃいました。不思議なことに、BMPとJPG、GIFの3種類だけが未定義ファイルのアイコンになる。そう、関連付けされてないやつのアイコン。
 もちろんそんなヘマはしませんよ。関連付けはちゃんと動くし、DefaultIconキーにも正しい値を入れてますって。
 なのに、この3種類のアイコンだけが表示されないのだ。

 とりあえず考えられる原因としてShellIconCasheがありますね。アイコンを少しでも速く表示するために作られるキャッシュファイル。これが壊れちゃってるのかもしれない。
 で、セーフモードで起動してこやつを消すわけです。グッバイ諸悪の根源。

 …直んねえし。
 困りました。原因不明です。そもそも「3種類だけ」ってのが謎すぎます。それじゃ諸悪の根源は一体どこにあるというのでしょう。

 とりあえずレジストリエディタを開き、この3種類と他のやつをじっくり比較してみます。
 比較してみますと、GIFのキーにShellEx…。あれ、GIFに拡張シェルなんかあったっけ……。もっとよく見てみますと、JPGとBMPにもあります。アイコンが正しく表示されるPNGには、これがありません。
 さて……。

 ShellExキーに記されたクラスIDを追うと、そこには驚くべき事実が待ってました。ファイルコンパクトにつながってるじゃありませんか。それはAI Soft社の圧縮解凍ソフトです。使い勝手が良いので入れてるんです。
 な…なんでアーカイバにつながってるのでしょうか。不思議です。謎です。考えます。ちょっと笑えます。笑ってる場合じゃありません。

 …あ、ちょっと待てよ。そういえば…なんか、こないだバージョンアップした時に、変な追加モジュール入れたな、俺……。そう、たしか…エクスプローラがなんとかってやつと、アイコンがなんとかってやつだ……。
 ちょっと待てこら。

 急いでファイルコンパクトの環境設定を起動(単体のexeになってる)してみますと、あります。見慣れぬ「アイコン」タブ。BMPとJPGとGIFを色々できるみたいですね。入れたのも憶えてないくらいですから、設定を施してるわけもありませんね。
 試しにこの追加モジュールをアンインストすると、アイコンは綺麗さっぱり元通り。
 諸悪の根源はなんと俺なのでした!

 濡れ衣の果ての魔女狩りで召されたShellIconCasheに幸あれ。


 雪子ちゃんにはDVD-ROMが入っております。7.5に入れました。もらいものなのでスペックもメーカーも値段もよくわからない謎ドライブですが、一応動くのでCDを再生するのに使ってます。(データ読み出し用としては信用してない)
 で、考えてみるとコイツ、DVDを再生できるんですよね。再生ソフトも(プリインストのが)あるし。ふざけてるとお思いでしょうが、わりとマジメに言ってたりします。

 なんてわけで作りました。レンタルビデオの会員証。何年ぶりだろう。10年ぶりくらい。
 借りてきたのは今や懐かしきアルマゲドン。やっぱパソコンで観るからにはCGな映画を…てな選び方です。(だったらマトリックチュでも借りなさいよ)

 いやぁ、DVDって便利ですねぇ。綺麗ですねぇ。ちっちゃいわりに頑張る雪子スピーカーと併せて、17インチでも結構なお手前でした。ホームシアターとか揃える人の気持ちがなんとなくわかっちゃったなぁ。(でも基本的には「映画は映画館で派」です)
[ 19KB ]
 しかし、なんというか、こうして書いてるかたわらで映画が流れてるのって、奇想天外に贅沢よねーって思いませんか。(でもShift問題が起きるので使えないんだけど)


 用語集とリンク集の挙動をかなり変えました。今まですべて新しいウィンドウで開いてたのを、記事からのリンクのみメインウィンドウ内で飛びます。リンクをすべてHTMLに戻したので、「右クリック→新しいウィンドウ」も使えます。

 また、リンク集で使える関連記事への遠隔操作もこれまで通りです。これまで通りにするために、倒れるほど苦労したんです。フレームのあるなしでスクリプトが全然違うんです。
 左フレームのボタン、メインウィンドウ側のボタン(フレーム有/無)、記事から開くリンク(フレーム有/無)と、いくつもの状況でボタンを非表示にしたり動作を変えたり……。

 他のページへ引数を渡せないJavaScript、こんな阿呆な手法を用いて渡してるサイトはやっぱ見たことないです。実はすごいことやってるのかもしれないネ。
 CGIを使えるようになったら、きっとURLの尻に ?mth=200110,frm=1,...... とかいっぱいくっついてくるんだろうね。


 もう半月ばかりも更新してません。いいかげん尻を叩かねばなりません。最大の難関である「トップページの飾り絵」を描くのです。
 なんというか、初めて描いたCGが「ただ塗るだけで」丸々一週間もかかったんで、どうもイヤ〜な印象がついちゃってます。えっ…いいよ俺は手塗りで…なんて逃げ腰。
 しかしまぁホトソの使い方もよく知らず、1600倍に拡大して1ドットずつ範囲選択とかしてれば、ただ塗るだけでもそりゃ一週間とかかかるでございましょう。そんな丁寧に塗ってもWebじゃ意味ないのにね。

 とりあえず下絵を1枚ぺろっと描きます。身体は憶えてるもんです。前回の教訓もあって、「塗りやすい線画」にいたします。俺はどうも線のはじっこを閉じない癖があるので、いつもの調子で描けずに苦労します。
 また、透過色を使うのが決まっているため、セル塗りに合うような感じの絵にします。グラデーションを使うとPNGやGIFにできなくなってしまうのです。
 そして、初めての「CG用線画」が誕生。今までみたいな、すでにあるやつを取りこんだのじゃなくて、ちゃんと「コンピウタで色を塗るために描かれた」線画であります。ここまでパソコンを使いこんでいながら、意外な事実です。

 ところでわたくし、画像の加工自体はパ奮に貼る画面写真などで経験を積んでおりまして、2枚しか色塗りしてないわりにはホトソの使い方を憶えております。(もう1枚はScrawl Notesに貼ってあるやつ)
 でも未だに「パス」というものはさっぱりでして、今回はこれを重点的に勉強することにしたんです。もちろんマニュアルもなんもないというか、あってもどうせ見ないので、すべて勘に頼ります。お約束です。

 …なんか勝手にぐにゅぐにゅ曲がって、全然思い通りにいきません。苛々しますね。
 しかし、あれこれやってるうちにアンカーポイントから線を引っ張るコントロールポイント、これを引き出した後にいったん離すと、片側の線だけ曲げられるようになるのを発見しました。
 ていうか、なんで引き出した直後は反対側まで曲がっちゃうんでしょう。
 ともあれ、そんな感じでなんとかパスの基本も憶えられました。「siteCTS!」とあるフキダシがこれの成果です。

 肝心の色塗りに関しては、特に書くこともございません。範囲選択してCtrl+Delete、んでから色調補正。これの繰り返しです。なんてらくちんなのでしょう。これを基本スタイルにしたくなるほどらくちんです。

 かくして、新しい飾り絵が完成。もののついでで、壁紙仕様とかフォルダカスタマイズ用とか、色々作ります。これまたお約束ですね。壁紙仕様をご所望の方はアップしとくのでどーぞ。
 JPEGでも130KBあるけど。(BMPにしようとしたら2.4MBとか言われたのでやめた)
 作り方間違えて1024×748になっちゃったけど。(タスクバーの分を切り抜いちゃった)
 右クリックから「対象をファイルに保存」

 さて、あとはレイアウトとかをちょこっと修正すればアップできるかな……。


 かれこれ1ヵ月くらい前からちょろちょろ作ってる新生トップページ。
 長らくピンクの子ウィンドウのままになってるサイトマップ。
 このふたつが、ようやく完成の兆しを見せてきております。
 そして、更新停滞半月経過のsiteCTS。

 サイトマップはだいぶすごいことになってるので、(IE5.5以上なら)わりと楽しめるかと思います。楽しむのが目的のページか?なんてぇのはどうでもいいことです。
 なんだかもうサイト全体がひとつのアプリケーションみたいになってきました。

 たまには見た目系のスクリプトも作ってみようかと思い、フローティングテーブル(2種) / フェードエフェクト(2種) / タカタカメッセージと、気前よく5つも作ってます。見た目系スクリプトは大体うざったく感じるものですが、もちろんご多分に漏れません。
  1. フローティングテーブル(サイトマップ)
    プロトタイプ。scrollLeftとpixelLeftという新呪文を憶えてきた日に速攻で作った。「スクロールに置いていかれたらホームポジションへ移動」という簡単なもの。※現時点の不完全版では実装されておりません。
  2. フローティングテーブル(トップページ)
    プロトタイプを改良して滑らかに動くようにしたやつ。「置いていかれたらホームポジションまでの距離×0.3ずつ移動」にしただけ。なので、ポジションに近づくほど遅くなる。ネスケ対応を施したものの、4.78では動くのに6.1で動かない……。
  3. フェードエフェクト(トップページ)
    メッセージが全部表示されたら黒→透明へフェードアウトして、文字だけ浮かび上がってくるやつ。CSSのフィルターを使っております。もうちょっと頭の良い組み方があるかも。
  4. フェードエフェクト(サイトマップ)
    現在位置がぼわぼわと点滅するスクリプト。トップページのやつと違ってページの表示中はずっと作動してるため、CPU負荷がちょっと高い。
  5. タカタカメッセージ(トップページ)
    メッセージがタカタカと表示されていくやつ。スクリプトのコアは、よくある「ステータスバーにメッセージをスクロールさせる」とかと同じ手法。先頭を走るアンダーバーに思いのほか苦労した。
 いやぁ、とにかくネスケ6.1ですよ。バグなのか仕様なのか俺が悪いのか知らんけど、まっとうに動きゃしません。なに考えてんのかさっぱりわかりません。あんまり苛々するので、4.xもろとも切り捨てる気満々みたいです。(もちろん閲覧自体はできるようにするけど)
 ていうか6.1はバグ多すぎ。6.01より多いのはどういうことだろう。

 まったく。ほとんどのタグをDHTMLにできるインプローラと、限られたタグでしか認識しないネスケ。たしかに<LAYER>タグは画期的機能ではあるものの、(日本での)ユーザー比8:2とあっては、「インプローラで認識されないタグは無用の長物」なのです。
 そして、ろくな参考書がなくても実践で憶えられちゃうインプローラのDHTMLと、4.78で動くのに6.1で動かないネスケのDHTML。
 本当、なにからなにまで圧倒的で困る。

 まぁ「WWWブラウザ」って本来そういうもんじゃないけど、これだけの機能を実現するために多くのプロフェッショナルが徹夜で苦労してるんです。使ってあげたいじゃあないですか。
 いやいや、素人を騙すならインプローラに限ります。
 かくしてsiteCTSは、ネスケだけではなくCPUにまで厳しいWebサイトになっていくのでありました。嫌だね、こういうとこ。(トップページやサイトマップは長居するページじゃないから許せ)


 雪子ちゃんはとっても綺麗なダイヤモンドトロンのフラットディスプレイなんだけど、「FPM」なんていうボタンがあるんですな。
 こいつを押すと嘘みたいなことになります。色がとっても鮮やかになって、肌色がとにかく綺麗。それだけでもう「あぁ、Fine Picture Modeの略ね」と簡単に読めます。
 スクリプトを組んでる時とかは意味ない(というか、普段のおとなしい発色の方が目に優しい)けど、お絵描きサイトを見てまわる時なんかは重宝してます。

 なんてこたぁいいとして、うっかりONにしたまま色塗りすると大変なのが厄介です。

 そうですね。うっかりしてました。知らないうちにONになってました。こないだのCGはONのまま塗ってしまいました。OFFにしたら色くすみの素晴らしいこと。危ないなぁもう。


 9.12に作ったBakaViewExpに続いて、BakaFont2というのを作りました。ページを作る時に書体や色で迷うことが多いんで、使い勝手のいいフォントビューア(?)が欲しいな、と思ったんです。
 JavaScriptって「ブラウザでしか動かない」とよく言われますが、逆に言えば「ブラウザで動かせる」なんだよね。いちいちツールやソフトを起動しなくても、インプローラのままで実行できる。デメリットも時にはメリットシャンプー。

 ま、それはいいとして、なんか初めてのような気がします。「まっとうな返り値をもつ関数」を使ったの。正確に言うと「値を返す関数を作る必要ができた」ってところで。
 実はsiteCTSにあるスクリプト、ほとんど全部が返り値もなにもない「やるだけ関数」で、せいぜいリンクにブーリアンを返すのが関の山だったりします。
 これは俺のレベルの低さもあるけど、はっきり言ってネスケのせいです。いや冗談抜きで。インプローラ、ネスケ4.7、ネスケ6.1のどれもで動くスクリプトを作るのは、すごく難しいんです。

 BakaFontは自分で使うために作ったので、インプローラの5.5で動けばOKです。JavaScriptだろうがCSSだろうが、なんでも使い放題です。
 日頃からネスケに阻まれてやりたいこともできず苛々してる俺にとって、それはどれだけ気持ちの良いことでありましょう。ネスケのことさえ考えなきゃ、サイトマップみたいなスクリプトは簡単に作れるのに。

 そうしてできたBakaFont、自分用だけあって自分用の使い勝手にこだわっております。
  1. プレビューしたい文字列をコピーしてリンクバーから起動
  2. テキストエリアにペースト
  3. 左上の「HTMLで作成ボタン」を横切る(オートフォーカスされる)
  4. Tabキーを使ってキーボードから入力
 という感じで使います。微調整はマウスの方が楽なので、マウスモードというのもございます。
 色の指定が16進数の時は#を省略できるようにしたため、「フォームに入ってる色の値は16進数か」を識別する関数が大変でありました。行程さえ決まれば楽なんだけど。
 てなわけで、16進数識別関数を掲載して本日の講義を終わりたいと思います。

col = フォームに入ってる文字列
noHash = noHashSel(col.toLowerCase());
if (!noHash)
 col = "#" + col;

function noHashSel(vle) {
 var txts,hashFlag;
 txts = "ghijklmnopqrstuvwxyz";
 if (vle.charAt(0) == "#" || vle.length != 6)
  return true;
 else {
  for (i = 0; i < txts.length; i++) {
   if (vle.indexOf(txts.charAt(i)) != -1) {
    hashFlag = true;
    break;
   }
  }
 }
 return hashFlag;
}

 「頭に#がついてない」「6文字である」「g〜zが1文字もない」だったら、頭に#をつけるだけ。
 なので、A〜Fのみで構成される色名では誤認識されるのがポインツだね。俺は16進数しか使わないからいいんです。(存在しないようだし)

※後日付記:
 仮設ゆきこのおへやを作ったので、スクリプト本体はそちらの方に移しました。


 …やぁ。これまた空きましたねぇ。パ奮が始まって以来、中3日空いたのが1回あるだけだったのに、8日ですよ。新記録というより異常事態ですよ。
 いやもう、パ奮の画面を見るのも久しぶりです。未だに新しいトップページもサイトマップもお披露目してないです。俺はそろそろ見飽きてきたというのに、Web側のsiteCTSは旧バージョンのまま時間が止まっております。

 その間なにをやっておりましたかといいますと、表題の通り第三弾を作っておりましたのです。ひょんなことがきっかけで、BakaFont2を作った翌日にはすでに取りかかっておりました。
 最初は先輩二人のように「半分冗談」で作ってたんだけど、あれこれやってるうちに予想以上の出来になってしまいまして、本腰を入れることにしたんです。
 当然、siteCTSに充てる時間がなくなるわけです。しかも最後の調整を残したままだったんでアップするにできず、かといって一点集中型の俺はうまく分担もできず、どうせならコイツを完成させてからドドーンといってやろう!と目論んだ次第。

 明日に続きます。


 「Hyper Text Template」って知ってますでしょうか。拡張子は.httで、エクスプローラがフォルダをWeb表示する時に使うテンプレートなんですけど。
 ほら、ファイルを選択すると、左にデータとかサムネイルとか出るじゃないですか。右クリックから「フォルダのカスタマイズ」で色々選べるじゃないですか。あれですよ。

 このテンプレート、自分で作ればエクスプローラをお好みに仕立てることができたりします。Windowsのオブジェクトを扱うので勝手は少々違いますが、基本はHTMLなので、Webページ作りに慣れてる人なら結構簡単にできます。
 でも、HTTファイルに手を出している人はほとんどいないようですね。カスタマイズ系サイトは今までちらほら見てきましたが、せいぜい左パネルの画像をすり替えるくらい。

 そりゃあ見た目だけなら画像の交換だけでも充分だし、高機能が欲しいならオンラインソフトに素晴らしいファイラがゴロゴロしてます。わざわざ危険を冒してまでHTTファイルを編集する人なんていないんでしょう。
 ところがいたんですよ。ここに。

 そもそも、パソコンのOSとは「ファイルを管理する」ことから生まれた(、と本で読んだ)んです。とすれば、エクスプローラを始めとする "ファイラ" という存在は、もっとも基本となるアプリケーションとなりましょう。
 すなわち、カスタマイズ大好きっ子を自負するのであれば、これはもっともこだわるべきファクターであり、オンラインソフトにばっか頼ってるわけにはイカンのです。
[ 20KB ]
 というわけで、これがパ奮を異常事態に陥れてまで作った「BakaExp」です。デモ版を仮設ゆきこのおへやに用意したので、機能の方はそちらをご覧あれ。
 もちろん、俺独自の馬鹿機能も搭載しております。たとえば、アドレスバーを見るとここは「YN」というフォルダのはずですが、左では「ゆきなん」となってたりします。

 BakaExpの特長は、どこでもパネルとかフルパスリンクとか一発ボックスとか色々ありますが、一番大きいのは「エクスプローラの機能を拡張するスクリプト」ってとこでしょう。つまり、「いつもの使い慣れたやつがちょっと便利になる」てところ。
 エクスプローラがもともと持ってる機能を使ってるので、プラスはあってもマイナスはないのであります。

 明日に続きます。


 BakaExpは非常に良い経験となりました。
 エクスプローラが持ってる機能を活かすために、Microsoft様純正のスクリプトを解析する日々。プリントアウトして持ち歩き、昼飯を喰いながら解析する日々。それこそ見たことない命令のオンパレードで、「これ本当にJavaScriptなの?」と漏らす日々。
 下手な解説サイトよりよっぽど勉強になります。

 そのほとんどは間違いなくインプローラ専用なんでしょうが、BakaExpはエクスプローラ(=IE)で走らせるスクリプトだから一向に構いません。しかもWin Meのイメージプレビュー機能を使ってるので、Win 98や2000まで射程外。

 試行錯誤の結果にゲットできた命令の中で、革命的に役に立ったのが「クライアントプロパティ」でした。たとえば「オブジェクト.clientWidth」とした場合、そのオブジェクトの幅を取得できるんです。これがなかったら、左パネルの出し入れ機能はかなり難しかったでしょうな。

 実際のスクリプトから抜粋すると、
 leftPanel.style.height = document.body.clientHeight - topPanel.clientHeight;
 という感じで、
 左パネルの高さ = ウィンドウ(ドキュメント)の高さ - トップパネルの高さ
 という意味です。
 横幅も同じように、「左パネルの幅 = ウィンドウの幅 - 右パネルの幅」とします。

 clientプロパティに入る数値はその時々によって変わりますから、こうすればどんなウィンドウサイズにも対応できるってわけです。

 あるいは、expression() という命令もナカナカ強烈。通常、CSS(スタイルシート)とJavaScriptは別々に書かないといけませんが、この命令を使うと<STYLE>タグの中に直接JavaScriptを書けるんです。
 よって、こんなことが可能になります。

<SCRIPT language="JavaScript">
var widthSelect;
if (top.frames.length)
 widthSelect = 500;
else
 widthSelect = 800;
</SCRIPT>

<STYLE>
 TABLE { width:expression(widthSelect);}
</STYLE>
 「もしフレーム付きだったらテーブルの幅を500に、なかったら800に設定」

 まぁこれはだいぶ特殊な命令のようで、そのまま素直に書いても動いてくれないですけど。

 また、フルパスリンクを生成するためには、そのフォルダのフルパスをゲットしなきゃなりません。これは%THISDIRPATH%という秘密の魔法を使うとゲットできるんですが、JavaScriptでは使えないんです。
 そこで、BakaExpでは隠しフォームに%THISDIRPATH%を入れておき、JavaScriptはそれを見て間接的にゲットする…という方法を採用してます。
 ところがどっこい、完成も見えてきた頃合い、解析の結果によって
  ファイルリストオブジェクト.Folder.Self.Path
 でJavaScriptから直接ゲットできることが発覚したりもしました。(面倒くさいのでそのままですけど)

 これら数々の「エクスプローラ用JavaScript命令」は、Ver.4で行われた "インプローラとエクスプローラの統合" で生まれたんでしょう。きっと。
 こんなことではゲイツさんに「ウチのJavaScriptはホームページ専用のホビースクリプトじゃないのよ?」などと言われてしまいそうです。

 紆余曲折の果て、仕様変更による三度の作り直しにもめげずに生まれたBakaExp。
 今のところは公開する気満々だけど、色々なテスト(ちゃんと他のPCでも動くか、とか)が終わってないので、飽きないうちに完成させたいものであります。オンラインソフトっぽく言えば「これからアルファテスト」ってとこで、俺の近辺にいる3人のWin Meユーザーは、かわいそうに、最初の犠牲者となります。
 ともあれ、自分で使う分には支障ないとこまで仕上がってるんで、早くしないと……飽きる。




今月はたったこんだけ?




  <<< 2001.9 2001.11 >>>  
2001年10月

パチョ奮闘記