АкушерствоАнатомияАнестезиологияВакцинопрофилактикаВалеологияВетеринарияГигиенаЗаболеванияИммунологияКардиологияНеврологияНефрологияОнкологияОториноларингологияОфтальмологияПаразитологияПедиатрияПервая помощьПсихиатрияПульмонологияРеанимацияРевматологияСтоматологияТерапияТоксикологияТравматологияУрологияФармакологияФармацевтикаФизиотерапияФтизиатрияХирургияЭндокринологияЭпидемиология

Листинг 10.6. Слайд-проектор

Прочитайте:
  1. Листинг 10.1. Стили заполнения областей
  2. Листинг 10.10. Летящий самолет
  3. Листинг 10.2. Оси координат и оцифрованная сетка
  4. Листинг 10.4. Вычерчивание замкнутого контура (звезды) в точке нажатия кнопки мыши
  5. Листинг 10.7. Использование битовых образов
  6. Листинг 10.8. Движущаяся окружность
  7. Листинг 10.9. Кораблик
  8. Листинг 11.1. Использование компонента Animate
  9. Листинг 11.2. Программа Звуки Microsoft Windows

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.


Дата добавления: 2015-09-18 | Просмотры: 472 | Нарушение авторских прав



1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 |



При использовании материала ссылка на сайт medlec.org обязательна! (0.005 сек.)