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

Интерфейс IShellFolder

Третий вариант получить pidi нужной папки – интерактивный, с помощью функции Shell API.

function ShBrowseForFolder(var Ipbi: TBrowselnfo): PItemlDList;

Перед ее вызовом следует заполнить структуру типа TBrowselnfo, содержащую в частности pidi того элемента, который будет корневым. После вызова функции пользователь увидит перед собой диалоговое окно выбора папки (рис. 31.3).

Иллюстрированный самоучитель по Delphi 7 для профессионалов › Использование возможностей Shell API › Интерфейс IShellFolder
Рис. 31.3. Диалоговое окно выбора папки, созданное при вызове функции ShBrowseForFolder

В данном примере корневой служит виртуальная папка My Computer. Пользователю предоставляется возможность выбрать одну из папок файловой системы (за это отвечает флаг TBrowseinfo.uiFlags, равный BIF_RETURNONLYFSDIRS).

На выходе функция возвращает pidi папки, имя которой извлекается из него вызовом еще одной функции Shell – shGetPathFromList.

procedure TForml/ButtonlClick(Sender: TObject);
var
BI: TBrowselnfo;
Image: integer;
StartPIDL, ResPIDL: PItemlDList;
S, Path: ArraytO..max_path-l] Of WideChar;
begin
01eCheck(SHGetSpecialFolderLocation(Handle, CSIDL_DRIVES, StartPIDL));
With BI do
Begin
hwndOwner = Application.Handle;
pszDisplayName = @S;
IpszTitle = 'Выберите необходимую папку';
ulFlags = BIF_RETURNONLYFSDIRS;
pidlRoot = StartPIDL;
Ipfn = nil;
iImage = 1;
end;
ResPIDL: = SHBrowseForFolder(BI);
if SHGETPathFromlDList(ResPIDL, @Path[0])
then Labe11.Caption: = StrPas(@Path[0]);
end;

Полученное имя здесь отображается при помощи компонента Label 1.

  1. Наконец, перейдем к третьему действию нашей задачи. Теперь, зная pidi папки, с которой вы будете работать, можно получить указатель на интерфейс ishellFolder вызовом метода BindToObject. Мы еще не рассмотрели такой важный аспект работы с папками, как просмотр их содержимого. Верные правилу СОМ: "каждый должен заниматься своим делом", разработчики Shell предоставили для просмотра еще один интерфейс – IEnumiDList. Пугаться нечего, набор возможностей этого интерфейса даже меньше, чем у пульта ДУ в магнитофоне. Его четыре метода – Next, Skip, Reset и clone – позволяют организовать просмотр списка в одном направлении, а также возврат к началу и дублирование (Clone) выбранного элемента списка.
Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.