Первый урок первая программа 8 Сохранение и запуск проекта на выполнение 11 Сохранение проекта 11

Вид материалаУрок

Содержание


Как убрать часть графического примитива
Примерные задания для пятого урока
Вопросы для самоконтроля
Шестой урок – использование Timer для “движения” объектов на форме Объект Timer
Enabled – логическая величина, следовательно имеет два значения: true
Как заставить графический объект “двигаться”?
Примеры программ на движение
Вторая программа – движение ракет вверх с использованием Shape, картинки и панели
Подобный материал:
1   2   3   4   5   6   7   8   9

Как убрать часть графического примитива:

  • рисуем графический примитив, например, эллипс у рыбки;
  • накладываем сверху на эллипс другой графический объект так, чтобы он закрывал часть эллипса;
  • убираем у него контур (psClear для Type в Pen) и выставляем цвет закраски в Brush как цвет фона, на котором нарисован плавник.



Примерные задания для пятого урока



Нарисовать картину, содержащую минимум: пять прямоугольников (квадратов); пять эллипсов (кругов); три отрезка; фон формы не стандартный.
  1. Новый год
  2. Лето
  3. Морская или речная тема
  4. Космос
  5. Природа
  6. Твоя комната

Вопросы для самоконтроля




  1. Какие графические фигуры можно выбрать в Shape?
  2. За что отвечают параметры Pen и Brush?
  3. Как убрать контур?
  4. Как нарисовать горизонтальную линию?
  5. Как нарисовать вертикальную линию?
  6. В каких границах находится Shape?
  7. Что такое передний и задний планы объекта?



Шестой урок – использование Timer для “движения” объектов на форме

Объект Timer



Познакомимся с новым компонентом Timer, который поможет нам выполнить движение объектов на форме. Timer находится на вкладке System и выглядит как часы (смотри рис. № 1).


вкладка

таймер


рис. № 1

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

Рассмотрим параметры таймера и единственную процедуру (рис. № 2):


Активность таймера

Значение в миллисекундах,

1 сек = 1000 миллисекунд


рис. № 2

Enabled – логическая величина, следовательно имеет два значения: true и false. Если значение равно true, то через каждые миллисекунды интервала таймера (interval) выполняется процедура данного таймера. При значении false вызов процедуры таймера не происходит.

Interval – задается в миллисекундах. Использование параметра описано выше.

В закладке инспектора объекта Events – процедуры-события, находится всего одна процедура, которая вызывается, если параметр Enabled равен true.

Для движения объекта на форме воспользуемся возможностями таймера, применив, например, следующий алгоритм:
  • начальное значение параметра активности таймера равно false (чтобы графический объект при запуске формы не “поехал”);
  • интервал пусть будет 100 миллисекунд;
  • в процедуре-событии опишем движение объекта, используя параметры top и left для движения по вертикали или горизонтали;
  • запуск работы таймера по событию click на кнопке начало.

Как заставить графический объект “двигаться”?



Как это осуществить? Рассмотрим следующий пример: выполнить движение некоторого графического объекта слева направо.

Пусть картинка как на рисунке № 3 – пять объектов Shape: четыре круга и один прямоугольник. Кроме этого на форме есть кнопка “старт”, и таймер.



рис. № 3
  1. Зададим начальные значения параметрам компонента Timer1 (смотри алгоритм);
  2. В процедуре click для кнопки запишем команду:

Timer1.Enabled := true;

Включим таймер при нажатии на кнопку;
  1. Определяем Shape, у которого самая “правая” часть картинки. В нашем примере это будет Shape3;
  2. Записываем команды в процедуре таймера для движения картинки.



Примеры программ на движение

Первая программа – движение слева направо



Просмотрите код Unit1.pas для нашего примера:

unit Unit1;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, ExtCtrls, StdCtrls, Buttons;

type

TForm1 = class(TForm)

Timer1: TTimer; { таймер }

Shape1: TShape; { первое }

Shape2: TShape; { колесо }

Shape3: TShape; { второе }

Shape4: TShape; { колесо }

Shape5: TShape; { прямоугольник }

BitBtn1: TBitBtn; { кнопка с цветным текстом,}

{ находится в закладке Additional}

procedure BitBtn1Click(Sender: TObject);

procedure Timer1Timer(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;


var

Form1: TForm1;

implementation


{$R *.dfm}


// Таймер активен, следовательно, через каждые

// 100 миллисекунд будет происходить вызов процедуры // Timer1Timer

procedure TForm1.BitBtn1Click(Sender: TObject);

begin

Timer1.Enabled := true;

end;


// Ориентируемся по Shape, у которого самая

// правая граница.

// В нашем примере это Shape3.

// Правая граница Shape3 = левый отступ + длина

// шейп, т.е. Shape3.Left + Shape3.Width

// Timer1 активен пока не достигли почти правой

границы формы

procedure TForm1.Timer1Timer(Sender: TObject);

begin

// 30 пикселей не доходить до правой границы формы

if Shape3.Left + Shape3.Width <

Form1.Width – 30 then

begin

// передвигаем вправо на 3 пикселя все части

// движущейся картинки

Shape1.Left := Shape1.Left + 3;

Shape2.Left := Shape2.Left + 3;

Shape3.Left := Shape3.Left + 3;

Shape4.Left := Shape4.Left + 3;

Shape5.Left := Shape5.Left + 3;

end

else

// достигли правой границы движения –

// выключаем таймер

timer1.Enabled := false;

end;


end.


При движении по вертикали будем использовать параметр Top – отступ от верхней границы формы. Значение высоты объекта находится в параметре Height.


Разберите пример использования нескольких таймеров, а так же применение “подкладки” (Panel) под картинкой для простоты кодирования движения. В примере есть рисунок, который был нарисован в Paint и вставлен как объект Image из вкладки Additional. Для связи картинки с Image в параметре Picture


Выбор картинки – щелчок на

Для вставки картинки на форме

Параметр отображения картинки в указанной области

Прозрачный или нет белый фон картинки
рис. № 4

Вторая программа – движение ракет вверх с использованием Shape, картинки и панели



Задание: три ракеты стартуют по очереди (старт следующей при достижении верхней границы), с помощью кнопок можно заставить стартовать ракеты раньше.

Расположение объектов на форме можно рассмотреть на рисунке № 5:
  • первая ракета из Shape;
  • вторая из таких же шейпов на панели (Panel находится в Standard);
  • третья нарисована в Paint и вставлена через Image.

После нажатия на кнопку старт она становится недоступной – параметр Enabled становиться равным false.

рис. № 4




рис. № 5

Просмотрите как работает программа с тремя ракетами.


var

Form1: TForm1;

step : byte = 3; { шаг смещения ракеты равен 3 пикселям }

implementation


{$R *.dfm}


// Пример движения графических объектов: Shape, Panel, Image

// Вторая ракета стартует после выхода на орбиту первой,

// то же самое и со второй.

// Вторая и третья ракета могут стартовать и при нажатии

// кнопок "старт"

// Обращение к объекту Timer происходит каждый раз по

// прошествии милисекунд, указанных в параметрах таймера.

// Если таймер имеет начальное значение параметра Enabled

// равным true, то он стартует одновременно с активизацией

// формы, иначе (значение false) только тогда, когда

// параметр Enabled будет равен true.


// Процедура движения стандартных графических образов -
// Shape

procedure TForm1.Timer1Timer(Sender: TObject);

begin

if Shape4.Top > 50 then { пока не долетели - сдвиг на шаг }

begin

Shape1.Top := Shape1.Top - step;

Shape2.Top := Shape2.Top - step;

Shape3.Top := Shape3.Top - step;

Shape4.Top := Shape4.Top - step;

Shape5.Top := Shape5.Top - step;

Shape6.Top := Shape6.Top - step;

Shape7.Top := Shape7.Top - step;

Shape8.Top := Shape8.Top - step;

end

else

begin

timer1.Enabled := false; { выключить таймер - стоп }

// Вызов процедуры-события Click на кнопке Button2

// для автоматического старта второй ракеты

Form1.Button2.Click; { старт второй ракеты }

end;

end;


// Кнопка старт для первой ракеты

procedure TForm1.Button1Click(Sender: TObject);

begin

timer1.Enabled := true; { включить таймер - старт }

Button1.Enabled := false; { кнопка старт неактивна }

end;


// Процедура движения панели (Panel)

procedure TForm1.Timer2Timer(Sender: TObject);

begin

if Panel1.Top > 50 then { пока не долетели - сдвиг на шаг }

Panel1.Top := Panel1.Top - step

else

begin

timer2.Enabled := false; { выключить таймер - стоп }

// Вызов процедуры-события Click на кнопке Button3

// для автоматического старта третьей ракеты

Form1.Button3.Click; { старт третьей ракеты }

end;

end;


// Кнопка старт для второй ракеты

procedure TForm1.Button2Click(Sender: TObject);

begin

timer2.Enabled := true; { включить таймер - старт }

Button2.Enabled := false; { кнопка старт неактивна }

end;


// Процедура движения графического образа (Image)

procedure TForm1.Timer3Timer(Sender: TObject);

begin

if Image1.Top > 50 then { пока не долетели - сдвиг на шаг }

Image1.Top := Image1.Top - step

else

timer2.Enabled := false;


end;


// Кнопка старт для третьей ракеты

procedure TForm1.Button3Click(Sender: TObject);

begin

timer3.Enabled := true; { включить таймер - старт }

Button3.Enabled := false; { кнопка старт неактивна }

end;

end.