あまつぶ

9.27 【コントロールパネルを作る】

 IconPartyでファイルのカスタムアイコンも簡単に編集できるといいなと。フォルダのアイコンが編集できるんだからファイルのアイコンも……と考えるのは当然の流れ。現在のバージョンではカスタムアイコン以外のアイコンは編集できるわけだから、あと一歩だ(なにが(笑))。
 しかし、例えばPICTファイルのカスタムアイコンを編集したいっていう場合に、ふつうにドロップしたのではPICT編集状態に入ってしまう。そうならないためには、なにかキーを押しながらドロップというふうにするべきだろう。シフトキーとコントロールキーはまずいから、そうすると残りはオプションキーかコマンドキー。押しやすさを考えるとコマンドキーがベストかなぁ?
 そういえば、カスタムアイコンの保存で、すでに'icns'リソースが存在すると変更が反映されないというバグ(?)があるような気がする。早速やってみると、やはりだめ。'icns'リソースがあればそちらを優先するため、うまく表示されないというわけか。一番簡単な対処方法はじゃまな'icns'リソースを削除してしまうことだけど、フルカラーのアイコンが入っていたりするとそれも消えてしまうからまずい。が、消さずに'icns'リソースも一緒に変更することにしても、32000色以上表示可能な環境ならフルカラーアイコンが優先的に表示されてしまうからそれもおかしな感じがする。
 ってことは、フルカラーのアイコンを含むフォルダアイコンの編集はできないことにして、もししたい場合は「フルカラーのアイコンは保存されません」と警告を出す程度でいいのかしら。ファイルについても同様の処理をすると。

 その他の妙な症状といえば、エイリアスを開いた場合の処理が変なこと。PICTでは「開けません」といわれるし、GIFやJPEGは反応なし、フォルダや他のファイルではアイコンリストウィンドウが開いてしまう。開こうとしているものがエイリアスかどうかを判断していないだけのことなのでこの対処は簡単なんだけど。

 今さらながら、コントロールパネルの作り方を勉強中。最初'cdev'リソースのフラグをつけ忘れてなんどもフリーズしたが、なんとか動いてくれるようになった。リソースをいろいろ作らないといけないしめんどくさそうだなと思っていたのだけど、やってみればそれほどたいしたことはないみたい。コードリソースだからいろいろと注意しないといけないことは多いけど、慣れてしまえばアプリケーションより楽なこともありそうな感じ。
 まだ一通りのことすらできていない段階なので細かいことはまたそのうちということにして、ヘッダファイルやIMを見て気がついたことなど。ま、これからコントロールパネルを作ろうっていう人もあまりいないだろうから参考になるかどうかは謎だけど。<Finder.h>にコントロールパネルで使ういくつかの定数が定義されているのだけど、その中で「cursorDev」というIMには書かれていない定数がある。おそらくマウスカーソルの更新のことだと思うが、どのように処理してやったらいいんだろう。いつから追加されたのかがわかれば参考になるのだが、、はて……。あ、IMは、「More Mac Toolbox」の「Control Panels」ね。
 それから、'nrct'リソースのこと。コントロールパネルの矩形を定義するものなのだが、どのサイズがいいかというのはある程度試行錯誤する必要がある。DITLでの表示から計算してやればある程度はわかるかもしれないけど、ぼくは試行錯誤した。その際に、わざわざプロジェクトのリソースファイルを変更してMakeし直すのが面倒でコントロールパネル自体を変更してみたのだが、そうすると思わぬ領域が表示されて、いくらいじっても直らなくなってしまった。この原因はFinderでコントロールパネルを開いた時に追加される'kwst'というリソースで、これを削除して開いてやれば正常に戻る。おそらくコントロールパネルが開かれた位置なんかを記録しているのだろうけど、一応注意すること、と。

 あとは、コントロールパネルをアピアランスに対応させる方法について。普通のダイアログなら'DLOG'リソースと同じIDの'dlgx'リソースを追加してやるだけで勝手に対応してくれるが、コントロールパネルの場合はそうはいかない。試しに'DITL'リソースと同じIDの'dlgx'リソースを追加してみたけどさっぱりだめだった。
 仕方ないので、初期化時にSetThemeWindowBackground()で背景をつけてみた。これはあっさりうまくいって、あとはアップデートとアクティベート、ディアクティベートの時にDrawThemeModelessDialogFrame()を呼んでやればみかけはだいぶよくなった。あとはエディットテキストだけど、DrawThemeEditTextFrame()でいけるのかな。これはまだ試してないんだけど。
 もっと他に簡単にできる方法があるのかも知れないけどどうなのかな。アピアランス関係のドキュメントをもう一度読んでみるかなぁ……。

 しかし、こうやってがんばってまでアピアランス対応のコントロールパネルを作る意義というのはあまりないかもしれない。OS 8.0以降(たしか)ならタイプ'APPC'のコントロールパネルアプリケーションが使えるから、このバージョンを境に、コントロールパネルとコントロールパネルアプリケーションを使い分けるのがいいのかも。リソースのIDを変更したりする必要はあるけどソースの大部分は共有できそうだし。

 次回は、続き、あるいはレジスタの保存。

to September 25, 1999 ↑ to September index → to September 28, 1999