Текущий архив: 2003.03.03;
Скачать: CL | DM;
ВнизSHBrowseForFolder Найти похожие ветки
← →
Cosmic (2002-12-04 23:26) [0]Привет мастерам! Дайте примерчик SHBrowseForFolder, плиз, - никак не могу разобраться!
← →
apay (2002-12-05 00:14) [1]Посмотри хотя-бы в RxLib, а вообще таких компонент много, можешь сходить на www.torry.net
← →
Dimka Maslov (2002-12-05 09:35) [2]http://endimus.com/oldcontent/files/index_en.php?page=tbrowseforfolder.htm
← →
Cosmic (2002-12-05 23:25) [3]> Dimka Maslov
Мне не нужна VCL. Мне нужны средства ShellAPI. Хотя компонент интересный... Спасибо. Может, и на API примерчик найдётся?
← →
Evgeny (2002-12-06 11:53) [4]program Shell_pr;
uses
SysUtils,
Windows,
ActiveX,
ShlObj;
var
Malloc : IMalloc;
Desktop : IShellFolder;
pidlMyComputer : PItemIDList;
pidlResult : PItemIDList;
pidlInitialFolder : PItemIDList;
bi : TBrowseInfo;
DisplayName : string;
Temp : string;
function BrowseCallbackProc(hWnd: HWND; uMsg: UINT;
lParam: LPARAM; lpData: LPARAM): Integer; stdcall;
// обратите внимание на соглашение о вызовах - stdcall
begin
Result := 0;
case uMsg of
BFFM_INITIALIZED:
begin
PostMessage(hWnd, BFFM_SETSELECTION, 0, Integer(pidlInitialFolder));
PostMessage(hWnd, BFFM_SETSTATUSTEXT, 0,
Integer(PChar("Функция обратного вызова установлена.")));
end;
end;
end;
begin
// acquire shell"s allocator
if SUCCEEDED(SHGetMalloc(Malloc)) then
try
// acquire shell namespace root folder
if SUCCEEDED(SHGetDesktopFolder(Desktop)) then
try
// acquire folder that will be serve as root in dialog
if SUCCEEDED(SHGetSpecialFolderLocation(0, CSIDL_DRIVES, pidlMyComputer)) then
try
SetLength(DisplayName, MAX_PATH);
FillChar(bi, sizeof(bi), 0);
bi.pidlRoot := pidlMyComputer; // roots from "My Computer"
bi.pszDisplayName := PChar(DisplayName);
bi.lpszTitle := PChar("Выберите каталог для сканирования");
bi.ulFlags := {BIF_RETURNONLYFSDIRS + }BIF_STATUSTEXT + BIF_BROWSEINCLUDEFILES;
bi.lpfn := BrowseCallbackProc;
pidlResult := SHBrowseForFolder(bi);
if Assigned(pidlResult) then
try
SetLength(Temp, MAX_PATH);
if SHGetPathFromIDList(pidlResult, PChar(Temp)) then
DisplayName := Temp;
DisplayName := Trim(DisplayName) + ".";
MessageBox(0, PChar(DisplayName), "Вы успешно выбрали папку",
MB_OK or MB_ICONINFORMATION );
finally
Malloc.Free(pidlResult); // release returned value
end;
finally
Malloc.Free(pidlMyComputer); // release folder that was served as root in dialog
end;
finally
Desktop := nil; // release shell namespace root folder
end;
finally
Malloc := nil; // release shell"s allocator
end;
end.
← →
Nick_N_A (2003-01-16 07:51) [5]Внимательно посмотри прилагаемую с Delphi windows.pas
Страницы: 1 вся ветка
Текущий архив: 2003.03.03;
Скачать: CL | DM;
Память: 0.45 MB
Время: 0.007 c