Programming: Delphi
Иллюстрированный самоучитель по Delphi 7 для начинающих
Вывод иллюстраций
Наиболее просто вывести
иллюстрацию, которая находится в файле с расширением 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 передаются:
- имя каталога, в котором должны
находиться иллюстрации;
- структура asearchRec, поле Name
которой, в случае успеха, будет содержать имя файла, удовлетворяющего критерию
поиска;
- маска файла иллюстрации.
Если в указанном при
вызове функции FindFirst каталоге есть хотя бы один BMP-файл, значение функции
будет равно нулю. В этом случае метод LoadFromFiie загружает файл иллюстрации,
после чего вызывается функция scaieimage, которая устанавливает размер компонента
пропорционально размеру иллюстрации. Размер загруженной иллюстрации можно получить,
обратившись к свойствам Form1.Image1.Picture.Width и Form1.Шmage1.Picture.Height,
значения которых не зависят от размера компонента Image.
Назад | Оглавление | Вперёд
При перепечатке любого материала
с сайта, видимая ссылка на источник www.warayg.narod.ru
и все имена, ссылки авторов обязательны.
© 2005
|