Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабник по Delphi.pdf
Скачиваний:
48
Добавлен:
01.06.2015
Размер:
1.09 Mб
Скачать

29 –

Пример выполнения работы

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

На главную форму проекта поместим компоненты Image, Timer, ColorDialog, Edit, UpDown, две кнопки BitBin и два зависимых переключателя RudioButton.

Компонент Image используется как прямоугольная область, в которой происходит движение шара. Рисование осуществляется на канве этого компонента. Обработчик события OnTimer компонента Timer производит удаление изображения шара и его прорисовку на новом месте, что и создает эффект движения. Способ удаления изображения зависит от установленного режима его взаимодействия с фоном (устанавливается переключателями RudioButton). Если установлен режим pmXor, то изображение исчезает после повторного вывода в то же самое место. В режиме pmCopy необходимо поверх изображения шара вывести шар, цвет которого совпадает с цветом фона (в данном случае белого цвета). Компонент Edit содержит текущий радиус шара в пикселях. Он недоступен для редактирования. Изменение радиуса реализуется связанным с ним компонентом UpDown. Кнопки BitBin производят вызов диалога ColorDialog и выход из программы.

На рис. 10 изображена главная форма проекта. Сам проект с исходными текстами программ находится в папке GraphicLab.

Для реализации движения шара введены переменные.

X, Y – Координаты левого верхнего угла прямоугольника, в который вписан шар;

dX, dY – приращение соответственно по оси X и по оси Y;

R – радиус нарисованного шара;

С – цвет нарисованного шара.

Прежде всего, создадим процедуру Draw, которая выводит эллипс, вписанный в квадрат

(X, Y) – (X+2*R, Y+2*R).

procedure TfGrafic.Draw; begin

Im.Canvas.Ellipse(X,Y,X+2*R,Y+2*R);

end;

Рис. 10. Главная форма проекта примера

При запуске программы в обработчике события OnCreate формы задаем режим взаимодействия рисунка с фоном pmXor, начальный радиус окружности, случайным образом выби-

Калачев Д.П., Лутай В,Н,. Скороход С.В. Delphi. Лабораторные работы.

30 –

раем координаты X, Y и их шаг dX, dY, задаем начальный зеленый цвет пера и кисти, прорисовываем окружность и запускаем таймер.

procedure TfGrafic.FormCreate(Sender: TObject); begin

Im.Canvas.Pen.Mode := pmXor; r := uSize.Position; randomize;

X:= Random( Im.Canvas.ClipRect.Right – 2 * R );

Y:= Random( Im.Canvas.ClipRect.Bottom – 2 * R ); dX := 1 + Random( 10 );

dY := 1 + Random( 10 );

C:= clGreen; dColor.Color := C;

Im.Canvas.Brush.Color := C; Im.Canvas.Pen.Color := C; draw;

Tim.Enabled := true

end;

В обработчике события OnTimer таймера реализуется передвижение окружности на новое место. Сначала необходимо стереть старое изображение. В режиме pmCopy устанавливаем белые цвета пера и кисти и прорисовываем окружность белым цветом. В режиме pmXor достаточно просто повторно прорисовать окружность. Далее устанавливаем в переменные C и R новые установленные значения цвета и радиуса окружности, после чего вычисляем новые координаты X, Y описывающего окружность квадрата и прорисовываем окружность. При вычислении координат необходимо следить, чтобы они не вышли за границы объекта Im, а при достижении границы шаг по соответствующей координате изменялся на противоположный.

procedure TfGrafic.TimTimer(Sender: TObject); begin

if rCOPY.Checked then begin Im.Canvas.Brush.Color := clWhite;

Im.Canvas.Pen.Color

:= clWhite;

end;

 

 

draw;

dColor.Color;

 

C :=

:= C;

Im.Canvas.Brush.Color

Im.Canvas.Pen.Color

:= C;

r :=

uSize.Position;

 

X :=

X+dX;

 

With

Im.Canvas.Cliprect do begin

If

X < Left then begin

X

:= Left;

 

dX := -dX

 

end;

 

If

X+2*R > Right then begin

X

:= Right-2*R;

 

dX := -dX

 

end

 

 

end;

Y + dY;

 

Y :=

 

Калачев Д.П., Лутай В,Н,. Скороход С.В. Delphi. Лабораторные работы.