![]() |
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||
近所のホームセンターで売られていた乗馬マシンがえらくディスカウントされていた。一流メーカのものではなく、聞いたことのないブランドのものだが、1万円をちょっと超えた値段になっている。2年ほど前はブームだったが、かつてのぶら下がり健康器具同様に一過性のもので、在庫処分になったのだろう。そのぶら下がり健康器具も同じコーナに売られていた。台湾産の快獣使いには目新しく、使い方をあれこれ想像していたようだ。結局物干し台になるというと、それは便利だと感心していた。ちょっと違うと思う。
その乗馬マシンであるが、ホームセンターに行くたびに「欲しい!」「ダイエットできる」と実にうるさい。天童よしみを彷彿させる体型が多少とも引き締まってくれるのならばうれしいが、こんなに大きなものをどこに置くというのだ。それに効果なんてあるはずがないし。
2週間ほどは逃げ続けていたが、とうとう根負けして買わされてしまった。
暇なときに時々やっているようだが、はや快獣のおもちゃ化していることは言うまでもない。
とあるリソースをいぢっていたら、中にmidiファイルが格納されていることに気づいた。おもしろいので一覧を表示して、ぽちっと押したらそれを演奏してみるプログラムを書いてみることにした。使用言語はお気楽極楽なDelphiである。
リソースの中からメモリに読み出す処理が出来、さて演奏なのだが、メモリから直接midiを再生させる手段がわからない。いろいろあさったが、WindowsのAPIではファイルからしか再生できないみたいだ。
しかたがないのでテンポラリファイルに出力し、それをAPIに与えてみたのだが、「そんなデバイス知らんがや」と言われてどうにもならない。
ret := mciSendString(PChar('open d:\temp.tmp alias FILE'), nil, 0, 0);
ret := mciSendString(PChar('play FILE notify', nil, 0, 0);
作成したファイルが悪いのかと、temp.mid とリネームしてからMedia Playerで再生してみると正常に再生できる。しかたがないからAPIを直接たたかずにTMediaPlayerコンポーネントを試してみようか。これはおおげさなのでいやなのだが。
その前に、別のファイルを再生できるかどうか試してみた。別のというよりも、Media Playerで確認した、リネーム済みのファイルである。
不思議なことにこれはすんなりと再生された。なんということだ、このAPIは拡張子でファイルを判断しているのだ。ということはテンポラリの名前を temp.tmp ではなく temp.mid とすればよかったのだ。
よくよく考えたら至極もっともな話しなのだが。ということで一件落着。とっぴんぱらりのぷぅ。
Let's Noteが噴火したのでHP Miniを購入し、それ以来ずっとこれをメインに使っている。Let'sで使っていたMS-Office 2003はMiniにライセンス移管できないので(できるのか?)、オフィススイートとしてOpenOffice.orgを使っている。
ドキュメントを書くときによくMSのクリップアートを利用していた。気の利いた素材がいろいろある。これをダウンロードするとOfficeのメディア管理ツールが起動してHDDに保存してくれる。
OOoにもギャラリというよく似た機能があるが、MSサイトのクリップアート(mpf)には対応していない。なんとかならないかと解析してみた。
mpfの正体はxmlであり、画像や音声などのファイルはBASE64でエンコードされた上でリソースとして格納されている。そこまでわかればファイルに書き出すことも可能だ。
ということでごそごそと作ってみた。
ダウンロードしたmpfファイルを開くと、左のツリーにファイル内のリソースが表示される。リストを選択するとその詳細が右側に表示される。デフォルトでOFFになっている「自動再生」にチェックを入れておくと、音声ファイルを再生することが出来る。リスト内のアイテムを選択しておき、「保存」を押すと指定したフォルダにファイルが出力される。とまぁこんなツールだ。
ClipGallery20081219.zip (401KB)
エラーチェックを一切やっていないので、ヘンなファイルを与えたときとか、未知のリソースに出会ったときに落ちてしまうが、とりあえず使えるものができた。ファイルのドロップや、コマンドラインも受け付けるので拡張子に関連付けると便利かもしれない。
なお、クリップアートには「クリップオーガナイザ2002」形式と、「Clip Gallery 5.0」形式があるが、このツールが対応しているのは「クリップオーガナイザ2002」形式だけである。名前がClipGalleryなのに「Clip Gallery 5.0」に対応していないということを気にしないように。
せっかくだから、MS-Officeのクリップアートを再利用可能にするツールClipGalleryを改良した。改良点は次のとおり。
とまぁこんなところだ。やりたいことは大体やったかな。
Download: ClipGallery20081220.zip (405KB)
ClipGalleryの機能を拡張して、ダウンロードしたmpfから直接OOoにクリップをインポートできるようにしようと思いたった。プレビューに表示されている画像をOOoの編集画面にドラッグ&ドロップするのだ。
まずはテストプログラムを作ってみた。ところが画像をWriterにドロップしても、新規セクションの追加ダイアログが開くだけで画像が表示されない。Explorerからだとうまくいく。Paintにドロップすると問題がない。Drawでも画像が追加される。ひとりWriterだけがうまくいかない。
おもいあたったことがあったので、XPでも試してみた。ちゃんと動くじゃないか。ということはVistaのく*ったれなUACが原因だ。
Writerを管理者として起動してみた。やはりドロップできる!
不思議なことに「管理者として起動」を一度行うと、それ以降はドロップできるようになってしまった。Norton LabsのUAC Toolを使っているおかげだろうか。もしかするとそれのせいでDrawもドロップを受け入れたのかもしれない。
とにかくVistaのUACが腐っていることだけは確かだ。
_ どかにゃ@さすらい中 [現在かの国で鉄なさすらい中です]