- •Часть 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}
uses
DateUtils; // для доступа к SecondOf, //MinuteOf и HourOf
const
R = 75;
// радиус циферблата часов
var
xO,yO: integer; //центр циферблата ahr,amin,asec: integer; // положение стрелок (угол)
// инициализация формы
procedure TForml.FormCreate(Sender: TObject);
var
t: TDateTime; begin
// зададим размер формы
// в соответствии с размером циферблата
ClientHeight := (R+10)*2;
ClientWidth := (R+10)*2;
xO := R+10; yO := R+10;
t := Now();
// положение стрелок
ahr :- 90 - HourOf(t)*30-(MinuteOf(Today)div 12)*6;
amin := 90 - MinuteOf(t)*6;
asec := 90 - SecondOf(Today)*6;
Timerl.Interval := 1000; // период сигнале от таймера 1 сек Timerl.Enabled := True; // пуск таймера
end;
// вычерчивает вектор заданной длины из точки (х0,у0) procedure TForml.Vector(x0,y0: integer; a, 1: integer);
// х0,у0 - начало вектора
//а — угол между осью х и вектором
// 1 — длина вектора const
GRAD = 0.0174532; // коэффициент пересчета угла из градусов
// в радианы var
х,у: integer; // координаты конца вектора begin
Canvas.MoveTo(x0,y0);
х := Round(xO + l*cos(a*GRAD));
У := Round(y0 - l*sin(a*GRAD));
Canvas.LineTo(x, y) ; end;
// рисует стрелки
Procedure TForml.DrawClock; var
t: TDateTime; begin
//шаг секундной и минутной стрелок 6 градусов, // часовой - 30.
// стереть изображение стрелок
Canvas.Pen.Color := clBtnFace;
Canvas.Pen.Width :=3;
// часовую
Vector(x0,y0, ahr, R-20);
88
Примеры и задачи
89
//
минутную
Vector(xO,yO, amin, R-15);
// секундную
Vector(xO,yO, asec, R-7);
t := Now();
// новое положение стрелок
ahr := 90 - HourOf(t)+30-(MinuteOf(t)div 12)*6;
amin := 90 - MinuteOf(t)*6;
asec := 90 - SecondOf(t)*6;
// нарисовать стрелки часовая //стрелка
Canvas.Pen.Width := 3; Canvas.Pen.Color := clBlack; Vector(x0,y0, ahr, R-20);
// минутная стрелка Canvas.Pen.Width := 2; Canvas.Pen.Color := clBlack; Vector(x0,y0, amin, R-15);
// секундная стрелка Canvas.Pen.Width := 1; Canvas.Pen.Color := clYellow; Vector(x0,y0, asec, R-7);
end;
// прорисовка циферблата и начальных стрелок procedure TForml.FormPaint(Sender: TObject) ;
// циферблат
while a < 360 do begin
x:=x0+Round( R * cos(a*2*pi/360));
y:=x0-Round( R * sin(a*2*pi/360)) ;
Forml.Canvas.MoveTo(x, y) ;
if (a mod 30) = 0
then Canvas.Ellipse(x-2,y-2,x+3,y+3) else Canvas.Ellipse(x-l,y-l,x+l,y+l);
a:=a+ 6; // 1 минута — 6 градусов end;
// восстановить карандаш-кисть Canvas.Pen.Width := pw; Canvas.Pen.Color := pc;
DrawClock; end;
// прорисовка текущих положений стрелок часов procedure TForml.TimerlTimer(Sender: TObject); begin
DrawClock; end;
end.
35. Напишите программу, которая в диалоговом окне выводит изображение идущих часов с часовой, минутной и секундной стрелками (рис. 1.33).
x,yf integer; // координаты маркера на циферблате
a: integer; // угол между ОХ и прямой (х0,у0) (х,у)
// цвет карандаша // ширина карандаша
рс: TColor;
pw: integer; begin
рс := Canvas.Pen.Color; pw := Canvas.Pen.Width;
Canvas.Pen.Width := 1; Canvas.Pen.Color := clBlack;
a:=0; // метки ставим от 3-х часов, против часовой стрелки
Рис. 1.33. Окно программы Часы
90
Часть Г
Примеры и задачи
91
unit
clock2_;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Controls, Forms, Dialogs, ExtCtrls;
type
TForml = class(TForm) Tirnerl: TTimer;
procedure FormCreate(Sender: TObject); procedure FormPaint(Sender: TObject); procedure TimerlTimer(Sender: TObject);
// эти объявления вставлены вручную procedure Vector(xO,yO,a,1: integer); procedure DrawClock;
private
I Private declarations ) public
{ Public declarations j end;
var
Forml: TForml;
implementation
{$R *.dfm}
uses
DateUtils; // для доступа к SecondOf, // MinuteOf и HourOf
const
R
= 75;
var
xO,yO: integer; // центр циферблата ahr,amin,asec: integer; // положение стрелок (угол)
// инициализация формы
procedure TForml.FormCreate(Sender: TObject);
var
t: TDateTime;
begin
// зададим размер формы
// в соответствии с размером циферблата
ClientHeight := (R+30)*2;
ClientWidth := (R+30)*2;
xO := R+30;
yO := R+30;
t := Now();
// положение стрелок
ahr := 90 - HourOf(t)*30-(MinuteOf(Today)div 12)*6;
amin := 90 - MinuteOf(t)*6;
asec := 90 - SecondOf(Today)*6;
Timerl.Interval := 1000; // период сигналов от таймера 1 сек TimerI.Enabled := True; // пуск таймера
end;
// вычерчивает вектор заданной длины из точки (х0,у0) procedure TForml.Vector(x0,y0: integer; a, 1: integer);
// х0,у0 — начало вектора
//а — угол между осью х и вектором
// 1 — длина вектора const
GRAD = 0.0174532; // коэффициент пересчета угла из градусов
// в радианы var
х,у: integer; // координаты конца вектора
begin
Canvas.MoveTo(x0,y0);
х := Round(xO + l*cos(a*GRAD));
у := Round(yO - l*sin(a*GRAD));
Canvas.LineTo(x, у); end;
// рисует стрелки
procedure TForml.DrawClock; var
t: TDateTime; begin
// шаг секундной и минутной стрелок 6 градусов //часовой — 30.
92
Примеры и задачи
93
// стереть изображение стрелок
Canvas.Pen.Color := clBtnFace;
Canvas.Pen.Width :=3;
// часовую
Vector(xO,yO, ahr, R-20);
// минутную
Vector(xO,yO, amin, R-15);
// секундную
Vector (xO,yO, asec, R-7);
t := Now() ;
// новое положение стрелок
ahr := 90 - HourOf(t)*30-(MinuteOf(t)div 12)*6;
amin := 90 - MinuteOf(t)*6;
asec := 90 - SecondOf(t)*6;
// нарисовать стрелки
//часовая стрелка Canvas.Pen.Width := 3; Canvas.Pen.Color := clBlack; Vector (x0,y0, ahr, R-20);
// минутная стрелка Canvas.Pen.Width := 2; Canvas.Pen.Color := clBlack; Vector(x0,y0, amin, R-15);
// секундная стрелка Canvas.Pen.Width := 1; Canvas.Pen.Color : = clYellow; Vector(x0,y0, asec, R-7);
end;
// прорисовка циферблата и начальных стрелок
procedure TForml.FormPaint(Sender: TObject);
var
x,y: integer; // координаты маркера на циферблате
a: integer; // угол между ОХ и прямой (х0,у0) (х,у)
h: integer; // метка часовой риски
bs: TBrushStyle; // стиль кисти рс: TColor; // цвет карандаша pw: integer; // ширина карандаша
begin
bs := Canvas.Brush.Style; pc := Canvas.Pen.Color;
pw := Canvas.Pen.Width;
Canvas.Brush.Style := bsClear; Canvas.Pen.Width := 1; Canvas.Pen.Color := clBlack;
a:=0; // метки ставим от 3-х часов, против
// часовой стрелки
h:=3; // угол 0 градусов — это 3 часа
// циферблат while a < 360 do begin
x:=xO+Round( R * cos(a*2*pi/360)); y:=xO-Round( R * sin(a*2*pi/360)); Forml.Canvas.MoveTo(x,y); if (a mod 30) = 0 then begin
Canvas.Ellipse(x-2,y-2,x+3,y+3) ; //цифры по большему радиусу x:=x0+Round( (R+15) * cos(a*2*pi/360)); y:=x0-Round( (R+15) * sin(a*2*pi/360)); Canvas.TextOut(x-5,y-7,intToStr(h)); dec(h);
if h = 0 then h:=12; end
else Canvas.Ellipse(x-l,y-l,x+l,y+l); a:=a+6; // 1 минута — 6 градусов
end;
// восстановить карандаш-кисть Canvas.Brush.Style := bs; Canvas.Pen.Width := pw; Canvas.Pen.Color := pc;
DrawClock; end;
// прорисовка текущих положений стрелок часов Procedure TForml.TimerlTimer(Sender: TObject);
94
Часть
и задачи
95
begin
DrawClock; end;
end.
unit aplane_;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, StdCtrls, Buttons;
Рис.
1.34. Летящий над городом самолет
Рис.
1.35. Объект и фоновый рисунок
type
TForml = class(TForm)
Timerl: TTimer;
Imagel: TImage;
procedure TimerITimer(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure FormCreate(Sender: TObject); private
{ Private declarations } public
{ Public declarations } end;
var
Forml: TForml;
implementation
($R *.DFM} var
Back, Picture: TBitMap; // фон и картинка
BackRct : TRect; // положение и размер области фона,
// которая должна быть восстановлена
х,у:integer; // текущее положение картинки W, H: integer; // размеры картинки
Procedure TForml.FormCreate(Sender: TObject); begin
{ Свойству AutoSize обязательно надо присвоить значение False. Это можно сделать во время создания формы. } Imagel.AutoSize := False;
96
Примеры и задачи
97
//
создать два объекта —
битовых
образа Back
:= TBitmap.Create;
// фон
Picture
:= TBitmap.Create;
// картинка
// загрузить и вывести фон Back.LoadFromFile('factory.bmp1); Image1.Width := Back.Width; Imagel.Height := Back.Height; Imagel.Canvas.Draw(0, 0,Back);
// загрузить картинку, которая будет двигаться Picture.LoadFromFile('aplane.bmp');
W := Picture.Width;
H : = Picture.Height;
// определим "прозрачный" цвет
Picture.Transparent : = True;
// прозрачный цвет картинки определяет
// левый верхний пиксел картинки
Picture.TransParentColor := Picture.Canvas.Pixels[1,1];
// начальное положение картинки
x:=-W;
у := 20;
// определим сохраняемую область фона BackRct:=Bounds(x,y,W,H);
end;
// обработка сигнала таймера
procedure TForml.TimerITimer(Sender: TObject);
begin
// восстановлением фона удалим рисунок
Imagel.Canvas.CopyRect(BackRct,Back.Canvas,BackRct)
x:=x+2;
if x > Imagel.Width then x:=-W;
// определим сохраняемую область фона BackRct:=Bounds(х,у,W,H);
// выведем рисунок Imagel.Canvas.Draw(х,у,Picture) ,
end;
// завершение работы программы
procedure TForml. ForrnClose (Sender: TOb j ect ;
var Action: TCloseAction) begin
// освободим память, выделенную
// для хранения битовых образов
Back.Free;
picture.Free; end; end.
Рис. 1.36. Форма программы Мультипликация
37. Напишите программу, в окне которой отображается "муль-тик", зафуженный из ВМР-файла. Вид формы приложения приведен на рис. 1.36, пример мультика (картинка, которая находится в BMP-файле) — на рис. 1.37.
Р
ис.
1.37. Пример
"мультика" — содержимое ВМР-файла
