
- •Часть 1
- •Implementation
- •Implementation
- •Implementation
- •Часть 1
- •Implementation
- •Implementation
- •Implementation
- •IBplementation
- •Implementation
- •Часть 1
- •Implementation
- •Implementation
- •Implementation
- •Implementation
- •Implementation
- •Interface
- •Часть 1
- •Interface
- •Часть 1 I. 104
- •Implementation
- •Implementation
- •Implementation
- •Часть I
- •Р ис. 1.46. Окно программы Звуки Windows
- •Implementation
- •Interface
- •Implementation
- •Interface
- •Implementation
- •Interface
- •Implementation
- •Interface
- •Implementation
- •Implementation
- •Implementation
- •Implementation
- •Implementation
- •Interface
- •Часть 1
- •168 Част
- •Implementation
- •Часть 1
- •Interface uses
- •Implementation
- •Interface
- •Implementation
- •Часть 1
- •Часть 1 I Примеры и задачи
- •Часть 1 I Примеры и задачи
- •Implementation
- •205 Часть
- •Interface
- •Implementation
- •216 Часть 1
- •Поле т ип Размер Информация
- •Часть 1
- •Implementation
- •Interface
- •Implementation
- •Implementation
- •Часть 2 Таблица 2.2 (окончание)
- •252 Часть 2
- •Часть 2 I Delphi — краткий справочник
- •Часть 2
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
// эти объявления вставлены сюда вручную
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. Форма программы Чтение файла