КАТЕГОРИИ:
АстрономияБиологияГеографияДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРиторикаСоциологияСпортСтроительствоТехнологияФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника
|
Окна редактирования 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. Символы шаблона маски
Вводить маску можно непосредственно в свойство 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;.
|