ダウンロード.
Version | 1.10 | |
公開日 | 2009/01/07 | |
ファイルサイズ | 451kB | |
ファイル名 | folderfilelist110.zip | |
形式 | zip書庫 |
概要.
フォルダツリービュー、フォルダドロップダウン、ファイルリストビューおよびそれらを操作するツールバーの4つを含むパッケージです。フォルダやファイルを選択するUIの構築において、エクスプローラライクな外観と操作性を提供するためのコンポーネントです。
C++Builder6にはTFileListBox/TDirectoryListBox/TDriveComboBoxが用意されています。これらのコンポーネントはWin
3.1パレットに入っていることからもわかるように、外見はWindows 3.1世代の古臭いものです。Windows xp以降のような新しい外見のコンポーネントが欲しかったこと、他の方の作られた同様のコンポーネントには期待した機能の物が見当たらなかったことから、作ってしまいました。
Windowsのシェルインターフェイスのラッパーではないので、多少エクスプローラと外見や動作の違うところはありますが、ほぼ同じ感覚で使用できます。
TCustomTreeView/TCustomComboBox/TCustomListView/TToolBarから派生しています。
TFolderTreeViewは、フォルダをダブルクリックすると、下位フォルダがあれば表示されます。
TFolderFileToolBarは、現在TFolderTreeView/TFolderDropDown/TFileListViewが対応している機能のボタンのみが表示されます。
スクリーンショット.
フォームエディタに配置したコンポーネントの様子です。
配置位置は下記のとおり。
TFolderTreeView | TFolderFileToolBar |
TFolderDropDown | TFileListView |
マニュアル&ヘルプ&サンプル.
マニュアルは別ページで。このマニュアルはアーカイブに含まれています。
ヘルプはこちらのページから別途ダウンロードしてください。
一応、サンプルとして簡単な動作確認の出来るアプリのソースを、アーカイブに含めてあります。
インストール/アンインストール/利用時の注意.
インストール.
インストーラは付属していません。今回はパッケージでの公開です。パッケージのインストール方法はC++Builderのヘルプを参照してください。
ソースは今のところ非公開です。
コンポーネントは"Ysl"というパレットを作ってその中に登録されます。
アンインストール.
アンインストーラも付属していません。アンインストールもC++Builderから行ってください。
利用時の注意.
本コンポーネントを利用するプロジェクトにおいて、下記の設定が必要です。
- プロジェクトオプションの条件定義(マクロ):NO_WIN32_LEAN_AND_MEAN
- ライブラリの追加:$(BCB)\lib\Psdk\shlwapi.lib
- リソースの追加(Bitmap):添付の OverlayHidden.bmp, ToolBar-Normal.bmp
改版履歴.
- …機能追加.
- …仕様変更.
- …バグフィックス.
Version | 日付 | 変更点 |
1.10 | 2009/01/07 |
|
1.00 | 2008/12/02 |
|
今後の予定.
- 履歴「戻る」の追加。
- ファイル情報取得のスレッド化(パフォーマンスに問題あるようなら)。
- エクスプローラとのドラッグ&ドロップ操作の対応、コンテキストメニューの対応。まじれすか! そこまでやるの?
ひとこと
Ver. 1.10
やっぱりないと使いにくいかと思い、ファイルオープンダイアログによくあるツールバーを追加してみました。これまた、似てるけどビミョーに外見も動作も違います。
ボタンは連携するコントロールをプロパティに設定することで、対応したボタンのみが表示されます。今のところ「1つ上のフォルダへ」「表示メニュー」の2つしかありませんが。他のボタンはフォルダツリービュー/フォルダドロップダウン/ファイルリストビューが対応する機能を実装していないので、今のところ実装する意味がありません。こんな仕様でいいのかどうか作った本人も疑問を感じながらも、反応を見るためにも公開してみることに。あまりにもいい加減な仕様ですが、おまけということで。
Ver. 1.00のTFolderTreeViewのみにあった「OnlyFileSystem=trueでも”ごみ箱”が表示される」制限ですが、意外と簡単に対処できました。TFolderDropDownも同様の処理に変えたので、OnlyFileSystem=falseでごみ箱が表示されるようになりました。←いいのか?
そのほかにも使ってみて気づいたところをいろいろ修正。やっぱり使ってみないと欠点を認識しにくいですね。
また実験的に、サンプルとして実行ファイルをアーカイブに入れました。そのせいでかなりアーカイブがでかくなってます。
Ver. 1.00
オリジナルコンポーネントの公開も第3弾になりました。いまだにカスタムコンポーネントの作成には苦労します。予想外の動作の多さと、説明の少なさに。
エクスプローラライクな外観を実現するために、シェルインターフェイスを使用しています。これまたMSDNの英語の説明と格闘することに。おまけに量が半端じゃないので、概要を理解するだけでも苦労しました。Webでシェルインターフェイスの説明を公開している方々、参考にさせていただきました。でもシェルインターフェイスのほんの一部しか理解してないし、ほんの一部しか利用してないし。またC++Builder6に付属のヘッダ/ライブラリが古くて、Windows2000以降に追加されたものはコンパイルエラーになるので、利用できるAPIを探すだけでも大変。
C++Builderの既存のクラスから派生させて作ったので、エクスプローラとちょっと違う外見&動作になってます。特にTFileListViewがひどいですね。ViewStyleプロパティを変更しても、Windows
xpで見慣れたエクスプローラとはアイコンの並びが違うし。COM+のラッパーとして作ればエクスプローラと限りなく同じにできるかもしれません。しかし前述のC++Builder付属物の古さから可能か否か調査が必要であること、Webで検索しても情報が出てこなくて作成が困難そうなので、今の仕様にしました。
最初TFolderDropDownはTCustomComboBoxExから派生させていたのですが、どうもTCustomComboBoxExが期待どおりに動きません。アイコンオーバーレイはまったく効かないし(ヘルプの説明も怪しい)、TComboExItem::Dataを使用すると不正終了するし。
結局、アイコンオーバーレイの問題はTCustomComboBoxでオーナードロースタイルを使用して解決。TComboExItem::Dataの問題はTStrings::Objectsと同様ということまではわかったものの、解決できず。リストなどにもTStrings型のプロパティを持つコンポーネントはありますが、このようなコンポーネントでは、コンポーネント破棄時の内部使用データの破棄で、よく問題に出くわします。
Copyright 2005-2016, yosshie.