Ввод и вывод данных
Во многих программах нужно, чтобы пользователь вводил текстовую или числовую информацию. Чаще всего для ввода данных применяют поле ввода — компонент TEdit (вкладка Standard). Для доступа к введённой строке используют его свойство Text (в переводе с англ. — текст).
Шрифт текста в поле ввода задаётся сложным свойством Font (англ. шрифт). Это объект, у которого есть свои свойства, их список можно увидеть в Инспекторе объектов, если щёлкнуть на значке 0. Например, свойство Size — размер шрифта в пунктах, a Style — свойство-множество, в которое могут входить стили оформления fsBold (жирный), fsltalic (курсив), fsUnderline (подчёркнутый). Если установить шрифт для какого-то объекта, например для формы, все дочерние компоненты по умолчанию будут иметь такой же шрифт.
Программа, которую мы сейчас построим, будет переводить RGB-составляющие цвета в соответствующий шестнадцатеричный код, который используется для задания цвета в языке HTML (см. § 26).
На форме будут расположены (рис. 7.20):
• три поля ввода (в них пользователь может задать значения красной, зелёной и синей составляющих цвета в модели RGB);
• прямоугольник (компонент TShape из группы Additional), цвет которого изменяется согласно введённым значениям;
• несколько меток (компонентов TLabel).
Метки — это надписи, которые пользователь не может редактировать, однако их содержание можно изменять из программы через свойство Caption.
Рис. 7.20
Во время работы программы будут использоваться поля ввода rEdit, gEdit и bEdit, метка rgbLabel, с помощью которой будет выводиться результат — код цвета, и фигура rgbShape. В качестве начальных значений полей можно ввести любые целые числа от 0 до 255 (свойство Text).
При изменении содержимого одного из трёх полей ввода нужно обработать введённые данные и вывести результат в заголовок (свойство Caption) метки rgbLabel, а также изменить цвет заливки для фигуры rgbShape. Обработчик события, которое происходит при изменении текста в поле ввода, называется OnChange. Так как при изменении любого из трёх полей нужно выполнить одинаковые действия, для этих компонентов можно установить один и тот же обработчик. Для этого нужно выделить их, удерживая клавишу Shift, и после этого создать новый обработчик двойным щелчком в Инспекторе объектов.
Для того чтобы преобразовать текст из поля ввода в соответствующее целое число, используется стандартная функция StrToInt (для обратного перевода применяется функция IntToStr). Обработчик события OnChange для поля ввода может выглядеть так:
procedure TForml.rEditChange(Sender: TObject); var r, g, b: integer; begin r:=StrToInt(rEdit.Text) ; g:=StrToInt(gEdit.Text) ; b:=StrToInt(bEdit.Text); rgbShape.Brush.Color:=RGBToColor(r,g,b); rgbLabel.Caption:='#1+IntToHex(r,2)+IntToHex(g,2) +IntToHex(b,2); end;
Поясним последние две строки. Фигура класса TShape имеет свойство-объект Brush, которое определяет заливку внутренней области. Свойство Color этого объекта задаёт цвет заливки, который мы строим из составляющих с помощью стандартной функции RGBToColor.
Далее формируется строка, содержащая шестнадцатеричный код цвета. Для перевода значений в шестнадцатеричную систему используется функция IntToHex, второй её параметр 2 указывает на то, что число записывается с двумя знаками.
Вы можете заметить, что при запуске программы код цвета и цвет прямоугольника не изменяются, какие бы значения мы ни установили в полях ввода в Инспекторе объектов. Чтобы исправить ситуацию, нужно вызвать уже готовый обработчик из обработчика OnCreate формы (он вызывается при создании формы):
procedure TForml.FormCreate(Sender: TObject); begin rEditChange(rEdit); end;
При вызове в скобках указан объект, который посылает сообщение о событии. Здесь в качестве источника указан компонент rEdit, но в данном случае можно было использовать любой объект, потому что параметр Sender в обработчике OnChange не используется.
Следующая страница Обработка ошибок