フォルダ参照ダイアログコンポーネント
テストプログラム |
| 動作確認等 |
Windows 7 U64(SP1) + Delphi XE(UP1) Pro |
フォルダの参照ダイアログコンポーネントのテストプログラムです。コンポーネントを利用する際の参考にしてください。
下のサンプルでは、ルートフォルダを指定していません。したがって、デスクトップがルートフォルダとなります。Options プロパティで bifNewDialogStyle, bifUseNewUI を指定して、新しいスタイルで新しい UI のダイアログを表示します。 |
 |
図1
設計時画面
|
 |
図2
実行画面例 |
 |
図3
[OK] でダイアログ終了
- フォルダの表示名を TStaticText に表示
- Directory プロパティにすれば実フォルダ名または GUID 文字列となる
|
リスト1
フォルダの参照ダイアログコンポーネントの基本的な動作確認用テスト |
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, plFileDialog, Buttons;
type
TForm1 = class(TForm)
Button1: TButton;
plBrowseFolder1: TplBrowseFolder;
StaticText1: TStaticText;
procedure Button1Click(Sender: TObject);
procedure plBrowseFolder1SelectionChanged(Sender: TObject; Wnd: HWND;
Directory: string; var StatusText: string; var OKBtnEnabled: Boolean);
private
{ Private 宣言 }
public
{ Public 宣言 }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
//=============================================================================
// フォルダの参照ダイアログ表示
//=============================================================================
procedure TForm1.Button1Click(Sender: TObject);
var
Options : TplBrowseOptions;
begin
Options := plBrowseFolder1.Options;
//表示のオプションを追加
Include(Options, bifStatusText); //ステータステキスト表示
Include(Options, bifNewDialogStyle); //新しいスタイル
Include(Options, bifUseNewUI); //新しいUI
plBrowseFolder1.Options := Options;
plBrowseFolder1.FormLeft := 500;
plBrowseFolder1.FormTop := 300;
plBrowseFolder1.Title := 'タイトル部';
plBrowseFolder1.Caption := 'フォルダの参照ダイアログのテスト';
if plBrowseFolder1.Execute then begin
//plBrowseFolder1.Directory;にすれば実パス名
StaticText1.Caption := plBrowseFolder1.FolderName;
end;
//終了時の位置とサイズはここで取得可能(プロパティFormHeight等)
end;
//=============================================================================
// SelectionChangedイベント
// 選択フォルダを変更すると発生
// 新しいスタイルのダイアログでは引数StatusTextは無効
//=============================================================================
procedure TForm1.plBrowseFolder1SelectionChanged(Sender: TObject; Wnd: HWND;
Directory: string; var StatusText: string; var OKBtnEnabled: Boolean);
begin
StatusText := 'ステータス部';
end;
end.
| ファイル名も表示するには、Options プロパティに bifBrowseIncludeFiles を含めます。 |
 |
図4
実行画面 |
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, plFileDialog;
type
TForm1 = class(TForm)
Button1: TButton;
plBrowseFolder1: TplBrowseFolder;
StaticText1: TStaticText;
procedure Button1Click(Sender: TObject);
private
{ Private 宣言 }
public
{ Public 宣言 }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
//=============================================================================
// フォルダの参照ダイアログ表示
// OptionsにbifBrowseIncludeFilesを追加してファイルも表示
// ルートフォルダを指定
//=============================================================================
procedure TForm1.Button1Click(Sender: TObject);
var
Options : TplBrowseOptions;
begin
Options := plBrowseFolder1.Options;
//表示のオプションを追加
Include(Options, bifNewDialogStyle); //新しいスタイル
Include(Options, bifUseNewUI); //新しいUI
Include(Options, bifBrowseIncludeFiles); //フォルダ以外のファイルも表示
plBrowseFolder1.Options := Options;
//ルートディレクトリを指定
//RootDirプロパティはRootSpecialDirがsfNoneでないと有効にならない
plBrowseFolder1.InitDir := ExpandFileName('../../ABC株式会社');
plBrowseFolder1.RootDir := ExpandFileName('../../ABC株式会社');
plBrowseFolder1.RootSpecialDir := sfNone;
plBrowseFolder1.Title := 'タイトル部';
plBrowseFolder1.Caption := 'フォルダの参照ダイアログのテスト';
if plBrowseFolder1.Execute then begin
//plBrowseFolder1.Directory;にすれば実パス名
StaticText1.Caption := plBrowseFolder1.FolderName;
end;
//終了時の位置とサイズはここで取得可能(プロパティFormHeight等)
end;
end.
仮想フォルダ等の特殊フォルダは、Options プロパティと CSIDL_XXX の値で設定できます。
次のコードは [プリンタ] フォルダを表示する例です。 |
 |
図5
実行例 |
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, plFileDialog;
type
TForm1 = class(TForm)
Button1: TButton;
plBrowseFolder1: TplBrowseFolder;
StaticText1: TStaticText;
procedure Button1Click(Sender: TObject);
private
{ Private 宣言 }
public
{ Public 宣言 }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
//=============================================================================
// フォルダの参照ダイアログ表示
// ルートフォルダをプリンタを指定
//=============================================================================
procedure TForm1.Button1Click(Sender: TObject);
var
Options : TplBrowseOptions;
begin
Options := [];
//表示のオプションを追加
Include(Options, bifNewDialogStyle); //新しいスタイル
Include(Options, bifUseNewUI); //新しいUI
Include(Options, bifBrowseForPrinter); //選択可能フォルダの指定
plBrowseFolder1.Options := Options;
//ルートディレクトリを指定
plBrowseFolder1.RootSpecialDir := sfPrinters;
if plBrowseFolder1.Execute then begin
//StaticText1.Caption := plBrowseFolder1.Directory;//にすれば実パス名
StaticText1.Caption := plBrowseFolder1.FolderName;
end;
//終了時の位置とサイズはここで取得可能(プロパティFormHeight等)
end;
end.
| 04_Windows Vista 以降で実装された仮想フォルダの表示例 |
Windows Vista 以降で実装された特殊フォルダには、本コンポーネントで扱っている CSIDL_XXX にはない仮想フォルダがあります。これらの仮想フォルダは [460_特殊フォルダのフルパスを取得] のサンプルで使用している FOLDERID_XXX が使用できます。
次のサンプルは、Windows 7 で実装された仮想フォルダ [ライブラリ] を表示します。
本サンプルで使用している SHGetKnownFolderPath 関数は、Delphi 2010 以降で使用可能です。 |
 |
図6
[ライブラリ] フォルダ |
リスト4
Windows Vista 以降で実装された仮想フォルダの表示例 |
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, plFileDialog;
type
TForm1 = class(TForm)
Button1: TButton;
plBrowseFolder1: TplBrowseFolder;
StaticText1: TStaticText;
procedure Button1Click(Sender: TObject);
private
{ Private 宣言 }
public
{ Public 宣言 }
end;
var
Form1: TForm1;
implementation
uses ShlObj, KnownFolders;
{$R *.dfm}
//=============================================================================
// フォルダの参照ダイアログ表示
// ルートフォルダを指定
//=============================================================================
procedure TForm1.Button1Click(Sender: TObject);
var
Options : TplBrowseOptions;
FolderID : TGUID;
pFolderPath : PChar;
begin
Options := plBrowseFolder1.Options;
//表示のオプションを追加
//新しいスタイルとする
Include(Options, bifNewDialogStyle);
plBrowseFolder1.Options := Options;
//SHGetKnownFolderPathを使用して特殊フォルダのパス名を取得
//ここではWindows7で実装された[ライブラリ]とする
FolderID := FOLDERID_Libraries;
if SHGetKnownFolderPath(FolderID, 0, 0, pFolderPath) = S_OK then begin
//ルートディレクトリを指定
//RootDirプロパティはRootSpecialDirがsfNoneでないと有効にならない
plBrowseFolder1.RootDir := pFolderPath;
plBrowseFolder1.RootSpecialDir := sfNone;
plBrowseFolder1.Title := 'タイトル部';
plBrowseFolder1.Caption := 'フォルダの参照ダイアログのテスト';
if plBrowseFolder1.Execute then begin
//plBrowseFolder1.Directory;にすれば実パス名
StaticText1.Caption := plBrowseFolder1.FolderName;
end;
//終了時の位置とサイズはここで取得可能(プロパティFormHeight等)
end;
end;
end.
フォルダの参照ダイアログのルートフォルダ、あるいは表示時に選択状態にするフォルダは、実フォルダ名または GUID 文字列で指定可能です。
例えば上のコードと同じ [ライブラリ] は次のコードでルートフォルダにできます。 |
plBrowseFolder1.RootDir := '::{031E4825-7B94-4DC3-B131-E946B44C8DD5}';
plBrowseFolder1.RootSpecialDir := sfNone;
また選択フォルダは次のように、InitDir で設定できます。
デフォルトの設定では、[ライブラリ] は選択状態にできても [OK] ボタンは押せません。{OK] ボタンを有効にするには、Options プロパティに bifReturnFSAncestors を追加しておきます。 |
plBrowseFolder1.InitDir:= '::{031E4825-7B94-4DC3-B131-E946B44C8DD5}';
| 上のテストコードでは、新しいスタイルのフォルダ参照ダイアログを表示していますが、従来型のスタイルとすると、下図のように、表示名が Libraries となります。また、Directory プロパティが返す値は GUID の文字列ではなく、実パス名となります。この実パス名は、SHGetKnownFolderPath 関数で取得した値と同じとなります。 |
 |
図7
旧スタイルのダイアログ
- [ライブラリ] は [Libraries] となる
|
 |
図8
[ライブラリ] の実パス名
- ログオン (ログイン) ユーザによって異なる値となる
|
procedure TForm1.Button1Click(Sender: TObject);
var
FolderID : TGUID;
pFolderPath : PChar;
begin
FolderID := FOLDERID_Libraries;
if SHGetKnownFolderPath(FolderID, 0, 0, pFolderPath) = S_OK then begin
//ルートディレクトリを指定
//RootDirプロパティはRootSpecialDirがsfNoneでないと有効にならない
plBrowseFolder1.RootDir := pFolderPath;
plBrowseFolder1.RootSpecialDir := sfNone;
plBrowseFolder1.Title := 'タイトル部';
plBrowseFolder1.Caption := 'フォルダの参照ダイアログのテスト';
if plBrowseFolder1.Execute then begin
StaticText1.Caption := plBrowseFolder1.Directory;
end;
end;
end;
|