Урок 8–9: Элементы управления.
Цель: ознакомить учащихся с некоторыми классами элементов управления в Delphi, их назначением и методами элементов.
1. Повторение изученного материала:
Проверка домашнего задания: Создайте проект, производящий обратное преобразование – из радианной меры угла в градусную, результат округлять до целых.
2. Новый материал:
Элементы управления – это объекты, являющиеся элементами графического интерфейса проекта и реагирующие на события, производимые пользователем или другими программными объектами.
Перечислим некоторые классы элементов управления, которые имеют разное назначение в графическом интерфейсе проекта: (использовать таблицы 2–3 в конце учебника)
- Текстовые поля Edit, надписи Label и списки ListBox и ComboBox для ввода и вывода данных;
- Графические поля Image для вывода графики;
- Командные кнопки Button, переключатели Radiobutton и флажки CheckBox для организации интерактивного диалога пользователя с проектом;
- Главное меню MainMenu для создания меню формы;
- Панель инструментов ToolBar для создания панели инструментов формы;
- Коллекция изображений ImageListдля хранения изображений;
- И т.д.
На форму может быть помещено несколько экземпляров одного класса элементов управления. Например, несколько кнопок или надписей, каждая из которых обладает индивидуальными значениями свойств (надпись, размеры, и т.д.)
Внимательно рассмотрите таблицу 4.2 (стр. 222) и выпишите в тетрадь 1-й и 5-й столбцы.
В результате должны получить таблицу:
Элемент управления | Обозначение в Delphi | Вкладка |
Текстовое поле | Edit1 | Standart |
Надпись | Label1 | Standart |
Список | ListBox1 | Standart |
Поле со списком | ComboBox1 | Standart |
Счетчик | UpDown1 | Win32 |
Ползунок | TrackBar1 | Win32 |
Переключатель | RadioButton1 | Standart |
Проект “Отметка”: Создать проект, который в зависимости от количества ошибок введенных с помощью различных элементов управления (списка, поля со списком, текстового поля, счетчика, ползунка и переключателей), выводит на надпись отметку.
1. Создание графического интерфейса (для получения внешнего вида формы как на рис.4.15 на стр.227) поместить на форму:
- для ввода количества ошибок список ListBox1, поле со списком ComboBox1, текстовое поле Edit1, счетчик UpDown1, ползунок TrackBar1, и переключатели RadioButton1 – RadioButton5;
- для вывода отметки надпись Label1;
- для вывода поясняющих надписей Label2 и Label3.
Рис. 1
2. Зададим свойства имеющихся элементов:
Компонент | свойство | значение |
ListBox1 | Items – … | 0 1 2 3 4 5 6 |
ComboBox1 | Items – … | 0 1 2 3 4 5 6 |
caption | Очистить | |
Edit1 | text | Очистить |
UpDown1 | По умолчанию | |
TrackBar1 | По умолчанию | |
RadioButton1 | caption | 0 ошибок |
RadioButton2 | caption | 1 ошибка |
RadioButton3 | caption | 2 ошибки |
RadioButton4 | caption | 3 ошибки |
RadioButton5 | caption | 4 и более ошибок |
Label1 | Caption | очистить |
color | clWhite | |
Height | 40 | |
Width | 290 | |
Label2 | caption | Количество ошибок |
color | clMoneyGreen | |
Label3 | caption | Отметка |
color | clMoneyGreen |
3. Запишем программный код обработчика событий.
Объявим переменную N (глобальную) перед обращением к обработчику самого первого элемента управления, задав ей целочисленный тип. Глобальная переменная описывается один раз перед обращением к какой-либо процедуре и действует во всей программе одинаково.
Для реализации выбора отметки в зависимости от количества введенных ошибок используем оператор Case … of для всех элементов управления, кроме RadioButton1 – RadioButton5. А для последних элементов отметка прописывается индивидуально для каждой метки.
Например, программный код для компонента Edit1:
procedure TForm1.Edit1Change(Sender: TObject);
begin
N := StrToInt(Edit1.Text);
Case N of
0:Label1.Caption := ‘Отлично';
1:Label1.Caption := 'Хорошо';
2:Label1.Caption := 'Удовлетворительно';
3:Label1.Caption := 'Плохо;
Else Label1.Caption := 'Очень плохо’;
end; // заканчивает оператор Case…of
end; //заканчивает метод для Edit1
Здесь переменная N получает значение, установленное с клавиатуры в текстовое поле и приведенное к целочисленному виду с помощью функции StrToInt.
Для компонентов ListBox1 и ComboBox1 значение переменной N зависит от выбора значения в списке и определяется свойством ItemIndex соответствующего компонента.
Например для ListBox1 программный код примет вид:
procedure TForm1.ListBox1Click(Sender: TObject);
begin
N := ListBox1.ItemIndex;
Case N Of
0:Label1.Caption := ‘Отлично';
1:Label1.Caption := 'Хорошо';
2:Label1.Caption := 'Удовлетворительно';
3:Label1.Caption := 'Плохо;
Else Label1.Caption := 'Очень плохо’;
end;
end;
Для компонентов UpDown1 и TrackBar1 значение переменной N определяется положением ползунка или количеством кликов мышью на указатели перемещения вверх-вниз и определяется свойством Position соответствующего компонента.
Например, для UpDown1 программный код примет вид:
procedure TForm1.UpDown1Click(Sender: TObject; Button: TUDBtnType);
begin
N := UpDown1.Position;
Case N Of
0:Label1.Caption := ‘Отлично';
1:Label1.Caption := 'Хорошо';
2:Label1.Caption := 'Удовлетворительно';
3:Label1.Caption := 'Плохо;
Else Label1.Caption := 'Очень плохо’;
end;
end;
Для компонентов RadioButton коды прописываем индивидуально для каждого. Например, для RadioButton1 программный код примет вид:
procedure TForm1.RadioButton1Click(Sender: TObject);
begin
Label1.Caption := 'Отлично';
end;
4. Закрепление и практическая часть.
Создать графический интерфейс проекта “Отметка”, записать программные коды для рассмотренных элементов, запустить на выполнение и проверить правильность работы проекта.
5. Д/з: записать программные коды для остальных элементов управления, имеющихся на форме проекта. Учебник п.4.7.
Урок10: Процедуры.
Цель: познакомить учащихся с правилами оформления вспомогательных алгоритмов в среде ООП Delphi.
3. Повторение изученного материала:
Самостоятельная работа: написать программный код для кнопок RadioButton 2, RadioButton 3 проекта “Отметка”.
4. Новый материал:
При разработке сложного алгоритма целесообразно выделить в нем последовательность действий, которые могут многократно вызываться из основного алгоритма. Такие алгоритмы называются вспомогательными и в алгоритмических языках программирования реализуются в виде подпрограмм, которые вызываются из основной программы. В ОО языке Delphi вспомогательные алгоритмы реализуются с помощью процедур. Каждой подпрограмме дается уникальное название и устанавливается список параметров, которые разделяются между собой точкой с запятой и содержат определение типов.
Процедуры не возвращают значения, а любой из параметров может быть входным, т.е. получать значение из вызывающей процедуры после обращения к вспомогательной программе (процедуре).
Процедура представляет собой подпрограмму, которая не возвращает значения и начинает выполняться после её вызова из другой процедуры.
Например: проект RefVal
var
RefA,ValB:byte;
procedure RefVal(var RefA:byte;ValB:byte); (подпрограмма)
begin
RefA := RefA * 5;
ValB := ValB * 5;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
RefA := StrToInt(Edit1.Text);
ValB := StrToInt(Edit2.Text);
RefVal(RefA, ValB); (обращение к подпрограмме)
Label1.Caption := IntToStr(RefA);
Label2.Caption := IntToStr(ValB);
end;
Каждая переменная имеет значение и уникальный адрес, соответствующий положению переменной в оперативной памяти ПК. ООЯ позволяют передавать в процедуру как значение переменной (передача по значению), так и ее адрес в оперативной памяти (передача по ссылке).
При передаче параметров по значению вызываемая процедура не может изменить значение переменной в вызывающей процедуре.
При передаче параметров по ссылке вызываемая процедура может изменить значение переменной в вызываемой процедуре.
При оформлении подпрограммы, параметр, передаваемый по ссылке обозначается ключевым словом var, а для параметра, передаваемого по значению просто указывается его тип. Так в procedure RefVal(var RefA:byte;ValB:byte) параметр RefA передается по ссылке, а параметр ValB – по значению.
5. Проект “Передача по ссылке и по значению”.
- Самостоятельно создать графический интерфейс проекта в соответствии с видом, показанным на рисунке 4.19 учебника. Для удобства использовать инструкции на стр.235 “Создание графического интерфейса проекта на языках…” и таблицу 4.2 на стр.222.
- Определить свойства имеющихся элементов.
- Записать программный код для кнопки Button (Вычислить).
var
RefA,ValB:byte;
procedure RefVal(var RefA:byte;ValB:byte);
begin
RefA := RefA * 5;
ValB := ValB * 5;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
RefA := StrToInt(Edit1.Text);
ValB := StrToInt(Edit2.Text);
RefVal(RefA, ValB);
Label1.Caption := IntToStr(RefA);
Label2.Caption := IntToStr(ValB);
End;
Д/з: п.4.9.1, вопросы стр. 238.
Урок11: Функции.
Цель: познакомить учащихся с правилами оформления вспомогательных алгоритмов в среде ООП Delphi.
6. Повторение изученного материала:
Ответить на вопросы:
- Для чего используются процедуры в языке программирования Delphi?
- Каковы правила оформления процедуры?
- как передаются параметры в процедуру?
- В чем отличие при передачи параметров по значению и по ссылке?
- Как отличается передача по значению и по ссылке в оформлении процедуры?
7. Новый материал:
Для оформления вспомогательных алгоритмов на языке программирования Delphi используются не только процедуры, но и функции.
Функции являются подпрограммами, которые возвращают значения и могут входить в состав выражений.
Существует множество встроенных функций: математические (для вычисления модуля числа, синуса или косинуса угла и т.д.), преобразования типов данных (перевод из строчного вида в числовой и наоборот, …), обработки строк и др. Программист может создавать также и свои функции.
В языке ООП Delphi функция начинается с ключевого слова function , затем следует имя функции и в скобках список её параметров (аргументов). Тип возвращаемого функцией значения указывается после списка параметров. В теле функции обязательно должен быть хотя бы один оператор присваивания, где в левой части стоит имя функции, а в правой – её значение. Иначе значение функции не будет определено.
Например:
function F(X,Y:integer): integer;
begin
F := X*Y;
end;
Эта функция вычисляет произведение двух переменных Х и Y(целочисленного типа) и выдает в результате число F такого же целочисленного типа.
Проект “Функция”. Создать проект, в котором определяется функция (например, умножения двух чисел F = x * y), выводится на надпись значение выражения, в которое входит функция (например, ).
1. Cамостоятельно создать графический интерфейс проекта, соответствующий рис.4.20 на стр.241.
Рис. 2
2. Самостоятельно задать свойства элементов:
Компонент | Свойство | Значение |
Edit1 | Text | |
Edit2 | Text | |
Label1 | Caption | |
Label2 | Caption | X |
Label3 | Caption | Y |
Button1 | Caption | Вычислить |
3. Записать программный код для кнопки Button1: создать код вызываемой функции:
function F(X,Y:integer): integer;
begin
F := X*Y;
end;
импортировать модуль Math , который необходим для использования математических функций, объявить переменные и создать код вызывающей процедуры-обработчика события:
uses …, Math;
…
var
X,Y:integer;
function F(X,Y:integer): int64;
begin
F := X*Y;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
X := StrToInt(Edit1.Text);
Y := StrToInt(Edit2.Text);
Label1.Caption := FloatToStr(Sqrt(Power(F(X, Y), 2) + F(X, Y)));
end;
4. Запустить проект на выполнение и ввести в текстовые поля значения переменных (например, 2 и 3). На надписи будет выведено вычисленное значение выражения.
4. Д/з: создать проект, который определяет функцию (F = X3) и выводит на надпись значение выражения, использующего эту функцию .
Вопросы на стр.241.