Практическая работа.
Задание. Укажите, какое ПО необходимо людям в следующих ситуациях (заполните таблицу):
ПРАКТИЧЕСКАЯ РАБОТА № 1
ВИЗУАЛЬНАЯ СРЕДА РАЗРАБОТКИ ПРОГРАММ
1. Создать проект в среде PascalABC.Net выполнив команды
Файл → Новый проект → Приложение Windows Form
При создании проекта файлы сохраняются автоматически.
2. Измените свойства формы в инспекторе объектов, для этого выполните следующие действия:
а) свойство Text – установить Пример 1
б) На вкладке BackColor на вкладке Интернет (Web) выбрать clAqua
в) для свойства Size ввести с клавиатуры 250, 250
г) для свойства Location ввести с клавиатуры 200, 200
д) запустить форму на исполнение нажав на зеленый треугольник
3. Создать обработчик события Click для щелчка левой клавишей мыши по форме, в результате которого цвет формы должен поменяться на красный продолжив работу с примером.
4. Перейти на вкладку События (Events) в окне инспектора объектов.
5. Выполнить двойной щелчок в поле напротив события OnClik.
6. В окне редактора кода в процедуре получить программный код:
Form1.Form1_Click(sender: Object; e: EventArgs);
Вписать команду
BackColor := Color.Red;
Если ввеcти первые буквы названия свойства (метода), то курсор переместится в списке к тем свойствам и методам, названия которых начинаются на эти буквы. После этого нужное свойство можно вставить в программу щелчком мыши или нажатием клавиши Enter.
Если список не появился, его можно вызвать комбинацией клавиш Ctrl+пробел
Все изменения свойств формы, которые производили в примере можно описать программно.
Для этого создается обработчик события Form1_Load.
7. Перейти на вкладку Дизайнер в окне конструктора
8. Сохранить изменения в проекте нажав команду на панели меню
9. Запустить форму на исполнение, нажав на зеленый треугольник
10. Щелкнуть по форме она должна приобрести красный цвет.
ПРАКТИЧЕСКАЯ РАБОТА № 2
ТЕМА: ПРОЕКТИРОВАНИЕ ИНТЕРФЕЙСА ОКОННОГО ПРИЛОЖЕНИЯ
С ИСПОЛЬЗОВАНИЕМ ЭЛЕМЕНТОВ УПРАВЛЕНИЯ
Пример 3.6. Создать проект, разместив на форме две кнопки. При нажатии на одну из них цвет формы должен измениться на синий, а при нажатии на вторую — должен восстановиться исходный цвет.
Этапы выполнения задания
1. Создать на форме две кнопки.
2. Изменить свойство Text у кнопки button1 на Изменить цвет.
3. Изменить свойство Text у кнопки button2 на Восстановить цвет.
4. Создать обработчик события Click для кнопки button1 и изменить цвет формы. Команда
BackColor := Color.Blue;
5. Создать обработчик события Click для кнопки button2 и изменить цвет формы на первоначальный (название цвета формы указано в поле Color инспектора объектов). Команда
BackColor := SystemColors.Control;
6. Сохранить изменения в проекте.
Название цвета SystemColors. Control задает не какой-то определенный цвет. Это цвет элемента управления, заданный цветовой схемой Windows. Поэтому он не обязательно будет серым.
Пример 3.9. Создать проект, в котором описана возможность выполнять следующие действия: после запуска программы в окне с именем «Работаем с кнопкой и меткой» при щелчке мыши по кнопке «Приветствие» появляется сообщение «Здравствуй, мир!».
Этапы выполнения задания
1. Изменить свойство Text формы на «Работаем с кнопкой и меткой».
2. Добавить на форму кнопку button1.
3. Изменить свойство Text кнопки на «Приветствие».
4. Добавить на форму метку label1.
5. Изменить свойства шрифта для компонента label1. Нажать кнопку ... в поле Font (цвет шрифта — синий, размер — 20, стиль — жирный курсив).
6. Очистить поле Text у метки.
7. Установить значение true у свойства метки Autosize.
8. В обработчик события Click для кнопки button1 вписать команду
label1.Text := 'Здравствуй, мир!';
Пример 3.12. Создать проект, в котором пользователя попросят ввести его имя, а затем, после нажатия клавиши Enter, будет выдано сообщение «Имя, приятно с Вами познакомиться!»
1. Изменить свойство Text у формы на «Знакомство».
2. Разместить на форме две метки и текстовое поле.
3. Изменить свойство Text у label1 на «Введите свое имя и нажмите клавишу Enter».
4. Очистить поле свойства Text у Label2.
5. Написать обработчик события KeyPress для компонента Edit1, который будет проверять нажатие клавиши ввода (код клавиши Enter — 13). Если клавиша нажата, то поменять свойство Text у label2:
if e.KeyChar = #13 then
label2.Text := TextBox1.Text +', приятно с Вами познакомиться!';
Пример 3.13. Создать проект, в котором пользователь сможет ввести число, получить его значение в квадрате и квадратный корень из этого числа.
1. Изменить свойство Text у формы на «Квадрат и корень».
2. Разместить на форме три метки, три текстовых поля и кнопку.
3. Изменить свойство Text у Label1 на «Введите неотрицательное число».
4. Изменить свойство Text у Label2 на «Квадрат».
5. Изменить свойство Text у Label3 на «Корень».
6. Изменить свойство Text у Button1 на «Расчет».
7. Написать обработчик Click для кнопки.
procedure Form1.button1_Click(sender: Object; e: EventArgs);
var a, b: integer;
c: real;
begin
a := StrToInt(TextBox1.Text);
b := a * a;
c := sqrt(a);
TextBox2.Text := IntToStr(b);
TextBox3.Text := FloatToStr(c);
end;
ПРАКТИЧЕСКАЯ РАБОТА № 3
ТЕМА: ЭЛЕМЕНТЫ УПРАВЛЕНИЯ ДЛЯ РАБОТЫ С ГРАФИКОЙ
Пример 4.3. Создать проект, разместить в нем фоновое изображение на форме. При нажатии на кнопку поверх фонового изображения должно появиться другое изображение.
Этапы выполнения задания
1. Установить размеры формы Height = 450, Width = 670.
2. Загрузить фоновое изображение для формы.
Задать для свойства формы BackgroundImageLayout значение Stretch.
3. Поместить на форму компонент изображение и кнопку.
4. Для компонента PictureBox установить значение для свойства
Visible == False (изображение невидимо при запуске приложения).
Размеры Height = 120, Width = 200. Свойство SizeMode = StretchImage.
5. Загрузить изображение в компонент PictureBox. Изображение может быть формата PNG, или GIF
с прозрачным фоном, или формата BMP с фоном однородного цвета.
Свойство BackColor = Transparent.
6. Написать обработчик события OnClick для компонента Button1.
Если при запуске приложения изображение мерцает, то устранить мерцание можно с помощью включения двойной буферизации: DoubleBuffered := true;
Эта команда должна быть прописана в обработчике события Load для формы.
Пример 4.5. Создать проект и построить график функции y = xsinx на промежутке, заданном пользователем.
Этапы выполнения задания
1. Поместить на форму компоненты: PictureBox, два компонента Label,
два компонента TextBox и компонент Button.
2. Изменить свойства Text у компонентов Label1, Label2 на x0 и xn соответственно.
3. Изменить свойства Text у компонентов Edit1 и Edit2 на –20 и 20 соответственно.
4. Изменить свойства Text у компонента Button1 на «Построить график».
5. Написать обработчик события Click для компонента Button1 и строить в нем график функции по точкам.
5.1. Нарисовать оси координат в виде двух перпендикулярных линий,
пересекающихся в центре компонента PictureBox.
5.2. Чтобы получить видимость сплошной линии, количество точек, которые образуют график
функции, должно быть не менее 10 000 (n = 10 000).
5.3. Шаг изменения значения x определяется как
5.4. При построении нужно учитывать масштаб: ширина компонента PictureBox должна
соответствовать длине заданного промежутка. Тогда масштабный коэффициент можно рассчитать по формуле
5.5. Поскольку расположение осей координат на экране не совпадает с расположением осей,
принятым в математике, то нужно преобразовать координаты: точке (0; 0) должна соответствовать точка в центре компонента PictureBox. Для этого полученное значение x нужно увеличить на величину cx = PictureBox1. Width div 2, а значение у на
cy =PictureBox1.Height div 2. Так как ось Y направлена вниз, а не вверх, то у значения Y нужно еще поменять знак на противоположный. На канве будет закрашиваться точка с координатами (xekr = x k + cx, yekr = –y k + cy).
5.6. Необходимo учитывать, что при вычислении значения x и y будут вещественными, а значения
графических координат могут быть только целыми. Поэтому перед прорисовкой точки нужно преобразовать вещественные числа в целые с помощью функции trunc.
5.7. Некоторые точки графика при построении могут оказаться за пределами графической области,
поэтому необходима проверка значения y1: значение должно быть неотрицательным и меньше высоты графической области.
Пример 4.6. Создать проект и построить гистограмму по данным массива из n элементов (n = 10). Описать массив с константными данными или добавить данные в массив случайным образом.
Этапы выполнения задания
1. Поместить на форму компоненты: PictureBox и два компонента Button.
2. Изменить свойства Text у компонента Button1 на «Диаграмма с константными данными».
3. Изменить свойства Text у компонента Button2 на «Диаграмма со случайными данными».
4. Написать обработчик события Click для компонента Button1, в котором диаграмма строится с помощью прямоугольников.
4.1. Найти максимальный элемент в массиве max.
4.2. Рассчитать масштабный коэффициент:
4.3. В цикле строить n прямоугольников одинаковой ширины. Ширина прямоугольника
5. Обработчик для компонента Button2 будет отличаться от обработчика для компонента Button1 только способом получения элементов массива.
5.1. Массив должен быть описан в разделе var: a: array[1..10] of integer;
5.2. Элементы массива со значениями от 20 до 100 можно получать следующим образом:
rnd := new Random();
for i := 1 to n do
a[i] := rnd.next(80) + 20;
Пример 4.8. Создать проект, в котором самолет будет пролетать над городом.
Этапы выполнения задания
1. Поместить на форму компоненты PictureBox и Button, добавить компонент Timer.
2. Загрузить изображение города в компонент как фон формы (свойство формы BackgroundImage).
3. Установить прозрачный цвет фона для компонента PictureBox1 (значение Transparent у свойства BackColоr). Установить режим изменения размера — AutoSize (свойство SizeMode).
4. Написать обработчик события Load для формы и описать начальное
положение самолета, указав координаты верхнего левого угла PictureBox1 за пределами формы. Загрузить в PictureBox1 изображение из файла с рисунком самолета.
5. Изменить свойства Text у компонента Button1 на «Полетели!».
6. Установить значение False у свойства таймера Enabled в инспекторе объектов.
7. Установить в инспекторе объектов время срабатывания таймера, равным 10.
8. Написать обработчик события Click для компонента Button1, запустить таймер.
9. В инспекторе объектов установить прозрачность для компонента PictureBox1.
10. Написать обработчик события Tick и менять в нем значение свойства Left у компонента PictureBox1.
Если самолет вылетел за границу, то вернуть его в начальное положение.
Двойная буферизация позволяет сделать анимацию более плавной, поскольку все операции рисования сначала выполняются в памяти, а лишь затем на экране компьютера. После завершения всех операций рисования содержимое буфера копируется из памяти непосредственно на связанную с ним область экрана.
Пример 4.6. Продолжение.
Обработчик события Click для компонента Button1:
procedure Form1.button1_Click (sender: Object; e: EventArgs);
const a: array[1..10] of integer = (10, 14, 22, 75, 63, 12, 37, 61, 42, 48); n = 10;
var max, x, y1, y2, h, i, cr, cg, cb : integer; m : real; gr : Graphics; rnd : Random; sb : SolidBrush;
begin
max := a[1];
for i := 2 to n do
if a[i] > max then
max := a[i];
h:= trunc(PictureBox1.Width/(2*n+1));
m := PictureBox1.Height / max;
x := h;
//подготовка графической области
//для рисования примитивов
gr := PictureBox1.CreateGraphics; gr.Clear(Color.White);
rnd := new Random();
for i := 1 to n do
begin
cr := rnd.next(256);
cg := rnd.next(256);
cb := rnd.next(256);
sb := new SolidBrush(Color.FromArgb(cr,cg,cb));
y1 := PictureBox1.Height - 1;
y2 := y1 - trunc(a[i] * m)- 1;
gr.FillRectangle(sb, x, y2, h, y1);
x := x + 2 * h;
end;
end;
Обработчик события Click для компонента Button1:
procedure Form1.button1_Click(sender: Object; e: EventArgs);
const a:array[1..10]of integer=(10,14,22,75,63,12,37,61,42,48);n=10;
var max,x,y1,y2,h,i,cr,cg,cb:integer;
m:real;
gr:Graphics;
rnd:Random;
sb:SolidBrush;
begin
max:=a[1];
for i:=2 to n do
if a[i]>max then
max:=a[i];
h:=trunc(pictureBox1.Width/(2*n+1));
m:=PictureBox1.Height/max;
x:=h;
gr:=pictureBox1.CreateGraphics;
gr.Clear(Color.White);
rnd:=new Random();
for i:=1 to n do
begin
cr:=rnd.next(256);
cg:=rnd.next(256);
cb:=rnd.next(256);
sb:=new SolidBrush(Color.FromArgb(cr,cg,cb));
y1:=pictureBox1.Height-1;
y2:=y1-trunc(a[i]*m)-1;
gr.FillRectangle(sb,x,y2,h,y1);
x:=x+2*h;
end;
end;
Обработчик события Click для компонента Button 2:
procedure Form1.button2_Click(sender: Object; e: EventArgs);
const n=10;
var a:array[1..10]of integer;
max, x, y1, y2, h, i, cr, cg,cb :integer;
m:real;
gr: Graphics;
rnd: Random;
sb:SolidBrush;
begin
rnd:=new Random();
for i:=1 to n do
a[i]:=rnd.next(80)+20;
max:=a[1];
for i:=2 to n do
if a[i]>max then max:=a[i];
h:=trunc(PictureBox1.Width/(2*n+1));
m:=Picturebox1.Height/max;
x:=h;
//подготовка графической области
//для рисования по пикселям
gr := PictureBox1.CreateGraphics; gr.Clear(Color.White);
rnd := new Random();
for i := 1 to n do begin
cr := rnd.next(256);
cg := rnd.next(256);
cb := rnd.next(256);
sb := new SolidBrush(Color.FromArgb
(cr,cg,cb));
y1 := PictureBox1.Height - 1;
y2 := y1 - trunc(a[i] * m)- 1;
gr.FillRectangle(sb, x, y2, h, y1);
x := x + 2 * h;
end;
end;
Пример 4.5. Продолжение.
Обработчик события Click для компонента Button1:
procedure Form1.button1_Click
(sender: Object; e: EventArgs);
var x, y, h, k, x0, xn :real;
x1, y1, n, c_x, c_y : integer;
gr: Graphics;
bm: Bitmap;
p_c: Pen;
begin
//подготовка графической области
//для рисования по пикселям
bm := new Bitmap (PictureBox1.Width,
Picturebox1.Height);
pictureBox1.Image := (Image)(bm);
gr := Graphics.FromImage
(pictureBox1.Image);
//закраска графической области белым
//цветом
gr.Clear(Color.White);
// количество точек
n := 10000;
// концы промежутка
x0 := StrToFloat(TextBox1.Text);
xn := StrToFloat(TextBox2.Text);
// центр области построения
c_x := PictureBox1.Width div 2;
c_y := PictureBox1.Height div 2;
// масштабный коэффициент
k := PictureBox1.Width / (xn - x0);
// шаг
h := (xn - x0) / n;
x := x0;
//оси
p_c := new Pen(Color.Black, 1);
gr.DrawLine(p_c, 0, c_y, 2*c_x, c_y);
gr.DrawLine(p_c, c_x, 0, c_x, 2*c_y);
for var i := 1 to n do
begin
y := x * sin(x);
x1 := trunc(x * k) + c_x;
y1 := trunc(-y * k) + c_y ;
//проверка попадания точки
//в графическую область
if (y1 >= 0) and (y1 < 2*c_y) then
bm.SetPixel(x1, y1, Color.Blue);
x := x + h;
end;
end;
Пример 4.8. Форма на этапе конструирования:
Обработчик события Load для формы:
procedure Form1.Form1_Load (sender:
Object; e: EventArgs);
begin
PictureBox1.Load ('plane.png');
x := -PictureBox1.Width;
y := 20;
PictureBox1.Left := x;
PictureBox1.Top := y;
end;
Пример 4.8. Продолжение.
Обработчик события Click для компонента Button1:
procedure Form1.button1_Click
(sender: Object; e: EventArgs);
begin
Timer1.Enabled := True;
end;
Обработчик события Tick для компонента Timer1:
procedure Form1.timer1_Tick
(sender: Object; e: EventArgs);
begin
x := x + 1;
PictureBox1.Left := x;
if PictureBox1.Left > Width +
+ PictureBox1.Width then
x := -PictureBox1.Width;
end;
Пример 4.5. Создать проект и построить график функции y = xsinx на промежутке, заданном пользователем.
Этапы выполнения задания
1. Поместить на форму компоненты: PictureBox, два компонента Label,
два компонента TextBox и компонент Button.
2. Изменить свойства Text у компонентов Label1, Label2 на x0 и xn соответственно.
3. Изменить свойства Text у компонентов Edit1 и Edit2 на –20 и 20 соответственно.
4. Изменить свойства Text у компонента Button1 на «Построить график».
5. Написать обработчик события Click для компонента Button1 и строить в нем график функции по точкам.
Обработчик события Click для компонента Button1:
procedure Form1.button1_Click(sender: Object; e: EventArgs);
var x, y, h, k, x0, xn :real;
x1, y1, n, c_x, c_y : integer;
gr: Graphics;
bm: Bitmap;
p_c: Pen;
begin
bm := new Bitmap (PictureBox1.Width,
Picturebox1.Height);
pictureBox1.Image := (Image)(bm);
gr := Graphics.FromImage
(pictureBox1.Image);
gr.Clear(Color.White);
n := 10000;
x0 := StrToFloat(TextBox1.Text);
xn := StrToFloat(TextBox2.Text);
c_x := PictureBox1.Width div 2;
c_y := PictureBox1.Height div 2;
k := PictureBox1.Width / (xn - x0);
h := (xn - x0) / n;
x := x0;
p_c := new Pen(Color.Black, 1);
gr.DrawLine(p_c, 0, c_y, 2*c_x, c_y);
gr.DrawLine(p_c, c_x, 0, c_x, 2*c_y);
for var i := 1 to n do
begin
y := x * sin(x);
x1 := trunc(x * k) + c_x;
y1 := trunc(-y * k) + c_y ;
if (y1 >= 0) and (y1 < 2*c_y) then
bm.SetPixel(x1, y1, Color.Blue);
x := x + h;
end;
end;
Пример 4.6. Создать проект и построить гистограмму по данным массива из n элементов (n = 10). Описать массив с константными данными или добавить данные в массив случайным образом.
Этапы выполнения задания
1. Поместить на форму компоненты: PictureBox и два компонента Button.
2. Изменить свойства Text у компонента Button1 на «Диаграмма с константными данными».
3. Изменить свойства Text у компонента Button2 на «Диаграмма со случайными данными».
4. Написать обработчик события Click для компонента Button1, в котором диаграмма строится с
помощью прямоугольников.
5. Обработчик для компонента Button2 будет отличаться от обработчика для компонента Button1 только способом получения элементов массива.
Обработчик события Click для компонента Button1:
procedure Form1.button1_Click(sender:
Object; e: EventArgs);
const a:array[1..10]of integer=
(10,14,22,75,63,12,37,61,42,48);n=10;
var max,x,y1,y2,h,i,cr,cg,cb:integer;
m:real;
gr:Graphics;
rnd:Random;
sb:SolidBrush;
begin
max:=a[1];
for i:=2 to n do
if a[i]>max then
max:=a[i];
h:=trunc(pictureBox1.Width/(2*n+1));
m:=PictureBox1.Height/max;
x:=h;
gr:=pictureBox1.CreateGraphics;
gr.Clear(Color.White);
rnd:=new Random();
for i:=1 to n do
begin
cr:=rnd.next(256);
cg:=rnd.next(256);
cb:=rnd.next(256);
sb:=new SolidBrush
(Color.FromArgb(cr,cg,cb));
y1:=pictureBox1.Height-1;
y2:=y1-trunc(a[i]*m)-1;
gr.FillRectangle(sb,x,y2,h,y1);
x:=x+2*h;
end;
end;
Обработчик события Click для компонента Button 2:
procedure Form1.button2_Click
(sender: Object; e: EventArgs);
const n=10;
var a:array[1..10]of integer;
max, x, y1, y2, h, i, cr, cg,cb :integer;
m:real;
gr: Graphics;
rnd: Random;
sb:SolidBrush;
begin
rnd:=new Random();
for i:=1 to n do
a[i]:=rnd.next(80)+20;
max:=a[1];
for i:=2 to n do
if a[i]>max then max:=a[i];
h:=trunc(PictureBox1.Width/(2*n+1));
m:=Picturebox1.Height/max;
x:=h;
gr := PictureBox1.CreateGraphics;
gr.Clear(Color.White);
rnd := new Random();
for i := 1 to n do begin
cr := rnd.next(256);
cg := rnd.next(256);
cb := rnd.next(256);
sb := new SolidBrush(Color.FromArgb
(cr,cg,cb));
y1 := PictureBox1.Height - 1;
y2 := y1 - trunc(a[i] * m)- 1;
gr.FillRectangle(sb, x, y2, h, y1);
x := x + 2 * h;
end;
end;
ПРАКТИЧЕСКАЯ РАБОТА № 4
СОЗДАНИЕ ПРИЛОЖЕНИЙ.
Создание приложения «Калькулятор»
Создание калькулятора начнем с конструирования формы. На ней нужно разместить:
поле TextBox для ввода/вывода чисел,
10 кнопок с цифрами,
4 кнопки с арифметическими действиями,
кнопку «=»
и кнопку «С» — очистить (пример 5.22).
Коды процедур-обработчиков приведены в примере 5.23.
Для каждой кнопки на форме нужно создать обработчик события Click.
Обработчики событий для всех цифровых кнопок будут идентичны.
Обработчики для кнопок арифметических действий будут отличаться только значением запоминаемой операции.
Основные вычисления происходят в обработчике кнопки «=». Преобразуем в число n2 значение поля Edit и выполняем арифметическую операцию в зависимости от значения переменной znak. После этого обнуляем переменные.
В обработчике кнопки «С» (от англ. clear — очистить) происходит обнуление переменных и очистка поля Edit.
Созданный калькулятор имеет большое количество ограничений в своей работе, поскольку рассчитан на вычисления только с натуральными числами.
Пример 5.23. Обработчики событий:
//описание глобальных переменных
var n1, n2: integer;
znak: char;
procedure Form1.button1_Click
(sender: Object; e: EventArgs);
begin
//приписывание цифры к числу
TextBox1.Text := TextBox1.Text + '1';
end;
procedure Form1.button9_Click
(sender: Object; e: EventArgs);
begin
//приписывание цифры к числу
TextBox1.Text := TextBox.Text1 + '2';
end;
Для остальных цифровых кнопок нужно изменить только '1' на соответствующую цифру.
procedure Form1.button12_Click
(sender: Object; e: EventArgs);
begin
n1 := StrToInt(TextBox1.Text);
//запоминание знака операции
znak := '+';
TextBox1.Clear;
end;
Для остальных кнопок со знаками арифметических действий нужно изменить только '+' на соответствующий знак.
procedure Form1.button16_Click
(sender: Object; e: EventArgs); begin n2 := StrToInt(TextBox1.Text);
case znak of
'+': TextBox1.Text:= IntToStr(n1 + n2);
'-': TextBox1.Text:= IntToStr(n1 - n2);
'*': TextBox1.Text:= IntToStr(n1 * n2);
'/': TextBox1.Text:=IntToStr(n1 div n2);
end;
n1 := 0; n2 := 0;
znak := ' ';
end;
procedure Form1.button15_Click(sender: Object; e: EventArgs);
begin
TextBox1.Clear;
n1 := 0; n2 := 0;
znak :=' ';
end;
Создание приложения «Блокнот»
Программа Блокнот должна давать возможность открыть и сохранить текстовый файл, выбрать цвет текста и цвет фона.
Разместить на форме (пример 5.13) следующие компоненты:
рабочая область для текста — TextBox1;
диалоги работы с файлами — OpenFileDialog1, SaveFileDialog1;
диалоги для настройки внешнего вида приложения — FontDialog1, ColorDialog1;
главное меню — MenuStrip1.
Компонент TextBox1 предназначен для набора и редактирования текста. Текст может набираться в несколько строк, поэтому нужно установить значение true для свойства MiltiLine. Для того чтобы компонент занимал всю клиентскую часть формы, необходимо установить у свойства Dock значение Fill (пример 5.14). Установить значение Vertical для свойства ScrollBars (вертикальная полоса прокрутки).
Обработчики событий для каждого из пунктов меню представлены в примере 5.17.
Для компонента TextBox определены следующие действия:
Копировать(Ctrl+C), Вырезать (Ctrl+X), Вставить (Ctrl+V), Отменить (Ctrl+Z).
Пример 5.17. Обработчики событий для пунктов меню:
var s:string;
F_N: string
procedure
Form1.toolStripMenuItem4_Click(sender: Object; e: EventArgs);
begin
//Файл — Новый
TextBox1.Clear;
end;
procedure
Form1.toolStripMenuItem5_Click(sender: Object; e: EventArgs);
begin
//Файл — Открыть
openFileDialog1.ShowDialog();
s := openFileDialog1.FileName;
Text := 'Блокнот ' + s;
TextBox1.Lines := ReadAllLines(s);
end;
procedure
Form1.toolStripMenuItem6_Click(sender: Object; e: EventArgs);
begin
//Файл — Сохранить
saveFileDialog1.ShowDialog();
F_N := saveFileDialog1.FileName;
WriteAllLines(F_N,TextBox1.Lines);
Text := 'Блокнот ' + F_N;
end;
procedure
Form1.toolStripMenuItem8_Click(sender: Object; e: EventArgs);
begin
//Файл — Выход
close;
end;
procedure Form1.
toolStripMenuItem9_Click(sender: Object; e: EventArgs);
begin
//Формат — Шрифт
fontDialog1.ShowDialog();
TextBox1.Font := fontDialog1.
Font;
end;
procedure Form1.toolStripMenuItem10_Click(sender: Object; e:EventArgs);
begin
//Формат — Цвет текста
colorDialog1.ShowDialog();
TextBox1.ForeColor :=
colorDialog1.Color;
end;
procedure Form1.toolStripMenuItem11_Click(sender: Object; e:
EventArgs);
begin
//Формат — Цвет фона
colorDialog1.ShowDialog();
TextBox1.BackColor :=colorDialog1.Color;
end;
Создание приложения «Графический редактор»
Программа «Графический редактор» должна давать возможность открыть и сохранить файл, выбрать цвет линии и цвет фона, установить толщину линии. Рисование производится выбранным цветом линии при нажатой левой клавише мыши. Клик правой клавишей мыши внутри замкнутой области используется для заливки ограниченной области выбранным цветом фона.
Сначала спроектируем форму, разместив на ней следующие компоненты (пример 5.18):
* область для рисования — PictureBox;
* компоненты, отображающие выбранный цвет для рисования и цвет фона — Panel1, Panel2;
* кнопки для смены цвета; компонент выбора цвета — ColorDialog1;
* компонент для выбора толщины линии — numericUpDown1 (панель
* компонентов Стандартные элементы управления);
* главное меню — menuStrip1 и компоненты для работы с файлами — OpenFileDialog1, SaveFileDialog1.
На этапе конструирования установить значение свойства BackColor у компонентов Panel1 и Panel2 — Black и White соответственно.
У свойств Value и Minimum для компонента numericUpDown1 установить значение 1.
Структура меню показана в примере 5.19. Создание рисунка и загрузка файла в приложение приведены в примере 5.20.
В обработчике события Load для формы прописаны первоначальные установки для создания графического объекта, заданы параметры кисти и карандаша.
В обработчике события MouseDown для компонента PaintBox1 задаем переменной m_d значение true — кнопка нажата. Здесь же запоминаем координаты точки, поскольку от этой точки начнем строить линию. В обработчике MouseUp — значение переменной m_d = false — кнопка не нажата.
Для отслеживания траектории движения мыши по компоненту PaintBox1 создаем обработчик события MouseMove. Если кнопка нажата, то можем строить линию. Параметры e.x, e.y возвращают координаты точки, в которой произошло нажатие кнопки.
Для перемещения мыши нужно использовать метод DrawLine (x1, y1, e.x, e.y) — рисование линии, соединяющей две точки. После прорисовки обновляем координаты.
Толщина линии определяется значением свойства Value для компонента numericUpDown1. Обработчик события — ValueChanged.
Обработчики событий для компонентов OpenFileDialog1, SaveFileDialog1 вызываются из ответствующих пунктов меню и аналогичны обработчикам, описанным для программы Блокнот. Для сохранения и загрузки файлов нужно описать глобальную строковую переменную FileName. Приложение может сохранять и загружать файлы формата BMP.
С помощью компонента ColorDialog1 можно выбрать цвет линии или заливки. Пункты меню Цвет позволяют выбрать цвет линии или заливки соответственно.
В примере 5.21 приведено описание глобальных переменных, которые используются для создания приложения «Графический редактор». Обработчики всех описанных событий приведены в приложении.
Создание приложения «Калькулятор»
Создание калькулятора начнем с конструирования формы. На ней нужно разместить:
поле TextBox для ввода/вывода чисел,
10 кнопок с цифрами,
4 кнопки с арифметическими действиями,
кнопку «=»
и кнопку «С» — очистить (пример 5.22).
При нажатии на кнопку с цифрой программа должна дописать эту цифру к числу в поле TextBox. При нажатии на кнопку с арифметическим действием нужно запомнить число, которое в данный момент находится в поле TextBox, и очистить поле для ввода второго числа. Числа будем хранить в двух переменных n1, n2 типа integer. Знак операции будем хранить в переменной znak типа char. Переменные описываются как глобальные. При нажатии на кнопку «=» выполняется арифметическое действие и выводится результат.
Кнопки могут содержать рисунок на поверхности (например, изображения с цифрами). Свойство для размещения рисунка — BackgroundImage.
Установить значение FixedSingle для свойства FormBorderStyle формы. В этом случае граница формы не позволит менять ее размеры.
Коды процедур-обработчиков приведены в примере 5.23.
Для каждой кнопки на форме нужно создать обработчик события Click.
Обработчики событий для всех цифровых кнопок будут идентичны.
Обработчики для кнопок арифметических действий будут отличаться только значением запоминаемой операции.
Основные вычисления происходят в обработчике кнопки «=». Преобразуем в число n2 значение поля Edit и выполняем арифметическую операцию в зависимости от значения переменной znak. После этого обнуляем переменные.
В обработчике кнопки «С» (от англ. clear — очистить) происходит обнуление переменных и очистка поля Edit.
Созданный калькулятор имеет большое количество ограничений в своей работе, поскольку рассчитан на вычисления только с натуральными числами.