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;
Здесь дополнительно к упомянутому ранее флагу OFN_PATHMUSTEXIST добавлен флаг OFN_OVE RWRITEPROMPT для того, чтобы при указании имени уже существующего файла был задан вопрос, желает ли пользователь заменить этот файл.
Окно для выбора цвета
Код вызова следующего окна – окна для выбора цвета – приведен в листинге 2.26.
Листинг 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);
Рис. 2.4. Окно для выбора цвета
• CC_FULLOPEN – раскрывать панель подбора цвета (правая половина окна, рис. 2.4).
Стоит пояснить, что за переменная, а точнее, адрес, сохраняется в поле lpCustColors – это массив из 16 значений типа COLORREF:
colors: array [1..16] of COLORREF;
Обратите внимание на 16 квадратов в левой нижней области окна (рис. 2.4) – это места для определенных пользователем цветов. Для заполнения этой области окна и используются значения из массива colors. Массив может быть как локальным, так и глобальным (что иногда удобнее, так как значения определенных пользователем цветов в этом случае сохраняются между вызовами окна выбора цвета).
Окно для выбора шрифта
Для вывода окна для выбора шрифта подойдет функция, приведенная в листинге 2.27.
Листинг 2.27. Окно для выбора шрифта
function ShowChooseFont(var font: LOGFONT):BOOL;
var
choose: TChooseFont;
begin
ZeroMemory(Addr(choose), SizeOf(choose));
//Заполнение структуры для окна
choose.lStructSize:= SizeOf(choose);
choose.hWndOwner:= hParentWnd;
choose.hInstance:= hAppInst;
choose.lpLogFont:= Addr(font);