Планирование уроков на учебный год (по учебнику К.Ю. Полякова, Е.А. Еремина, полный углублённый курс, по 4 часа в неделю)



Уроки 98 - 99
Использование готовых компонентов
(§53. Использование компонентов)




Содержание урока

Программа с компонентами

Ввод и вывод данных

Обработка ошибок

Вопросы и задания

Задачи


Ввод и вывод данных


Во многих программах нужно, чтобы пользователь вводил текстовую или числовую информацию. Чаще всего для ввода данных применяют поле ввода — компонент TEdit (вкладка Standard). Для доступа к введённой строке используют его свойство Text (в переводе с англ. — текст).

Шрифт текста в поле ввода задаётся сложным свойством Font (англ. шрифт). Это объект, у которого есть свои свойства, их список можно увидеть в Инспекторе объектов, если щёлкнуть на значке 0. Например, свойство Size — размер шрифта в пунктах, a Style — свойство-множество, в которое могут входить стили оформления fsBold (жирный), fsltalic (курсив), fsUnderline (подчёркнутый). Если установить шрифт для какого-то объекта, например для формы, все дочерние компоненты по умолчанию будут иметь такой же шрифт.

Программа, которую мы сейчас построим, будет переводить RGB-составляющие цвета в соответствующий шестнадцатеричный код, который используется для задания цвета в языке HTML (см. § 26).

На форме будут расположены (рис. 7.20):

• три поля ввода (в них пользователь может задать значения красной, зелёной и синей составляющих цвета в модели RGB);
• прямоугольник (компонент TShape из группы Additional), цвет которого изменяется согласно введённым значениям;
• несколько меток (компонентов TLabel).

Метки — это надписи, которые пользователь не может редактировать, однако их содержание можно изменять из программы через свойство Caption.

Рис. 7.20

Рис. 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 не используется.

Следующая страница Обработка ошибок



Cкачать материалы урока






Наверх