Студопедия

КАТЕГОРИИ:

АстрономияБиологияГеографияДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРиторикаСоциологияСпортСтроительствоТехнологияФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника


Окна редактирования Edit и MaskEdit




На рис. 3 приведены примеры окон редактирования. Внешнее оформление окон редактирования определяется свойством BorderStyle, влияние которого на вид компонента вы можете увидеть на том же рисунке.

 

Рис. 3 Примеры окон редактирования

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

Свойство AutoSize в окнах редактирования имеет смысл, отличный от смысла аналогичного свойства меток: автоматически подстраивается под размер текста только высота, но не ширина окна.

Окна редактирования снабжены многими функциями, свойственными большинству редакторов. Например, в них предусмотрены типичные комбинации «горячих» клавиш:

Ctrl-C — копирование выделенного текста в буфер обмена (команда Copy),

Ctrl-X — вырезание выделенного текста в буфер (команда Cut),

Ctrl-V — вставка текста из буфера в позицию курсора (команда Paste),

Ctrl-Z — отмена последней команды редактирования.

Свойство AutoSelect определяет, будет ли автоматически выделяться весь текст при передаче фокуса в окно редактирования. Имеет смысл задавать AutoSelect =true в случаях, когда при переключении в данное окно пользователь будет скорее заменять текущий текст, чем исправлять его (нажатие любой клавиши кроме стрелок приведет к стрианию выделенного текста). Имеются также свойства только времени выполнения (нельзя настроить в Инспекторе объектов) SelLength, SelStart, SelText, определяющие соответственно длину выделенного текста, позицию перед первым символом выделенного текста и сам выделенный текст. Например, если в окне имеется текст «Фамилия сотрудника» и в нем пользователь выделил слово «сотрудника», то SelLength = 10, SelStart = 9 и SelText = 'сотрудника'. Если выделенного текста нет, то свойство SelStart просто определяет текущее положение курсора.

Окна редактирования можно использовать и только для отображения текста. Для этого надо установить свойство ReadOnly= true и AutoSelect= false. В этом случае пользователь не сможет изменять отображаемый текст и окно редактирования становится подобным меткам, рассмотренным в разделе 1.2. Но имеются и определенные отличия. Во-первых, окна редактирования оформлены несколько иначе (сравните рис. 1 и 3). А главное — окна редактирования могут вмещать текст, превышающий их длину. В этом случае пользователь может прокручивать этот текст, перемещая курсор в окне. Можно также копировать текст, даже в режиме Readonly.

При использовании окон редактирования для вывода, ввода и редактирования чисел необходимо использовать функции преобразования строк и чисел: FloatToStr и IntToStr. При вводе это функции

StrToFloat — преобразование строки в значение с плавающей запятой,

StrToInt — преобразование строки в целое значение.

Если вводимый текст не соответствует числу (например, содержит недопустимые символы), то функции преобразования генерируют исключение EConvertError. Поэтому в программе необходимо предусмотреть обработку этого исключения. Например:

var A: integer;try A := StrToInt(Edit1.Text); ...{операторы, использующие переменную А}except on EConvertError do ShowMessage('Вы ввели ошибочное число; повторите ввод');end

Этот код обеспечивает сообщение пользователю об ошибке ввода и предотвращает ошибочные вычисления. Впрочем, лучше, если пользователь просто не сможет ввести неправильные символы. Например, если вы хотите, чтобы пользователь мог вводить в окно редактирования Edit только цифры и символ точки, можно в обработчик события OnKeyPress этого компонента вставить оператор:

if not (Key in ['0'..'9', ',']) then Key := #0;

Этот оператор не будет позволять вводить символы, кроме цифр и запятой.

Свойство MaxLength определяет максимальную длину вводимого текста. Если MaxLength = 0, то длина текста не ограничена. В противном случае значение MaxLength указывает максимальное число символов, которое может ввести пользователь.

Свойство Modified, доступное только во время выполнения, показывает, проводилось ли редактирование текста в окне. Если вы хотите использовать это свойство, то в момент начала работы пользователя с текстом Modified надо установить в false. Тогда при последующем обращения к этому свойству можно по его значению (true или false) установить, было или не было произведено редактирование.

Свойство PasswordChar позволяет превращать окно редактирования в окно ввода пароля. По умолчанию значение PasswordChar равно #0 — нулевому символу. В этом случае это обычное окно редактирования. Но если в свойстве указать иной символ (например, символ звездочки «*»), то при вводе пользователем текста в окне будут появляться именно эти символы, а не те, которые вводит пользователь (см. рис. 3.5). Тем самым обеспечивается секретность ввода пароля.

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


Таблица 2. Символы шаблона маски

! Наличие символа «!» означает, что в EditText недостающие символы предваряются пробелами, а отсутствие символа «!» означает, что пробелы размещаются в конце.
> Символ «>» означает, что все последующие за ним символы должны вводиться в верхнем регистре, пока не кончится маска или пока не встретится символ «<».
< Символ «<» означает, что все последующие за ним символы должны вводиться в нижнем регистре, пока не кончится маска или пока не встретится символ «>».
<> Символы «<>» означают, что анализ регистра не производится.
\ Символ «\» означает, что следующий за ним символ является буквенным, а не специальным, характерным для маски. Например, символ «>» после символа «\» воспримется как знак >, а не как символ, указывающий на верхний регистр.
L Символ «L» означает, что в данной позиции должна бытъ буква.
l Символ «l» означает, что в данной позиции может быть только буква или ничего.
A Символ «А» означает, что в данной позиции должна быть буква или цифра.
a Символ «а» означает, что в данной позиции может быть буква, или цифра, или ничего.
C Символ «С» означает, что в данной позиции должен быть любой символ.
c Символ «с» означает, что в данной позиции может быть любой символ или ничего.
Символ «0» означает, что в данной позиции должна быть цифра.
Символ «9» означает, что в данной позиции может быть цифра или ничего.
# Символ «#» означает, что в данной позиции может быть цифра, знак «+», знак «-» или ничего.
: Символ «:» используется для разделения часов, минут и секунд.
/ Символ «/» используется для разделения месяцев, дней и годов в датах.
Пробел Символ «пробел» означает автоматическую вставку в текст пробела.

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

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

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

Рис. 4 Окно редактора масок с загруженными файлами стандартных масок


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

Например, можно подготовить маски и сохранить их в файле с именем ru.dem.

Телефон | 5551212 | !000-00-00;0;_Телефон с кодом страны | 0955551212 | !\(999\) 000-00-00;0;_Почтовый индекс | 123456 | !000000;1;_Паспорт| VII123456 | !L-LL 999999;0;_Дата с указанием дня | 270694 | !99/99/00;1;_Дата без указания дня | 0694 | !99/00;1;_Время с секундами | 210515 | ! 90:00:00;1;_Время без секунд | 1345 | !90:00;1;_

Рассмотрим примеры масок. В приведенном выше файле маска для ввода номера телефона имеет вид:

!\(999\) 000-00-00;0;_

В этой маске символ 9 означает, что в соответствующей позиции может быть только цифра. Символ 0 означает, что в данной позиции должна быть цифра. Символ подчеркивания в конце маски будет заполнять пустые позиции. Таким образом, пользователю для ввода в окне будет отображен шаблон):

(___)___-__-__

Поскольку второй раздел маски равен 0, то при чтении введенных пользователем значений свойства EditText и Text будут различаться.

Свойство EditText для примера будет равно (095) 123-45-67,

Свойство Text будет равно 0951234567.

Если второй раздел маски сделать равным 1, то значения обоих свойств будут равны (095) 123-45-67.

Рассмотрим еще пример. Если с помощью EditMask надо ввести, например, целое число без знака, состоящее не более, чем из двух цифр, можно задать маску 99;0;. Если число обязательно должно быть двузначным, то маска должна иметь вид 00;0;.



Поделиться:

Дата добавления: 2015-09-14; просмотров: 135; Мы поможем в написании вашей работы!; Нарушение авторских прав





lektsii.com - Лекции.Ком - 2014-2024 год. (0.007 сек.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав
Главная страница Случайная страница Контакты