Самоучитель по Delphi 7 для профессионалов



              

Интерфейс IShellFolder - часть 4


Memol.Clear; try

01eCheck(SHGetDesktopFolder(DeskTop));

if not Succeeded(DeskTop.ParseDisplayName

(Self.Handle,nil, StringToWideChar (Editl.Text,ws, MAX_PATH),n, pidi, attr))

then begin ShowMessage('Неизвестное имя');

  Exit; end; OleCheck(DeskTop.BindToObject(pidl,nil, IID_IShellFolder, Pointer(NewShellFolder)});

OleCheck(NewShellFolder.EnumObj ects{Self.Handle,

SHCONTF_FOLDERS or SHCONTF_NONFOLDERS, Enumerator)); while Enumerator.Next(1, pidl, Numpidls) = S_OK do 

begin

NewShellFolder.GetDisplayNameOf(PIDL, SHGDN_FORPARSING, StrRet); case StrRet.uType of STRRET_CSTR:

s := StrRet.cStr; STRRET_OFFSET:

 begin

P := @PIDL.mkid.abID[StrRet.uOffset - SizeOf(PIDL.mkid.cb)];

  SetString(s, P, PIDL.mkid.cb - StrRet.uOffset); 

end; STRRET_WSTR:

s := StrRet.pOleStr; 

end;//case

Memol.Lines.Add(s); 

end; except

on ErEOleSysError do ShowMessage(''); 

end;

В этом примере имя нужной папки извлекается из компонента Edit1. Получив указатель на интерфейс ishellFoider и затем интерфейс IEnumiDList, программа заполняет полученными именами файлов список Memol.Lines.

Помимо названия из большинства объектов файловой системы можно "вытащить" массу полезной информации. Чаще всего задаются вопросом: а как извлечь значок, соответствующий данному файлу или хранящийся в нем?

Способов для достижения этой цели несколько. Самый простой — через вызов функции:

function SHGetFileInfo(pszPath: PAnsiChar; dwFileAttributes: DWORD; 

var psfi: TSHFilelnfo; cbFilelnfo, uFlags: UINT): DWORD;

Параметр pszPath может быть указателем как на строку с именем файла, так и на структуру вида pidl. Функция заполняет структуру psfi (тип TSHFilelnfo) длиной cbFilelnfo байт. В зависимости от значения слова флагов (параметр uFlags) на выходе может быть разнообразная информация. В частности, если в параметре uFlags заданы значения SHGFI_SYSICONINDEX и SHGFI_ICON, то в структуру psfi будет записан номер значка для данного файла в системном списке изображений, а результатом выполнения функции будет дескриптор этого списка. Воспользоваться им можно (например, для панели инструментов) так:




Содержание  Назад  Вперед