- •Общие замечания
- •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.
40. Напишите программу, используя которую можно просмот реть иллюстрации, находящиеся в одном из каталогов компью тера. Вид окна программы приведен на рис. 1.40.
[ Просмотр иллюстраций } unit shpic_;interfaceuses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, StdCtrls, Menus; type TForml = class(TForm) Imagel: TImage; // поле вывода иллюстрации Buttonl: TButton; // кнопка Дальше Label1: TLabel; Editl: TEdit; RadioButtonl: TRadioButton; // выбор: BMP - формат RadioButton2: TRadioButton; // выбор: JPG - формат
Рис. 1.40. Окно программы Просмотр иллюстраций
GroupBoxl: TGroupBox; procedure ButtonlClick(Sender: TObject); procedure EditlKeyPress(Sender: TObject; var Key: Char); procedure FormCreate(Sender: TObject); procedure RadioButtonlClick(Sender: TObject); procedure RadioButton2Click(Sender: TObject); // эти объявления вставлены сюда вручную procedure FirstPicture; // выводит первую иллюстрацию procedure NextPicture; // выводит следующую иллюстрацию procedure Scalelmage; // масштабирует картинку private { Private declarations } public ( Public declarations ) end;var Forml: TForml; iw,ih: integer; // первоначальный размер компонента Image implementation{$R *.DFM} uses •jpeg; // чтобы иметь возможность просмотра // ЗРЯ — иллюстрацийvar aSearchRec : TSearchRec;
aPath: String[128]; // каталог, в котором находятся иллюстрации aFile: String[128]; // файл иллюстрации aMask: String[5]; // расширение файла иллюстрации n: integer = 0;procedure TForml.FormCreate(Sender: TObject); begin Imagel.AutoSize := False; Imagel.Stretch := True; // разрешим масштабирование // запомним первоначальный размер области вывода иллюстрации iw := Imagel.Width; * ih : = imagel.Height; Buttonl.Enabled := False; // сделаем недоступной // кнопку Дальше FirstPicture; // вывести первую иллюстрацию end;procedure TForml.EditIKeyPress(Sender: TObject; var Key: Char); begin if Key = #13 then if DirectoryExists(Editl.Text) then FirstPicture else ShowMessage('Каталог '+ Editl.Text +' указан неверно.'); end;// вывести первую иллюстрацию procedure TForml.FirstPicture; var r : integer; // результат поиска файла begin aPath := Editl.Text;
if aPath [Length (aPath) ] о 'V then aPath := aPath + 'V; if RadioButtonl.Checked then aMask := '*.bmp' else aMask := '*-jpg'; r := FindFirst(aPath + aMask, faAnyFile, aSearchRec); if r = 0 then begin aFile := aPath + aSearchRec.Name; Imagel.Picture.LoadFromFile(aFile); // загрузить // иллюстрацию Scalelmage; r := FindNext(aSearchRec); // найти следующий файл if г = 0 then // еще есть файлы иллюстраций Buttonl.Enabled := True; end; end;// вывести следующую иллюстрацию Procedure TForml.NextPicture () ; var r : integer; begin aFile := aPath + aSearchRec.Name; Imagel.Picture.LoadFromFile(aFile) ; ScaleImage; // подготовим вывод след. иллюстрации г := FindNext(aSearchRec) ; // найти следующий файл if г о О then // больше нет иллюстраций Buttonl.Enabled := False; end;// щелчок на кнопке Дальше procedure TForml.ButtonlClick(Sender: TObject); begin NextPicture; end;// изменение размера области вывода иллюстрации пропорционально // размеру иллюстрации Procedure Tforml.Scalelmage; var pw, ph : integer; // размер иллюстрации scaleX, scaleY : real; // масштаб по Х и Y scale : real; // масштаб begin' // иллюстрация уже загружена // получим ее размеры pw := Imagel.Picture.Width; ph := Imagel.Picture.Height; if pw > iw // ширина иллюстрации больше ширины компонента // Image then scaleX := iw/pw // нужно масштабировать else scaleX := 1; if ph > ih // высота иллюстр. больше высоты компонента then scaleY := ih/ph // нужно масштабировать else scaleY := 1; // выберем наименьший коэффициент if scaleX < scaleY then scale := scaleX else scale := scaleY; • // изменим размер области вывода иллюстрации Imagel.Height := Round(Imagel.Picture.Height*scale); Imagel.Width : = Round(Imagel.Picture.Width*scale); // т. к. Strech = True и размер области пропорционален // размеру картинки, то картинка масштабируется // без искажений end;,// выбор ВМР-формата procedure TForml.RadioButtonlClick(Sender: TObject); begin FirstPicture; end;// выбор JPG-формата procedure TForml.RadioButton2Click(Sender: TObject); begin FirstPicture; end;end.
41. Напишите программу, диалоговое окно которой имеет фо новый рисунок, загружаемый из файла (рис. 1.41). Если размер рисунка меньше размера окна, то фоновый рисунок должен быть составлен по принципу кафельной плитки. В качестве фонового использовать один из стандартных рисунков Windows, например, находящийся в файле Колечки.bmp или Пузырьки.Ьтр.
Рис. 1.41. Окно с фоновым рисунком
implementationvar Back : TBitmap; // фоновая картинка{$R *.dfm}procedure TForml.ForraCreate(Sender: TObject); begin Back := TBitmap.Create; // Back. LoadFromResourceName (HInstance, 'PUZ'); Back.LoadFromFile ('пузырьки!..bmp') ; // загрузить картинкуend;procedure TForml.FormPaint(Sender: TObject); var x,y: integer; // левый верхний угол картинки begin x:=0; y:=0; while у < Forml.Height do begin while x < Forml.Width do begin forml.Canvas.Draw(x,y,Back); x:=x+Back.Width; end; x:=0; у:=y+Back.He ight; end; end;end.
