Tiny Mouse's WorkshopソフトウェアライブラリTSelectFolderDialog
フォルダの参照ダイアログボックスを表示する TSelectFolderDialog
●はじめに
 《TSelectFolderDialog》は、「フォルダの参照」ダイアログボックスを表示する、
Delphi 用のコンポーネントです。
 Delphi で「フォルダの参照」ダイアログボックスを表示するには、
SelectDirectory 関数を使う方法がありますが、このコンポーネントは
TOpenDialog 等のように、フォームにコンポーネントを貼り付けて使用できます。

 《TSelectFolderDialog》には、次の特徴があります。

・使用方法は標準コンポーネントの TOpenDialog 等とほぼ同じ
・外観と動作を指定できる
・最上位のフォルダを指定できる
・特定のフォルダを選択した状態でダイアログボックスを開くことができる
・ダイアログボックスや [OK] ボタンのキャプションを指定できる
●確認済の動作環境
 Windowx XP Home + Delphi 6 Personal
 Windows XP Home + Delphi 7 Professional
●インストール方法

 Delphi の「既存パッケージへのコンポーネントのインストール」の手順に従っ
て、SelectFolder.pas をインストールして下さい。インストールされると、コン
ポーネントパレットの「Dialogs」タブに登録されます。

●使用方法

 1)フォームにコンポーネントを追加します。

 2)プロパティを設定します。普通に使うには何も変更する必要ありません。

 3)Execute メソッドを使ってダイアログボックスを表示します。

 4)選択されたフォルダは SelectFolder プロパティで取得できます。

●プロパティ

◎Handle: HWnd

 Execute メソッドが呼び出された後にダイアログボックスのウィンドウハンドル
へアクセスできます。ダイアログボックスが閉じた後,0 にリセットされます。

◎DisplayName: String

 選択されたフォルダの表示名を取得できます。

◎ImageIndex: Integer

 選択されたフォルダのアイコンの、システムイメージリストのインデックス値を
取得できます。
 ※新しいスタイルを指定した場合は使用できません。

◎Options: TBrowseInfoOption

 ダイアログボックスの外観と動作を指定します。
 次の値を指定できます。

 bifReturnOnlyFSDirs … ファイルシステムディレクトリのみ選択できる
 bifDontGoBelowDomain
  … ドメインあるいはワークグループより下のネットワークフォル
    ダを表示しない
 bifStatusText … ダイアログボックスにステータス領域を表示する
 bifReturnFSAncestors
  … ファイルシステムが元になっているフォルダのみ選択できる
 bifEditBox … フォルダ名を入力できるエディットボックスを表示する(*1)
 bifValidate
  … 無効な名前をエディットボックスに入力したとき、OnValidateFailed イ
    ベントが発生する(*1)
 bifNewDialogStyle … 新しいスタイルのダイアログボックスにする(*2)
 bifUseNewUI … bifEditBox と bifNewDialogStyle を合わせた値(*2)
 bifBrowseIncludeURLs
  … URL を表示できる(*2)
    bifUseNewUI と bifBrowseIncludeFiles が指定されていないといけない
 bifUAHint … エディットボックスの代わりに用法ヒントを表示する(*2)
 bifNoNewFolderButton
  … 「新しいフォルダ」ボタンを表示しない(*2)
    bifNewDialogStyle と一緒に使用する
 bifBrowseForComputer … コンピュータのみ選択できる
 bifBrowseForPrinter … プリンタのみ選択できる
 bifBrowseIncludeFiles
  … フォルダだけでなくファイルも表示し選択できる(*1)
 bifShareable
  … ネットワーク上の共有可能なフォルダを表示し選択できる(*2)
    bifUseNewUI と一緒に使用する

◎Title: String

 ツリービューの上部に表示するテキストを指定します。
 ※ダイアログボックスのタイトルバーに表示するテキストではありません。

◎StatusText: String

 ステータス領域に表示するテキストを指定します。
 ※Options プロパティに bifStatusText を指定して下さい。
 ※新しいスタイルを指定した場合は使用できません。

◎RootFolder: String
◎RootSpecialFolder: TSpecialFolder

 ツリービューに表示されるフォルダの最上位のフォルダを指定します。
 RootFolder にはフルパスで、RootSpecialFolder には次の値を指定できます。

 sfDesktop … デスクトップ (仮想フォルダ)
 sfInternet … インターネット (仮想フォルダ)
 sfPrograms … スタートメニューのプログラム
 sfControls … コントロールパネル (仮想フォルダ)
 sfPrinters … プリンタフォルダ (仮想フォルダ)
 sfPersonal … マイドキュメント
 sfFavorites … お気に入り
 sfStartup … スタートメニューのスタートアップ
 sfRecent … 最近使ったファイル
 sfSendTo … 送る
 sfBitBucket … ごみ箱 (仮想フォルダ)
 sfStartMenu … スタートメニュー
 sfMyMusic … マイミュージック
 sfMyVideo … マイビデオ
 sfDesktopDirectory … デスクトップのファイルオブジェクト用のフォルダ
 sfDrives … マイコンピュータ (仮想フォルダ)
 sfNetwork … ネットワークコンピュータ (仮想フォルダ)
 sfNetHood … ネットワークコンピュータのファイルオブジェクト用のフォルダ
 sfFonts … フォントフォルダ (仮想フォルダ)
 sfTemplates … 文書テンプレート用のフォルダ
 sfCommonStartMenu … AllUsers のスタートメニュー
 sfCommonPrograms … AllUsers のプログラム
 sfCommonStartup … AllUsers のスタートアップ
 sfCommonDesktopDirectory … AllUsers のデスクトップ用のフォルダ
 sfAppData … アプリケーションデータ (*1)
 sfPrintHood … プリンタフォルダのファイルオブジェクト用のフォルダ
 sfLocalAppData … アプリケーションデータ
 sfAltStartup … ローカライズされないスタートアップ
 sfCommonAltStartup … ローカライズされない AllUsers のスタートアップ
 sfCommonFavorites … AllUsers のお気に入り (*3)
 sfInternetChache … インターネット一時ファイル用のフォルダ (*1)
 sfCookies … Cookie 用のフォルダ
 sfHistory … 履歴
 sfCommonAppData … AllUsers のアプリケーションデータ (*2)
 sfWindows … WINDOWS フォルダ (*2)
 sfSystem … SYSTEM フォルダ (*2)
 sfProgramFiles … Program Files フォルダ (*2)
 sfMyPictures … マイピクチャ (*2)
 sfProfile … ユーザープロファイル (*2)
 sfProgramFilesCommon … Program Files 内の Common フォルダ (*2)
 sfCommonTemplates … AllUsers の文書テンプレート用のフォルダ (*3)
 sfCommonDocuments … 共有ドキュメント (*3)
 sfCommonAdminTools … AllUsers の管理ツール (*3)
 sfAdminTools … 管理ツール (*3)
 sfConnections … ネットワーク接続
 sfNone … 指定しない

◎SelectFolder: String
◎SelectSpecialFolder: TSpecialFolder

 選択されたフォルダを取得できます。
 また、特定のフォルダを選択した状態でダイアログボックスを開きたいとき、そ
のフォルダを指定します。
 SelectFolder にはフルパスで、SelectSpecialFolder には RootSpecialFolder
と同様の値を指定できます。

◎Caption: TCaption

 ダイアログボックスのキャプションを指定します。

◎OKButtonCaption: TCaption

 [OK] ボタンのキャプションを指定します。

●メソッド

◎Execute: Boolean

 ダイアログボックスを表示します。
 [OK] が押されてダイアログボックスが閉じたときは True を返します。[キャン
セル] が押されたときは False を返します。

◎SetEnableOK(Value: Boolean)

 [OK] ボタンを有効あるいは無効にします。

◎DefaultHandler(var Message)

 メッセージをダイアログボックスのウィンドウプロシージャに送ります。

●イベント

◎OnShow(Sender: TObject)

 ダイアログボックスが開くときに発生するイベントです。イベントハンドラを記
述すると、ダイアログボックスが表示されるときに特別な処理を実行できます。

◎OnClose(Sender: TObject)

 ダイアログボックスが閉じるときに発生するイベントです。イベントハンドラを
記述すると、ダイアログボックスを閉じるときに特別な処理を実行できます。

◎OnFolderChange(Sender: TObject)

 フォルダあるいはアイテムの選択を変更したときに発生します。

◎OnCanClose(Sender: TObject; var CanClose: Boolean)

 キャンセルせずにダイアログボックスを閉じようとしたときに発生します。
 イベントハンドラで CanClose パラメータを False に設定すると、ダイアログ
ボックスが閉じなくなります。

◎OnValidateFailed
(Sender: TObject; const FailedFolder: String; CanClose: Boolean)

 無効な名前をエディットボックスに入力したときに発生します。
 ※Options プロパティに bifValidate を指定して下さい。
 FailedFolde パラメータは、入力された名前です。
 イベントハンドラで CanClose パラメータを False に設定すると、ダイアログ
ボックスが閉じなくなります。

●制限事項

 一部のオプション設定は、Shell32.dll 等のバージョンに依存します。

 (*1)Shell32.dll のバージョンが 4.71 以降でなければいけない。このためには、
   Windows 98 以降でなければいけない。

 (*2)Shell32.dll のバージョンが 5.00 以降でなければいけない。このためには、
   Windows 2000 以降でなければいけない。

 (*3)NT 系 (Windows NT 、2000 、XP) でなければいけない。

 オプション指定の解説通りの動作をしないことがあります。特に
bifNewDialogStyle や bifUseNewUI を指定したとき。これは、Windows の仕様な
のか、《TSelectFolderDialog》のソースが悪いのか、よく分かりません。

●入手先

 《TSelectFolderDialog》は、以下のウェブサイトからダウンロードできます。

 ・Delphian World (http://www.delphianworld.com/)

●連絡先

 不都合などあれば、以下のウェブサイトに掲示板を設置してありますので、そこ
へ発言して下さい。

 ・Tiny Mouse's Workshop (http://hp.vector.co.jp/authors/VA029585/)

●著作権、免責について

 《TSelectFolderDialog》は、《フリーソフトウェア》です。使用、配布に関し
て、特に制限はありません。著作権は、Tiny Mouse が保有します。
 《TSelectFolderDialog》の使用によって生じた損害について、Tiny Mouse は補
償の義務を負わないこととします。
 また、要望はできる限り応えるつもりですが、必ずしも対応するとは限りません。

●転載について

 《TSelectFolderDialog》の転載に関して、特に制限はありません。ただし、配
布ファイル及び格納ファイルを改変することは禁止します。また、転載の際は、そ
の旨を Tiny Mouse (KHC04052@nifty.ne.jp) まで連絡下さい。

●開発環境について

 《TSelectFolderDialog》は、以下の環境で開発しました。

 ・Borland Delphi 7.0 Professional
  Borland (http://www.borland.co.jp/)

 《TSelectFolderDialog》は、以下のソフトをベースにしています。

 ・コモンダイアログボックス簡単拡張コンポーネント
  makkie さん (http://www.mahoroba.ne.jp/~makkie7/)

 配布ファイルを作成するために、以下のツールを利用しました。

 ・LHAユーティリティ32
  大竹和則 さん (http://www.kazusoft.net/)

 ・UNLHA32.DLL
  Micco さん (http://www2.nsknet.or.jp/~micco/micindex.html)

●《TSelectFolderDialog》についての雑感

 Delphi で「フォルダの参照」ダイアログボックスを表示するには、
SelectDirectory 関数を使う方法がありますが、「ファイルを開く」ダイアログボ
ックスなどはフォームにコンポーネントを貼り付けて使用するタイプなのに、どう
して「フォルダの参照」ダイアログボックスは違うのでしょう。
 「フォルダの参照」ダイアログボックスを表示するコンポーネントは、ちょっと
探すと幾つもみつかります。でも、細かなオプション指定ができなかったり、なか
なか気に入るものがありません。
 そんな中でも、コモンダイアログボックス簡単拡張コンポーネント
(http://www.mahoroba.ne.jp/~makkie7/BCB/CDialog/) の TSelectFolderDialog
は、なかなかよかった。でも、これは C++Builder 用で、Delphi では使えない。
この TSelectFolderDialog を Delphi 用に書換することにしました。

●《Delphi》についての雑感

 2000 年夏、Tiny Mouse も《Delphi》を使い始めました。なんて面白いツールな
んだろう、と感動しました。Delphi は 1.0 の頃から、その名前は知っていたけれ
ど、こんなことなら、その頃から使っているんだったなあ……。
 Visual Basic 並の簡単さで、Visual C++ 並の開発力――というのは、嘘ではあ
りませんね。
 何より魅力的なのは、優秀なパーツ (コンポーネントという) が、フリーで多数、
公開されていることですね。
 サンデープログラマの皆さん、ぜひ《Delphi》を使いましょう。