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. Из скольких частей состоит шаблон маски?