16番会議室「玉石混淆みんなで作るSample蔵」に寄せられたサンプル
"RE:フォルダーダイアログ"
この発言は #00709 らせん企画 さんのフォルダーダイアログ に対するコメントです
#709 らせん企画の佐々木 さん、みなさん こんにちは。
機会があって、らせん企画の佐々木さんのBrowseFolderにInitDirプロパティ
とコールバック関数を付加して、初期ディレクトリを開いてブラウズできる
ようにしました。
コールバック関数のフィールド参照は、#353 FuKuさんの手法を使いました。
unit BrowseFolder;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
Dialogs;
type
TBrowseFolder = class(TComponent)
private
{ Private 宣言 }
FDir, FTitle,FIniDir: String;
protected
{ Protected 宣言 }
public
{ Public 宣言 }
Constructor Create(AOwner: TComponent); override;
Function Execute: Boolean;
Property DirName: String Read FDir;
published
{ Published 宣言 }
Property Title: String Read FTitle Write FTitle;
Property IniDir: String Read FIniDir Write FIniDir;
end;
procedure Register;
implementation
Uses ShlObj;
Var BF1 :TBrowseFolder; // フィールド参照用の変数
procedure Register;
begin
RegisterComponents('Dialogs', [TBrowseFolder]);
end;
Constructor TBrowseFolder.Create(AOwner: TComponent);
begin
inherited create(AOwner);
BF1:= Self; // これがみそ!
end;
function BrowseCallbackProc(hwnd: HWND; uMsg: UINT; lParam, lpData:
LPARAM): Integer; stdcall;
{SHBrowseForFolder のコールバック関数}
var
Path : PChar;
begin
Result:= 0;
Path := Pchar(BF1.FIniDir);
if ((uMsg=BFFM_INITIALIZED) and (Path <> nil)) then
SendMessage(hwnd, BFFM_SETSELECTION, 1,LongInt(Path));
end;
Function TBrowseFolder.Execute;
{これは、らせん企画の佐々木さんのもの}
var
BI: TBrowseInfo;
IDList: PItemIDList;
Dir: Array [0..Max_Path] Of Char;
begin
FDir := '';
Result := False;
FillChar(BI, SizeOf(BI), 0);
BI.hwndOwner := TWinControl(Owner).Handle;
BI.lpfn := @BrowseCallbackProc; //コールバック関数のアドレス
BI.lpszTitle := PChar(FTitle);
BI.pidlRoot := nil;
BI.ulFlags := BIF_RETURNONLYFSDIRS + BIF_STATUSTEXT;
IDList := SHBrowseForFolder(BI);
If IDList <> nil Then
Begin
SHGetPathFromIDList(IDList, Dir);
FDir := String(Dir);
Result := True;
End;
end;
end.
Yukimi Sake GHE01746@nifty.ne.jp
こんなもんでどうかしら?
Original document by 雪見酒 氏 ID:(GHE01746)
ここにあるドキュメントは NIFTY SERVEの Delphi Users' Forum の16番会議室「玉石混淆みんなで作るSample蔵」に投稿されたサンプルです。これらのサンプルはボーランド株式会社がサポートする公式のものではありません。また、必ずしも動作が検証されているものではありません。これらのサンプルを使用したことに起因するいかなる損害も投稿者、およびフォーラムスタッフはその責めを負いません。使用者のリスクの範疇でご使用下さい。
Copyright 1996-2002 Delphi Users' Forum
|