Студопедия  
Главная страница | Контакты | Случайная страница

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатика
ИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханика
ОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторика
СоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансы
ХимияЧерчениеЭкологияЭкономикаЭлектроника

Листинг 10.6. Слайд-проектор

Читайте также:
  1. Листинг 12.2. Использование рекурсивной функции
  2. Листинг 12.3. Программа поиск файлов
  3. Листинг 12.4. Кривая Гильберта
  4. Листинг 12.5. Поиск маршрута
  5. Листинг 6.8. Модуль программиста
  6. Листинг 8.1. Добавление записей в файл
  7. Листинг 8.2. Чтение записей из файла
  8. Листинг 8.4. Добавление элемента в начало динамического списка
  9. Листинг 8.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 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 передаются:

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




Дата добавления: 2015-02-16; просмотров: 21 | Поможем написать вашу работу | Нарушение авторских прав




lektsii.net - Лекции.Нет - 2014-2024 год. (0.009 сек.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав