Вивід ілюстрацій

Найбільш просто вивести ілюстрацію, яка знаходиться у файлі з розширенням bmp, jpg або ico, можна за допомогою компонента image, значок якого знаходиться на вкладці Additional палітри (рис. 10.11).

Рис. 10.11. Значок компонента Image

У табл. 10.8 перераховані основні властивості компонента image.

Таблиця 10.8. Властивості компонента image

Властивість Визначає
Picture Ілюстрацію, яка відображається в поле компонента
 Width, Height Розмір компонента. якщо розмір компонента менше розміру ілюстрації, і значення властивостей AutoSize і strech одно False, то відображається частина ілюстрації
AutoSize Ознака автоматичного зміни розміру компонента відповідно до реального розміром ілюстрації
Strech Ознака автоматичного масштабування ілюстрації відповідно до реального розміром компонента. Щоб було виконано масштабування, значення властивості AutoSize має бути False
Visible  Чи відображається компонент, і, відповідно, ілюстрація, на поверхні форми

 

Ілюстрацію, яка буде виведена в полі компоненту image, можна задати як під час розробки форми додатка, так і під час роботи програми.
Під час розробки форми ілюстрація задається установкою значення властивості picture шляхом вибору файлу ілюстрації в стандартному діалоговому вікні, яке з’являється в результаті клацання на командній кнопці Load вікна Picture Editor (рис. 10.12). Щоб запустити Image Editor, потрібно у вікні Object Inspector вибрати властивість Picture і клацнути на кнопці з трьома крапками.
Якщо розмір ілюстрації більше розміру компонента, то властивості strech потрібно присвоїти значення True і встановити значення властивостей width і Height пропорційно реальним розмірам ілюстрації.
Щоб вивести ілюстрацію в поле компонента image під час роботи програми, потрібно застосувати метод LoadFromFile до властивості Picture, вказавши в якості параметра ім’я файлу ілюстрації. наприклад, інструкція
Form1.Image1.Picture.LoadFromFile ( ‘e: \ temp \ bart.bmp’)
завантажує ілюстрацію з файлу bart.bmp і виводить її в полі виведення ілюстрації (imagel).
Метод LoadFromFile дозволяє відображати ілюстрації різних графічних форматів: BMP, WMF, JPEG (Файли з розширенням jpg).
Наступна програма, її текст приведений в лістингу 10.6, використовує компонент image для перегляду ілюстрацій, які знаходяться в зазначеному користувачем каталозі. діалогове вікно програми наведено на рис. 10.13.

Рис. 10.12. Вікно Picture Editor

Рис. 10.13. Слайд-проектор

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