Delphi. Трюки и эффекты. Александр Чиртик
Чтение книги онлайн.
Читать онлайн книгу Delphi. Трюки и эффекты - Александр Чиртик страница 25
function ShowSave(strFilter: string; nFilterIndex: Integer = 0;
strInitFileName: string = '';
strTitle: string = 'Сохранение файла'):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_PATHMUSTEXIST or OFN_OVERWRITEPROMPT;
//Отображение окна диалога и обработка результата
if (GetSaveFileName(ofn) = True) then
ShowSave := ofn.lpstrFile;
end;
Здесь дополнительно к упомянутому ранее флaгyOFN_PATHMUSTEXIST применен флаг OFN_OVERWRI ТЕ PROMPT для того, чтобы при указании имени уже существующего файла был задан вопрос о желании пользователя заменить старый файл.
Окно выбора цвета
Вызов следующего диалогового окна – окна выбора цвета – приводится в листинге 2.26.
function ShowChooseColor(lastColor: COLORREF = 0):COLORREF;
var
choose: TChooseColor;
begin
ZeroMemory(Addr(choose), SizeOf(choose));
//Заполнение структуры для диалогового окна
choose.lStructSize := SizeOf(choose);
choose.hWndOwner := hParentWnd;
choose.hInstance := hAppInst;
choose.rgbResult := lastColor;
choose.lpCustColors := Addr(colors);
choose.Flags := CC_RGBINIT or CC_ANYCOLOR or CC_FULLOPEN;
//Отображение окна диалога и обработка результата
if (ChooseColor(choose) = True) then ShowChooseColor :=
choose.rgbResult
else ShowChooseColor := lastColor;
end;
Здесь также заполняется структура похожего назначения. Используются следующие флаги диалогового окна:
• CC_RGBINIT – использовать значение поля rgbResult в качестве предустановленного значения цвета (по умолчанию как ранее выбранного);
• CC_ANYCOLOR – отображать все доступные предопределенные цвета (левая часть, рис. 2.4);
• CC_FULLOPEN – раскрывать панель подбора цвета (правая часть, рис. 2.4).
Рис. 2.4. Окно выбора цвета
Поясним, что за переменная, а точнее, ее адрес, сохраняется в поле lpCustColors – это массив из 16 значений типа COLORREF:
colors: array [1..16] of COLORREF;
Обратите внимание на 16 квадратов в левой нижней области окна (рис. 2.4) – это места для определенных пользователем цветов. Для заполнения этой области окна и используются значения из массива colors. Массив может быть как локальным, так и глобальным (что удобнее, так как значения определенных пользователем цветов сохраняются между вызовами диалогового окна).
Окно выбора шрифта
Для вывода диалогового окна выбора шрифта вполне подойдет функция, приведенная в листинге 2.27.
function ShowChooseFont(var font: LOGFONT):BOOL;