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

Interface

Рис. 1.50. Форма программы МРЗ Player

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics,

Controls, Forms, Dialogs, StdCtrls, Buttons,

ExtCtrls, MPlayer, ComCtrls,

MMSYSTEM, FileCtrl; // эти ссылки вставлены вручную type

TForml = class(TForm) // кнопки

SpeedButtonl: TSpeedButton; // Предыдущая композиция SpeedButton2: TSpeedButton; // Воспроизведение/Стоп SpeedButton3: TSpeedButton; // Следующая композиция SpeedButton4: TSpeedButton; // Выбор папки

ListBoxl: TListBox; // Список композиций (МРЗ-файлов) MediaPlayerl: TtyediaPlayer; // ыедиаплеер TrackBarl: TTrackBar; //регулятор громкости

Timerl: TTimer; Labell: TLabel; Label2: TLabel;

Shapel: TShape; // рамка вокруг кнопок

procedure FormCreate(Sender: TObject); procedure ListBoxlClick(Sender: TObject);

procedure procedure procedure procedure procedure procedure

135

SpeedButton2Click(Sender: TObject); SpeedButtonlClick(Sender: TObject); SpeedButton3Click(Sender: TObject); TrackBarIChange(Sender: TObj ect); TimerITimer(Sender: TObj ect); SpeedButton4Click(Sender: TObject);

// эти объявления вставлены сюда вручную

procedure Play; // воспроизведение

procedure PlayList(Path: string); // формирует список

// МРЗ-файлов private

{ Private declarations } public

{ Public declarations } end;

var

Forml: TForml;

Implementation

{$R *.dfm}

var

SoundPath: string[255];

min,sec: integer; // время воспроизведения volume: LongWord; // старшее слово правый канал, /■/ младшее — левый.

// формирует список МРЗ-файлов procedure TForml.PlayList(Path: string); var

lpBuf: PChar; // указатель на nul-terminated-строку sWinDir: string[128]; // обычная Паскаль-строка

SearchRec: TSearchRec; // структура SearchRec содержит

// информацию о файле, удовлетворяющем // условию поиска

begin

ListBoxl.Clear;

// сформировать список МРЗ-файлов

if FindFirst(Path + '*.mp3', faAnyFile, SearchRec) = 0 then

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

begin

// в каталоге есть файл с расширением wav

// добавим имя этого файла в список

ListBoxl.Items.Add(SearchRec.Name);

// пока в каталоге есть другие файлы с расширением wav

while (FindNext(SearchRec) = 0) do

ListBoxl.Items.Add(SearchRec.Name); end;

ListBoxl.Itemlndex := 0; end;

procedure TForml.FormCreate(Sender: TObject); begin

PlayList('');

ListBoxl.Itemlndex := 0;

Labell.Caption:=ListBoxl.Items[ListBoxl.itemlndex];

TrackBar1.Position := 7;

// старшее слово переменной volume — правый канал, // младшее — левый

volume := (TrackBarl.Position - TrackBarl.Max+1)* 6500; volume := volume + (volume shl 16) ;

waveOutSetVolume(WAVE_MAPPER,volume); //уровень сигнала end;

// щелчок на названии произведения

procedure TForml.ListBoxlClick(Sender: TObject);

begin

// вывести в поле метки Labell имя выбранного файла if not SpeedButton2.Down

then SpeedButton2.Down := True;

Labell.Caption:=ListBoxl.Items[ListBoxl.itemlndex]; Play; end;

// щелчок на кнопке Воспроизведение

procedure TForml.SpeedButton2Click(Sender: TObject);

begin

if SpeedButton2.Down then

// пользователь нажал кнопку

// начать воспроизведение

Play

136

else

// если кнопка Воспроизведение нажата, // то повторное нажатие останавливает // воспроизведение begin

MediaPlayerl.Stop;

Timer1.Enabled := False;

SpeedButton2.Down := False;

SPeedButton2.Hint := 'Play'; end; end;

// кнопка К предыдущей

procedure TForml.SpeedButtonlClick(Sender: TObject);

begin

if ListBoxl.Itemlndex > 0 then

ListBoxl.Itemlndex := ListBoxl.Itemlndex - 1; Play; end;

// кнопка К следукщей

procedure TForml.SpeedButton3Click(Sender: TObject);

begin

if ListBoxl.Itemlndex < ListBoxl.Count then

ListBoxl.Itemlndex := ListBoxl.Itemlndex + 1; Play; end;

// пользователь изменил положение

// регулятора громкости

procedure TForml.TrackBarlChange(Sender: TObject);

begin

volume := 6500* (TrackBarl.Max - TrackBarl.Position); volume := volume + (volume shl 16) ; waveOutSetVolume(WAVE_MAPPER,volume); end;

// воспроизвести композицию, // название которой выделено // в списке ListBoxl procedure TForml.Play;

Части

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

begin

Timerl.Enabled := False;

Labell.Caption:=ListBoxl.Items[ListBoxl.itemlndex];

MediaPlayerl.FileName := SoundPath +

ListBoxl.Items[ListBoxl.itemlndex],

try

Mediaplayerl.Open; except

on EMClDeviceError do begin

ShowMessage('Ошибка обращения к файлу '+

ListBoxl.Items[ListBoxl.itemlndex]); SpeedButton2.Down := False; exit; end; end;

MediaPlayerl.Play; min :=0; sec :=0; Timerl.Enabled := True; SpeedButton2.Hint := 'Stop1; end;

// сигнал от таймера

procedure TForml.TimerlTimer(Sender: TObject);

begin

// изменить счетчик времени if sec < 59 then inc(sec) else begin sec :=0; inc(min); end;

// вывести время воспроизведения Label2.Caption := IntToStr(min)+':'; if sec < 10

then Label2.Caption :=

Label2.Caption +'0'+ IntToStr(sec) else Label2.Caption :=

Label2.Caption + IntToStr(sec);

137

138

Час

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

139

// если воспроизведение текущей композиции // не завершено

if MediaPlayerl.Position < MediaPlayerl.Length then exit;

// воспроизведение текущей композиции

// закончено

Timerl.Enabled : = False; // остановить таймер

MediaPlayerl.Stop; // остановить плеер

if ListBoxl.Itemlndex < ListBoxl.Count // список не исчерпан then begin

ListBoxl.Itemlndex := ListBoxl.Itemlndex + 1; Play;

end

end;

Файлы

Общие замечания

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

  • При выполнении файловых операций возможны ошибки.

  • Для обработки ошибок выполнения файловых операций

НУЖНО ИСПОЛЬЗОВаТЬ ИНСТРУКЦИЮ try ... except.

50. Напишите программу, которая в поле Memo выводит содер­жимое текстового файла. Рекомендуемый вид формы приведен на рис. 1.51.

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

// выбрать папку, в которой находятся МРЗ-файлы

procedure TForml.SpeedButton4Click(Sender: TObject);

var

Root: string; // корневой каталог pwRoot : PWideChar; Dir: string; begin

Root : = ''; // корневой каталогпапка Рабочий стол GetMem(pwRoot, (Length(Root)+1) * 2); pwRoot := StringToWideChar(Root,pwRoot,MAX_PATH*2); if not SelectDirectory('Выберите папку', pwRoot, Dir) then Dir :='■ else Dir := Dir+'\' ;

// каталог, в котором находятся МРЗ-файлы выбран SoundPath : = Dir; PlayList(SoundPath); end;

end.

Р ис. 1.51. Форма программы Чтение файла