Что бы не выдумывать каждый раз велосипед заново, выписываем здесь как вызывать стандартные формы диалогов
Вызов диалога выбора директории
вызов в программе
Вызов диалога выбора директории
| Код |
|---|
unit UnitFolderDialog;
interface
uses SysUtils, Windows ,ShlObj;
function GetFolderDialog(Handle: Integer; Caption: string; var strFolder:
string): Boolean;
implementation
function BrowseCallbackProc(hwnd: HWND; uMsg: UINT; lParam: LPARAM; lpData:
LPARAM): Integer; stdcall;
begin
if (uMsg = BFFM_INITIALIZED) then
SendMessage(hwnd, BFFM_SETSELECTION, 1, lpData);
BrowseCallbackProc := 0;
end;
function GetFolderDialog(Handle: Integer; Caption: string; var strFolder:
string): Boolean;
const
BIF_STATUSTEXT = $0004;
BIF_NEWDIALOGSTYLE = $0040;
BIF_RETURNONLYFSDIRS = $0080;
BIF_SHAREABLE = $0100;
BIF_USENEWUI = BIF_EDITBOX or BIF_NEWDIALOGSTYLE;
var
BrowseInfo: TBrowseInfo;
ItemIDList: PItemIDList;
JtemIDList: PItemIDList;
Path: PWideChar;
begin
Result := False;
Path := StrAlloc(MAX_PATH);
SHGetSpecialFolderLocation(Handle, CSIDL_DRIVES, JtemIDList);
with BrowseInfo do
begin
hwndOwner := GetActiveWindow;
pidlRoot := nil; //JtemIDList;
SHGetSpecialFolderLocation(hwndOwner, CSIDL_DRIVES, JtemIDList);
{ return display name of item selected }
pszDisplayName := StrAlloc(MAX_PATH);
{ set the title of dialog }
lpszTitle := PChar(Caption); //'Select the folder';
{ flags that control the return stuff }
ulFlags := 0;//ulFlags or BIF_NEWDIALOGSTYLE or BIF_RETURNONLYFSDIRS;
ulFlags := ulFlags or BIF_NEWDIALOGSTYLE or BIF_RETURNONLYFSDIRS;
lpfn := @BrowseCallbackProc;
{ extra info that's passed back in callbacks }
lParam := LongInt(PChar(strFolder));
end;
ItemIDList := SHBrowseForFolder(BrowseInfo);
if (ItemIDList <> nil) then
if SHGetPathFromIDList(ItemIDList, Path) then
begin
strFolder := Path;
Result := True
end;
end;
end.
|
вызов в программе
| Код |
|---|
if GetFolderDialog(handle,'Выберите директрию для сохранения',SavePath) = false then exit; |
Изменено:
max katonin - 06.06.2010 11:56:57