Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Примеры и задачи.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
3.66 Mб
Скачать

Часть 1 I. 104

примеры и задачи

105

Implementation

{$R *.DFM} uses

jpeg; // чтобы иметь возможность просмотра // /jp ~ иллюстраций

var

aSearchRec : TSearchRec;

aPath: String[128]; // каталог, в котором находятся иллюстрации

aFile: String[128]; // файл иллюстрации

aMask: String[5]; //расширение файла иллюстрации

n: integer = 0;

procedure TForml.FormCreate(Sender: TObject); begin

Imagel.AutoSize := False;

Imagel.Stretch := True; // разрешим масштабирование

// запомним первоначальный размер области вывода иллюстрациЛ iw := Imagel.Width; in := imagel.Height;

Buttonl.Enabled := False; // сделаем недоступной

// кнопку Дальше

FirstPicture; // вывести первую иллюстрацию end;

procedure TForml.EditlKeyPress(Sender: TObject; var Key: Char) begin

if Key = #13 then

i

if DirectoryExists(Editl.Text) then FirstPicture else ShowMessage('Каталог '+ Editl.Text +' указан неверно.')/' end;

// вывести первую иллюстрацию procedure TForml.FirstPicture; var

r : integer; // результат поиска файла begin

aPath := Edit1.Text;

if aPath [Length (aPath) ] <> 'V

then aPath := aPath + 'V; if RadioButtonl.Checked

then aMask := '*.bmp' else aMask := '*.jpg';

r := FindFirst(aPath + aMask, faAnyFile, aSearchRec); if r = 0 then begin

aFile := aPath + aSearchRec.Name;

Imagel.Picture.LoadFromFile(aFile) ; // загрузить

// иллюстрацию

Scalelmage;

r := FindNext(aSearchRec); // найти следующий файл if г = 0 then // еще есть файлы иллюстраций Buttonl.Enabled := True;

end;

end;

// вывести следующую иллюстрацию Procedure TForml.NextPicture(); var

r : integer; begin

aFile := aPath + aSearchRec.Name;

Imagel.Picture.LoadFromFile(aFile);

Scalelmage;

// подготовим вывод след. иллюстрации

г := FindNext(aSearchRec); // найти следующий файл

if r о 0

then // больше нет иллюстраций

Buttonl.Enabled := False; end;

// щелчок на кнопке Дальше

procedure TForml.ButtonlClick(Sender: TObject);

begin

NextPicture; end;

// изменение размера области вывода иллюстрации пропорционально // размеру иллюстрации Procedure Tforml.Scalelmage;

106

Часть

Примеры и задачи

107

: integer; // размер иллюстрации scaleY : real; // масштаб по X и Y real; // масштаб

var

pw, ph scaleX, scale : begin

// иллюстрация уже загружена // получим ее размеры pw := Imagel.Picture.Width; ph := Imagel.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;

// изменим размер области вывода иллюстрации Imagel.Height := Round(Imagel.Picture.Height*scale); Imagel.Width := Round(Imagel.Picture.Width*scale); // т. к. Strech = True и размер области пропорционален // размеру картинки, то картинка масштабируется // без искажений end;

// выбор ВМР-формата

procedure TForml.RadioButtonlClick(Sender: TObject);

begin

FirstPicture; end;

// выбор JPG-формата

procedure TForml.RadioButton2Click(Sender: TObject);

begin

FirstPicture; end;

end.

41. Напишите программу, диалоговое окно которой имеет фо­новый рисунок, загружаемый из файла (рис. 1.41). Если размер рисунка меньше размера окна, то фоновый рисунок должен быть составлен по принципу кафельной плитки. В качестве фонового использовать один из стандартных рисунков Windows, например, находящийся в файле Колечки.Ьтр или Пузырьки.Ьтр.

Рис. 1.41. Окно с фоновым рисунком

implementation

var

Back : TBitmap; // фоновая картинка

{$R *.dfm}

procedure TForml.FormCreate(Sender: TObject); begin

Back := TBitmap.Create;

// Back.LoadFromResourceName (HInstance, 'PUZ'j ;

Back.LoadFromFile('пузырьки1.bmp'); // загрузить картинку

end;

Procedure TForml.FormPaint(Sender: TObj ect); var

x,y: integer; // левый верхний угол картинки

108

Част

Примеры и задачи

109

begin

х:=0; у:=0;

while у < Forml. Height do begin

while x < Forml.Width do begin forml.Canvas.Draw(x,y,Back); x:=x+Back.Width; end; x:=0;

у:=y+Back.Height; end; end;

end.

Мультимедиа Общие замечания

Приступая к решению задач этого раздела, необходимо вепс нить:

• Работу с анимацией и звуком обеспечивают компонеш

Animate И MediaPlayer.

  • Компонент Animate позволяет воспроизвести только щ стую, не сопровождаемую звуком анимацию.

  • Компонент MediaPlayer позволяет воспроизводить анимацию и видео.

42. Напишите программу, в главном окне которой, сразу пос появления окна, воспроизводится не сопровождаемая звуке анимация, например рекламный ролик. Анимация должна вс производиться один раз. На рис. 1.42 приведена форма программ!

procedure TForml.FormCreate(Sender: TObject); begin try

Animatel.FileName := 'Delphi.avi'; Animatel.Play(0,Animatel.FrameCount,1);

except

on Exception do begin Labell.Caption :=

'Ошибка доступа к файлу ' + Animatel.FileName + '. Файл не найден или анимация' 'сопровождается звуком.'

exit;

end; end; end;

// щелчок на кнопке Ok

procedure TForml.BitBtnlClick(Sender: TObject);

begin

Forml.Close; end;

Animatel

Рис. 1.42. Форма программы Анимация

43. Напишите программу, в диалоговом окне которой в резуль­тате щелчка на командной кнопке выводится сопровождаемая звуком анимация — содержимое AVI-файла. Рекомендуемый вид формы приведен на рис. 1.43.

Panel!

Рис. 1.43. Компонент Panel 1 используется в качестве экрана для отображения анимации

110

Част

Примеры и задачи

111

( Отображение сопровождаемой звуком анимации при помоши компонента MediaPlayer }

unit UsMP_; interface

uses

Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, MPlayer, StdCtrls, ExtCtrls;

type

TForml = class(TForm)

MediaPlayerl: TMediaPlayer; // универсальный проигрыватель Panell: TPanel; // панель, на которую выводится анимация^ ButtonI: TButton; // кнопка Ok

Labell: TLabel;

procedure ButtonlClick(Sender: TObject);

procedure FormCreate(Sender: TObject); private

{ Private declarations } public

/ Public declarations } end;

var

Forml: TForml;