Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Глава 10.doc
Скачиваний:
1
Добавлен:
01.04.2025
Размер:
409 Кб
Скачать
☆

Interface

uses

Windows, Messages, SysUtils, Classes, Graphics, Controls,

Forms,Dialogs, ExtCtrls, StdCtrls, Menu

type

TForm1 = class(TForm)

Image1: ТImage;

Button1: TButton;

procedure FormActivate(Sender: TObject);

procedure Button1Click(Sender: TObject);

private { Private declarations }

public { Public declarations }

end;

var

Form1: TForm1;

aSearchRec : TSearchRec;

aPath : String; // каталог, в котором находятся иллюстрации

aFile : String; // файл иллюстрации

iw,ih: integer; // первоначальный размер компонента Image

Implementation

{$R *.DFM}

// изменение размера области вывода иллюстрации

// пропорционально размеру иллюстрации

Procedure ScaleImage;

var

pw, ph : integer; // размер иллюстрации

scaleX, scaleY : real; // масштаб по Х и Y

scale : real; // общий масштаб

begin

// иллюстрация уже загружена

// получим ее размеры

pw := Form1.Image1.Picture.Width;

ph := Form1.Image1.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;

// изменим размер области вывода иллюстрации

Form1.Image1.Height := Round(Form1.Image1.Picture.Height*scale)

Form1.Image1.Width := Round(Form1.Image1.Picture.Width*scale);

// т. к. Strech = True и размер области пропорционален

// размеру картинки, то картинка масштабируется без искажений

end;

// вывести первую иллюстрацию

procedure FirstPicture;

var

r : integer; // результат поиска файла

begin

aPath := 'f:\temp\';

r := FindFirst(aPath+'*.bmp',faAnyFile,aSearchRec);

if r = 0 then

begin // в указанном каталоге есть bmp-файл

aFile := aPath + aSearchRec.Name;

Form1.Image1.Picture.LoadFromFile(aFile); // загрузить

// иллюстрацию

ScaleImage; //-установить размер компонентаImage

r := FindNext(aSearchRec); // найти следующий файл

if r = 0 then // еще есть файлы иллюстраций

Form1.Button1.Enabled := True;

end;

end;

// вывести следующую иллюстрацию

Procedure NextPicture();

var

r : integer;

begin

aFile := aPath + aSearchRec.Name;

Forml.Image1.Picture.LoadFromFile(aFile);

ScaleImage;

// подготовим вывод следующей иллюстрации

r := FindNext(aSearchRec); // найти следующий файл

if r<>0

then // больше нет иллюстраций

Forml.Button1.Enabled := False;

end;

procedure TForm1.FormActivate(Sender: TObject);

begin

Image1.AutoSize:=False; //запрет автоизменения размера

//компонента

Image1.Stretch := True; // разрешим масштабирование

// запомним первоначальный размер области вывода иллюстрации

iw := Image1.Width;

in := Image1.Height;

Button1.Enabled := False; // сделаем недоступной кнопку Дальше

FirstPicture; // вывести первую иллюстрацию

end;

//щелчок на кнопке Дальше

procedure TForm1.Button1Click(Sender: TObject);

begin

NextPicture;

end;

end.

Программа выполняет масштабирование выводимых иллюстраций без искажения, чего нельзя добиться простым присвоением значения True свойству strech. Загрузку и вывод первой и остальных иллюстраций выполняют соответственно процедуры FirstPicture и NextPicture. Процедура FirstPicture использует функцию FindFirst для того, чтобы получить имя первого BMP-файла. В качестве параметров функции FindFirst передаются:

  • имя каталога, в котором должны находиться иллюстрации;

  • структура asearchRec, поле Name которой, в случае успеха, будет содержать имя файла, удовлетворяющего критерию поиска;

  • маска файла иллюстрации.

Если в указанном при вызове функции FindFirst каталоге есть хотя бы один BMP-файл, значение функции будет равно нулю. В этом случае метод LoadFromFiie загружает файл иллюстрации, после чего вызывается функция ScaleImage, которая устанавливает размер компонента пропорционально размеру иллюстрации. Размер загруженной иллюстрации можно получить, обратившись к свойствам Form1.Image1.Picture.Width и Form1.Image1.Picture.Height, значения которых не зависят от размера компонента Image.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]