Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методичка_Delphi.doc
Скачиваний:
29
Добавлен:
28.04.2019
Размер:
407.55 Кб
Скачать

Практическая работа Delphi_12

Цель: Создать проект под названием "Светофор", соединив возможности графики с динамикой процесса.

План разработки программы

  1. Создать новый проект, сохранить его в папке Светофор.

  2. На вкладке Additonal выбрать компонент Shape и установить его на форме. Повторить еще два раза.

  3. Установкой свойств фигуры превратить прямоугольники в квадраты.

  4. Установкой свойства фигуры stCircle превратить квадраты в окружности.

  5. Для установки цвета контура, выбрать свойство Pen и его подсвойству Color установить значение clRed.

  6. Для закраски области круга выбрать свойство Bruch и его подсвойству Style установить значение bsClear.

  7. Повторить эти операции для остальных двух фигур.

  8. Можно уже запустить программу, но лампочки светофора светиться не будут.

  9. Необходимо создать событие, возникающее при наведении указателя мыши на лампочку. Для этого в окне Инспектора объектов для формы на вкладке События дважды щелкните по событию OnMouseMove. Это событие будет возникать, когда указатель мыши наведен на форму. Ее заголовок выглядит как procedure TForm1. -From MouseMove(Sender: TObject; TShiftState; X, Y: Intrger); В созданной процедуре имеются дополнительные параметры: Shift – признак нажатия клавиш Shift, Ctrl, Alt; X,Y – горизонтальная и вертикальная координаты указателя мыши.

Procedure TForm1.FromMouseMove(Sender: Tobject; Shift: TshiftState; X,Y: Integer);

Begin

Shape1.Brush.Color:=clRed;

Shape1.Brush.Style:= OnShape(Shape1,X,Y);

Shape2.Brush.Color:=clYellow;

Shape2.Brush.Style:= OnShape(Shape2,X,Y);

Shape3.Brush.Color:=clLime;

Shape3.Brush.Style:= OnShape(Shape3,X,Y);

End;

  1. Не будем использовать пока нажатие клавиш, но договоримся отсчитывать координаты указателя мыши от левого верхнего угла формы. Примем, что когда указатель мыши наведен на лампочку, то она зажигается, а когда нет — то гаснет. Если указатель находится просто на форме, то не горит ни одна лампочка.

  2. Так как лампочки у нас три и операции, производимые с ними однотипны, то применим функцию OnShape, которая должна вызываться из процедуры FormMouseMove. Эта процедура должна быть описана до вызова процедуры FormMouseMove. Запишем ее:

Function OnShape(sh:Tshape; X,Y: Integer): TbrushStyle;

Var r, cx, xy, d2 : Integer; //радиус круга, координаты центра, радиус-вектор

Begin

r:=sh.Width div 2; //определяем радиус фигуры

cx:= sh.Left + r; //определяем координаты центра фигуры

cy:= sh.Top + r;

d2:= (x-cx)*(x-cx)+(y-cy)*(y-cy); //определяем длину радиуса-вектора

OnShape:= bsClear; //возврат значения, если указателя мыши нет на лампочке

If d2<r*r then OnShape:= bsSolid;

End;

  1. Теперь запишем процедуру-обработчик состояния лампочек. Чтобы закрасить лампочку, мы должны использовать свойство Brush. Присвоим ему значение clRed. А текущее состояние лампочек должно определяться результатом работы функции OnShape (попаданием или нет указателя в фигуру). Тогда обработчик события для красной лампочки будет:

Shape1.Brush.Color:=clRed;

Shape1.Brush.Style:= OnShape(Shape1,X,Y);

  1. Теперь сформируем сам «светофор». Придайте форме нужное соотношение высоты и ширины, установите фоновый цвет окна, запретите изменение размеров окна при работе, выровняйте элементы на форме по центру и по высоте.

  2. Оттестируйте программу и запишите текст модуля Unit1.pas.

Задание для самостоятельного выполнения

1. Создайте программу, в которой формируется событие при попадании курсора мыши в границы какой-либо выбранной вами фигуры.