
- •Общие замечания
- •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.
68. Напишите программу, используя которую можно подгото вить и распечатать накладную. Рекомендуемый вид формы про граммы приведен на рис. 1.77.
Рис. 1.77. Форма программы Счет
{ Программа демонстрирует только вывод на печать. ) unit schet_; interface Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Grids, ExtCtrls; type TForml = class(TForm) StringGridl: TStringGrid; Buttonl: TButton; Button2: TButton; Editl: TEdit; Edit2: TEdit; procedure FormCreate(Sender: TObject); procedure Button2Click(Sender: TObject); private { Private declarations } public / Public declarations } end; var Forral: TForml; implementation {$R *.dfm} uses Printers; procedure TForml.FormCreate(Sender: TObject); var i: integer; begin with StringGridl do begin Cells[0,0] := ' №'; Cells[1,0] := ' Наименование'; Cells[2,0] := ' Цена1; Cells[3,0] := ' Кол-во'; Cells[4,0] := ' Сумма'; for i:=l to 10 do Cells[0,i] := ' '+IntToStr(i); end; end; // щелчок на кнопке Печать procedure TForml.Button2Click(Sender: TObject); const LEFT_MARGIN =2; // отступ слева 2 см TOP_MARGIN = 2; // отступ сверху 2 см var dpix, dpiY : integer; // разрешение принтера по X и У кх,ку: real; // коэф. пересчета координат экрана // в координаты принтера по X и У // таблица р: array[0..4] of integer; // позиции колонок xl,yl,x2,y2: integer; // границы таблицы рх,ру: integer; // указатель точки вывода i,j: integer; « begin ( Разрешение экрана и принтера разное, поэтому, чтобы добиться соответствия размеров изображения на экране и принтере, координаты точек экрана надо преобразовать в координаты принтера, домножить на коэф., значение которого зависит от разрешения принтера. Например, если разрешение принтера 300 dpi, то значение коэффициента равно 3.125, т. к. разрешение экрана — 96 dpi. ) // функция GetDeviceCaps позволяет получить характеристики // устройства. LOGPIXELSX — кол-во пикселов на дюйм по X dpiX := GetDeviceCaps(Printer.handle,LOGPIXELSX); dpiY := GetDeviceCaps(Printer.handle,LOGPIXELSY); kx := dpiX / Screen.PixelsPerlnch; ky := dpiY / Screen.PixelsPerlnch; px := Round(LEFT_MARGIN / 2.54 * dpiX); py := Round(TOP_MARGIN / 2.54 * dpiY); // вычислим "принтерные" координаты колонок таблицы р[0] := рх; for i: =1 to 4 do begin p[i) := p[i-l] + Round(StringGridl.ColWidths[i-l]* kx) ; end; with Printer do begin BeginDoc; // открыть печать // заголовок таблицы Canvas.Font.Name := Editl.Font.Name; Canvas.Font.Size := Editl.Font.Size; Canvas.TextOut(px,py,Editl.Text) ; // таблица — содержимое StringGridl РУ := РУ+ Round(Editl.Font.Size * 2 * ky) ; xl := px; yl := py; // левый верхний угол таблицы Canvas.Font.Name := StringGridl.Font.Name; Canvas.Font.Size := StringGridl.Font.Size; x2 := p[4] + Round(StringGridl.ColWidths[4]* kx); y2 := py + Round(StringGridl.RowCount * StringGridl.RowHeights[1] * ky); for j:=0 to StringGridl.RowCount do begin // строки таблицы for i:=0 to StringGridl.ColCount do begin Canvas.TextOut(P[i],py,StringGridl.Cells[i,j]); // горизонтальная линия Canvas.MoveTo(p[0],py); Canvas.LineTo(x2,py); end; py:=py+ Round(StringGridl.RowHeights[j]* ky); end; // вертикальные линии for i:=0 to StringGridl.ColCount -1 do begin Canvas.MoveTo(p[i], yl) ; Canvas.LineTo(p[i],y2); end; Canvas.MoveTo(x2,у1); Canvas.LineTo(x2,y2); EndDoc; // закрыть печать end; end; end.