Помощничек
Главная | Обратная связь


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

Лістинг 10.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);

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

// зміна розміру області виводу ілюстрації

// пропорційно розміру ілюстрації

ProcedureScalelmage;

Var

pw, ph : integer; // розмір ілюстрації

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

scale : real; // загальний масштаб

Begin

// ілюстрація вже завантажена

// одержимо її розміри

pw := Form1.Image1.Picture.Width;

ph := Form1.Image1.Picture.Height;

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

thenscale := iw/pw // потрібно масштабувати

elsescale := 1;

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

then scale := ih/ph // потрібно масштабувати

elsescale := 1;

// виберемо найменший коефіцієнт

if scaleX < scaleY

thenscale := scaleX

elsescale := scale;

// змінимо розмір області виводу ілюстрації

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 м = 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;

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

ProcedureNextPicture();

var

r : integer;

Begin

aFile := aPath + aSearchRec.Name;

Forml.Image1.Picture.LoadFromFile(aFile);

Scalelmage;

// підготуємо висновок наступної ілюстрації

r := FindNext(aSearchRec); // знайти наступний файл

ifr<>0

then// більше немає ілюстрацій

Forml.Buttonl.Enabled := False;

end;

procedureTForml.FormActivate(Sender: TObject);

Begin

Image1.AutoSize := False; // заборона автозміни розміру компонента

Image1.Stretch := True; // дозвіл на масштабування

// запам'ятаємо первісний розмір області виводу ілюстрації

iw := Imagel.Width;

in := imagel.Height;

Button1.Enabled := False; // зробимо недоступної кнопку Далі

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

end;

//щиглик на кнопці Далі

procedureTForm1.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.

Бітові образи

 

При роботі з графікою зручно використовувати об'єкти типу TBitMap (бітовий образ). Бітовий образ являє собою, що знаходиться в пам'яті комп'ютера, і, отже, невидиму графічну поверхню, на якій програма може сформувати зображення. Зміст бітового образа (картинка) легко і, що особливо важливо, швидко може бути виведене на поверхню чи форми області висновку ілюстрації (image). Тому в програмах бітові образи звичайно використовуються для збереження невеликих зображень, наприклад, картинок командних кнопок.

Завантажити в бітовий образ потрібну картинку можна за допомогою методу LoadFromFlie, указавши як параметр ім'я BMP-файлу, у якому знаходиться потрібна ілюстрація.

Наприклад, якщо в програмі оголошена перемінна pic типу TBitMap, те після виконання інструкції

pic.LoadFromFiie('с:\images\aplane.bmp')

бітовий образ pic буде містити зображення літака.

Вивести вміст бітового образа (картинку) на поверхню чи форми області висновку ілюстрації можна шляхом застосування методу Draw до відповідного властивості поверхні (canvas). Наприклад, інструкція




©2015 studopedya.ru Все права принадлежат авторам размещенных материалов.