ОглавлениеНазадВпередНастройки
Добавить цитату

8.2. Компоненты ввода текста и чисел: Edit, ComboEdit, NumberBox

Edit

Компонент Edit, наверно, наиболее используемый в работе (наряду с Кнопкой – Button, которая и задает действия с ним).

Если в обычном Delphi 7 это обычное белое окошко, то в Delphi 11 это фактически не видимый элемент, с едва заметным подчеркиванием, которое приходится доводить до видимости компонентом из вкладки Effects InnerGlowEffect.

Если учитывать, что компонент используется для ввода и приходится буквально тыкать в него пальцем на экране, то это становится критичным.


Рис. 19. 3 вида компонента Edit в различном оформлении.


Основным свойством компонента, Edit, передающим введённую информацию, является свойство Text типа String. Вводимый Text можно ввести при создании компонента или затем программно. Не помещающийся текст остается доступен программно, но не виден на экране. Для работы с числами можно перевести текст в число: целое: X:= StrToInt (Edit1.Text); дробное: = StrToFloat (Edit1.Text);

Так как при вводе в компонент используются как текстовые данные цифры, то часто важно установить тип вызываемой при обращении к компоненту клавиатура: KeyboardType – изначальный Default общей клавиатуры заменить на ввод цифр – DecimalNumberPad.

Также можно ограничить максимальное вводимое число знаков (MaxLength) и задать фильтры для ввода символов.

Для ограничения ввода отслеживаются вводимые символы:

Реакция Edit на клавиши: KeyPress:

if key = #13 // клавиша <Enter> then…;

case Key of

«0».. «9», #8:; // цифры и BackSpace

#13: Edit3.SetFocus; // переместить на Enter

«-’: if Length (Edit2.Text) <> 0 then Key:= #0; //ничего не отображать за выходом из рамок окна

else Key:= #0; // остальные символы не отображать.

end;

Можно также:

procedure TForm1.Edit1KeyDown (Sender: TObject; var Key: Word);

var

KeyChar: Char; Shift: TShiftState);

begin

if ((KeyChar <«0») or (KeyChar> «9») or (Length (Edit1.Text)> =11))

and (KEY <> 8) and (KEY <> 46) then //8 и 46 код клавиш Backspace и Del

begin

KeyChar:= #0;

if (Length (Edit1.Text)> =11) = false then

ShowMessage («Допускаются только цифры!»)

else

ShowMessage («Длина текста превысила 11 знаков!»)

endend;

Или:

procedure TForm1.Edit1KeyPress (Sender: TObject; var Key: Char);

begin

case Key of

«0».. «9», #8:; // цифры и <Backspace>

// Замена точки или запятую десятичной дроби на правильный разделитель – DecimalSeparator

«.»,»,»

begin

Key:= FormatSettings.DecimalSeparator;

//проверка правильности разделителя

if pos (Key, Edit1.Text) <> 0

then Key:= #0;

end;

#13: Edit2.SetFocus; // <Enter> переместиться в поле Edit

else Key:= #0; // Остальные символы запрещены

end;

Проще, однако, установить фильтр ввода данных:

Edit1.FilterChar:= «0123456789»;

Или: keyPress: if key = VK_Eskape (Enter) then

Или на Edit1KeyPress: if Key=»,» then Key:=».»;//Замена на лету


Ограничить ввод можно свойством ReadOnly, а также свой ствами Enabled и CanFocus; CheckSpelling – контроль правописания.

Задействовав свойство Password (true), можно заменить входящий текст видимыми точками, сделав компонент для ввода пароля.

Выделить часть текста можно:

Edit1.SetFocus; Edit1.SelStart:= 1; Edit1.SelLength:= 1;

С компонентом можно также связать Кнопки, щелкнув по нему правой кнопкой мыши и выбрав в Item Editor, например, кнопку очистки.

ComboEdit представляет собой строку редактирования, комбинированную с кнопкой, аналогично тому, как объединен редактор текста и кнопка выпадающего списка в стандартном элементе ComboBox.


NumberBox.

Для ввода непосредственно чисел не нужно использовать преобразования IntToStr (n), существуют специальные компоненты для ввода чисел (тип Single): NumberBox и SpinBox со свойством Value, при этом для отображения в качестве текста имеется свое свойство:

Label1.Text:= NumberBox1.Text;

Label1.Text:= SpinBox1.Text;

Также следует определить ValueType (Integer/Float) в Object Inspector (однако, при выборе Integer преобразование IntToStr все равно не действует без дополнительного Round). DecimalDigits отображает число десятичных знаков. Свойства HorzIncrement и VertIncrement: шаг приращения. Свойство Value компонента относится к Single, но даже выставив X как Integer в Object Insoector придется изменять тип: y:= round (x).


Рис. 20. Добавление в компонент Edit других компонентов.


SpinBox

SpinBox – окно редактирования, может отображать только число, с кнопками для увеличения и уменшения отображаемого значения.


ComboTrackBar

У ComboTrackBar – cвойства те же, и отображение каретки для ComboTrackBar (свойства Visible и CanShow) и режим выпадающего списка.


ComboEdit

Строка редактирования, комбирированная с кнопкой выпадающего списка (DropDownCount), с возможностью ввода строк текста (свойство Items). ComboEdit1.Items.Add (String) добавляет строчку; можно добавить строчку и цифру: ComboEdit1.Items.AddPair (String: String, Value: String).


TdateEdit, TtimeEdit, TCalendar

Позволяют в вид диалога выбрать дату, время. Строка ввода при получении фокуса отображает диалог выбора, результат передается в свойство DateTime (вместе или раздельно).