Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции 2 семестр.doc
Скачиваний:
42
Добавлен:
27.05.2015
Размер:
777.73 Кб
Скачать

3.2. Однострочный редактор

Однострочный редактор (строка редактирования) представляет собой поле для ввода, отображения и изменения текста. Наиболее часто используется компонент Edit, который может содержать одну строку, не имеющую символа конца. Поэтому при нажатии клавиши <Enter> не выполняются никакие действия и в строку ничего не вводится.

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

Для перехода к другому элементу управления при нажатии клавиши <Enter> необходимо передать ему фокус ввода с помощью метода SetFocus или установки значения свойства ActiveControl.

Пример задания реакции однострочного редактора на нажатие клавиши <Enter>:

procedure TForm1.Edit1KeyPress(Sender: TObject; var Кеу: Char);

begin

if Кеу = #13 then

begin

Кеу := #0;

Form1.ActiveControl := Edit2; // фокус управления передается Edit2

end;

end;

procedure ТFоrm1.Edit2KeyPress(Sender: TObject; var Key: Char);

begin

if Key = #13 then

begin

Кеу:= #0;

Edit3.SetFocus; // фокус управления передается Edit3

end;

end;

procedure TForm1.Edit3KeyPrеss(Sender: TObject; var Key: Char);

begin

if Кеу = #13 then Кеу := #0; // фокус управления не передается

еnd;

Метод SelectNext выполняется при нажатии клавиши <Enter> и передает фокус ввода следующему управляющему элементу. Процедура SelectNext (CurControl: TWinControl; GoForward, CheckTabStop: Boolean);

где CurControl указывает оконный управляющий элемент относительно которого выполняется передача фокуса; параметр GoForward определяет направление передачи фокуса. Если его значение равно True, то фокус получает следующий управляющий элемент, в противном случае – предыдущий; параметр CheckTabStop определяет, нужно ли учитывать значение свойства TabStop управляющего элемента, который должен получить фокус. Управляющий элемент получит фокус, если его свойство TabStop равно True.

Пример использования обработчика события SelectNext:

procedure TForm1. AllEditsKeyPress (Sender: TObject; var Кеу: Char);

begin

if Kеу= #13 thеn

bеgin

Form1.SеlectNехt(Sender as TWinControl, true, true);

Кеу :=#0;

end;

end;

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

type TForm1 = class (TForm)

Edit1: TEdit;

Edit2: TEdit;

Edit3: TEdit;

procedure AllEditsKeyPress(Sender: TObject; var Key: Char);

procedure FormCreate(Sender: TObject)

end;

procedure TForm1.FormCreate(Sender: TObject);

begin

Edit1.OnKeyPress:=AllEditsKeyPress;

Edit2.OnKeyPress:= AllEditsKeyPress

Edit3.OnKeyPress:= AllEditsKeyPress;

end;

Аналогично можно создать разделяемую процедуру, общую для нескольких компонентов (в том числе и разных, например, Edit и Memo), выполняющую обработку других событий.

В Delphi имеются специализированные компоненты, обеспечивающие ввод и изменение целых чисел - UpDown и SpinEdit.

Компонент UpDown превращает Edit в компонент, в котором пользователь может выбирать целое число, изменяя его кнопками со стрелками. Если к тому же установить в true свойство окна ReadOnly, то пользователь просто не сможет ввести в окно какой-либо свой текст и вынужден будет ограничиться выбором числа. Компонент SpinEdit представляет собой сочетание Edit и UpDown, оформленное как отдельный тип компонента.

Компонент UpDown находится на странице Win 32.

Основное свойство компонента UpDownAssociate, связывающее кнопки со стрелками с одним из оконных компонентов, обычно с Edit.

Свойство AlignButton компонента UpDown, которое может принимать значения udLeft или udRight, определяет, слева или справа от окна будут размещаться кнопки.

Свойство Orientation, которое может принимать значения udHorizontal или udVertical, определяет, расположатся ли кнопки по вертикали

Свойство ArrowKeys определяет, будут ли управлять компонентом клавиши клавиатуры со стрелками.

Свойство Thousands определяет наличие или отсутствие разделительного пробела между каждыми тремя цифрами разрядов вводимого числа.

Свойства Min и Мах компонента UpDown задают соответственно минимальное и максимальное значения чисел, свойство Increment задает приращение числа при каждом нажатии на кнопку.

Свойство Position определяет текущее значение числа. Это свойство можно читать, чтобы узнать, какое число задал пользователь.

Свойство Wrap определяет, как ведет себя компонент при достижении максимального или минимального значений. Если Wrap = false, то при увеличении или уменьшении числа до максимального или минимального значения это число фиксируется на предельном значении и нажатие кнопки, пытающейся увеличить максимальное число или уменьшить минимальное, ни к чему не приводит. Если же Wrap = true, то попытка превысить максимальное число приводит к его сбросу на минимальное значение.

Если в компоненте Edit, связанном с UpDown, не задать ReadOnly равным true, то пользователь сможет редактировать число, не пользуясь кнопками со стрелками.

Компонент SpinEdit находится на странице Samples палитры компонентов.

Свойства компонента SpinEdit похожи на рассмотренные, только имеют другие имена: свойства Min, Max, Position называются соответственно MinValue, MaxValue, Value.

В целом компонент SpinEdit во многих отношениях удобнее простого сочетания UpDown и Edit.

Так что, если не требуются какие-то из описанных выше дополнительных возможностей UpDown (нестандартное расположение кнопок, «закольцовывание» изменений и т.п.), то можно рекомендовать пользоваться компонентом SpinEdit для изменения величины толщины линий при рисовании графических объектов.

Компонент MaskEdit также представляет собой однострочный редактор, использующий шаблон. С помощью шаблона (маски) можно ограничить число вводимых символов, тип вводимых символов (алфавитный, цифровой и т. д.).

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

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

Компонент MaskEdit отличается от Edit тем, что в нем можно задать строку маски в свойстве EditMask. Маска состоит из трех разделов, между которыми ставится точка с запятой (;). В первом разделе — шаблоне записываются специальным образом символы, которые можно вводить в каждой позиции, и символы, добавляемые самой маской; во втором разделе записывается 1 или 0 в зависимости от того, надо или нет, чтобы символы, добавляемые маской, включались в свойство Text компонента; в третьем разделе указывается символ, используемый для обозначения позиций, в которых еще не осуществлен ввод. Прочитать результат ввода можно или в свойстве Text, которое в зависимости от вида второго раздела маски включает или не включает в себя символы маски, или в свойстве EditText, содержащем введенный текст вместе с символами маски.

Вводить маску можно непосредственно в свойство EditMask. Но удобнее пользоваться специальным редактором масок, вызываемым при нажатии кнопки с многоточием в строке свойства EditMask в Инспекторе Объектов.

В редакторе масок окно Sample Masks содержит наименования стандартных масок и примеры ввода с их помощью. В окно Input Mask надо ввести маску. Если вы выбираете одну из стандартных масок, то окно Input Mask автоматически заполняется и вы можете, если хотите, отредактировать эту маску.

Окно Character for Blanks определяет символ, используемый для обозначения позиций, в которых еще не осуществлен ввод (третий раздел маски). Индикатор Save Literal Characters определяет второй раздел маски: установлен, если второй раздел равен 1, и не установлен, если второй раздел равен 0.

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

Вы легко можете сделать файл стандартных масок. Он делается в обычном текстовом редакторе и должен сохраняться как «только текст» с расширением .dem. Чтобы редактор масок Delphi видел этот файл, его надо сохранить в каталоге Delphi BIN. Каждая строка файла состоит из трех частей, разделяемых символом вертикальной черты. Первая часть состоит из пояснительного текста, появляющегося в левой панели окна Sample Masks редактора масок. Вторая часть — пример, который появляется в правой панели окна Sample Masks редактора масок. А третья часть — сама маска. Например,

Телефон | 5551212 | !000-00-00;0;_

Телефон с кодом страны | 0955551212 | !\(999\) 000-00-00;0;_

Почтовый индекс | 123456 | !000000;1;_

!

Наличие символа «!» означает, что в EditTextнедостающие символыпредваряютсяпробелами, а отсутствие символа «!» означает, что пробелы размещаютсяв конце.

>

Символ «>» означает, что все последующие за ним символы должны вводиться в верхнем регистре, пока не кончится маска или пока не встретится символ «<».

<

Символ «<» означает, что все последующие за ним символы должны вводиться в нижнем регистре, пока не кончится маска или пока не встретится символ «>».

<>

Символы «<>» означают, что анализ регистра не производится.

\

Символ «\» означает, что следующий за ним символ является буквенным, а не специальным, характерным для маски. Например, символ «>» после символа «\» воспримется как знак >, а не как символ, указывающий на верхний регистр.

L

Символ «L» означает, что в данной позиции должна бытъ буква.

l

Символ «l» означает, что в данной позиции может быть только буква или ничего.

A

Символ «А» означает, что в данной позиции должна быть буква или цифра.

a

Символ «а» означает, что в данной позиции может быть буква, или цифра, или ничего.

C

Символ «С» означает, что в данной позиции должен быть любой символ.

c

Символ «с» означает, что в данной позиции может быть любой символ или ничего.

0

Символ «0» означает, что в данной позиции должна быть цифра.

9

Символ «9» означает, что в данной позиции может быть цифра или ничего.

#

Символ «#» означает, что в данной позиции может быть цифра, знак «+», знак «-» или ничего.

:

Символ «:» используется для разделения часов, минут и секунд.

/

Символ «/» используется для разделения месяцев, дней и годов в датах.

 

Символ « » означает автоматическую вставку в текст пробела.