Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекция №14-15.doc
Скачиваний:
10
Добавлен:
30.07.2019
Размер:
173.57 Кб
Скачать

If ColorDialog1.Execute then

Memo1.Color := ColorDialog1.Color;

Компонент PrintDialog вызывает диалоговое окно печати, представленное на рис. 8.10. В нем пользователь может выбрать принтер и установить его свойства, указать число копий и последователъность их печати, печатать в файл или непосредственно на принтер, выбрать печатаемые страницы или печатать только выделенный фрагмент.

Компонент PrintDialog не осуществляет печать. Он только позволяет пользователю задать атрибуты печати. А сама печать должна осуществляться программно с помощью объекта Printer или иным путем.

Рассмотренные ранее диалоговые компоненты возвращали одно свойство — имя файла, цвет, или один объект — Font, содержащий множество свойств. В отличие от них компонент PrintDialog возвращает ряд свойств, характеризующих выбранные пользователем установки. Это следующие свойства:

PrintRange

Показывает выбранную пользователем радиокнопку из группы Печатать: prAllPages — выбрана кнопка Все страницы, prSelection — выбрана кнопка Страницы с ... по ..., prPageNums — выбрана кнопка Страницы

FromPage

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

ToPage

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

PrintToFile

Показывает, выбран ли пользователем индикатор Печать в файл

Copies

Показывает установленное пользователем число копий

Collate

Показывает, выбран ли пользователем индикатор Разобрать

Перед вызовом диалога желательно определить, сколько страниц в печатаемом тексте, и задать параметры MaxPage и MinPage — максимальный и минимальный номера страниц. В противном случае пользователю в диалоговом окне не будет доступна кнопка Страницы с ... по .... Кроме того следует определить множество опций в свойстве Options:

poDisablePrintToFile

Запретить доступ к индикатору Печать в файл. Эта опция работает только при включенной опции poPrintToFile

poHelp

Отображать в диалоговом окне кнопку Справка. Опция может не работать для некоторых версий Windows 95/98

poPageNums

Сделать доступной радиокнопку Страницы, позволяющую пользователю задавать диапазон печатаемых страниц

poPrintToFile

Отображать в диалоговом окне кнопку Печать в файл

poSelection

Сделать доступной кнопку Выделение, позволяющую пользователю печатать только выделенный текст

poWarning

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

Теперь остановимся на компоненте PrinterSetupDialog, вызывающем диалоговое окно установки принтера. Это единственный диалоговый компонент, не имеющий никаких специфических свойств, которые надо было бы устанавливать или читать. Диалог выполняет операции по установке принтера, на котором будет производиться печать, и задании его свойств. Этот диалог не возвращает никаких параметров.

Компоненты FindDialog и ReplaceDialog, вызывающие диалоги поиска и замены фрагментов текста, очень похожи и имеют одинаковые свойства, кроме одного, задающего заменяющий текст в компоненте ReplaceDialog. Такое сходство не удивительно, поскольку ReplaceDialog — производный класс от FindDialog.

Компоненты имеют следующие основные свойства:

FindText

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

ReplaceText

Только в компоненте ReplaceDialog — текст, который должен заменять FindText

Position

Позиция левого верхнего угла диалогового окна, заданная типом TPoint — записью, содержащей поля X (экранная координата по горизонтали) и Y (экранная координата по вертикали)

Left

Координата левого края диалогового окна, то же, что Position.X

Top

Координата верхнего края диалогового окна, то же, что Position.Y

Options

Множество опций

Последний параметр Options — может содержать следующие свойства:

frDisableMatchCase

Делает недоступным индикатор С учетом регистра в диалоговом окне

frDisableUpDown

Делает недоступными в диалоговом окне кнопки Вверх и Вниз группы Направление, определяющие направление поиска

frDisableWholeWord

Делает недоступным индикатор Только слово целиком в диалоговом окне

frDown

Выбирает кнопку Вниз группы Направление при открытии диалогового окна. Если эта опция не установлена, то выбирается кнопка Вверх

frFindNext

Эта опция включается автоматически, когда пользователь в диалоговом окне щелкает на кнопке Найти далее, и выключается при закрытии диалога

frHideMatchCase

Удаляет индикатор С учетом регистра из диалогового окна

frHideWholeWord

Удаляет индикатор Только слово целиком из диалогового окна

frHideUpDown

Удаляет кнопки Вверх и Вниз из диалогового окна

frMatchCase

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

frReplace

Применяется только для ReplaceDialog. Этот флаг устанавливается системой, чтобы показать, что текущее (и только текущее) найденное значение FindText должно быть заменено значением ReplaceText

frReplaceAll

Применяется только для ReplaceDialog. Этот флаг устанавливается системой, чтобы показать, что все найденные значения FindText должны быть заменены значениями ReplaceText

frShowHelp

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

frWholeWord

Этот флаг включается и выключается, если пользователь включает и выключает опцию Только слово целиком в диалоговом окне. Можно установить эту опцию по умолчанию во время проектирования, чтобы при открытии диалога она была включена

Сами по себе компоненты FindDialog и ReplaceDialog не осуществляют ни поиска, ни замены. Они только обеспечивают интерфейс с пользователем. А поиск и замену надо осуществлять программно. Для этого можно пользоваться событием OnFind, происходящим, когда пользователь нажал в диалоге кнопку Найти далее, и событием OnReplace, возникающим, если пользователь нажал кнопку Заменить или Заменить все. В событии OnReplace узнать, какую именно кнопку нажал пользователь, можно но значениям флагов frReplace и frReplaceAll.

Поиск заданного фрагмента легко проводить, пользуясь функцией 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, переведенную в нижний регистр.

Теперь мы можем рассмотреть пример организации поиска. Пусть в вашем приложении имеется компонент Memo1 и при выборе раздела меню MFind вы хотите организовать поиск в тексте, содержащемся в Memo1. Для упрощения задачи исключим опцию поиска только целых слов и опцию поиска вверх от положения курсора.

Программа, реализующая поиск, может иметь следующий вид: