
- •Часть 1
- •Implementation
- •Implementation
- •Implementation
- •Часть 1
- •Implementation
- •Implementation
- •Implementation
- •IBplementation
- •Implementation
- •Часть 1
- •Implementation
- •Implementation
- •Implementation
- •Implementation
- •Implementation
- •Interface
- •Часть 1
- •Interface
- •Часть 1 I. 104
- •Implementation
- •Implementation
- •Implementation
- •Часть I
- •Р ис. 1.46. Окно программы Звуки Windows
- •Implementation
- •Interface
- •Implementation
- •Interface
- •Implementation
- •Interface
- •Implementation
- •Interface
- •Implementation
- •Implementation
- •Implementation
- •Implementation
- •Implementation
- •Interface
- •Часть 1
- •168 Част
- •Implementation
- •Часть 1
- •Interface uses
- •Implementation
- •Interface
- •Implementation
- •Часть 1
- •Часть 1 I Примеры и задачи
- •Часть 1 I Примеры и задачи
- •Implementation
- •205 Часть
- •Interface
- •Implementation
- •216 Часть 1
- •Поле т ип Размер Информация
- •Часть 1
- •Implementation
- •Interface
- •Implementation
- •Implementation
- •Часть 2 Таблица 2.2 (окончание)
- •252 Часть 2
- •Часть 2 I Delphi — краткий справочник
- •Часть 2
Implementation
{$R *.dfm}
// co6brrne0nPaint происходит при первом появлении //окна на экране и тогда, когда окно или его часть //надо перерисовать
procedure TForm2.FormPaint(Sender: TObject);
begin
gr; // вывести график end;
// событие OnResize происходит, если // пользователь изменил размер окна
procedure TForm2.FormResize(Sender: TObject); begin
gr; // вывести график end;
end.
Рис. 1.30. Кораблик
Рис. 1.31. Простая мультипликация — кораблик, плывущий по морю
33. Напишите программу, по поверхности окна которой перемещается графический объект, например кораблик (рис. 1.30). Вид окна программы приведен на рис. 1.31.
82
u
nit
ship_;
interface
uses
Windows, Messages, SysOtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls;
type
TForml = class(TForm)
Timerl: TTimer;
procedure TimerlTimer(Sender: TObject);
procedure FormPaint(Sender: TObject);
procedure FormCreate(Sender: TObject); private
{ Private declarations } public
I Public declarations I end;
var
Forml: TForml;
Implementation
{$R *.DFM}
x,y: integer; // координаты корабля (базовой точки)
// вычерчивает на поверхности формы кораблик
// или стирает его
procedure Parohod(x,y: integer; mode: boolean); // x,y — координаты базовой точки кораблика // mode: True — нарисовать, False — стереть
const
{ Базовые точки кораблика находятся в узлах сетки,
шаг которой определяет размер кораблика }
dx = 5; // шаг сетки по X
dy = 5; // шаг сетки по Y
var
// корпус и надстройку будем рисовать
// при помощи метода Polygon
pi: array[1..7]of TPoint; // координаты точек корпуса
р2: array[1..8]of TPoint; // координаты точек надстройки
Час
//
рисуем
with
Forml.Canvas
do
begin
pc
:= Pen.Color;
be
:= Brush.Color;
pc,bc: TColor; // текущий цвет карандаша и кисти
begin
if not mode then
begin
// стереть
Forml.Canvas.Brush.Color := clNavy;
Forml.Canvas.Pen.Color := clNavy;
Forml.Canvas.Rectangle(x,y+l,x+17*dx,y-10*dy);
Forml.Canvas.Brush.Color := clNavy;
// небо
if y-10*dy < 80 then
begin
// конец мачты на фоне неба
Forml.Canvas.Pen.Color := clSkyBlue;
Forml.Canvas.Brush.Color := clSkyBlue;
Forml.Canvas.Rectangle(x,y-10*dy,x+17*dx,80), end;
exit ;
end;
// сохраним текущий цвет карандаша // и кисти
// установим нужный цвет
Pen.Color := clBlack; Brush.Color := clwhite;
// рисуем . . .
// корпус
:=
y;
:=
y-2*dy; := y-2*dy; := y-3*dy; := y-3*dy; :=
y;
:=
y;
pl[1].Y
pl[2].Y
pl[3].Y
pl[4].Y
pl[5].Y
pl[6].Y
p
pl[1].X:=x
pl[2].X:=x;
Pl[3].X:=x+10*dx;
Pl[4].X:=x+11*dx;
Pl[5].X:=x+17*dx;
pl[6].X:=x+14*dx;
pl[7].X:=x;
Polygon(p1);
//
надстройка
p2[l].X
:= x+3*dx;
p2
[2]
.X
■:=
x+4*dx;
p2[l].Y := y-2*dy; p2[2].Y := y-3*dy;
pl[7] .Y
83
84
Часть!
Примеры и задачи
85
р2[3).Х := x+4*dx; p2[3].Y := y-4*dy; p2[4].X := x+13*dx; p2[4].Y := y-4*dy; p2[5].X := x+13*dx; p2[5].Y := y-3*dy; p2[6].X := x+ll*dx; p2[6].Y := y-3*dy; p2[7].X := x+10*dx; p2[7].Y := y-2*dy; p2[8].X := x+3*dx; p2[8].Y := y-2*dy; Polygon(p2); MoveTo(x+5*dx,y-3*dy); LineTo(x+9*dx,y-3*dy) ;
// капитанский мостик
Rectangle(x+8*dx,y-4*dy,x+ll*dx,y-5*dy); // труба
Rectangle(x+7*dx,y-4*dy,x+8*dx,y-7*dy); //иллюминаторы
Ellipse(x+ll*dx,y-2*dy,x+12*dx,y-l*dy); Ellipse(x+13*dx,y-2*dy,x+14*dx,y-l*dy); //мачта
MoveTo(x+10*dx,y-5*dy); LineTo(x+10*dx,y-10*dy); //оснастка
Pen.Color := clWhite; MoveTo(x+17*dx,y-3*dy); LineTo(x+10*dx,y-10*dy); LineTo(x,y-2*dy);
Pen.Color := pc; // восстановим старый цвет карандаша end; end;
// обработка сигнала таймера
procedure TForml.TimerITimer(Sender: TObject);
begin
Parohod(x,y, False); // стереть рисунок if x < Forml.ClientWidth
then x := x+2
else begin // новый рейс
x := 0;
у := Random(50) + 100;
end;
Parohod(x,y,True); // нарисовать в новой точке end;
procedure TForml.FormPaint(Sender: TObject); begin
// небо
Canvas.Brush.Color := clSkyBlue;
Canvas.Pen.Color := clSkyBlue;
Canvas.Rectangle(0,0,ClientWidth,80); end;
procedure TForml.FormCreate(Sender: TObject); begin
x:=0; y:=80; . // исходное положение парохода
Forml.Color:=clNavy; // цвет моря
Timerl.Interval := 50; // сигнал таймера каждые 50 мсек end;
end.
Рис. 1.32. Окно и форма программы Часы
Unit clock_; interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls;
86
Част
Примеры и задачи
87
type
TForml = class(TForm) Timerl: TTimer;
procedure FormCreate(Sender: TObject); procedure FormPaint(Sender: TObject); procedure TimerlTimer(Sender: TObject);
// эти объявления вставлены вручную procedure Vector(xO,yO,a,1: integer); procedure DrawClock;
private
{ Private declarations } public
{ Public declarations I end;
var
Forml: TForml;