Программирование в Delphi. Трюки и эффекты. Александр Чиртик
Чтение книги онлайн.
Читать онлайн книгу Программирование в Delphi. Трюки и эффекты - Александр Чиртик страница 26
function ShowChooseFolder(strTitle: string):string;
var
choose: BROWSEINFO;
buffer: string;
pidl: PItemIDList;
begin
ZeroMemory(Addr(choose), SizeOf(choose));
SetLength(buffer, MAX_PATH);
//Заполнение структуры для окна
choose.hwndOwner:= hParentWnd;
choose.pi dlRoot:= nil; //Корень – папка Рабочего стола
choose.pszDisplayName:= PAnsiChar(buffer);
choose.lpszTitle:= PAnsiChar(strTitle);
choose.ulFlags:= 0;
//Вывод окна и обработка результата
pidl:= SHBrowseForFolder(choose);
if (pidl <> nil) then
begin
//Получение полного пути выбранной папки
SHGetPathFromIDList(pidl, PAnsiChar(buffer));
ShowChooseFolder:= buffer;
DeletePIDL(pidl);
end
else
ShowChooseFolder:= '';
end;
Представленная в листинге 2.28 функция ShowChooseFolder возвращает полный путь указанной папки, если она выбрана, и пустую строку в противном случае. Само окно Обзор папок показано на рис. 2.5.
Рис. 2.5. Окно для выбора папки
Особенностью использованной в данном примере функции SHBrowseForFolder является то, что она возвращает не путь выбранной папки, а указатель на структуру ItemlDList (что-то вроде внутреннего представления путей). Для извлечения построения пути по содержимому этой структуры используется функция SHGetPathFromIDList. После этого структура становится больше не нужна, и ее следует удалить (с использованием специального интерфейса IMalloc). Для этого используется процедура DeletePIDL, реализованная в листинге 2.29.
procedure DeletePIDL(pidl: PItemIDList);
var
pMalloc: IMalloc;
begin
SHGetMalloc(pMalloc);
if (pMalloc <> nil) then
begin
pMalloc.Free(pidl);
pMalloc._Release();
end;
end;
Функцию SHBrowseForFolder (листинг 2.28) можно использовать и для указания принтеров или компьютеров. Для этого достаточно установить флаги BIF_ BROWSEFORCOMPUTER и BIF_BROWSEFORPRINTER соответственно:
choose.ulFlags:= BIF_BROWSEFORCOMPUTER;
и
choose.ulFlags:= BIF_BROWSEFORPRINTER;
Чтобы в окне отображались еще и значки файлов, нужно установить флаг BIF_ BROWSEINCLUDEFILES.
Окна подключения и отключения сетевого ресурса
Часто бывает удобно осуществлять доступ к сетевым папкам так же, как и к локальным дискам компьютера (с использованием того же принципа построения пути). Окна подключения и отключения сетевого ресурса дают пользователю возможность выбрать, какие папки считать сетевыми дисками и какие сетевые диски можно отключить.
Вид окна подключения сетевого ресурса в Windows XP показан на рис. 2.6.
Рис. 2.6. Окно подключения сетевого диска
Для вызова окна подключения сетевого ресурса можно использовать функцию, приведенную в листинге 2.30.
function ShowConnection(): BOOL;
begin
ShowConnection:=
WNetConnectionDialog(hParentWnd, RESOURCETYPE_DISK) = NO_ERROR;
end;