Однострочное поле ввода Edit, EditMask, LabelEdit

Ввод и редактирование текста выполняется в специальных полях или областях формы. При необходимости пользователь может изменить отображаемые данные. Для этих целей система Delphi предлагает различные компоненты, например, Edit, MaskEdit, Memo, RichEdit и LabeledEdit.

Однострочный редактор, или поле редактирования (поле ввода), представляет собой поле ввода текста, в котором возможно отображение и изменение текста. В Delphi есть несколько однострочных редакторов, из них наиболее часто используется компонент Edit.

Компонент ввода и редактирования текста Edit

Компонент Edit позволяет вводить и редактировать с клавиатуры различные символы, при этом поддерживаются операции, такие как перемещение по строке с использованием клавиш управления курсором, удаление символов с помощью клавиш <Backspace> и <Delete>, выделение части текста и др. Отметим, что у однострочного редактора отсутствует реакция на управляющие клавиши <Enter> и <Esc>.

Свойство CharCase



Для изменения регистра символов в поле редактирования служит свойство СharСase типа TEditcharCase, которое может принимать одно из трех значений:

  • ecLowerCase — текст преобразуется к нижнему регистру;
  • ecNormal — регистр символов не изменяется (по умолчанию);
  • ecUpperCase — текст преобразуется к верхнему регистру.

Свойство PasswordChar

При использовании компонента Edit для ввода пароля можно воспользоваться свойством PasswordChar типа Char, задающим символ для отображения в поле ввода. Этот символ при вводе текста появляется вместо фактически введенного символа. Например, после выполнения инструкций

  1. Edit1.PasswordChar := '*';
  2. Edit1.Text := 'Пароль';

в поле редактирования появится строка ******, в то время как в действительности свойство Text имеет значение — 'Пароль'.

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

Компонент MaskEdit

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

Свойство EditMask

Маска задается в свойстве EditMask типа string и представляет собой последовательность специальных кодов, определяющих для поля редактирования формат содержащегося в ней текста.

Маска состоит из разделенных символом трех полей:

  1. первое поле является собственно маской;
  2. второе поле— это символ, определяющий, считаются ли литеральные символы частью данных. По умолчанию используется 1, и литеральные символы маски являются частью не только значения, редактируемого в визуальном компоненте, но и значения, содержащегося в поле. Если вместо 1 установить символ о, то литеральные символы маски по-прежнему будут отображаться при редактировании значения, однако в поле не сохраняются. Литеральные символы удобно применять в качестве разделителей, например, при вводе телефонных номеров;
  3. третье поле содержит символ, используемый для указания незаполненных символов во вводимом тексте, по умолчанию это символ подчеркивания.

Если второе и/или третье поля не определены, то для них действуют значения по умолчанию.

В маске могут использоваться следующие специальные символы:

  • ! — в тексте подавляются начальные пробелы; если символ ! отсутствует, то подавляются конечные пробелы;
  • >— символы, следующие за этим символом, до появления символа < переводятся в верхний регистр;
  • <— символы, следующие за этим символом, до появления символа > переводятся в нижний регистр;
  • <> — проверка регистра символов не производится;
  • \ — символ, следующий за этим символом, является литеральным;
  • L — в позиции должен быть введен алфавитный символ;
  • l — (строчная латинская буква l)— в позиции может быть введен алфавитный символ;
  • A— в позиции должен быть введен алфавитно-цифровой символ;
  • а — в позиции может быть введен алфавитно-цифровой символ;
  • C — в позиции должен быть введен символ;
  • с — в позиции может быть введен символ;
  • 0 — в позиции должен быть введен цифровой символ;
  • 9 — в позиции может быть введен цифровой символ;
  • # — в позиции может быть введен цифровой символ или знаки + и — ;
  • :— используется для разделения часов, минут и секунд в показаниях времени;
  • / — используется для разделения дней, месяцев и лет в датах;
  • ; — разделяет поля маски;
  • _ — оставляет в окне редактирования пустое пространство, являющееся автоматически пропускаемым разделителем, в которое нельзя ввести информацию.

Примеры масок:

  • !99/99/00; 1;_ — для даты;
  • !000−00−00; 1;_ — для семизначного телефонного номера, разделитель «-» является частью редактируемого и запоминаемого значения;
  • !000−00−00, −0;_—для семизначного телефонного номера, разделитель «-» является частью только редактируемого значения;
  • !90:00; 1;_ — для времени;
  • 1_1_1_1_1_1_;1;_— для слова длиной в шесть букв максимум (между буквами отображаются пробелы).

Для составления маски можно использовать редактор шаблонов (Input Mask Editor). Редактор шаблонов вызывается двойным щелчком мыши в поле значения свойства EditMask или командой Input Mask Editor контекстного меню.

Маска вводится в поле Input Mask, ее также можно выбрать из образцов в поле Sample Masks и затем изменить. Флажок Save Literal Characters управляет включением в маску литеральных символов, а поле Character for Blanks содержит символ, используемый для указания незаполненных позиций во входной строке. Поле Test Input позволяет проверить функционирование подготовленной маски. Маску также можно загрузить из файла с расширением dem, который выбирается в окне Open Mask File, открываемом нажатием кнопки Masks.

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

Компонент LabeledEdit

Компонент LabeledEdit представляет собой однострочный редактор с надписью и, в отличие от обычного однострочного редактора Edit, дополнительно имеет три свойства, управляющие надписью: EditLabel, LabelPosition и LabelSpacing.

Свойство EditLabel

Свойство EditLabel типа TBoundLabel указывает объект надписи, основные свойства которого (Caption, Alignment, AutoSize, Transparent, Color, Font) не отличаются от свойств рассмотренной ранее надписи Label.

Свойство LabelPosition

Свойство LabelPosition типа TLabeiPosition задает расположение надписи относительно поля редактирования и может принимать значения:

  • lpAbove (над полем) — по умолчанию;
  • lpBelow (под полем);
  • lpLeft (слева от поля);
  • lpRight (справа от поля).

Свойство LabelSpacing типа Integer указывает расстояние (в пикселах) между надписью и полем редактирования (по умолчанию 3).

Обработчик события onKeyPress

Для проверки информации, вводимой в редакторы, можно использовать обработчики событий нажатия клавиш, например обработчик события onKeyPress.

В следующем примере для редактора Edit1 установлено разрешение ввода только десятичных цифр:

  1. procedure TForm1.Edit1KeyPress(Sender :TObject; var Key :Char);
  2. begin
  3. if (Key < '0') or (Key > '9') then Key := #0;
  4. end;

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

Задать реакцию однострочного редактора на нажатие клавиши <Enter> можно так:

  1. procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
  2. begin
  3. if Key = #13 then
  4. begin
  5. Key := #0;
  6. Form1.ActiveControl : = Edit2;
  7. end;
  8. end;
  9. procedure TForm1.Edit2KeyPress(Sender: TObject; var Key: Char);
  10. begin
  11. if Key = #13 then
  12. begin
  13. Key := #0;
  14. Edit3.SetFocus;
  15. end;
  16. end;
  17. procedure TForm1.Edit3KeyPress(Sender: TObject; var Key: Char);
  18. begin
  19. if Key = #13 then Key := #0;
  20. end;

Информация последовательно вводится в три поля, являющихся компонентами Edit1, Edit2 и Edit3. При окончании ввода в первое или второе поля нажатие клавиши <Enter> автоматически активизирует очередное поле. Из третьего поля фокус ввода автоматически не передается. Передача фокуса ввода из разных полей реализована двумя способами: с использованием свойства ActiveControl формы и с помощью метода SetFocus.

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

  
  1. procedure TForm1.AllEditsKeyPress(Sender: TObject; var Key: Char);
  2. begin
  3. if Key = #13 then
  4. begin
  5. Form1.SelectNext(Sender as TWinControl, True, True);
  6. Key := #0;
  7. end;
  8. end;

При нажатии клавиши <Enter> выполняется метод SelectNext, передающий фокус ввода следующему элементу управления. Процедура SelectNext (CurControl: TWinControl; GoForward, CheckTabStop: Boolean) имеет три параметра, из которых CurControl указывает оконный элемент управления, относительно которого выполняется передача фокуса. Параметр GoForward определяет направление передачи фокуса. Если его значение равно True, то фокус получает следующий элемент управления, в противном случае — предыдущий элемент управления. Параметр CheckTabStop определяет, нужно ли учитывать значение свойства TabStop элемента управления, который должен получить фокус. При значении True параметра элемент управления получит фокус, если его свойство Tabstop также имеет значение True.

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

  1. type
  2. TForm1 = class (TForm)
  3. Edit1: TEdit;
  4. Edit2: TEdit;
  5. Edit3: TEdit;
  6. procedure AllEditsKeyPress(Sender: TObject; var Key: Char);
  7. procedure FormCreate(Sender: TObject);
  8. end;
  9. procedure TForm1.FormCreate(Sender: TObject);
  10. begin
  11. Edit1.OnKeyPress := AllEditsKeyPress;
  12. Edit2.OnKeyPress := AllEditsKeyPress;
  13. Edit3.OnKeyPress := AllEditsKeyPress;
  14. end;

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

В качестве еще одного варианта обработки нажатия клавиши <Enter> можно использовать процедуру обработки события OnKeyPress самой формы, на которой находятся элементы редактирования. Свойству KeyPreview формы устанавливается значение True, чтобы обработчик формы получал сообщение о нажатии клавиш первым. Процедура-обработчик может быть такой:

  1. procedure TForm1.FormKeyPress (Sender: TObject; var Key: Char);
  2. begin
  3. if Key = #13 then
  4. begin
  5. Form1.SelectNext(Form1.ActiveControl as TWinControl, True, True);
  6. Key := #0;
  7. end;
  8. end;

Аналогичным образом выполняется обработка нажатия клавиши <Esc> и других клавиш.

Метки: , , ,
Если Вам интересна эта запись, Вы можете следить за ее обсуждением, подписавшись на RSS 2.0 .

Оставить комментарий или два

*

смотреть порн