- •Программирование пользовательского интерфейса с использованием меню и стандартных диалоговых окон
- •Теоретические сведения
- •Свойства пунктов главного и дополнительных меню
- •Компоненты вызова стандартных диалоговых окон открытия и сохранения файлов
- •Компонент вызова стандартного диалогового окна для выбора цвета
- •Компонент вызова стандартного диалогового окна для выбора шрифта
- •Компонент вызова стандартного диалогового окна для установки параметров принтера
- •Компонент вызова стандартного диалогового окна для настройки параметров вывода документа на принтера
- •Компоненты вызова стандартных диалоговых окон поиска и замены текста
- •Лабораторное задание
- •Порядок выполнения лабораторной работы
- •Требования к отчету
Компонент вызова стандартного диалогового окна для установки параметров принтера
Компонент TPrinterSetupDialog отображает диалоговое окно Windows для конфигурирования принтеров. Содержимое диалогового окна изменяется в зависимости от выбранного драйвера принтера.
Диалоговое окно вызывается методом Execute.
TPrinterSetupDialog - единственный компонент-диалог, не имеющий никаких специфических свойств. Никаких свойств в этом компоненте не надо задавать и не надо считывать.
Компонент вызова стандартного диалогового окна для настройки параметров вывода документа на принтера
Компонент TPrintDialog отображает стандартное диалоговое окно Windows для вывода документа на принтер. В нем пользователь может выбрать принтер и установить его свойства, указать число копий и последовательность их печати, печатать в файл или непосредственно на принтер, выбрать печатаемые страницы или печатать только выделенный фрагмент. Компонент PrintDialog не осуществляет печать. Он только позволяет пользователю задать атрибуты печати, которые могут быть прочитаны приложением как ряд свойств. А сама печать должна осуществляться программно с помощью объекта Printer или иным путем. Диалоговое окно появляется во время выполнения, пока это не активизировано обращением к методу Execute.
Компоненты вызова стандартных диалоговых окон поиска и замены текста
Компонент TFindDialog отображает диалоговое окно Windows поиска в тексте заданного фрагмента.
Компонент TReplaceDialog отображает диалоговое окно Windows контекстного поиска и замены. TReplaceDialog - производный класс от TFindDialog.
Диалоговые окна активизируются методом Execute.
Сами по себе компоненты TFindDialog и TReplaceDialog не осуществляют ни поиска, ни замены. Они только обеспечивают интерфейс с пользователем. А поиск и замену надо осуществлять программно. Для этого можно пользоваться событием OnFind, происходящим, когда пользователь нажал в диалоге кнопку Найти далее, и событием OnReplace, возникающим, если пользователь нажал кнопку Заменить или Заменить все. В событии OnReplace узнать, какую именно кнопку нажал пользователь, можно по значениям флагов frReplace и frReplaceAll.
Фрагмент программы, реализующей поиск при выборе пользователем пункта (команды) меню Поиск (имя MFind), может иметь следующий вид:
var SPos:integer;
...
procedure TForm1.MFindClick(Sender: TObject);
begin
{запоминание позиции курсора}
SPos:=Memo1.SelStart;
with FindDialog1 do begin
{начальное значение текста поиска - текст, выделенный в Memo1}
FindText:=Memo1.SelText;
{позиционирование окна диалога внизу Memo1}
Position:=Point(Form1.Left,Form1.Top+Memo1.Top+Memo1.Height);
{удаление из диалога кнопок "Вверх", "Вниз",
"Только слово целиком"}
Options:=Options + [frHideUpDown,frHideWholeWord];
{активизировать диалоговое окно}
Execute;
end;
end;
procedure TForm1.FindDialog1Find(Sender: TObject);
begin
with FindDialog1 do begin
if frMatchCase in Options
{поиск с учетом регистра}
then Memo1.SelStart:=Pos(FindText,Copy(Memo1.Lines.Text,SPos+1,
Length(Memo1.Lines.Text)))+Spos-1
{поиск без учета регистра}
else Memo1.SelStart:=Pos(AnsiLowerCase(FindText),
AnsiLowerCase(Copy(Memo1.Lines.Text,SPos+1,
Length(Memo1.Lines.Text))))+Spos-1;
if Memo1.SelStart>=Spos
then begin
{выделение найденного текста}
Memo1.SelLength:=Length(FindText);
{изменение начальной позиции поиска}
SPos:=Memo1.SelStart+Memo1.SelLength+1;
end
else
if MessageDlg(
'Текст "'+FindText+'" не найден. Продолжать поиск?',
mtConfirmation,mbYesNoCancel,0) <> mrYes
then CloseDialog;
end;
Memo1.SetFocus;
end;
В программе вводится переменная SPos, сохраняющая позицию, начиная с которой надо проводить поиск.