Компоненты 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:

с целыми   X:=StrToInt(Edit1.Text);
с дробными X:=StrToFloat(Edit1.Text);

    Можно вводить информацию с клавиатуры, присваивать в программе и считывать в переменную типа String:

var S: String;
begin
  Edit1.Text:='Присваиваем текст';
  S:=Edit1.Text;
end;

Также при конструировании элементов Формы текст, вводимый в Инспектор объектов, сразу же появляется в компоненте Delphi Edit.

   В отличие от компонента Delphi Label, который автоматически подстраивает свою длину под размер текста в свойстве Caption, вводимый в компонент Delphi Edit текст никак не влияет на длину (свойство Width) этого компонента. Не помещающаяся в установленную длину часть текста сдвигается вправо или влево за границы компонента:

begin
  Edit1.Text:='Текст, не помещающийся в установленные границы';
end;

   И хотя весь текст остаётся доступен для просмотра и редактирования путём перемещения курсора в ту или иную сторону, программист должен предусмотреть достаточную длину компонента Delphi Edit заранее, на этапе конструирования.
    компонент Delphi Edit

   Это не касается размера компонента по вертикали. Если изменить размер шрифта (свойство Font), то высота компонента Delphi Edit подстроится под высоту выбранного размера шрифта. Впрочем, это будет так, если не менять свойство AutoSize, имеющего тип Boolean. По умолчанию оно равно True. Если же установить его в False, то придётся подстраивать и высоту компонента Edit вручную.

   Теперь рассмотрим события компонента Delphi Edit. В момент изменения свойства Text происходит событие OnChange. Причём не имеет значения, каким способом было произведено это изменение, вручную с клавиатуры или присвоением в программе. Новое значение Edit1.Text можно сразу присвоить переменной и использовать. Нужно только учитывать такой нюанс. По событию OnChange нельзя менять значение самого свойства Text этого компонента. Это естественно, ведь при этом изменении опять произойдёт событие OnChange, которое вызовет следующее, и так далее. То есть, программа зациклится и зависнет. А если без этого не обойтись, в обработчике события OnChange необходимо предусмотреть условие, при выполнении которого изменения свойства Text уже не будет.

   Далее, рассмотрим события, происходящие при вводе с клавиатуры. При нажатии кнопки последовательно происходят события:

  1. OnKeyDown
  2. OnKeyPress
  3. OnChange
  4. OnKeyUp
   События OnKeyDown и OnKeyPress происходят практически перед нажатием, когда клавиша ещё находится в верхнем положении. Этим можно воспользоваться, чтобы переопределить символ, который появится в строке компонента. Вот как выглядят заголовки обработчиков этих событий:

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, а затем переопределяем её, заменяя на звёздочку. Для наглядности пароль, равный слову "пароль" :), я выведу в заголовок Формы:

procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
  Pass:=Pass+Key;
  Key:='*';
  Caption:=Pass;
end;
   

   Возникает вопрос, а как вообще запретить ввод символа с клавиатуры? Для того, чтобы никакой символ не появился в поле ввода компонента 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
  • SelLength
  • SelText
Все эти свойства доступны и для чтения, и для записи.
   - Свойство SelStart (типа Integer) определяет порядковый номер символа, перед которым находится курсор. Отсчёт идёт от нуля;
   - Свойство SelLength (типа Integer) задаёт количество выделенных символов. Причём оно может быть и отрицательным. Тогда выделение идёт в обратную сторону, справа налево;
   - Свойство SelText (типа String) содержит выделенный текст.
   Чтобы выделенный текст был заметен, необходимо, чтобы компонент Edit обладал фокусом ввода. Для перемещения фокуса ввода к нужному компоненту служит свойство SetFocus. То есть, чтобы было видно выделение второго символа, нужно написать:

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

   Если пропустить первый оператор, то свойство SelText всё равно будет содержать в себе второй символ, но на экране заметно этого не будет, если, конечно, фокус ввода не был перемещён туда ранее.


Обзор компонентов Delphi           В начало урока          Компонент Delphi Memo  

Уроки Delphi начинающим



Вопросы и комментарии (152)      Решение задач в Delphi

Оставить комментарий:

Имя  

Текст комментария