Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

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


Наверх

Титульная страница Поиск, карта сайта Написать письмо