DelphiのDirectoryOutlineの使い方メモ。
IEで表示させた画像をドラッグアンドドロップで保存することが多い身としては、画像ファイル名につく括弧がじゃまだと思うのであった。
例えば…12345.jpgが12345[1].jpgとか、12345(1).jpgとか…
ネットニュースで拾っていたときには分類上の都合から
(リポスト注意・春の山シリーズ)abcdef_1.jpg
などというヘッダーがついたファイル名にしておくことが多かった(これは収集ソフトの設定による)。
で、分類後は括弧付きである必要がないし、ファイル名がやたらと長くなって可読性が低下するので、リネームするわけだが、手動でやるとあっという間に腱鞘炎になるくらい苦痛な作業だ。
そこでファイル名から括弧を取り除いたり、ファイル名に"0"を追加するソフトを作った("0"を追加するのは、2.jpgや9.jpgがあるのに1.jpgの次に10jpgが来ちゃう場合があり、ソートがちぐはぐになったり、ファイル名の統一性が無くなるので、1.jpgを01.jpgとかabcd1.jpgをabcd01.jpgなどにリネームする必要があったため)。
文字追加と括弧取りソフト
初版は7年前に作ったらしい。自分でも忘れていた…当初は括弧取りと文字追加は別々に開発したのだが、結局インターフェイスや資源など共通しているし、いちいち別々に起動するのもなんなので、統一しようと思っていたのだが、なかなか思い切りがつかなかった。
で、昨晩手の甲の血色が悪く、
青白くなりながら(笑)両者の統合に踏み切った。
当初フォームを馬鹿でかくして両方のインターフェイスを貼り付けるだけにしようと思ったが、VGAサイズに収めるという原則(ま、これは個人的な原則だけど)から逸脱しそうだったのと、どうせなら新しいコンポーネントを使ってみようということで、タブでページ切り替えできるようにしてみた。
新型統合ファイル名変更ソフト(笑)
あとディレクトリー間の移動でいちいちダブルクリックでツリーを展開せにゃあかんかったり、ディレクトリーをさかのぼるといちいちホームポジションに戻っちゃう
DirectoryListBoxはやめて、わずかだけど操作性の良い
DirectoryOutlineを使ってみることにした。
まぁ、
ShellTreeViewとか
ShellListViewを使った方がWin98以降のUIにはマッチするのだろうけど、
ShellListViewの動作があまりに遅く、
『贅沢な環境で使ってこそ快適』状態だったのと、致命的なのは『使い方がよくわからん』状態だったので取りやめた。
今後のバージョンアップで切り替えるかもしれない。まぁ、素のWin95ユーザーは少なくなっただろうし、98lite環境で動けばいいので…それといちいちコードを書かなくても子ディレクトリーの存在を示してくれたり、ファイルのダブルクリックで関連づけ起動できる点は便利だ。Windows Explorerそのものだからね。
で、コードの移植は文字追加ソフトをベースに改良した結果、すんなりと進み、問題はなかった。ページ切り替えも綺麗にできた。
だが、
DirectoryOutlineが曲者で、ちょっとした事件になってしまった。もともとSampleであり、Helpもない(といってもDelphiのHelpというのはある程度理解していないと役に立たないのだが…)しで、あまり使用は推奨されていない。
で、
DirectoryOutlineはディレクトリー表示に「小文字のみ」「大文字のみ」「混在表示」の切り替えができるのだが、デフォルトで「小文字のみ」になっている。これでは可読性の低下、違和感を禁じ得ないので、「大文字」に変えてみた…しかし、これが大失敗だったわけ。
当初
「混在表示」があることに気付かず使っていたら、ドライブを変えると
DirectoryOutlineからディレクトリーの値が得られず、
FileListBoxが更新出来なくなるトラブルが発生。開発機のWin2000のNTFSドライブはOKでFAT32のドライブだとNGになっているように見えたので、ファイルシステム依存なのか?と思ったが、Win98SEマシンでも同様のトラブルが発生した。FAT32だけのドライブ構成でも同じ。
でも移った先のドライブではフェッチしているようだし、なぜ
FileListBoxが更新されないのか全くつかめなかった。いろいろと「それらしい」プロパティーを変えてみてもダメだったし…で、
DirectoryOutlineの
Directoryの値をラベルに表示させてみると、これが更新されていない。
なんじゃこりゃ??
というわけで、
DirectoryOutline関係をWebで調べるも情報は少なく、答えにたどり着けない。延々うなり続けて、Win2000のDelphi6からWin98SEのDelphi5で書き直そうと、一から書き直しはじめ、以前保存した「期待通りに動作する」ソースコードをメモ帳でテキストに変換している最中に
DirectoryOutlineに「混在表示」があることを発見。これで全て解決。
この躓きで数時間かかった。
あとは文字コードがS-JISじゃなかった場所を直したりという作業があったわけだが、なんとか形になった。
いやいや、久々に頭脳フル回転でした。
あとはおまけ機能の画像表示で
・表示インターバルに使っているWindows.Sleepをタイマーに切り替え(途中で表示をやめるということができないので困るw)
・JPEGとBMPしか表示出来ないくせにGIFやPNGの選択が可能で、エラー出して落ちる(固まる)のをtry文かなにかで回避する
・なんとか方法論が完成しつつある「画面サイズに合わせた画像の縮小機能の追加」
これらを付け加えれば完成だね。