Delphi. Трюки и эффекты. Александр Чиртик
Чтение книги онлайн.
Читать онлайн книгу Delphi. Трюки и эффекты - Александр Чиртик страница 24
• Windows – помимо объявления основных структур и API-функций, этот модуль содержит объявления функций для работы с окнами подключения и отключения от сетевого ресурса (сетевого диска);
• ShellAPI – для системного окна О программе.
Вариант использования рассматриваемых в этом разделе диалоговых окон приведен в подразд. «Демонстрационное приложение».
Примечание
В приведенных далее примерах вызова диалоговых окон можно увидеть не объявленные, но используемые в программах переменные hApplnst и hParentWnd. Подразумевается, что это глобальные переменные, которые инициализируются вне процедур и функций, приведенных в примерах. Для инициализации этих переменных можно также написать специальную процедуру, например с именем I nit, в которую и передавать значения для hParentWnd и hApplnst.
Окно открытия/сохранения файла
Чтобы воспользоваться возможностями окна открытия файла, достаточно задействовать листинг 2.23.
function ShowOpen(strFilter: string; nFilterIndex: Integer = 0;
strInitFileName: string = '';
var
ofn: OPENFILENAME;
begin
ZeroMemory(Addr(ofn), SizeOf(ofn));
//Формирование буфера (260 символов)
SetLength(strInitFileName, MAX_PATH);
PrepareFilterString(strFilter);
//Заполнение структуры для диалога
ofn.lStructSize := SizeOf(ofn);
ofn.hWndOwner := hParentWnd;
ofn.hInstance := hAppInst;
ofn.lpstrFilter := PAnsiChar(strFilter);
ofn.nFilterIndex := nFilterIndex;
ofn.lpstrFile := PAnsiChar(strInitFileName);
ofn.nMaxFile := MAX_PATH;
ofn.lpstrTitle := pAnsiChar(strTitle);
ofn.Flags := OFN_FILEMUSTEXIST or OFN_PATHMUSTEXIST or
OFN_HIDEREADONLY;
//Отображение окна диалога и обработка результата
if (GetOpenFileName(ofn) = True) then
ShowOpen := ofn.lpstrFile;
end;
Приведенная в листинге 2.23 функция возвращает не пустую строку – полный путь файла в случае, если пользователь выбрал или ввел имя файла. Здесь главной трудностью является заполнение довольно большой структуры OPENFILENAME. В данном примере используются только базовые возможности диалога открытия файла и лишь некоторые из поддерживаемых им флагов (поле Flags):
• OFN_FILEMUSTEXIST – при успешном завершении работы диалогового окна можно быть уверенным, что результирующий путь является путем существующего файла;
• OFN_PATHMUSTEXI ST – не дает ввести имя файла в несуществующей папке (например, при вводе с:\docs\mydocl.doc, если папки docs не существует, будет выдано соответствующее сообщение);
• OFNHIDEREADONLY – не показывать флажок Только для чтения.
Отдельно рассмотрим, зачем в приведенном примере вызывается дополнительная функция PrepareFilterString (листинг 2.24).
procedure PrepareFilterString(var strFilter: string);
var
i: Integer;
begin
for i := 1 to length(strFilter) do
if (strFilter[i] = '|') then strFilter[i] := #0;
end;