Edit-однострочное окно редактирования
Компонент класса TEdit представляет собой однострочное редактируемое текстовое поле. С его помощью можно вводить и/или отображать достаточно длинные текстовые строки.
Центральным свойством компонента является свойство Text, которое содержит отображаемую компонентом строку. С помощью обработчика события OnChange программа может контролировать вводимый пользователем текст и при необходимости фильтровать его, игнорируя недопустимые символы. В следующем примере компонент фильтрует все символы, которые не соответствуют правильному представлению вещественного числа:
var
OldText: String;
procedure TForml.EditlChange(Sender: TObject);
begin
if Editl.Text <> '' then
try
StrToFloat(Editl.Text);
OldText := Editl.Text
except
// Ошибка преобразования: восстанавливаем прежний текст
Editl.Text := OldText;
// и позиционируем текстовый курсор в конец текста:
Editl.SelStart := Length(Editl.Text);
Editl.SelText := ''
end
end;
При воспроизведении примера подготовьте глобальную переменную OldText типа string, в которой запоминается последний правильно введенный текст. Лучше всего ее поместить в секцию private класса формы – тогда ее можно не обнулять в момент начала работы.
Свойства компонента TEdit
Свойство | Описание |
property AutoSelect: Boolean; | Определяет, будет ли выделяться весь текст в момент получения компонентом фокуса ввода |
property AutoSize: Boolean; | Если содержит значение True и BorderStyle= bsSingle, высота компонента автоматически меняется при изменении свойства Font .Size |
property CanUndo: в Boolean; | Содержит значение True, если сделанные пользователем изменения в тексте Text можно убрать методом Undo |
TEditCharCase = (ecNormal, ecUpperCase, ecLowerCase) ; property CharCase: TEditCharCase; | Определяет способ автоматического преобразования регистра букв: ecNormal – нет преобразования; ecUpperCase – все буквы прописные; ecLowerCase – все буквы строчные. Правильно работает с кириллицей |
property HideSelection: Boolean; | Если содержит значение False, выделение текста сохраняется при потере компонентом фокуса ввода |
property MaxLength: Integer; | Определяет максимальную длину текстовой строки. Если имеет значение 0, длина строки не ограничена |
property Modified: Boolean; | Содержит значение True, если текст был изменен |
property PasswordChar: Char; | Если символ char определен, он заменяет собой любой символ текста при отображении в окне. Используется для ввода паролей |
property Readonly: Boolean; | Если содержит значение True, текст не может изменяться |
property SelLength: Integer; | Содержит длину выделенной части текста |
property SelStart: Integer; | Содержит номер первого символа выделенной части текста |
property SelText: String | Содержит выделенную часть текста |
property Text: String; | Содержит весь текст |
Методы компонента Tedit
Метод | Описание |
procedure Clear; | Удаляет весь текст |
procedure ClearSelection; | Удаляет выделенный текст |
procedure ClearUndo; | Очищает буфер метода Undo |
procedure CopyToClipboard; | Копирует выделенный текст в буфер обмена |
procedure CutToClipboard; | Копирует выделенный текст в буфер обмена, после чего удаляет выделенный текст из компонента |
function GetSelTextBuf (Buffer: PChar; BufSize: Integer) : Integer; | Копирует не более BufSize символов выделенного текста в буфер Buffer |
procedure PasteFromClipboard; | Заменяет выделенный текст содержимым буфера обмена, а если нет выделенного текста, копирует содержимое буфера обмена в позицию текстового курсора |
procedure SelectAll; | Выделяет весь текст |
procedure SetSelTextBuf (Buffer: PChar) ; | Заменяет выделенный текст содержимым буфера Buffer, а если нет выделенного текста, копирует содержимое буфера Buffer в позицию текстового курсора |
procedure Undo; | Восстанавливает текст в том виде, в котором он был перед последним получением компонентом фокуса ввода |
3 MaskEdit – форматированный ввод
Поле TMaskEdit предназначено для ввода текста, соответствую ще го некото-рому шаблону, задаваемому свойством EditMask: string. Если зто свойство не задано, компонент TMaskEdit работает как обычное текстовое поле TEdit. Свойство IsMasked: Boolean доступно только для чтения и содержит значение True, если строка шаблона задана. Свойство EditText: string содержит тёкет до наложения на него маски ввода (т. е. то, что ввел пользователь), а свойство Text: string может (в зависимости от шаблона) содержать либо исходный тёкет, либо результат наложения на него маски.
Шаблон состоит из трех частей, отделенных друг от друга символами точки с запятой (;). Первая часть задаёт маеку ввода, вторая — это символ 0 или 1, определяющий, нужно ли записывать в свойство Text результат наложения маски (1) или требуется оставить исходный тёкет (0). В третьей части указывается символ, который в поле с маской ввода будет присутствовать в мес-тах, предназначенных для ввода символов (тёкет в поле может содержать символы маски). Например, для ввода семизначного номера телефона тёкет перед началом ввода может выглядеть так:
(095) XXX-XX-XX
Здесь доступные для ввода пользователя места обозначены символом х — последним символом в шаблоне.
Маека состоит из описателей мест ввода, специальных символов и литералов. Описатель указывает, какой именно символ может ввести пользователь в данное место (описатель всегда указывает место для одного символа). Литерал вставляется в тёкет, показываемый в окне редактора, но при вводе курсор перескакивает через литерал и не даёт пользователю возможности изменить его. Литералами считаются любые символы, кроме описателей полей и специальных символов, а также любой символ, которому предшествует символ \. Специальные символы формируют дополнительные указания редактору.
4 Memo – многострочное окно редактирования
Компоненты класса TMemo предназначены для ввода, редактирования и/или отображения достаточно длинного текста.
Текст хранится в свойстве Lines класса Tstrings и, таким образом, представляет собой пронумерованный набор строк (нумерация начинается с нуля).
Свойства BorderStyle, CanUndo, HideSelection, MaxLentgh, Modified, OnChange, Readonly, SelLength, SelStart и SelText аналогичны соответствующим свойствам класса TEdit.
Свойство wordwrap аналогично свойству TLabel.Wordwrap. Другие специфические свойства представлены в таблице.
Свойства компонента Mето
Свойство | Описание |
property Lines: TStrings; | Содержит строки текста |
TScrollStyle = (ssNone, ssHorizontal, ssVertical, ssBoth) ; property ScrollBars: т TScrollStyle; | Определяет наличие в многострочном поле полос прокрутки1 ssNone – нет полос, ssHorizontal – есть горизонтальная полоса; ssVertical– есть вертикальная полоса; ssBoth – есть обе полосы |
property Text: String; | Отображает содержимое свойства Lines в виде одной длинной стоки, в которой границы отдельных строк определяются символами EOL (CR+LF) |
property WantReturns: Boolean; | Если содержит значение True, нажатие клавиши <Enter> вызывает переход на новую строку, в противном случае – обрабатывается системой. Для перехода на новую строку в этом случае следует нажать клавиши <Ctrl>+<Enter> |
property WantTabs: Boolean; | Если содержит значение True, нажатие клавиши <ТаЬ> вызывает ввод в текст символа табуляции, в противном случае – обрабатывается системой. Для ввода символа табуляции в этом случае следует нажать клавиши <Ctrl>+<Tab> |
Поскольку компонент является потомком класса TControl, он имеет также свойство Text, которое содержит отображаемый компонентом текст в виде одной длинной строки. В этой цепочке символов границы строк многострочного текста выделяются символами с кодом #13#10 (признак eoln – конец строки) В отличие от этого, свойство Lines содержит пронумерованный список строк первая строка в этом списке имеет индекс 0, вторая – 1, а общее количество строк можно узнать с помощью метода Lines.Count.
Для загрузки в компонент текста из файла и для сохранения текста в файле удобно использовать методы LoadFromFile и SaveToFile класса Tstrings.
Литература: 1, с.41-52.
Контрольные вопросы:
1. Для чего предназначен компонент Edit, основные свойства компонента?
2. Для чего предназначен компонент Memo, основные свойства компонента?
3. Для чего предназначено свойство Lines компонента Memo?
4. Как переносить слова в строке с использованием компонента Label?
5. Из скольких частей состоит шаблон маски?