16番会議室「玉石混淆みんなで作るSample蔵」に寄せられたサンプル
"[フォルダーの選択]ダイアログ"
この発言に対し以下のコメントが寄せられています
#00735 アイクビー さん RE:[フォルダーの選択]ダイアログ
[フォルダーの選択]ダイアログを表示するためのサンプルコードです。
エクスプローラの左側のドライブツリーと同じ物を表示します。
オプションによってルートや初期フォルダーを変更することもできます。
フォームにボタンを1つ貼り付けて、下のようなイベントハンドラを実装します。
==============================================================
implementation
uses ShlObj, ActiveX; // この2つのユニットが必要です。
...
procedure TForm1.Button1Click(Sender: TObject);
var
hRet: HResult;
ppMalloc: IMalloc;
bi: TBrowseInfo;
pBuf: PChar;
pidlRoot, pidlBrowse: PItemIDList;
begin
// シェルのタスクアロケーターのインターフェースを取得...
SHGetMalloc(ppMalloc);
try
// ブラウズダイアログ用のバッファの確保...
pBuf := ppMalloc.Alloc(MAX_PATH);
if pBuf = nil then Exit;
// 「マイ コンピュータ」フォルダーのロケーションの取得...
// 'CSIDL_DRIVES'を変更すればルートになるフォルダを変更できます。
hRet := SHGetSpecialFolderLocation(Handle, CSIDL_DRIVES, pidlRoot);
if not Succeeded(hRet) then
begin
ppMalloc.Free(pBuf);
Exit;
end;
// TBrowseInfoの初期化...
bi.hwndOwner := Handle;
bi.pidlRoot := pidlRoot;
bi.pszDisplayName := pBuf;
bi.lpszTitle := 'お好きなフォルダを選択して下さい。';
bi.ulFlags := 0;
bi.lpfn := nil;
bi.lParam := 0;
// フォルダの選択ダイアログの表示...
pidlBrowse := SHBrowseForFolder(bi);
if pidlBrowse <> nil then
begin
if SHGetPathFromIDList(pidlBrowse, pBuf) then
MessageDlg(string(pBuf), mtInformation, [mbOK], 0);
// メモリの解放は忘れずに...
ppMalloc.Free(pidlBrowse);
end;
// メモリの解放は忘れずに...
ppMalloc.Free(pidlRoot);
ppMalloc.Free(pBuf);
finally
// シェルのタスクアロケーターの解放...
ppMalloc._Release;
end;
end;
==============================================================
以上です、、、
97/10/29(Wed) 21:06 オータム西野(YHH00731)
Original document by オータム西野 氏 ID:(YHH00731)
ここにあるドキュメントは NIFTY SERVEの Delphi Users' Forum の16番会議室「玉石混淆みんなで作るSample蔵」に投稿されたサンプルです。これらのサンプルはボーランド株式会社がサポートする公式のものではありません。また、必ずしも動作が検証されているものではありません。これらのサンプルを使用したことに起因するいかなる損害も投稿者、およびフォーラムスタッフはその責めを負いません。使用者のリスクの範疇でご使用下さい。
Copyright 1996-2002 Delphi Users' Forum
|