- •Общие замечания
- •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.
35. Напишите программу, которая в диалоговом окне выводит изображение идущих часов с часовой, минутной и секундной стрелками (рис. 1.33).
Рис. 1.33. Окно программы Часы
unit clock2_;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialo.gs, ExtCtrls;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 j public ( Public declarations } end;var Forml: TForral;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+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 сек Timerl.Enabled := True; // пуск таймера end;// вычерчивает вектор заданной длины из точки (х0,у0) procedure TForral.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 T Fo rml.DrawClock; var t: TDateTime; begin // шаг секундной и минутной стрелок 6 градусов, // часовой — 30.
// стереть изображение стрелок 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:=xO+Round( (R+15) * cos(a*2*pi/360)); y:=xO-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); begin DrawClock; end;end.
