
- •Общие замечания
- •6. Написать программу, которая вычисляет скорость (км/час), с'которой бегун пробежал дистанцию. Рекомендуемый вид формы приведен на рис. 1.3. Количество минут задается целым числом, секунд — дробным.
- •17. Напишите программу "Электронные часы", на поверхности формы которой отображается текущее время (рис. 1.14).
- •18. Напишите программу "Электронные часы", в окне которой отображается текущее время и дата (рис. 1.15).
- •Графика
- •23. Напишите программу, которая на поверхности формы рису ет олимпийский флаг (рис. 1.19).
- •24. Напишите программу, которая на поверхности формы рисует флаг Российской Федерации. .
- •25. Напишите профамму, в диалоговом окне которой, в точке щелчка кнопкой мыши, вычерчивается контур пятиконечной звезды (рис. 1.20).
- •29. Напишите программу, которая на поверхности формы вычерчивает график функции, например 2 sin(X) e*/5. Вид окна во время работы профаммы приведен на рис. 1.25.
- •33. Напишите программу, по поверхности окна которой перемещается графический объект, например кораблик (рис. 1.30). Вид окна программы приведен на рис. 1.31.
- •34. Напишите программу, которая на поверхность формы выво дит изображение идущих часов с часовой, минутной и секунд ной стрелками. Окно и форма приложения приведены на рис. 1.32.
- •35. Напишите программу, которая в диалоговом окне выводит изображение идущих часов с часовой, минутной и секундной стрелками (рис. 1.33).
- •36. Напишите программу, по поверхности формы которой дви жется изображение (рис. 1.34). Изображение перемещающегося объекта и фоновый рисунок (рис. 1.35) должны загружаться из файла.
- •40. Напишите программу, используя которую можно просмот реть иллюстрации, находящиеся в одном из каталогов компью тера. Вид окна программы приведен на рис. 1.40.
- •Мультимедиа
- •45. Напишите программу, используя которую можно прослу шать звуковые файлы Windows. Рекомендуемый вид диалогового окна программы приведен на рис. 1.46.
- •Игры и полезные программы
- •55. Напишите программу "Собери картинку" — аналог игры "15", в которой игрок будет перемещать не цифры, а фрагменты кар тинки (рис. 1.59).
- •62. Напишите программу тестирования, в которой выбор пра вильного ответа осуществляется при помощи переключателя (рис. 1.69).
- •Базы данных
- •68. Напишите программу, используя которую можно подгото вить и распечатать накладную. Рекомендуемый вид формы про граммы приведен на рис. 1.77.
34. Напишите программу, которая на поверхность формы выво дит изображение идущих часов с часовой, минутной и секунд ной стрелками. Окно и форма приложения приведены на рис. 1.32.
Рис. 1.32. Окно и форма программы Часы
unit' clock_;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls; type TForml = class(TForm) Timerl: TTimer; procedure FormCreate(Sender: TObject); procedure ForraPaint(Sender: TObject); procedure TimerlTimer(Sender: TObject); // эти объявления вставлены вручную procedure Vector(xO,yO,a,1: integer); procedure DrawClock; private { Private declarations ) public I Public declarations } end;var Forml: TForml;implementation . {$R *.dfm}uses DateUtils; // для доступа к SecondOf, // MinuteOf и HourOfconst 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; хО := R+1O; уО := R+1O; 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(хО, y0) ; х := Round(хО + 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) ; // минутную 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(xO,yO, amin, R-15); . // секундная стрелка Canvas.Pen.Width := 1; Canvas.Pen.Color := clYellow; Vector(xO,yO, asec, R-7); end;// прорисовка циферблата и начальных стрелок procedure TForml.FormPaint(Sender: TObject); var x,y: 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-х часов, против часовой стрелки // циферблат 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,у); if (a mod 30) - 0 then Canvas.Ellipse(x-2,y-2,x+3, y+3) else Canvas.Ellipse(x-1,y-1,x+1,y+1); 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.