Вывод иллюстраций
Наиболее просто вывести иллюстрацию, которая находится в файле с расширением 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.
Источник: http://qo.do.am/index/teorija_po_programirovaniju/0-47 СОДЕРЖАНИЕ Delphi 7 |