Компоненты Edit, LabeledEdit, MaskEdit

Приведем вначале общие свойства однострочных окон редактирования Edit, LabeledEditи MaskEdit.

Внешнее оформление определяется свойством BorderStyle. Вводимый и выводимый текст содержится в свойстве Text типа AnsiString. Это свойство можно устанавливать в процессе проектирования или задавать программно. Перенос строк невозможен. Текст, не помещающийся по длине в окно, просто сдвигается, и можно перемещаться по нему с помощью курсора. Свойство AutoSize позволяет устанавливать автоподстройку под размер текста только высоты, но не ширины окна.

Свойство AutoSelect определяет, будет ли автоматически выделяться весь текст при передаче фокуса в окно редактирования. Оно задается равным true, когда при переключении в данное окно пользователь будет заменять текущий текст, а не исправлять его.

Свойства только времени выполнения SelLength, SelStart, SelText определяют соответственно длину выделенного текста, позицию перед первым символом выделенного текста и сам выделенный текст.

Окна редактирования можно использовать и просто как компоненты отображения текста. Для этого надо установить в true их свойство ReadOnly и целесообразно установить AutoSelect в false. В этом случае пользователь не сможет изменять отображаемый текст, и окно редактирования становится подобным меткам. Отличия от последних − окна иначе оформлены и могут вмещать текст, превышающий их длину. В этом случае пользователь может прокручивать текст, перемещая курсор в окне.

Свойство Text имеет тип строки AnsiString. При присваивании этому типу числовой информации происходит ее автоматическое преобразование в строку. Например, выполнение оператора Edit1->Text=5./2; приведет к появлению в окне текста «2,5». Но при вводе из окна числовой информации надо использовать функции StrToFloat − преобразование строки в значение с плавающей запятой и StrToInt −преобразование строки в целое значение.

Свойство MaxLength определяет максимальную длину вводимого текста. Если MaxLength=0, то длина текста не ограничена. В противном случае MaxLength указывает максимальное число символов, которое может ввести пользователь.

Свойство Modified, доступное только во время выполнения, показывает, проводилось ли редактирование текста в окне. В момент начала работы пользователя с текстом свойство надо поставить в false. Тогда при последующем обращении к нему можно по его значению (trueили false) установить, было или не было редактирование.

В компоненте LabeledEdit, помимо самого окна редактирования, не отличимого по виду от Edit,имеется метка. Она задается свойством EditLabelс подсвойствами Caption, Color, Font, WordWrap и др.

Свойство LabelPosition компонента LabeledEdit указывает, с какой стороны от окна размещается метка: lpAbove − сверху, выровненная по левому краю, lpBelow − снизу, выровненная по левому краю, lpLeft − слева, lpRight − справа.

В компоненте MaskEditможно задавать строку маски в свойстве EditMask. Это позволяет обеспечить синтаксически безошибочный ввод пользователем таких данных, как номера телефонов, паспортные данные, адреса, даты, время и т.п.

 

Рассмотрим использование компонентов EditиLabeledEdit на примере ввода и вывода одномерного массива.

1.Создайте новый проект и сразу сохраните файл модуля и проект под разными именами в созданной ранее папке.

2.На пустую форму, слева, в ее верхнюю часть, перенесите метку Label1, ниже ее − окно Edit1, справа от окна − кнопку Button1. В свойство Captionметки запишите Размер массива, свойство Text окна очистите, в свойство Caption кнопки запишите Ввод размера массива.

3.В правую верхнюю часть формы перенесите окно LabeledEdit1, правее окна поместите вторую кнопку Button2. Метку окна поместите сверху. В подсвойство Caption свойства EditLabel запишите Элемент массива, в свойство Caption второй кнопки − Ввод элемента массива.

4.Ниже указанных выше компонентов поместите на форме второе окно LabeledEdit2, метку которого расположите слева. Очистите подсвойство Caption свойства EditLabel.

5.Ввод массива начинается с ввода его размера, и поэтому необходимо, чтобы в первый момент при выполнении приложения оказался в фокусе компонент Edit1. Для этого в свойство формы ActiveControl запишем Edit1.

6.Обработчики щелчков кнопок запишем следующим образом:

int n=0, i=0, k[100];

void __fastcall TForm1::Button1Click(TObject *Sender)

{

Edit1->SetFocus();

LabeledEdit2->Text="";

LabeledEdit1->EditLabel->Caption="Элемент массива k["+IntToStr(i)+"]=";

n=StrToInt(Edit1->Text);

Label1->Caption="Размер массива = "+IntToStr(n);

Edit1->Text="";

LabeledEdit1->SetFocus();

i=0;

}

//---------------------------------------------------------------------------

void __fastcall TForm1::Button2Click(TObject *Sender)

{

k[i]=StrToInt(LabeledEdit1->Text);

LabeledEdit1->SetFocus();

i++;

LabeledEdit1->EditLabel->Caption="Элемент массива k["+

IntToStr(i)+"]=";

if(i==n){LabeledEdit1->EditLabel->Caption="Массив введен!";

LabeledEdit2->EditLabel->Caption="Введен массив";

AnsiString s1="";

for(i=0;i<n;i++)s1+=" "+IntToStr(k[i]);

LabeledEdit2->Text=s1;

Edit1->Text="";

LabeledEdit1->Text="";

Edit1->SetFocus();

i=0; }

}

//---------------------------------------------------------------------------

7.Сохраните проект и выполните приложение. Убедитесь в работоспособности приложения, вводя массивы разных размеров.