Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Задание на Дельфи.doc
Скачиваний:
7
Добавлен:
01.05.2025
Размер:
1 Мб
Скачать
☆

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.