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

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

Листинг 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. Удаление узла из списка

unitshpic_;

Interface

Uses

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

Forms,Dialogs, ExtCtrls, StdCtrls, Menu

Type

TForm1 = class(TForm)

Image1: ТImage;

Button1: TButton;

procedureFormActivate(Sender: TObject);

procedureButton1Click(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}

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

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

ProcedureScaleImage;

Var

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

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

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

Begin

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

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

pw := Form1.Image1.Picture.Width;

ph := Form1.Image1.Picture.Height;

ifpw > iw // ширина иллюстрации больше ширины компонента Image

thenscaleX := iw/pw // нужно масштабировать

elsescaleX := 1;

if ph > ih // высота иллюстрации больше высоты компонента

then scaleY := ih/ph // нужно масштабировать

elsescaleY := 1;

// выберем наименьший коэффициент

if scaleX < scaleY

thenscale := scaleX

elsescale := scaleY;

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

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

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

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

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

end;

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

procedureFirstPicture;

Var

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

Begin

aPath := 'f:\temp\';

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

if r = 0then

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;

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

ProcedureNextPicture();

Var

r : integer;

Begin

aFile := aPath + aSearchRec.Name;

Forml.Image1.Picture.LoadFromFile(aFile);

ScaleImage;

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

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

ifr<>0

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

Forml.Button1.Enabled := False;

end;

procedureTForm1.FormActivate(Sender: TObject);

Begin

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

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

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

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

iw := Image1.Width;

in := Image1.Height;

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

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

end;

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

procedureTForm1.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; просмотров: 4 | Нарушение авторских прав




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