Delphi. Трюки и эффекты - страница 27



Рис. 2.5. Окно выбора папки


Особенностью использованной в данном примере функции SHBrowseForFolder является то, что она возвращает не путь выбранного каталога, а указатель на структуру ItemlDList (что-то вроде внутреннего представления путей). Для извлечения построения пути по содержимому этой структуры используется функция SHGetPathFromlDList. После этого структура нам больше не нужна, и ее следует правильно удалить (с использованием специального интерфейса IMalloc). Для этого используется процедура DeletePIDL, реализованная в листинге 2.29.

Листинг 2.29. Удаление структуры ItemlDList

procedure DeletePIDL(pidl: PItemIDList);

var

pMalloc: IMalloc;

begin

SHGetMalloc(pMalloc);

if (pMalloc <> nil) then

begin

pMalloc.Free(pidl);

pMalloc._Release();

end;

end;

Примечание

Освобождение памяти, занимаемой данными структуры ItemlDList, можно выполнить и более простым способом: использовать API-функцию CoTaskMemFree, передав ей адрес структуры в качестве следующего параметра: CoTaskMemFree(pidl).

Вообще функцию SHBrowseForFolder (листинг 2.28) можно использовать и для указания принтеров или компьютеров. Для этого достаточно установить флаги BIF_BROWSEFORCOMPUTERH BIF_BROWSEFORPRINTER соответственно:

choose.ulFlags := BIF_BROWSEFORCOMPUTER;

или

choose.ulFlags := BIF_BROWSEFORPRINTER;

Чтобы в окне отображались еще и значки файлов, необходимо установить флаг BIF_BROWSEINCLUDEFILES.

Окна подключения и отключения сетевого ресурса

Часто бывает удобно осуществлять доступ к сетевым папкам как к локальным дискам компьютера (с использованием того же принципа построения пути). Окна подключения и отключения сетевого ресурса позволяют дать пользователю возможность выбрать, какие папки считать сетевыми дисками и какие сетевые диски можно отключить.

Окно подключения сетевого ресурса в Windows ХР выглядит так, как показано на рис. 2.6.

Рис. 2.6. Окно подключения сетевого диска


Для вызова диалогового окна подключения сетевого ресурса можно использовать функцию, приведенную в листинге 2.30.

Листинг 2.30. Окно подключения сетевого ресурса

function ShowConnection(): BOOL;

begin

ShowConnection :=

WNetConnectionDialog(hParentWnd, RESOURCETYPE_DISK) = NO_ERROR;

end;

Функция ShowConnection возвращает True в случае удачного подключения и False в противном случае.

Окно отключения сетевого диска приведено на рис. 2.7.

Рис. 2.7. Отключение сетевого ресурса


Функция, показывающая окно отключения сетевого диска, приведена в листинге 2.31.

Листинг 2.31. Окно отключения сетевого ресурса

function ShowDisconnect(): BOOL;

begin

ShowDisconnect :=

WNetDisconnectDialog(hParentWnd, RESOURCETYPE_DISK) = NO_ERROR;

end;

Аналогично ShowConnection функция ShowDisconnect возвращает True, если отсоединен хотя бы один диск, и False в противном случае.

Системное окно «О программе»

Этот последний и довольно экзотичный пример приведен на случай, если возникнет желание или необходимость использовать красивое окно О программе, которое выводится для самой операционной системы Windows и ее компонентов. Процедура выведения этого окна приведена в листинге 2.32.

Листинг 2.32. Окно «О программе»

procedure ShowAbout(strAppName: string; strInfo: string);

begin

ShellAbout(hParentWnd, PAnsiChar(strAppName),

PAnsiChar(strInfo),LoadIcon(0, IDI_ASTERISK));

end;

Правда, в окне О программе Windows ХР на информацию о приложении отведено всего две строки (и место для значка слева от окна). Все остальное место занимают информация о регистрации операционной системы и фирменная эмблема Microsoft Windows ХР.