Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
123123.docx
Скачиваний:
5
Добавлен:
01.07.2025
Размер:
933 Кб
Скачать
☆

2.Компоненты Edit, label.

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 заранее, на этапе конструирования.

   

   Это не касается размера компонента по вертикали. Если изменить размер шрифта (свойство 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 всё равно будет содержать в себе второй символ, но на экране заметно этого не будет, если, конечно, фокус ввода не был перемещён туда ранее.

Label предназначен для отображения статического текста, то есть надписей и меток на Форме, которые не меняются в течение всего времени работы программы. Конечно, текст надписи, отображаемый компонентом Label можно изменить, но не непосредственно, а только программно.    Свойством компонента Label, которое используется для задания отображаемого текста, является Caption (Заголовок англ.). Вот типичные способы использования этого Delphi компонента:

Способ использования

Вид Формы

Комментарий

 Метка (пояснительный текст)  на  Форме

 Размещённый  на  Форме  Компонент Label  указывает  пользователю,  что  именно  он  должен  ввести  в  поле  ввода.  Для  этого  достаточно  в  Инспекторе  объектов  в  свойстве  Caption  ввести  нужный  текст.

 Вывод результатов работы  программы

 Пользователь  вводит  слагаемые,  программа  рассчитывает  результат  и  выводит  его  в  компонент  Label.  Вот  обработчик:  Label1.Caption:=IntToStr(Edit1.Text)+IntToStr(Edit2.Text);

   Хотя считается, что компонент Delphi Label предназначен для отображения именно однострочного текста, это не совсем верно. Свойство WordWrap компонента Label позволяет выводить текст в несколько строк.

Устанавливаем свойство WordWrap в True и смотрим на результат. Как видим, в этом случае происходит автоматический переход на новую строку слова, не помещающегося на текущую строку. Очевидно, если растянуть компонент Label на всю Форму, он способен отобразить достаточно большой текст. Так как свойство Caption компонента Label имеет тип String, то размер текста может достигать 2 Гбайт!

   Свойство Font компонента Label предоставляет возможности по изменению шрифта выводимого текста. При переходе на строку Font в Инспекторе объектов появляется кнопочка, предоставляющая доступ к диалоговому окну выбора шрифта, такому же, с каким мы встречаемся работая, например, в Worde. Плюсик слева на строке Font раскрывает атрибуты шрифта для установки прямо в Инспекторе объектов:

   В комментариях возник вопрос, как отобразить с помощью метки только текст. Дело в том, что метка - это и текст, и проямоугольник фона. Так вот, как сделать так, чтобы был виден только текст, а фон не был заметен? Если фон метки совпадает по цвету с компонентом, на который она установлена, то фон метки незаметен. А если нужно разместить метку на цветной картинке (компонент Image)?    Как раз для этого существует свойство Transparent. Установленное в True, оно делает фон метки прозрачным, и на рисунке будет виден только текст.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]