системные диалоги

Перечислите компоненты, реализующие стандартные диалоги и объясните их назначение.

На странице Диалоги библиотеки размещены компоненты, реализующие соответствующие стандартные диалоги. Кроме них, в библиотеке имеются компоненты – фрагменты диалоговых окон, на основе которых можно создавать собственные специализированные диалоговые окна.

Компонент

Страница

Описание

OpenDialog

« Открыть файл»

Диалоги

Предназначен для создания окна диалога «Открыть файл»

SaveDialog

«Сохранить файл»

Диалоги

Предназначен для создания окна диалога «Сохранить файл»

OpenPictureDialog

« Открыть рисунок»

Диалоги

Предназначен для создания окна диалога «Открыть рисунок», открывающего графический файл

SavePictureDialog

«Сохранить рисунок»

Диалоги

Предназначен для создания окна диалога «Сохранить рисунок» – сохранение изображения в графическом файле

FontDialog

«Шрифты»

Диалоги

Предназначен для создания окна диалога «Шрифты» – выбор атрибутов шрифта

ColorDialog

«Цвет»

Диалоги

Предназначен для создания окна диалога «Цвет» – выбор цвета

ColorBox

выбор цвета

Дополнительно

Выпадающий список для выбора пользователем цвета

PrintDialog

«Печать»

Диалоги

Предназначен для создания окна диалога «Печать»

PrinterSetupDialog

«Установка принтера»

Диалоги

Предназначен для создания окна диалога «Установка принтера»

FindDialog

«Найти»

Диалоги

Предназначен для создания окна диалога «Найти» – контекстный поиск в тексте

ReplaceDialog

«Заменить»

Диалоги

Предназначен для создания окна диалога «Заменить» – контекстная замена фрагментов текста

CustomizeDlg

настраиваемый диалог

Дополнительно

Настраиваемый диалог, связанный со стандартными действиями

FileListBox

(список файлов)

Win 3.1

Отображает список всех файлов каталога

DirectoryListBox

(структура каталогов)

Win 3.1

Отображает структуру каталогов диска

DriveComboBox

(список дисков)

Win 3.1

Выпадающий список доступных дисков

FilterComboBox

(список фильтров)

Win 3.1

Выпадающий список фильтров для поиска файлов

CDirectoryOutline

(дерево каталогов)

Примеры

Пример компонента, используемо-го для отображения структуры каталогов выбранного диска

Все диалоги являются невизуальными компонентами, так что место их размещения на форме не имеет значения. При обращении к этим компонентам вызываются стандартные диалоги, вид которых зависит от версии Windows и настройки системы.

Приведите и объясните вид стандартного обращения к диалогу.

Основной метод (функция), которым производится обращение к любому диалогу, – Execute. Эта функция открывает диалоговое окно и, если пользователь произвел в нем какой-то выбор, то функция возвращает true. При этом в свойствах компонента-диалога запоминается выбор пользователя, который можно прочитать и использовать в дальнейших операциях. Если же пользователь в диалоге нажал кнопку Отмена или клавишу Esc, то функция возвращает false.

Расскажите о свойствах компонентов OpenDialog и SaveDialogFilter, FilterIndex, InitialDir, DefaultExt, Title.

Компоненты OpenDialog – законченный диалог «Открыть файл» и SaveDialog – законченный диалог «Сохранить файл как…» используются в большинстве приложений.

Создайте новый проект, перенесите на форму компоненты OpenDialog и SaveDialog и, поочередно выделяя, просмотрите их свойства. Видно, что свойства этих компонентов одинаковы, только смысл несколько различен для открытия и сохранения файлов. Двойной щелчок на компонентах вызывает диалоговые окна Открытие файла и Сохранение соответственно.

Основное свойство, в котором возвращается в виде строки выбранный пользователем файл, – FileName. Значение этого свойства можно задать и перед обращением к диалогу, т.е. перед вызовом диалогового окна. Убедитесь в том, что тогда оно появится в диалоге как значение по умолчанию в окне Имя файла.

В свойстве Filter задаются типы искомых файлов, появляющиеся в диалоге в выпадающем списке Тип файла. В процессе проектирования это свойство задают с помощью редактора фильтра, который вызывается нажа-тием кнопки с многоточием около имени этого свойства в Инспекторе Объектов. В левой панели Имя фильтра окна редактора фильтра записывают тот текст, который увидит пользователь в списке Тип файла диалога, а в правой панели Фильтр записываются шаблоны фильтра.

В аналогичном виде можно задавать свойство Filter программно во время выполнения приложения.

Свойство FilterIndex определяет номер фильтра, который будет по умолчанию показан пользователю в момент открытия диалога. Например, значение FilterIndex=1 задает по умолчанию первый фильтр.

Свойство InitialDir определяет начальный каталог, который будет открыт в момент начала работы пользователя с диалогом. Если значение этого свойства не задано, то открывается текущий каталог или тот, который был открыт при последнем обращении пользователя к соответствующему диалогу в процессе выполнения данного приложения.

Свойство DefaultExt определяет значение расширения файла по умолчанию. Убедитесь в том, что если оно не задано, то пользователь должен указать в диалоге полное имя файла с расширением, и в том, что если оно задано, то можно писать в диалоге имя без расширения, так как будет принято заданное расширение.

Свойство Title позволяет задать заголовок диалогового окна. Если это свойство не задано, окно открывается с заголовком, определенным в системе (например, Открытие файла и Сохранение). Но можно задать и свой заголовок, подсказывающий пользователю ожидаемые действия. Например, Укажите имя и тип сохраняемого файла. Убедитесь в этом.

Расскажите о свойстве Options компонентов OpenDialog и SaveDialog.

Свойство Options определяет условия выбора файла. Множество опций, которые можно установить программно или во время проектирования, включает:

ofAllowMultiSelect

Позволяет пользователю выбирать несколько файлов

ofCreatePrompt

В случае, если пользователь написал имя несуществующего файла, появляется замечание и запрос, надо ли создать файл с заданным именем

ofEnableIncludeNotify

Разрешает посылать в диалог сообщения

ofEnableSizing

Разрешает пользователю изменять размер диалогового окна

ofExtensionDifferent

Этот флаг, который можно прочитать после выполнения диалога, показывает, что расширение файла, выбранного пользователем, отличается от DefaultExt

ofFileMustExist

В случае, если пользователь написал имя несуществующего файла, появляется сообщение об ошибке

ofHideReadOnly

Удаляет из диалога индикатор Открыть только для чтения

ofNoChangeDir

После щелчка пользователя на кнопке OK восстанавливает текущий диалог, независимо от того, какой каталог был открыт при поиске файла

ofNoDereferenceLinks

Запрещает переназначать клавиши быстрого доступа в диалоговом окне

ofNoLongNames

Отображаются только не более 8 символов имени и трех символов расширения

ofNoNetworkButton

Убирает из диалогового окна кнопку поиска в сети. Действует только, если флаг ofOldStyleDialog включен

ofNoReadOnlyReturn

Если пользователь выбрал файл только для чтения, то генерируется сообщение об ошибке

ofNoTestFileCreate

Запрещает выбор в сети защищенных файлов и недоступных дисков при сохранении файла

ofNoValidate

Не позволяет писать в именах файлов неразрешенные символы, но не мешает выбирать файлы с неразрешенными символами

ofOldStyleDialog

Создает диалог выбора файла в старом стиле

ofOverwritePrompt

В случае, если при сохранении файла пользователь написал имя существующего файла, появляется замечание, что файл с таким именем существует, и запрашивается желание пользователя переписать существующий файл

ofPathMustExist

Генерирует сообщение об ошибке, если пользователь указал в имени файла несуществующий каталог

ofReadOnly

По умолчанию включает индикатор Открыть тол-ко для чтения при открытии диалога

ofShareAware

Игнорирует ошибки нарушения условий коллективного доступа и разрешает, несмотря на них, производить выбор файла

ofShowHelp

Отображает в диалоговом окне кнопку Справка

Расскажите о событиях OnCanClose, OnFolderChange, OnSelectionChange, OnTipeChange.

Событие OnCanClose возникает при нормальном закрытии пользователем диалогового окна после выбора файла. При отказе пользователя от диалога – нажатии кнопки Отмена, клавиши Esc и т.д. событие OnCanClose не наступает. В обработке события OnCanClose можно произвести дополнительные проверки выбранного пользователем файла и, если по условиям задачи этот выбор недопустим, можно известить об этом пользователя и задать значение false передаваемому в обработчик параметру CanClose. Это не позволит пользователю закрыть диалоговое окно.

В обработчиках событий: OnFolderChangeизменение каталога, OnSelectionChangeизменение имени файла, OnTypeChangeизменение типа файла – можно предусмотреть какие-то сообщения пользователю.

Приведите пример обработчика команды Открыть.

Этот оператор вызывает диалог OpenDialog1, проверяет, выбрал ли пользователь файл (если выбрал, то функция Execute возвращает true), после чего имя выбранного файла (OpenDialog1->FileName) сохраняется в переменной MyFName и файл загружается в текст RichEdit1 методом LoadFromFile.

Приведите пример обработчика команды Сохранить как.

Первый из этих операторов присваивает свойству FileName компонента SaveDialog1 имя выбранного файла. Это имя по умолчанию будет предложено пользователю при открытии диалога Сохранить как. Следующий оператор открывает диалог и, если пользователь выбрал в нем файл, запоминает новое имя файла и сохраняет в файле с этим именем текст компонента RichEdit1.

Приведите пример обработчика команды Сохранить.

Если имя файла MyFName не равно пустой строке, т.е. имя файла известно, то нет необходимости обращаться к какому-то диалогу, и текст сохраняется методом SaveToFile. Если же имя файла неизвестно, то текст сохраняется с помощью диалога SaveDialog1 так же, как было рассмотрено выше.

Расскажите о диалогах открытия и закрытия графических файлов.

OpenPictureDialog и SavePictureDialog. Свойства компонентов OpenPictureDialog и SavePictureDialog ничем не отличаются от свойств компонентов OpenDialog и SaveDialog. Единственное отличие – заданное значение по умолчанию свойства Filter в OpenPictureDialog и SavePictureDialog. В редакторе фильтра перечислены все типы графических файлов, с которыми может работать диалог. Пользователю остается удалить фильтры тех файлов, с которыми он не будет работать, и, если нужно, добавить фильтр “Все файлы(*.*)”.

Перечислите компоненты работы с файловой системой и объясните их назначение.

К компонентам работы с файловой системой, представляющим собой фрагменты диалогов, относятся выпадающие списки дисков (драйверов) – DriveComboBox и фильтров (масок) файлов – FilterComboBox, списки каталогов – DirectoryListBox и файлов – FileListBox, дерево каталогов – CDirectoryOutline. Эти компоненты работы с файловой системой облегчают пользователю создание собственных диалоговых окон.

Расскажите об использовании компонентов работы с файловой системой.

Рассмотрение компонентов работы с файловой системой начнем с компонента DriveComboBoxвыпадающего списка дисков (драйверов). При размещении на форме этот компонент автоматически отображает список имеющихся на компьютере дисков. Во время выполнения приложения имя выбранного пользователем диска можно прочитать в свойстве Drive, а строку, содержащуюся в окне списка – в свойстве Text. Свойство TextCase задает регистр отображения: tcUpperCase – в верхнем регистре, tcLowerCaseв нижнем.

Во время проектирования компонент DriveComboBox через его свойство DirList можно связать с компонентом DirectoryListBoxсписком каталогов. Программно связь этих двух компонентов обеспечивается включением в обработчик события OnChange компонента DriveComboBox оператора

DirectoryListBox1->Drive = DriveComboBox1->Drive;

Этот оператор задает имя диска, выбранное пользователем в компоненте DriveComboBox1, свойству Drive списка каталогов DirectoryListBox1.

Аналогичным оператором можно обеспечить связь компонента DriveComboBox1 с деревом каталогов и файлов в компоненте CDirectoryOutline1:

CDirectoryOutline1->Drive = DriveComboBox1->Drive;

Перейдем к рассмотрению выпадающего списка фильтров – компонента FilterComboBox1. Его основное свойство – Filter, которое задается так же, как описано выше. Доступ к отдельным частям фильтра – тексту и маске, осуществляется через свойства Text и Mask соответственно. Связь компонента FilterComboBox1 со списком файлов FileListBox1 устанавливается через свойство FileList компонента FilterComboBox1.



Компонент DirectoryListBox1 отображает список каталогов диска, заданного свойством Drive. Значение свойства Drive можно установить программно во время выполнения. Связь этого свойства с выбранным пользователем диском в компоненте DriveComboBox1 устанавливается или программно, или во время проектирования с помощью свойства DirList компонента DriveComboBox1. Это свойство может указывать на компонент DirectoryListBox1. Связь списка каталогов, т.е. компонента DirectoryListBox1 с компонентом FileListBox1, отображающим список файлов, осуществляется с помощью свойства FileList компонента DirectoryListBox1. Можно также использовать результаты выбора пользователем каталога, читая свойство Directory в обработчике события OnChange. С компонентом DirectoryListBox1 можно также связать метку типа Label. В этой метке будет отображаться путь к текущему каталогу. Если путь не умещается в метке, то он автоматически отображается в сокращенном виде с помощью функции MinimizeName. Метка, отображающая каталог, указывается в свойстве DirLabel компонента DirectoryListBox1.

Список файлов содержится в компоненте FileListBox1. Его свойства Drive, Directory и Mask определяют соответственно диск, каталог и маску файлов. Эти свойства можно устанавливать программно или связывая указанным выше способом компонент FileListBox1 с компонентами DriveComboBox1, DirectoryListBox1 и FilterComboBox1. Свойство FileType позволяет включать в список не все файлы, а только те, которые имеют соответствующие атрибуты. Свойство FileType представляет собой множество, указывающее типы включаемых файлов. Элементы этого множества могут иметь значения: ftReadOnly – только для чтения, ftHiddenневидимые, ftSystemсистемные, ftVolumeIDобозначения дисков, ftDirectoryкаталоги, ftArchiveархивные, ftNormalне имеющие особых атрибутов.



Свойство ShowGlyphs разрешает или исключает показ пиктограмм файлов. Свойство MultiSelect разрешает выбор нескольких файлов.

Основное свойство, в котором можно прочитать имя выбранного пользователем файла – FileName.

Со списком файлов может быть связано окно редактирования Edit1, в котором отображается выбранный файл. На этот список указывает устанавливаемое во время проектирования свойство FileEdit компонента FileListBox1.

Рассмотрение закончим компонентом CDirectoryOutline1, который содержит дерево каталогов. Значение диска устанавливается свойством Drive. Текущий каталог, выбранный пользователем, можно прочитать в свойстве Directory. Свойство TextCase определяет стиль отображения имен каталогов: tcLowerCaseпреобразование к нижнему регистру, tcUpperCaseк верхнему, tcAsIsбез преобразования.

Как компоненты работы с файловой системой связать друг с другом?

Расскажите о свойствах и применении диалога выбора шрифта.

Двойной щелчок на компоненте FontDialog вызывает диалоговое окно выбора атрибутов шрифта, в котором пользователь может выбрать имя шрифта, его стиль (начертание), размер и другие атрибуты.

Основное свойство компонента – Font типа TFont, в котором можно задать начальные установки атрибутов шрифта и в котором можно прочесть значения атрибутов, выбранные пользователем в процессе диалога.

Свойства MaxFontSize и MinFontSize устанавливают ограничения на максимальный и минимальный размеры шрифта. Значения по умолчанию равны нулю, и тогда ограничения на размер отсутствуют.

Свойство Device определяет, из какого списка возможных шрифтов будет предложен выбор в диалоговом окне: fdScreenиз списка экрана (по умолчанию), fdPrinterиз списка принтера, fdBothиз обоих.

Свойство Options содержит множество опций, из которого выделим следующие:

fdAnsiOnly

Отображать только множество шрифтов символов Windows, не отображать шрифтов со специальными символами

fdApplyButton

Отображать в диалоге кнопку Применить независимо от того, предусмотрен ли обработчик события OnApply

fdEffects

Отображать в диалоге индикаторы специальных эффектов (подчеркивание и др.) и список Цвет

fdFixedPitchOnly

Отображать только шрифты с постоянной шириной символов

fdForceFontExist

Позволять пользователю выбирать шрифты только из списка, запрещать ему вводить другие имена

fdLimitSize

Разрешить использовать свойства MaxFontSize и Min-FontSize, ограничивающие размеры шрифта

fdNoFaceSel

Открывать диалоговое окно без предварительно установленного имени шрифта

fdScalableOnly

Отображать только масштабируемые шрифты, удалять из списка не масштабируемые (шрифты bitmap)

fdNoSizeSel

Открывать диалоговое окно без предварительно установленного размера щрифта

fdNoStyleSel

Открывать диалоговое окно без предварительно установленного начертания шрифта

fdWysiwyg

Предлагать в списке только шрифты, доступные и для экрана, и для принтера, удаляя из него аппаратно зависимые шрифты

По умолчанию все опции, кроме fdEffects, отключены.

Если установить опцию fdApplyButton, то при нажатии пользователем кнопки Применить возникает событие OnApply, в обработчике которого можно написать код, который применит выбранные пользователем атрибуты, не закрывая диалогового окна.

Приведите примеры применения диалога выбора шрифта (в Memo, в RichEdit, на форме).

if(FontDialog1->Execute())

Memo1->Font->Assign(FontDialog1->Font);

Приведенный оператор вызывает диалог выбора атрибутов шрифта и, если пользователь произвел выбор, значения всех выбранных атрибутов, содержащиеся в свойстве FontDialog1->Font, присваиваются атрибутам окна редактирования, содержащимся в свойстве Memo1->Font. Шрифт в окне Memo1 немедленно изменится.

В компоненте FontDialog1 установим опцию fdApplyButton в true и напишем обработчик события OnApply:

Memo1->Font->Assign(FontDialog1->Font);

Выполним приложение. Теперь пользователь может наблюдать изменения в окне Memo1, нажимая в диалоговом окне кнопку Применить и не прерывая диалога. Это очень удобно, так как позволяет пользователю правильно подобрать атрибуты шрифта.

Используем в качестве окна редактирования RichEdit1. Теперь в диалоговом окне пользователь выбирает атрибуты шрифта для выделенного фрагмента текста или для вновь вводимого текста. Эта возможность реализуется следующим обработчиком команды Шрифт_R:

if(FontDialog2->Execute())

RichEdit1->SelAttributes->Assign(FontDialog2->Font);

Сохраните все и выполните приложение.



Страницы: 1 | 2 | Весь текст