お知らせ

電子会議

ライブラリ

パレット

Delphi FAQ検索

Delphi FAQ一覧

サンプル蔵





FDelphi FAQ
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