![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
SHBrowseForFolder [D3, Win95/98]
Cosmic © (2002-12-04 23:26:00)Привет мастерам! Дайте примерчик SHBrowseForFolder, плиз, - никак не могу разобраться!
Nick_N_A (2003-01-16 07:51:00) [1]Внимательно посмотри прилагаемую с Delphi windows.pas
Evgeny (2002-12-06 11:53:00) [2]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.
Cosmic (2002-12-05 23:25:00) [3]> Dimka Maslov
Мне не нужна VCL. Мне нужны средства ShellAPI. Хотя компонент интересный... Спасибо. Может, и на API примерчик найдётся?
Dimka Maslov (2002-12-05 09:35:00) [4]http://endimus.com/oldcontent/files/index_en.php?page=tbrowseforfolder.htm
apay (2002-12-05 00:14:00) [5]Посмотри хотя-бы в RxLib, а вообще таких компонент много, можешь сходить на www.torry.net