Компоненты 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.Сохраните проект и выполните приложение. Убедитесь в работоспособности приложения, вводя массивы разных размеров.