18.1.5. TEdit - ввод и отображение строки

Компонент класса TEdit представляет собой однострочный редактор текста. С его помощью можно вводить и/или отображать достаточно длинные текстовые строки.

Центральным свойством компонента является Text, которое представляет собой отображаемую компонентом строку. С помощью обработчика события onchange программа может контролировать вводимый пользователем текст и при необходимости фильтровать его, игнорируя недопустимые символы. В следующем примере компонент фильтрует все символы, которые не соответствуют правильному представлению вещественного числа:

var

OldText: String;

procedure TFormI.EditlChange(Sender: TObject);

begin

if Editl.Text<>'' then

try

StrToFloat(Editi.Text) ;

OldText := Editl.Text except

// Ошибка преобразования: восстанавливаем прежний текст

Editl.Text := OldText;

// и позиционируем текстовый указатель в конец текста:

Editl.SelStart := Length(Editi.Text);

Editi.SelText := ''

end

end;

При повторении примера подготовьте глобальную переменную OldText типа String, в которой запоминается последний правильно введенный текст. Лучше всего ее поместить в секцию Private класса формы - тогда ее можно не обнулять в момент начала работы.

Примечание

> Позиционировать текстовый указатель на любой символа строки .можно с помощью свойств SelStart и SelText: в первое нужно поместить порядковый номер символа от начала текста, после который должен стоять указауель ввода, во-второе -пустую строку.

Свойства компонента:

property AutoSelect: Boolean; | Указывает, будет ли выделяться весь текст в момент получения компонентом фокуса ввода
property AutoSize: Boolean; | Если содержит True и BorderStyle=bsSingle, высота компонента автоматически меняется при изменении свойства Font. Size
TBorderStyle = bsNone..bsSingle; property BorderStyle: TBorderStyle; | Определяет стиль обрамления компонента: bsNone - нет обрамления; bsSingle - компонент обрамляется одной линией
property CanUndo: Boolean; | Содержит True, если сделанные пользователем изменения в тексте Text можно убрать методом Undo
TEditCharCase = (ecNormal, ecUpperCase, ecLowerCase) ; | Определяет автоматическое преобразование высоты букв: ecNormal - нет преобразования; ecUpper
property CharCase: TEditChar Case; | Case - все буквы заглавные; ecLowerCase - все буквы строчные. Правильно работает с кириллицей
property HideSelection: Boolean; | Если содержит False, выделение текста сохраняется при потере компонентом фокуса ввода
property MaxLength: Integers; | Определяет максимальную длину текстовой строки. Если имеет значение 0, длина строки не ограничена
property Modified: Boolean; | Содержит True, если текст был изменен
property OnChange: TNotifyEvent; | Определяет обработчик события OnChange, которое возникает после любого изменения текста
property OEMConvert: Boolean; | Содержит True, если необходимо перекодировать текст из кодировки MS-DOS в кодировку Windows и обратно
property PasswordChar: Char; | Если символ PasswordChar определен, он заменяет собой любой символ текста при отображении в окне. Используется для ввода паролей
property Readonly: Boolean; | Если содержит True, текст не может изменяться
property SelLength: Integers; | Содержит длину выделенной части текста
property SelStart: Integers; | Содержит номер первого символа выделенной части текста
property SelText: Strings- | Содержит выделенную часть текста
property Text: String; | Содержит весь текст
Методы компонента:
procedure Сlears; | Удаляет весь текст
procedure ClearSelection; | Удаляет выделенный текст
procedure ClearUndo; | Очищает буфер метода Undo
procedure CopyToClipboard; | Копирует выделенный текст в clipboard
procedure CutToClipboard; | Копирует выделенный текст в clipboard, после чего удаляет выделенный текст из компонента
function GetSelTextBuf(Buffer: PChar; BufSize: Integer): Integers; | Копирует не более BufSize символов выделенного текста в буфер Buffer
procedure PasteFromClipboard; | Заменяет выделенный текст содержимым Clipboard, а если нет выделенного текста, копирует содержимое Clipboard в позицию текстового курсора
procedure SelectAll; | Выделяет весь текст
procedure SetSelText-Buf(Buffer: PChar); | Заменяет выделенный текст содержимым Buffer, а если нет выделенного текста, копирует содержимое Buffer в позицию текстового курсора
procedure Undo; | Восстанавливает текст в том виде, в каком он был перед последним получением компонентом фокуса ввода

Свойство CanUndo и методы СlearUndo и undo впервые введены в версии Delphi 4.