Вид окна программы приведен на рис. 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.