
- •1. Теоретические основы объектно – ориентированного программирования 5
- •2. Использование системы программирования Delphi для создания Windows-приложений 9
- •3. Лабораторный практикум 27
- •Введение
- •1. Теоретические основы объектно – ориентированного программирования
- •1.1.Объектная модель и ее элементы.
- •1.2.Основные понятия объектно-ориентированного подхода - объект и класс.
- •1.3.Методы построения классов.
- •2. Использование системы программирования Delphi для создания Windows-приложений
- •2.1. Интерфейс интегрированной среды разработки Delphi
- •2.2. Синтаксические правила языка Object Pascal
- •2.3. Создание и структура пользовательских приложений в среде Delphi
- •2.4. Структура модуля (*.Pas)
- •2.5. Создание формы и написание откликов на события
- •1) Компоновка формы и задание свойств компонентов
- •2) Написание отклика на событие
- •2.6. Компиляция и исполнение программы
- •2.7. Ввод и вывод данных. Функции преобразования типов данных
- •3. Лабораторный практикум Лабораторная работа 1. Разработка приложения Калькулятор
- •Лабораторная работа 2. Использование курсоров в приложениях Windows.
- •Лабораторная работа 4. Создание простого текстового редактора.
- •Лабораторная работа 5. Рисование мышью в форме
- •Лабораторная работа 6. Применение графических компонентов
- •Лабораторная работа 7.Создание числовых изображений
- •Лабораторная работа 8. Создание текстурных заливок
- •Лабораторная работа 9. Поддержка справочной системы. Создание всплывающих подсказок.
- •Лабораторная работа 10.Создание видеопроигрывателя
- •Лабораторная работа 12.Создание браузера
- •Лабораторная работа 13. Работа с внешним файлом.
- •Лабораторная работа 14. Работа с базами данных.
- •Лабораторная работа 15. Создание многооконных приложений.
- •Литература Основная литература
- •Дополнительная литература
Лабораторная работа 10.Создание видеопроигрывателя
Задание 1.
В новом проекте на пустую форму нужно поместить одну кнопку (для открытия файлов), один компонент MediaPlayer(System), одну рамку GroupBox(Standard) и один диалог для открытия файлов OpenDialog. В таблице приведены значения, которые необходимо задать всем этим компонентам.
Компонент |
Свойство |
Значение |
Form1 |
Borderlcons |
|
|
biMaximize |
False |
Form1 |
BorderStyle |
bsSingle |
Form1 |
Caption |
Телевизор "СОНЯ" |
Form1 |
Height |
356 |
Form1 |
Width |
351 |
Button1 |
Caption |
Открыть |
Button1 |
Left |
3 |
Button1 |
Тор |
296 |
MediaPlayer1 |
Left |
88 |
MediaPlayer1 |
Тор |
296 |
GroupBox1 |
Caption |
|
GroupBox1 |
Left |
3 |
GroupBox1 |
Тор |
О |
GroupBox1 |
Height |
289 |
GroupBox1 |
Width |
337 |
Форма в режиме
разработки выглядит следующим образом.
Открывать файл будем нажатием на кнопку. При этом файл будет загружаться в MediaPlayer. Запустить видео на проигрывание или остановить можно будет стандартными кнопками на компоненте (в этом примере пусть он остается видимым).
Листинг программы:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, MPlayer;
type
TForm1 = class(TForm)
Button1: TButton;
MediaPlayer1: TMediaPlayer;
GroupBox1: TGroupBox;
OpenDialog1: TOpenDialog;
procedure Button1Click(Sender: TObject);
procedure FormActivate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
//открываем файл
if OpenDialog1.Execute=True then
begin
MediaPlayer1.FileName:=OpenDialog1.FileName;
MediaPlayer1.Open;
end;
end;
procedure TForm1.FormActivate(Sender:TObject);
begin
//назначаем область просмотра видеофайла
MediaPlayer1.Display:=GroupBox1;
end;
end.
После открытия файла необходимо немного подождать, затем нажать клавишу Play. Файлы форматов Wave или Mpeg будут воспроизводится.
Лабораторная работа 11. Создание аудиопроигрывателя
Задание1.
1. Создадим новый проект и поместим на форму компонент MediaPLayer(System). Интерфейс проигрывателя будем разрабатывать сами, поэтому сделаем MediaPLayer невидимым (свойство VisibLe=FaLse).
2. Свойства формы нужно задать в соответствии с таблицей.
Свойство |
Значение |
Borderlcons |
False |
biMaximize |
|
BorderStyle |
bsSingle |
Caption |
Позолоченный граммофон |
Color |
clGray |
Position |
poScreenCenter |
3. На форме установите следующие компоненты: шесть кнопок, четыре этикетки, один таймер и один компонент для открытия файлов - OpenDiaLog. Разместите их, как показано на рисунке.. В режиме разработки программы удобно увеличить размеры формы, чтобы все компоненты поместились на нее. Размеры кнопок - 50 х 25 пикселов (Width и Height соответственно). Точность размещения большого значения не имеет, а влияет только на внешний вид.
Ширина формы (Width) в итоге должна быть равна 309 пикселов, а высота (Height) 109 . Однако в режиме разработки удобнее временно увеличить ширину и высоту формы. В таком случае можно, например, отодвинуть в сторону компоненты, которые не видны.
4. Интерфейс готов, но прежде чем начать писать код, добавим нашему проигрывателю еще одну особенность. Когда пользователь будет подводить указатель мыши к какой-либо кнопке, указатель будет принимать форму руки. Для этого свойство сursor каждой из кнопок нужно поменять с crDefault на crHandPoint. Можно запустить программу на выполнение и посмотреть, что получилось.
5. Перейдем к написанию кода. Сначала инициализируем все необходимое в FormActivate
procedure TForm1.FormActivate(Sender: TObject);
begin
// инициализация этикеток Label
Label1.Font.Color := clGreen;
Label2.Font.Color := clGreen;
Label3.Font.Color := clGreen;
Label4.Font.Color := clGreen;
Label1.Caption := '00:00';
Label3. Caption:= 'no file...';
Label3.Caption:= '00:00';
Label4.Caption := '00:00';
end;
6. Затем поместите на форму компонент OpenDialog1 и присвойте его свойствам следующие значения:
Свойство Значение
Default Ext wav
Options.ofHideReadOnly True
Options.ofFileMustExist True
Options.ofNoReadOnlyReturn True
Title Open File
7. Для того чтобы открыть окно Filter Editor (Редактор фильтра), дважды щелкните на свойстве Filter.
Заполните две первые строки в колонке Filter Name (Имя фильтра) названиями фильтров Wavfiles, а в колонке Filter (Фильтр) введите соответствующие фильтры: *.wav.
Эта процедура выполняется при запуске программы. Содержимое индикаторов устанавливаются в нуль, задается темно-зеленый цвет, благодаря чему в режиме ожидания у нашего проигрывателя, как и у самых популярных программ, индикаторы будут бледнеть.
Здесь также задается фильтр для окна открытия файлов. Чтобы в этом окне не отображались ненужные форматы, допускается только один тип файлов, которые может воспроизводить проигрыватель, - wav.
И затем реализуем возможность открытия звуковых файлов с помощью обработчика нажатия кнопки Buttonl (на которой написано OPEN).
procedure TForm1.Button1Click(Sender: TObject);
//кнопка OPEN
begin
if OpenDialog1.Execute=True then
begin
// открываем файл
MediaPlayer1.FileName := OpenDialog1.FileName;
MediaPlayer1.Open;
// включаем индикаторы
Label1.Font.Color := clLime;
Label2.Font.Color := clLime;
Label3.Font.Color := clLime;
Label4.Font.Color := clLime;
// присваиваем индикаторам значения
Label1.Caption := IntToStr(MediaPlayer1.Position);
Label2.Caption :=MediaPlayer1.FileName;
Label3.Caption := IntToStr(MediaPlayer1.Length);
Label4.Caption := IntToStr(MediaPlayer1.Length-MediaPlayer1.Position);
end;
end;
Практически все содержимое этой процедуры выполняется при условии, что пользователь действительно выбрал какой-то файл. Если он нажал кнопку Отмена в диалоге открытия файлов, то функция OpenDialogl.Execute вернет False, И все, что расположено между begin и end, выполнено не будет.
8. Если запустить программу на выполнение и попробовать открыть какой-нибудь файл, то можно заметить, что значения индикаторов не соответствуют характеристикам открываемого файла. Дело в том, что значения указаны в миллисекундах. Перепишем процедуру так, чтобы отображаемая на индикаторах информация соответствовала действительности, а также вынесем вывод значений на индикаторы отдельную процедуру Output.
procedure TForm1.Button1Click(Sender: TObject);
//кнопка OPEN
begin
if OpenDialog1.Execute=True then
begin
// открываем файл
MediaPlayer1.FileName := OpenDialog1.FileName;
MediaPlayer1.Open;
// включаем индикаторы
Label1.Font.Color := clLime;
Label2.Font.Color := clLime;
Label3.Font.Color := clLime;
Label4.Font.Color := clLime;
// присваиваем индикаторам значения
Output;
end;
end;
10. Теперь создадим еще одну новую функцию MusicToStr, а также процедуру Output, которая преобразует длину файла, текущую позицию или количество оставшегося до конца звучания времени в форму, легкую для восприятия.
Если же получать значения в миллисекундах и переводить их в минуты, то неточностей удастся избежать.
function TForm1.MusicToStr(n: Longint): String;
//процедура преобразует длину файла,
// текущую позицию или количество оставшегося
// до конца звучания времени в St r i ng
// вместо n здесь, соответственно, значение
// переменных pos i t, leng или геmаin
var
s: String;
// рабочая переменная для формирования
// удобочитаемых значений индикаторов
sec: Longint;
min: Longint;
begin
// получаем секунды и минуты из миллисекунд (n)
sec := trunc(n/1000);
min := trunc(sec/60);
sec:= sec - min * 60;
s:= IntToStr(min);
// добавляем строку 0, если секунд меньше десяти
// чтобы получить значение 2: 06, а не 2: 6;
if sec<10 then s:=s + '0'+IntToStr(sec)
else s:= s +' ' + IntToStr(sec);
MusicToStr := s;
end;
На вход функции подается значение в миллисекундах, возвращается готовая для вывода на экран строка с минутами и секундами, разделенными двоеточием.
procedure TForm1.Output;
// вывод значений на индикаторы
var
//длина файла, позиция в файле и оставшееся время
leng, posit, remain: Longint;
begin
// читаем свойства проигрывателя
leng:= MediaPlayer1.Length;
posit := MediaPlayer1.Position;
remain := leng - posit;
// выводим значения индикаторов на экран
Label1.Caption := MusicToStr(posit);
Label2.Caption := MediaPlayer1.FileName;
Label3.Caption := MusicToStr(leng);
Label4.Caption := MusicToStr(remain);
end;
Здесь на экран
выводятся все необходимые значения
(имя, длина файла, сколько времени прошло
с начала проигрывания и сколько
осталось).
procedure TForm1.Button3Click(Sender: TObject);
begin
//кнопка PLAY
begin
if mpCanPlay in MediaPlayer1.Capabilities then
MediaPlayer1.Play;
end;
end;
11. Теперь займемся кнопками STOP и PAUSE.
procedure TForm1.Button4Click(Sender: TObject);
begin
//кнопка STOP
begin
if mpCanPlay in MediaPlayer1.Capabilities then
begin
MediaPlayer1.Stop;
MediaPlayer1.Position := 0;
end;
end;
end;
procedure TForm1.Button6Click(Sender: TObject);
// кнопка PAUSE
begin
if mpCanPlay in MediaPlayer1.Capabilities then
MediaPlayer1.Pause;
end;
12. Для кнопки SТOP пишем точно такой же код, как и дЛЯ PLAY. Единственное отличие втом , что вручную устанавливаем в нуль позицию проигрывания.
С кнопкой PAUSE все предельно просто. Метод Pause компонента MediaPlayer все делает сам.
Теперь разработаем возможность перемотки вперед и назад. Для отладки перемотки нужен относительно большой звуковой файл, потому что в маленьком некуда перематывать.
procedure TForm1.Button5Click(Sender: TObject);
// кнопка перемотки вперед
begin
if mpCanPlay in MediaPlayer1.Capabilities then
begin
if (MediaPlayer1.Position+10000)<=MediaPlayer1.Length then
MediaPlayer1.Position := MediaPlayer1.Position + 10000
else
MediaPlayer1.Position := MediaPlayer1.Length;
MediaPlayer1.Play;
end;
end;
procedure TForm1.Button2Click(Sender: TObject);
// кнопка перемотки назад
begin
if mpCanPlay in MediaPlayer1. Capabilities then
begin
if MediaPlayer1.Position>=10000 then
MediaPlayer1.Position := MediaPlayer1.Position - 10000
else
MediaPlayer1.Position := 0;
MediaPlayer1.Play;
end;
end;
Процедуры, описанные в листингах выше, очень похожи. в НИХ проверяется не произошел ли выход за пределы файла. В случае выхода позиция устанавливается на конец (начало) файла.
13. Для реализации отображения текущей позиции используем таймер.
Свойство IntervaL таймера оставим равным 1000. Этого достаточно, ведь опрос клавиатуры не нужно проводить несколько раз в секунду. Значение свойства Enabled нужно изменить на FaLse, так как до открытия файла таймер обязательно должен быть отключен.
14. В обработчике события ОпТimег записываем только вызов процедуры Output, которая будет обновлять все надписи на экране. Напомню, что в этой процедуре выводятся также значения длины и имени файла, которые при проигрывании не изменяются, но их нужно выводить при открытии нового файла. Пусть примерно раз в секунду будут выводиться два необязательных значения на экран, зато программа будет более простой и надежной.
Чтобы таймер начал отслеживать позицию проигрываемого файла, его нужно включить при открытии файла. Поэтому добавляем строку в процедуру ButtonlClick, которая принимает вид, показанный в следующем листинге.
procedure TForm1.Button1Click(Sender: TObject);
//кнопка OPEN
begin
if OpenDialog1.Execute=True then
begin
// открываем файл
MediaPlayer1.FileName := OpenDialog1.FileName;
MediaPlayer1.Open;
// включаем индикаторы
Label1.Font.Color := clLime;
Label2.Font.Color := clLime;
Label3.Font.Color := clLime;
Label4.Font.Color := clLime;
// присваиваем индикаторам значения
Output;
//включаем таймер
Timer1.Enabled:=True;
end;
end;
Запустите проигрыватель и проверьте звучание файлов.