Шрифт
Source Sans Pro
Размер шрифта
18
Цвет фона
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 знаков!»)
end; end;
Или:
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 (вместе или раздельно).