Листинг 10.6. Слайд-проектор
unit shpic_;
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 ButtonlClick(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 Scalelmage;
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 г = 0 then
begin // в указанном каталоге есть bmp-файл
aFile:= aPath + aSearchRec.Name;
Form1.Image1.Picture.LoadFromFile(aFile); // загрузить
// иллюстрацию
Scalelmage; //-установить размер компонента
Image r:= FindNext(aSearchRec); // найти следующий файл
if r = 0 then // еще есть файлы иллюстраций
Forml.Button1.Enabled:= True;
end;
end;
// вывести следующую иллюстрацию
Procedure NextPicture();
var
r: integer;
Begin
aFile:= aPath + aSearchRec.Name;
Forml.Image1.Picture.LoadFromFile(aFile);
Scalelmage;
// подготовим вывод следующей иллюстрации
r:= FindNext(aSearchRec); // найти следующий файл
if r<>0
then // больше нет иллюстраций
Forml.Buttonl.Enabled:= False;
end;
procedure TForml.FormActivate(Sender: TObject);
Begin
Image1.AutoSize:= False; // запрет автоизменения размера компонента
Image1.Stretch:= True; // разрешим масштабирование
// запомним первоначальный размер области вывода иллюстрации
iw:= Imagel.Width;
in:= imagel.Height;
Button1.Enabled:= False; // сделаем недоступной кнопку Дальше
FirstPicture; // вывести первую иллюстрацию
end;
//щелчок на кнопке Дальше
procedure TForm1.Button1Click(Sender: TObject);
Begin
NextPicture;
end;
End.
Программа выполняет масштабирование выводимых иллюстраций без искажения, чего нельзя добиться простым присвоением значения True свойству strech. Загрузку и вывод первой и остальных иллюстраций выполняют соответственно процедуры FirstPicture и NextPicture. Процедура FrirstPicture использует функцию FindFirst для того, чтобы получить имя первого BMP-файла. В качестве параметров функции FindFirst передаются:
- имя каталога, в котором должны находиться иллюстрации;
- структура asearchRec, поле Name которой, в случае успеха, будет содержать имя файла, удовлетворяющего критерию поиска;
- маска файла иллюстрации.
Если в указанном при вызове функции FindFirst каталоге есть хотя бы один BMP-файл, значение функции будет равно нулю. В этом случае метод LoadFromFiie загружает файл иллюстрации, после чего вызывается функция scaieimage, которая устанавливает размер компонента пропорционально размеру иллюстрации. Размер загруженной иллюстрации можно получить, обратившись к свойствамForm1.Image1.Picture.Width и Form1.Шmage1.Picture.Height, значения которых не зависят от размера компонента Image.
Дата добавления: 2015-09-18 | Просмотры: 472 | Нарушение авторских прав
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 |
|