Главная » Уроки по ООП » Урок 20. Невизуальные компоненты |
ЛЕКЦИЯ |
Урок 20. Невизуальные компоненты
Невизуальные компоненты представляют собой, как правило, компоненты, с помощью которых осуществляется доступ к системным ресурсам. Они отображаются только во время конструирования интерфейса, но не видны во время работы приложения. Примером таких компонентов служит компонент Timer. Кроме него к невизуальным компонентам относят диалоговые компоненты и компоненты-меню.
Диалоговые компоненты
В Win32 диалоговым окном называется окно стандартного размера без кнопок максимизации и минимизации. Диалоговые окна позволяют управлять различными режимами работы программы и сообщать ей необходимую информацию. Диалоговое окно может пересылать сообщения, задавать вопросы и принимать ответы.
Выделяют два вида диалоговых окон — модальные и немодальные. Модальные диалоговые окна сохраняют фокус ввода до закрытия окна. Немодальные диалоговые окна позволяют переключаться в другие окна без закрытия данного окна.
Диалоговые компоненты расположены в панели компонентов на странице Dialogs.
Основные правила использования диалоговых панелей
Работа со стандартными диалоговыми окнами осуществляется в три этапа.
1 этап: на форму помещается соответствующий компонент и осуществляется настройка его свойств.
2 этап: осуществляется вызов стандартного для диалоговых компонентов метода Execute, который отображает соответствующее диалоговое окно. Вызов этого метода обычно располагается внутри обработчика какого-либо события.
Например, мы хотим, чтобы при нажатии на кнопку на экране появилось диалоговое окно сохранения файла. Для этого в обработчик события нажатия кнопки необходимо внести следующий оператор:
If SaveDialog1.Execute Then ...
Только после обращения к методу Execute на экране появляется соответствующее диалоговое окно. Стандартное окно диалога является модальным окном, поэтому сразу после обращения к Execute дальнейшее выполнение программы приостанавливается до тех пор, пока пользователь не закроет окно.
Метод Execute является логической функцией, которая возвращает значение True, если результат диалога с пользователем был успешным. Проанализировав результат выполнения метода Execute, программа может выполнить третий этап.
3 этап: использование введенных с помощью диалогового окна данных — имени файла, настроек принтера, выбранного шрифта и т. д.
Задание 1. Создайте приложение, которое использует компонент ColorDialog для изменения цвета формы.
Ход работы.
Поместите на форму компоненты ColorDialog и Button (измените значения свойства Caption на «Изменить цвет). Для кнопки создайте обработчик события onclick и внесите в него следующий код:
Запустите программу и нажмите на кнопку. На экране появится окно
Аналогичным образом используются другие стандартные диалоговые компоненты.
Компоненты OpenDialog и SaveDialog
Компонент OpenDialog позволяет выбрать открываемый файл по заданному шаблону.
Компонент SaveDialog используется для выбора имени файла, в котором будет сохраняться информация.
Свойства компонентов:
FileName |
содержит маршрут поиска и выбранный файл при успешном завершении диалога. |
DefaultExt |
определяет расширение файла по умолчанию: если при задании имени файла пользователь не указал расширение, то к имени файла будет добавлена разделительная точка и значение этого свойства. |
Filter |
используется для выбора файлов, отображаемых в диалоговом окне. Для определения фильтра можно воспользоваться редактором свойства. Свойство можно устанавливать с помощью специального редактора или программно: |
FilterIndex |
указывает, какой из заданных шаблонов отображается в списке. По умолчанию значение этого свойства равно 1; |
InitialDir |
задает название каталога, содержимое которого будет отображаться при вызове диалогового окна. Если значение этого свойства не задано, то отображается содержимое текущего каталога; |
Title |
задает текст заголовка диалогового окна; |
Компонент FontDialog
Компонент FontDialog используется для вызова стандартного диалогового окна выбора шрифтов и их характеристик.
Свойства:
Device позволяет указать тип устройства, для которого выбираются шрифты:
fdScreen — экран.
fdPrinter — принтер.
fdBoth — шрифты, поддерживаемые и экраном, и принтером.
MinFontSize, MaxFontSize - этими свойствами определяется диапазон возможных значений размеров шрифтов. Значения этих свойств задаются в пунктах (1 пункт равен 1/72 дюйма, что приблизительно равно 0.36 мм). Если свойства содержат 0, то ограничения на размер шрифта отсутствуют.
Font содержит результат выбора шрифта.
Для того чтобы изменить шрифт компонента на значение, установленное в диалоговом окне, необходимо определить обработчик сообщения OnApply компонента FontDialog.
Компонент ColorDialog
Компонент ColorDialog используется для вызова диалогового окна настройки цветов.
Color содержит выбранный цвет.
CustomColors содержит до 16 цветов, определенных пользователем. Каждая строка имеет такой формат: ColorX=HHHHHH, где X — буква от А до Р, определяющая номер цвета, НННННН — шестнадцатеричное представление цвета в формате RGB.
Options задает значения опций, определяющих настройку окна:
Значение |
Описание (при установленном значении True) |
cdFullOpen |
показывать с развернутым окном выбора цвета пользователя |
cdPreventFullOpen |
запретить показ окна выбора цвета пользователем |
cdShowHelp |
включить в окно кнопку Справка |
cdSolidColor |
выбирать ближайший сплошной цвет |
cdAnyColor |
разрешить выбор несплошных цветов |
Задание 2. Измените в программе из задания 1 свойства компонента ColorDialog1 так, чтобы на экран выводилось диалоговое окно в следующем виде:
Компоненты FindDialog и ReplaceDialog
Компонент FindDialog используется для отображения стандартного диалогового окна, предназначенного для ввода искомой информации.
Компоненты имеют следующие основные свойства:
FindText |
Текст, заданный пользователем для поиска или замены. Программно может быть установлен как начальное значение, предлагаемое пользователю |
ReplaceText |
Только в компоненте ReplaceDialog — текст, который должен заменять FindText |
Сами по себе компоненты FindDialog и ReplaceDialog не осуществляют ни поиска, ни замены. Они только обеспечивают интерфейс с пользователем. А поиск и замену надо осуществлять программно. Для этого можно пользоваться событием OnFind, происходящим, когда пользователь нажал в диалоге кнопку Найти далее, и событием OnReplace, возникающим, если пользователь нажал кнопку Заменить или Заменить все. В событии OnReplace узнать, какую именно кнопку нажал пользователь, можно по значениям флагов frReplace и frReplaceAll.
Задание 3: Организовать поиск текста в компоненте RichEdit.
Ход решения:
Установите компонент Memo1 и кнопку «Поиск».
Создайте следующий обработчик события нажатия кнопки «Поиск» и объявите глобальную переменную SPos.
Создайте обработчик события onFind для компонента FindDialog.
Запустите программу. Введите несколько строчек текста (так, чтобы встречались одинаковые слова). Затем выделите одно из повторяющихся слов и нажмите кнопку Поиск.
Пояснение кода программы:
Поиск заданного фрагмента легко проводить, пользуясь функцией Object Pascal Pos, которая определена в модуле System следующим образом:
function Pos(Substr: string; S: string): Byte;
где S — строка, в которой ищется фрагмент текста, a Substr — искомый фрагмент. Функция возвращает позицию первого символа первого вхождения искомого фрагмента в строку. Если Substr в S не найден, возвращается 0.
Для организации поиска нам потребуется еще две функции: Сору и AnsiLowerCase. Первая из них определена как:
function Copy(S: string; Index, Count: Integer): string;
Она возвращает фрагмент строки S, начинающийся с позиции Index и содержащий число символов, не превышающее Count. Функция AnsiLowerCase, определенная как
function AnsiLowerCase(const S: string): string;
возвращает строку символов S, переведенную в нижний регистр.
В программе вводится переменная SPos, сохраняющая позицию, начиная с которой надо проводить поиск.
Процедура MFindClick вызывает диалог, процедура FindDialog1Find обеспечивает поиск с учетом или без учета регистра в зависимости от флага frMatchCase. После нахождения очередного вхождения искомого текста этот текст выделяется в окне Memo1 и управление передается этому окну редактирования. Затем при нажатии пользователем в диалоговом окне кнопки Найти далее, поиск продолжается в оставшейся части текста. Если искомый текст не найден, делается запрос пользователю о продолжении диалога. Если пользователь не ответил на этот запрос положительно, то диалог закрывается методом CloseDialog.
Компонент OpenPictureDialog
Компонент OpenPictureDialog является потомком класса TOpenDialog и предназначен для выбора графических изображений с возможностью их просмотра. Компонент OpenPictureDialog поддерживает графические изображения в следующих форматах (BMP, ICO, WMF, EMF).
Компонент SavePictureDialog
Компонент SavePictureDialog является «потомком» класса TSaveDialog и предназначен для сохранения графических изображений с возможностью их предварительного просмотра в одном из форматов, поддерживаемых классом TPicture.
Составитель: Салий Н.А.