このコンポーネントは、エクスプローラ等で表示されている、ファイルや拡張子に関連付けられたアイコンを取得して保持しておく事が出来るコンポーネントです。
貼り付けるだけでエクスプローラ風表示……という訳には行きませんが、リストビューと連携してイベントハンドラを記述すればそれっぽい表示にはなります。
コンポーネントの使い方は、簡易マニュアルをご覧下されませい。
=============================================================================== 魔僧神仙コンポーネントライブラリ#2 TFilerIconCache version 1.00 for Delphi Programed by Nagayama / Masoushinzen Last up to date 1999/09/28 =============================================================================== [ 概要 -----------------------------------------------------------------------] このコンポーネントは、フォームに貼り付けて TListView と関連付けるだけで、指定 されたフォルダにあるファイルのアイコンを取得して表示します。取り出すアイコンは 「大きなアイコン」表示用と「小さなアイコン」表示用の両方ですので、 TListView の表示能力をすべて活用する事が出来ます。 取得したアイコンは拡張子単位で内部に保持するので、2度目以降のアイコンの取り出 しは高速です。 更に、アイコンファイル(*.ICO)、実行ファイル(*.EXE)、ショートカット(*.LNK) の三 種類のファイルについては、ファイル名で登録するため、各アプリ毎の固有のアイコン を表示する事ができます! これを使えば、比較的簡単にエクスプローラ風アプリケーションを作成することができ る……かもしれません(^^;) [ 動作環境 -------------------------------------------------------------------] WindowsNTでサンプルプログラムが予定通りの動作をすることを確認しました。 Windows95/98 でも、動作はすると思いますが確認していません。 コンパイル可能な Delphi の対応バージョンも不明です。 なんとなく Delphi3.0 以下ではコンパイルできないような気がします…… ウィンドウハンドルを捏造するメソッドが毎度互換性があるものやらないのやらで。 もしコンパイルできたら、メールくだされい。 ……ウチ以外の4.0でもコンパイルできなかったりして(^^;) oioi [ 製作・動作確認環境 ---------------------------------------------------------] アセンブリAT互換機。 Delphi : 4.0 Update3 CPU : PentiumII-450Mhz MEMORY : 256MB OS : Microsoft WindowsNT4.0 WS SP4 + InternetExplorer4.01SP2 with ActiveDeskTop あと、ごちゃごちゃと……詳しく知りたければホームページを見てくれい(^^;) [ 使い方 ---------------------------------------------------------------------] まず、vclIconCache.pas を IDE にインストールしてください。動的に作成するなら そのままで結構ですが。インストール方法はマニュアルをご覧あれ… コンポーネントパレットにアイコンが現れたら、フォームに貼り付けてオブジェクト インスペクタを開いて、設定を施します。 プロパティのリファレンスは以下のとおり。 property LargeIcons : TImageList; ファイルから取り出した 32x32 のアイコンイメージを保持しています。 property ListView : TListView; アイコンを利用する TListView を指定します。 このプロパティを設定すると、対象の TListView の LargeIcon プロパティと SmallIcon プロパティには、このコンポーネントの LargeIcons プロパティと SmallIcons プロパティが自動的に設定されます。 TListView に表示を行わない場合は別に指定しなくても構いません。 property SmallIcons : TImageList; ファイルから取り出した 16x16 のアイコンイメージを保持しています。 property Terminated : Boolean; このプロパティを True に設定すると、このコンポーネントはすべてのループ 処理を中断するようになります。ループがネストしている場合には、各ループ を段階的に中断する事になります。 メソッドのリファレンスは以下のとおり constructor Create( AOwner:TComponent ); override; オブジェクトを生成します。特に変わったことはしてません。 destructor Destroy; override; オブジェクトを破棄します。特に変わったことはしてません。 procedure GetIconImage( FileName:TFileName; var Icon:TIcon; Style:TIconStyle=isLargeIcon ); virtual; FileName で指定したファイルに関連付けられているアイコンを取得して、 Icon に格納します。 Icon はあらかじめ作成しておく必要があります。 Style に isLargeIcon を指定すると 32x32 のアイコンが、isSmallIcon を指 定かると 16x16 のアイコンを格納します。 このメソッドは LargeIcons プロパティ等とは無関係に動作します。 function GetIconIndex( FileName:TFileName ): Integer; virtual; FileName で指定したファイルに関連付けられているアイコンを取得し登録し そのインデックスを返します。このインデックスを使って LargeIcon プロパ ティなどにアクセスしてアイコンを取得します。 このインデックスは TListItem.ImageIndex 等に設定できる値です。 何らかの事情で登録に失敗した場合は -1 を返します。 procedure LoadFromDirectry( PathName:TFileName; SubDir:Boolean=False ); virtual; 拡張子のアイコンをフォルダ単位で読みこみます。 第1引数 PathName に対象のフォルダ名を設定します。この時、 最後尾に '\' は無くても構いませんので、 ExtractFileDir() 関数でも ExtractFilePath() 関数でも受け付けられます。 第二引数 SubDir に True 指定すると、 PathName の下位フォルダを 再帰的に検索していきます。 procedure Reset; virtual; 読み込み中断フラグである Terminated プロパティをクリアします。 今のところそれだけです。 procedure Terminate; virtual; ファイルが沢山あるフォルダで実行したときには、当然、処理時間が長く かかります。読み込みのループを途中で終了させたい場合には、 このメソッドを実行します。実行すると Terminated プロパティが True に設定されます。 ただし、現在は読み込みをスレッドで実行していないので、使用しても 殆ど意味がありません(^^;) 将来の布石……です。 function RegisterExtIcons( FileNames:array of TFileName ): Integer; virtual; 複数の拡張子を一度に登録する事が出来ます。内部で GetIconIndex() を呼び 出していますが、このメソッドが返す値は登録に成功した拡張子の数です。 作者は返り値のこの仕様をあまり気に入っていません(^^;) イベントのリファレンスは以下のとおり TFileLoadEvent = procedure( Sender:TObject; FileInfo:TFileInfo; Path:TFileName ) of Object; property OnFileLoad : TFileLoadEvent; LoadFromDirectry() 手続きを使ってファイルからアイコンを抽出したときに発 生します。 FileInfo 変数にはアイコンを読みこんだファイルの情報が格納さ れているので、このイベントを使って TListView 等に項目を追加します。 TFileNameEvent = procedure( Sender:TObject; FileName:TFileName; Index:Integer ) of Object; property OnRegist : TFileNameEvent; アイコンが新規に登録されたときに発生するイベントです。既に登録されてい る拡張子を再び登録しようとしたりした場合には発生しない事に注意して下さ い。 作者にも何のためにあるか判らないイベントです(なら作るな!)。 [ 必読 -----------------------------------------------------------------------] このソフトウェアは FreeSoftWare(タダに非ず。自由に使ってよい、の意)として 公開してあります。著作権は放棄しませんが、プログラム、ソースコードともに その利用法は各自の自由とし、使用に伴って発生した、いかなる損害をも保証する 義務を負わないとしておきます。デバッグには前向きに対処したいと思いますが。 転載や再配布などはガンガンしてもらって結構です。許可も要りません。 ただし、常識ですがアーカイブの中身を改変したりしないように…… ソースコードは Borland Delphi 用のもので、バージョンは4.0のみ確認しています。 少なくとも Borland C++Builder でのコンパイルは考慮してません。 [ 1999年の俺 -----------------------------------------------------------------] メールアドレス : nagayama@psn.ne.jp ホームページURL: http://www.psn.ne.jp/~nagayama/ 要望・苦情・サポート等はメールでも掲示板でもOKですが、メールは大体 ホームページに掲載しますので、あらかじめご了承を。(匿名可) そのうち、サポート専用の掲示板も作るでしょう……多分。 [ EOF ------------------------------------------------------------------------]