Вывод
иллюстраций
Наиболее просто вывести
иллюстрацию, которая находится в файле с расширением bmp, jpg или ico, можно
при помощи компонента image, значок которого находится на вкладке Additional
палитры (рис. 10.11).
Рис. 10.11. Значок
компонента Image
В табл. 10.8 перечислены
основные свойства компонента image.
Таблица 10.8.
Свойства компонента image
Свойство |
Определяет |
||
Picture Width, Height AutoSize Strech Visible |
Иллюстрацию, которая отображается
в поле компонента Размер компонента. Если
размер компонента меньше размера иллюстрации, и значение свойств AutoSize
и strech равно False, то отображается часть иллюстрации Признак автоматического
изменения размера компонента в соответствии с реальным размером иллюстрации Признак автоматического
масштабирования иллюстрации в соответствии с реальным размером компонента.
Чтобы было выполнено масштабирование, значение свойства AutoSize должно
быть False Отображается ли компонент,
и, соответственно, иллюстрация, на поверхности формы |
||
Иллюстрацию, которая
будет выведена в поле компонента 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 передаются:
Если в указанном при вызове функции FindFirst каталоге есть хотя бы один BMP-файл, значение функции будет равно нулю. В этом случае метод LoadFromFiie загружает файл иллюстрации, после чего вызывается функция scaieimage, которая устанавливает размер компонента пропорционально размеру иллюстрации. Размер загруженной иллюстрации можно получить, обратившись к свойствам Form1.Image1.Picture.Width и Form1.Шmage1.Picture.Height, значения которых не зависят от размера компонента Image.