Компоненты Delphi страницы StandartКомпонент Delphi Edit |
Уроки Delphi
1. Первая программа
2. Использование компонентов
3. События Delphi
4. Типы данных Delphi
5. Создание своих типов данных
6. Выражения и операторы
7. Работа с файлами в Delphi
8. Дополнительные формы
9. Подпрограммы в Delphi
10. Исключительные ситуации
11. Взаимодействие приложения с пользователем
12. Указатели в Delphi
13. Обзор компонентов
14. Работа со строками
15. Создание интерфейса
16. Графика в Delphi
17. Многопоточность в Delphi
18. Динамическое создание
компонентов Поиск по сайту Это важно:
Метод Application.ProcessMessages;
Это полезно:
Параметр Sender в обработчиках событий;
Бояться не надо |
Компонент Delphi Edit представляет собой однострочное текстовое поле, служащее для ввода данных пользователем. Основным свойством компонента Delphi Edit, передающим введённую информацию, является свойство Edit1.Text типа String. При изучении работы с Delphi Edit советую посетить страничку работа со строками Delphi, так как там описываются функции Delphi для работы с данными, представленными в текстовой форме. Например,чаще всего, судя по поисковым запросам, посетители хотят знать, как работать с числами, введёнными в компонент Edit:
В отличие от компонента Delphi Label, который автоматически подстраивает свою длину под размер текста в свойстве Caption, вводимый в компонент Delphi Edit текст никак не влияет на длину (свойство Width) этого компонента. Не помещающаяся в установленную длину часть текста сдвигается вправо или влево за границы компонента:
Это не касается размера компонента по вертикали. Если изменить размер шрифта (свойство Font), то высота компонента Delphi Edit подстроится под высоту выбранного размера шрифта. Впрочем, это будет так, если не менять свойство AutoSize, имеющего тип Boolean. По умолчанию оно равно True. Если же установить его в False, то придётся подстраивать и высоту компонента Edit вручную. Теперь рассмотрим события компонента Delphi Edit. В момент изменения свойства Text происходит событие OnChange. Причём не имеет значения, каким способом было произведено это изменение, вручную с клавиатуры или присвоением в программе. Новое значение Edit1.Text можно сразу присвоить переменной и использовать. Нужно только учитывать такой нюанс. По событию OnChange нельзя менять значение самого свойства Text этого компонента. Это естественно, ведь при этом изменении опять произойдёт событие OnChange, которое вызовет следующее, и так далее. То есть, программа зациклится и зависнет. А если без этого не обойтись, в обработчике события OnChange необходимо предусмотреть условие, при выполнении которого изменения свойства Text уже не будет. Далее, рассмотрим события, происходящие при вводе с клавиатуры. При нажатии кнопки последовательно происходят события:
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char); procedure TForm1.Edit1KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); Специально подчёркнуто отличие: в обработчике KeyDown переменная Key имеет тип Word, то есть это число, а в обработчике KeyPress эта переменная имеет тип Char, то есть это символ. Отсюда следует, что обработчик KeyPress обрабатывает нажатия только клавиш клавиатуры с символами букв и цифр, а обработчик KeyDown также и остальных клавиш. То есть, зная коды клавиш клавиатуры, можно в обработчике KeyDown присвоить переменной Key код нужной клавиши, а в обработчике KeyPress присвоить нужный символ, и это будет имитация нажатия соответствующей клавиши клавиатуры. Возникает вопрос, как же узнать код клавиши клавиатуры, если под рукой нет справочника. Это очень просто. Нужно в обработчике события OnKeyDown значение переменной Key вывести на Форму, например, в заголовок: procedure TForm1.Edit1KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin Caption:=IntToStr(Key); end; Ну вот, и не нужно в справочники лезть, чтобы узнать код клавиши клавиатуры! Например, код клавиши Enter равен 13, а код клавиши Esc равен 27. В обработчике KeyPress можно написать процедуру ввода пароля. Обычно при вводе пароля вместо нажатого символа выводится символ ' * '. Для достижения такого эффекта сначала переменную Key сохраняем в глобальной переменной Pass, а затем переопределяем её, заменяя на звёздочку. Для наглядности пароль, равный слову "пароль" :), я выведу в заголовок Формы:
Возникает вопрос, а как вообще запретить ввод символа с клавиатуры? Для того, чтобы никакой символ не появился в поле ввода компонента Delphi Edit (да и любого компонента ввода данных), нужно в процедуре-обработчике KeyPress переопределить его символ на код символа "отсутствие символа"! Код "отсутствие символа" равен #0. Таким образом можно разрешить ввод только определённых символов. Например, напишем программу для ввода только цифр. Для этого создадим множество разрешённых для ввода символов. В программе будем проверять, входит ли вводимый символ в множество разрешённых, и если нет - запрещаем его появление: procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char); const Digit: Set of Char=['0' .. '9']; begin if not (Key in Digit) then Key:=#0; end; А вот здесь текст модуля, который для компонента Delphi edit обеспечивает все операции по вводу и удалению только чисел, в том числе дробных. В нём используется всего две процедуры. Одна обеспечивает ввод только допустимых символов, а вторая корректирует получившееся число, приводя его к привычному нам, общеупотребительному виду. Что касается обработчика KeyUp, то его использование аналогично использованию обработчика KeyDown, только принимая во внимание, что событие OnKeyUp происходит в момент отпускания клавиши. Напоследок о возможности программного управления курсором и выделения текста в компоненте Delphi Edit. Для реализации этих задач служат свойства
- Свойство SelStart (типа Integer) определяет порядковый номер символа, перед которым находится курсор. Отсчёт идёт от нуля; - Свойство SelLength (типа Integer) задаёт количество выделенных символов. Причём оно может быть и отрицательным. Тогда выделение идёт в обратную сторону, справа налево; - Свойство SelText (типа String) содержит выделенный текст. Чтобы выделенный текст был заметен, необходимо, чтобы компонент Edit обладал фокусом ввода. Для перемещения фокуса ввода к нужному компоненту служит свойство SetFocus. То есть, чтобы было видно выделение второго символа, нужно написать: begin Edit1.SetFocus; Edit1.SelStart:=1; Edit1.SelLength:=1; end; Если пропустить первый оператор, то свойство SelText всё равно будет содержать в себе второй символ, но на экране заметно этого не будет, если, конечно, фокус ввода не был перемещён туда ранее. Обзор компонентов Delphi
В начало урока
Компонент Delphi Memo |
© 2023 Delphi-Manual.ru - Уроки Delphi начинающим с нуля |