Главная » Уроки по ООП » Урок 9. Компоненты ввода-вывода и редактирования. |
ЛЕКЦИЯ |
Урок 9. Компоненты ввода-вывода и редактирования.
Font — шрифт отображения текста в компонентах
Во всех компонентах ввода и отображения текстовой и цифровой информации шрифт текста, его размер, стиль (жирный, курсив и т.п.) определяются свойством Font. Это свойство в свою очередь является объектом типа TFont, который имеет множество подсвойств, устанавливаемых в процессе проектирования или программно во время выполнения приложения.
Основные свойства шрифта следующие:
Charset |
Определяет набор символов шрифта. |
Color |
Определяет цвет текста. |
Height |
Характеризует высоту шрифта в пикселях. |
Name |
Вид (имя) шрифта. |
Pitch |
Определяет способ установки ширины символов. Возможные значения: |
Size |
Размер шрифта в кеглях (пунктах). |
Style |
Стиль шрифта: полужирный — fsBold, курсив — fsItalic, подчеркнутый — fsUnderline, перечеркнутый — fsStrikeout. Label1.Font.Style:=[]; {Обычный стиль} Label1.Font.Style:=[fsBold]; {Полужирный} Label1.Font.Style:=[fsBold, fsItalic]; {Полужирный курсив} |
Значения свойств объекта Font можно задавать все сразу методом Assign, который записывает значения всех свойств одного объекта в другой.
Отображение текста в надписях компонентов Label, StaticText
Тексты, отображаемые в компонентах, определяются значением их свойства Caption. Его можно устанавливать в процессе проектирования или задавать и изменять программно во время выполнения приложения. Например:
Label1.Caption:='Новый текст';
Во всех компонентах цвет фона определяется свойством Color, а цвет надписи — подсвойством Color свойства Font. Например, можно задать цвет фона равным clWhite — белый.
Компонент StaticText имеет свойство BorderStyle, определяющее рамку текста — бордюр.
Размер определяется свойством AutoSize.
Если AutoSize=true, то вертикальный и горизонтальный размеры компонента определяются размером надписи. Если AutoSize=false, то выравнивание текста внутри компонента определяется свойством Alignment, которое позволяет выравнивать текст по левому краю, правому краю или центру клиентской области метки.
Перенос текста в Label по строкам
WordWrap=true - допустимость переноса слов длинной надписи, превышающей длину компонента, на новую строчку.
При этом свойство AutoSize = false (чтобы размер компонента не определялся размером надписи) и сделать высоту компонента такой, чтобы в нем могло поместиться несколько строк.
В метке StaticText перенос длинного текста осуществляется автоматически, если AutoSize=false и размер компонента достаточен для размещения нескольких строк.
Задание 1. Рассмотреть свойства компонента Label, создав следующие две формы. Можно все выполнить на одной форме.
Рисунок 1.
Окна редактирования Edit и MaskEdit
Внешнее оформление окон редактирования определяется свойством BorderStyle.
Вводимый и выводимый текст содержится в свойстве Text. Выравнивание текста невозможно. Перенос строк тоже невозможен. Текст, не помещающийся по длине в окно, просто сдвигается и пользователь может перемещаться по нему с помощью курсора.
Свойство AutoSelect определяет, будет ли автоматически выделяться весь текст при передаче фокуса в окно редактирования. Его имеет смысл задавать равным true в случаях, когда при переключении в данное окно пользователь будет скорее заменять текущий текст, чем исправлять его.
Имеются также свойства только времени выполнения SelLength, SelStart, SelText, определяющие соответственно длину выделенного текста, позицию перед первым символом выделенного текста и сам выделенный текст. Например, если в окне имеется текст «выделение текста» и в нем пользователь выделил слово «текста», то SelLength = 6, SelStart = 10 и SelText = 'текста'. Если выделенного текста нет, то свойство SelStart просто определяет текущее положение курсора.
Окна редактирования можно использовать и просто как компоненты отображения текста. Для этого надо установить в true их свойство ReadOnly и целесообразно установить AutoSelect в false.
Свойство MaxLength определяет максимальную длину вводимого текста. Если MaxLength=0, то длина текста не ограничена. В противном случае значение MaxLength указывает максимальное число символов, которое может ввести пользователь.
Свойство Modified, доступное только во время выполнения, показывает, проводилось ли редактирование текста в окне. Если вы хотите использовать это свойство, то в момент начала работы пользователя с текстом Modified надо установить в false. Тогда при последующем обращения к этому свойству можно по его значению (true или false) установить, было или не было произведено редактирование.
Окно ввода пароля
Свойство PasswordChar позволяет превращать окно редактирования в окно ввода пароля. По умолчанию значение PasswordChar равно #0 — нулевому символу. В этом случае это обычное окно редактирования. Но если в свойстве указать иной символ (например, символ звездочки «*»), то при вводе пользователем текста в окне будут появляться именно эти символы, а не те, которые вводит пользователь. Тем самым обеспечивается секретность ввода пароля.
Компонент MaskEdit (на стр. Additional)
Он отличается от Edit тем, что в нем можно задать строку маски в свойстве EditMask. Маска состоит из трех разделов, между которыми ставится точка с запятой:
- записываются специальным образом символы (см. таблицу), которые можно вводить в каждой позиции, и символы, добавляемые самой маской;
- записывается 1 или 0 в зависимости от того, надо или нет, чтобы символы, добавляемые маской, включались в свойство Text компонента;
- указывается символ, используемый для обозначения позиций, в которых еще не осуществлен ввод.
Прочитать результат ввода можно или в свойстве Text, которое в зависимости от вида второго раздела маски включает или не включает в себя символы маски, или в свойстве EditText, содержащем введенный текст вместе с символами маски.
Для построения маски используются специальные символы:
! Поле заполняется слева направо
0 Цифра (0-9) или знак (+/-) обязательны
__ Автоматически вставляет пробел в указанной позиции
> Все символы справа от указанной позиции переводятся в верхний регистр
< Все символы слева от указанной позиции переводятся в нижний регистр
,:;/-() Разделители
L Буква обязательна
Примечание. Другие символы, используемые для создания маски, можно посмотреть в справочной системе Delphi.
Вводить маску можно непосредственно в свойство EditMask. Но удобнее пользоваться специальным редактором масок, вызываемым при нажатии кнопки с многоточием в строке свойства EditMask в Инспекторе Объектов.
Рассмотрим примеры масок. Маска для ввода номера телефона имеет вид:
!\(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; .
Задание 2. Создайте следующую форму, используя компоненты Edit и EditMask.
В поле Edit для ввода пароля, при вводе текста, он должен заменяться на звездочки.
Для ввода телефона и даты использовать компонент MaskEdit.
Рисунок 2
Многострочные окна редактирования Memo и RichEdit
Компоненты Memo и RichEdit являются окнами редактирования многострочного текста.
В компоненте Memo формат (шрифт, его атрибуты, выравнивание) одинаков для всего текста и определяется свойством Font.
Компонент RichEdit работает с текстом в обогащенном формате RTF. В этом компоненте разные фрагменты текста можно форматировать по разному.
Компонент RichEdit (стр.Win32)
Свойство SelAttributes
Формат вновь вводимого фрагмента текста.
RichRdit1.SelAttributes.Color (цвет),
RichRdit1.SelAttributes.Name (имя шрифта),
RichRdit1.SelAttributes.Size (размер),
RichRdit1.SelAttributes.Style (стиль) и ряд других.
Свойство DefAttributes
В компоненте имеется также свойство DefAttributes, содержащее атрибуты по умолчанию. Эти атрибуты действуют до того момента, когда изменяются атрибуты в свойстве SelAttributes.
Но значения атрибутов в DefAttributes сохраняются и в любой момент эти значения могут быть методом Assign присвоены атрибутам свойства SelAttributes, чтобы вернуться к прежнему стилю.
Свойство DefAttributes доступно только во время выполнения. Поэтому его атрибуты при необходимости можно задавать, например, в обработчике события OnCreate.
Свойство Paragraph
Отвечает за выравнивание, отступы и т.д. в пределах текущего абзаца.
Alignment |
выравнивание текущего абзаца текста. RichRdit1.Paragraph.Alignment:=taLeftJustify (по левому краю), |
FirstIndent | Число пикселей отступа красной строки. |
Numbering | Управляет вставкой маркеров, как в списках. RichEdit1.Paragraph. Numbering:=nsNone; — отсутствие маркеров, |
LeftIndent | Отступ в пикселях от левого поля. |
RightIndent | Отступ в пикселях от правого поля. |
Значения подсвойств свойства Paragraph можно задавать только в процессе выполнения приложения, например, в событии создания формы или при нажатии какой-нибудь кнопки. Значения подсвойств свойства Paragraph относятся к тому абзацу, в котором находится курсор.
Общие свойства окон редактирования Memo и RichEdit.
Свойство ScrollBars определяет наличие полос прокрутка текста в окне. По умолчанию ScrollBars = ssNone, что означает их отсутствие. Пользователь может в этом случае перемещаться по тексту только с помощью курсора. Можно задать свойству ScrollBars значения ssHorizontal, ssVertical или ssBoth, что будет соответственно означать наличие горизонтальной, вертикальной или обеих полос прокрутки.
Основное свойство окон Memo и RichEdit — Lines, содержащее текст окна в виде списка строк и имеющее тип TStrings. Начальное значение текста можно установить в процессе проектирования, нажав кнопку с многоточием около свойства Lines в окне Инспектора Объектов.
Во время выполнения приложения вы можете заносить текст в окно редактирования с помощью методов свойства Lines типа TStrings.
Весь текст, представленный одной строкой типа String, внутри которой используются разделители типа символов возврата каретки и перевода строки, содержится в свойстве Text.
Доступ к отдельной строке текста вы можете получить с помощью свойства Strings[Index: Integer]. Индексы начинаются с 0. Так что Memo1.Lines.Strings[0] — это текст первой строки.
Свойство только для чтения Count указывает число строк в тексте.
Для очистки текста в окне надо выполнить процедуру Clear. Этот метод относится к самому окну, а не к его свойству Lines.
Для занесения новой строки в конец текста окна редактирования можно воспользоваться методами Add или Append свойства Lines. Для загрузки текста из файла применяется метод LoadFromFile.
Сохранение текста в файле и загрузка из файла
Сохранение текста в файле может осуществляться командой
Memo1.Lines.SaveToFile('text.txt');
Загрузка в окно Memo1 текста из файла может осуществляться командой
Memo1.Lines.LoadFromFile ('text.txt');
Свойство SelStart компонентов Memo и RichEdit указывает позицию курсора в тексте или начало выделенного пользователем текста. Свойство CaretPos указывает на запись, поле X которой содержит индекс символа в строке, перед которым расположен курсор, а поле Y — индекс строки, в которой находится курсор. Учитывая, что индексы начинаются с 0, значения Memo1.CaretPos.Y+1 и Memо1.CaretPos.X+1 определяют соответственно номер строки и символа в ней, перед которым расположен курсор. В редакторе на рисунке именно эти значения (только не для Memo, а для RichEdit) использованы, чтобы отображать в строке состояния позицию курсора.
Задание 3: на форме расположить компоненты Memo1, FontDialog1 (стр.Dialogs)— диалог выбора шрифта и кнопку. По нажатию на кнопку выводить окно настройки шрифта.
Ход работы: в обработчик события OnClick кнопки вставьте оператор:
if (FontDialog1.Execute) then Memo1.Font.Assign(FontDialog1.Font);
Если пользователь сменил атрибуты в диалоговом окне выбора шрифта, то метод FontDialog1.Execute возвращает true и атрибуты шрифта компонента Memo1 устанавливаются равными выбранным пользователем.
Задание 4. Установите на форму компоненты RichEdit, FontDialog и кнопку Button, которая позволит пользователю менять атрибуты текста. В обработчик щелчка кнопки введите код:
Объекты SelAttributes и Font совместимы по типу. Поэтому можно присвоить сразу все свойства одного объекта другому:
if FontDialog1.Execute then RichEdit1.SelAttributes.Assign(FontDialog1.Font);
RichEdit1.SetFocus;
Запустите приложение и увидите, что вы можете менять атрибуты текста, выполняя отдельные фрагменты различными шрифтами, размерами, цветами, стилями. Устанавливаемые атрибуты влияют на выделенный текст или, если ничего не выделено, то на атрибуты нового текста, вводимого начиная с текущей позиции курсора (позиция курсора определяется свойством SelStart).
Задание 5. По нажатию на кнопку в окно RichEdit должен выводится текст (рис.3), оформленный таким образом.
Рисунок 3
Составитель: Салий Н.А.