Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабораторные по Дельфи_2011.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
7.3 Mб
Скачать

Лабораторная работа №12. Обработка событий в графике.

Приложения Delphi используют управляемые событиями методы для организации взаимодействия между программой и пользователем. Большая часть кода как правило инициирует события. Происхождение событий заставляет работать определенный объект, при этом объект получает заранее определенные параметры для своей настройки на работу. В Delphi процедура, инициируемая событием, называется обработчиком событий.

События делятся на три основные категории:

  • события мыши;

  • события клавиатуры;

  • системные события.

Рассмотрим как теорию применить на практике.

События мыши.

Для формы событие OnClik возникает в том случае, если пользователь нажимает левую кнопку мыши в то время, когда курсор находится на поле формы.

  1. Создайте форму.

  2. В Object Inspector (Инспектор Объектов) во вкладке Events (события) выполните двойной клик слева от события OnClik.

  3. В открывшемся окне появится модуль заготовки процедуры обработки события OnClik. Впишите ниже приведенную строку. Данный оператор Color позволяет изменять цвет любого объекта типа Form1.

procedure TForm1.FormClick(Sender: TObject);

begin

color:=RGB(random(256), random(256), random(256));

end;

Функция random – генератор случайных чисел. Аргумент функции (256) определяет границу генерируемого числа (от 0 до 256).

Задание №1. Напишите приложение, в котором при нажатии на левую кнопку мыши происходит смена цвета с зеленного на красный, и, наоборот, с красного – на зеленый

Событие OnDblClick происходит, если пользователь выполняет двойной щелчок левой кнопкой мыши.

События On MouseDown возникает, если пользователь нажимает на правую, левую или среднюю кнопку мыши

Задание №2. Самостоятельно исследуйте событие OnDblClick. Измените цвет формы и свойство Cursor. Числовой эквивалент свойства Cursor находится в интервале от -21 до 0.

Задание №1.

procedure TForm1.FormClick(Sender: TObject);

begin

if color=clRed then color:=clGreen else color:=clRed;

end;

Задание №2.

procedure TForm1.FormDblClick(Sender: TObject);

begin

Color:=clred;

end;

1. Создайте новую форму. Свойства объекта установите следующим образом:

Caption := графика.

Name :=MainF;

Чтобы нарисовать на форме пунктирную линию красного цвета от точки с координатами (10,10) до точки (300,300) создайте обработчик событий формы Click (двойной клик) и наберите следующие операторы:

procedure TForm1.FormClick(Sender: TObject);

begin

with Canvas do

begin

pen.Color:=clred;

pen.Style:=PsDash;

MoveTo(10,10);

LineTo(300,300);

end

end;

Пояснения: Свойство Pen устанавливает параметры изображения линии, такие как цвет (Color), тип (Style), толщина (Width)

Метод MoveTo(x,y) перемещает графический курсор в точку с координатами (x,y).

Метод LineTo(x,y) рисует отрезок от текущего положения графического курсора до точки с координатами (x,y).

Задание. Напишите программу позволяющую нарисовать схематическое изображение домика.

2. Удалите предыдущую программу командой Close all… Создайте новую форму. Свойства объекта установите следующим образом:

Caption := графика.

Name :=MainF;

Для рисование произвольных отрезков воспользуемся событие OnMouseDown. Нажатие кнопки мыши послужит началом рисования отрезка, освобождение кнопки мыши – завершает рисование отрезка.

Создайте обработчик события OnMouseDown (двойной клик)

procedure TmainF.FormMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);

begin

canvas.MoveTo(x,y);

end;

Создайте обработчик события OnMouseUp (двойной клик)

procedure TmainF.FormMouseUp(Sender: TObject; Button: TMouseButton;

Shift: TShiftState; X, Y: Integer);

begin

Canvas.LineTo(x,y);

end;

3. Удалите предыдущую программу командой Close all… Создайте новую форму. Свойства объекта установите как в предыдущим задании.

Рисование кривых линий – это изображение следа курсора мыши. Перемещение курсора мыши возбуждает событие OnMouseMove. Создайте обработчик этого события и введите следующие операторы:

procedure TmainF.FormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);

begin

Canvas.LineTo(x,y);

end;

Недостатком написанной процедуры является:

1 – начало рисования левый верхний угол;

2 – невозможно завершить процесс.

Обработчик события OnMouseMove в параметре Shift получает состояние клавиш Alt, Ctrl, Shift и кнопок мыши. Для определенности положим, что линия будет рисоваться, когда нажата левая кнопка мыши. Изменим обработчик события следующим образом:

procedure TmainF.FormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);

begin

if ssLeft in Shift then Canvas.LineTo(x,y)

else Canvas.MoveTo(x,y);

end;

Рассмотрим некоторые ранее описанные методы.

Метод Rectangle(x1,y1,x2,y2) в котором параметры задают координаты противоположенных вершин прямоугольника. Нажатие кнопки мыши (события OnMouseDown) фиксирует начало рисования прямоугольника и соответственно определяет координаты правого верхнего угла прямоугольника. Освобождение кнопки (событие OnMouseUp) – окончание рисования прямоугольника и соответственно определяет координаты правой нижней точки прямоугольника.

Создайте обработчики этих событий и введите следующие операторы:

procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;

Shift: TShiftState; X, Y: Integer);

begin

x1:=x;

y1:=y;

end;

procedure TForm1.FormMouseUp(Sender: TObject; Button: TMouseButton;

Shift: TShiftState; X, Y: Integer);

begin

Canvas.Rectangle(x1,y1,x,y);

end;

Переменные x1,y1 являются глобальными переменными их нужно описать в разделе private класса TMainF.

Объединение отрезков A1A2, A2A3, … AN-1AN образуют ломаную А1А2А3 … АN Начало ломаной – это точка А1, конец – точка АN. Для рисования ломаной нужно задать ее начало, затем нарисовать звенья и наконец завершить ломаную. Начало (конец) рисования ломаной линии свяжем с событием OnDblClick. Введем логическую переменную Draw: ее значение, равное True – будет обозначать рисование ломаной, False – завершение ломаной. В разделе interface модуля введите раздел констант (после раздела описания переменных – Var).

Const draw: Boolean= False;

Создайте обработчик события OnDblClick:

procedure TForm1.FormDblClick(Sender: TObject);

begin

draw := not draw;

end;

В обработчике события OnMouseDown будем рисовать звенья ломаной, Если значение переменной Drawравно True и перемещать графический курсор, в противном случае. Дописать

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