Універсальний програвач WinMedia

[ виправити ] текст може містити помилки, будь ласка перевіряйте перш ніж використовувати.

скачати

Зміст

Введення.

1 Розробка системного проекту.

1.1 Призначення розробки.

1.2 Вимоги до функціональних характеристик.

1.3 Вимоги до надійності і безпеки.

1.4 Вимоги до складу і параметрів технічних засобів.

1.5 Вимоги до інформаційної та програмної сумісності.

2 Розробка технічного проекту.

2.1 Побудова діаграми потоків даних.

2.2 Проектування моделі даних.

2.3 Детальне проектування програмного забезпечення.

3 Реалізація.

3.1 Обгрунтування вибору засобів розробки.

3.2 Опис основних програмних модулів.

4 Тестування програмного продукту.

Висновок.

Додаток А

Додаток Б.

Бібліографія.6

Введення

На сьогоднішній день діяльність людей все більшою мірою залежить від їх інформованості, здатності ефективно використовувати інформацію. Настав час, коли професіонал - юрист, інженер, економіст, соціолог, журналіст - вже насилу справляються з потоком інформації. Фахівцеві, щоб на належному рівні виконувати свої обов'язки, необхідні інструментарії та методологія його застосування для обробки інформації. Це можна порівняти з використанням засобів пересування: людина може пішки долати будь-яку відстань, але сучасний темп життя просто немислимий без застосування автомобіля, поїзда, літака і т.д. Те ж саме відбувається в області інформації: теоретично людина може сама переробити без комп'ютера будь-яку інформацію, але зробить це ефективніше з використанням спеціальних комп'ютерних технологій.

Розвиток ефективних способів відтворення музичної інформації (без втрати якості) теж не стояло на місці: з'явилися вінілові платівки були незабаром замінені на магнітні касети, останні в свою чергу швидко змінилися оптичними дисками. Все це ніяк несмогла обійти персональний комп'ютер. Існує безліч форматів зберігання музики та відео (mp 3, wav, avi найпопулярніші з них). У даному курсовому проекті створюється програма Універсальний програвач Win media для відтворення аудіо-, відео-форматів на комп'ютері.

1 Розробка системного проекту

1.1 Призначення розробки

Універсальний програвач Win media дозволяє відтворити аудіо-, відео-формати, вести мультимедіа бібліотеку, зберігати плейлисти. Програвач володіє інтуїтивно зрозумілим інтерфейсом і простий в експлуатації.

На малюнку 1 Програма представлена ​​вигляді початкової контекстної діаграми потоків даних:







Рисунок 1 - Діаграма потоків даних


1.2 Вимоги до функціональних характеристик

Універсальний програвач Win media має відтворювати популярні мультимедіа формати (wav, mp 3, mpg, wma, avi, mpeg).

Після запуску програми необхідно вказати необхідний мультимедіа файл за допомогою вікна відкриття файлу або вказати плейлист. Відкриті файли записуються в плейліст і зберігаються на жорсткий диск. Надалі можна буде знову завантажити збережений плейлист.

1.3 Вимоги до надійності

Універсальний програвач Win media повинен коректно відтворювати мультимедіа файли і безперебійно працювати протягом всього сеансу роботи (відтворення мультимедіа файлу)

1.4 Вимоги до складу і параметрів технічних засобів

Для нормального функціонування Універсальний програвач Win media необхідна наступна мінімальна конфігурація ПК:

  • частота процесора: 800 МГц

  • обсяг оперативної пам'яті: 64 Мб

  • необхідний обсяг вільного дискового простору: 10 мб і розмір бази даних.

  • дозвіл монітора: 800 x 600

  • наявність CD - ROM або FDD.

1.5 Вимоги до інформаційної та програмної сумісності

Дана програма призначена для роботи в наступних операційних системах: Windows 98 SE / 2000 / XP.

2. Розробка технічного проекту

2.1 Побудова діаграми потоків даних

Метою побудови діаграми потоків даних є відображення процесів існуючих в системі і зв'язку між цими процесами, а також процес перетворення вхідних даних у вихідний результат.

Основні елементи діаграми потоків даних:

  • Зовнішня сутність - представляє собою матеріальний предмет або фізична особа, який є джерелом або приймачем даних. Визначення деякого об'єкта як зовнішньої сутності вказує на те, що вона знаходиться за межами кордонів аналізованої ІВ.

  • Система і підсистема. При побудові моделі складної ІС вона може бути представлена ​​у найзагальнішому вигляді на так званої контекстної діаграмі у вигляді однієї системи як єдиного цілого, або може бути декомпозирована на ряд підсистем.

  • Процес - представляє собою перетворення вхідних потоків даних у вихідні відповідно до певного алгоритму. Фізично процес може бути реалізований різними способами: це може бути підрозділ організації, яка виконує обробку вхідних документів і випуск звітів, програма, вбудоване логічне пристрій і т.д.

  • Накопичувач даних - являє собою абстрактне пристрій для зберігання інформації, яку можна в будь-який момент помістити в накопичувач і через деякий час отримати, причому способи приміщення та вилучення можуть бути будь-якими. Накопичувач даних може бути реалізований фізично у вигляді таблиці в оперативній пам'яті, файлу на магнітному носії і т.д. Накопичувач даних в загальному випадку є прообразом бази даних і опис зберігаються в ньому даних повинне бути пов'язане з інформаційною моделлю.

  • Потік даних - визначає інформацію, передану через деякий з'єднання від джерела до наступника. Реальний потік даних може бути інформацією, що передається по кабелю між двома пристроями, що пересилають поштою листами, магнітними стрічками або дискетами, які переносяться з одного комп'ютера на інший і т.д.

Зовнішніми сутностями в Універсальній му програвач е Win media є медіа файл, користувач і сам плеєр.

Задачею користувача є: зазначення мультимедіа файлу (процес 1.2), занесення фалів в мультимедіа бібліотеку (процес 1.3).

Завданням плеєра є відкриття мультимедіа файлу (процес 1.5) і його відтворення (процес 1.10).

При відкритті користувачем нового файлу автоматично створюється плейлист.

При додаванні користувачем файлу в мультимедіа бібліотеку інформація про фото записується до бібліотеки.

Згодом файли з бази даних можна додати поточний плейлист.

Діаграма потоків даних зображена на малюнку 2.

2.2 Проектування моделі даних

На підставі діаграми потоків даних будується концептуальна модель даних. У ній відображається докладний опис структури даних, зв'язку між об'єктами даних, структура цих зв'язків.

Структура моделі даних універсального програвача Win media:

Таблиця "бібліотека мультимедіа файлів" - містить інформацію про доданих до бібліотеки мультимедіа файлах

Поле "Код" - унікальний ідентифікатор запису таблиці (ключове поле)

Поля "Назва композиції", "Виконавець", "Альбом" - мають рядковий тип і використовуються для зберігання Назви композиції, Виконавця та альбому мультимедіа файлу.

Поле "Жанр" має цілочисельний тип і використовується для зберігання коду жанру до якого належить композиція.

Таблиця "Жанри" - містить перелік жанрів.

Поле "Код" - унікальний ідентифікатор кожного запису таблиці (ключове поле)

Поле "Жанр" - має рядковий тип і містить найменування жанру.

Модель даних універсального програвача Win media зображена на малюнку 3.

2.3 Детальне проектування програмного забезпечення

Програма складається з декількох основних вікон: Головного вікна (у якій виробляється відтворення аудіо файлів) і Відео вікна (у якій виробляється відтворення відео фалів).

На малюнку 4 представлена ​​головна форма програми для відтворення аудіо файлів

Рисунок 4 - Форма програми для відтворення аудіо файлів.

На малюнку 5 представлена ​​форма програми для відтворення відео файлів

Малюнок 5 - Форма програми для відтворення відео файлів.

На малюнку 6 представлена ​​діаграма послідовностей екранних форм.

Символом 1 позначено дію за викликом головної форми.

Символом 2 позначено дію за викликом файлу довідкової системи, для отримання будь-якої довідкової інформації за програмою.

Символом 3 позначено дію за викликом форми, що відображає відомості про програмний продукт.

Символом 4. дію по завершенню роботи програми

На малюнку 7 представлена ​​форма програми для редагування / створення / збереження плейлистів.

Малюнок 7 - Форма програми для редагування / створення / збереження плейлистів.

На рисунку 8 представлена ​​форма програми для введення особистого програвача.

Рисунок 8 - форма програми для введення особистого програвача.

3. Реалізація

3.1 Обгрунтування вибору засобів розробки

Для написання курсового проекту, я вибрав систему програмування Delphi 7.0.

Delphi - об'єктно-орієнтована, візуальне середовище програмування, що відноситься до класу RAD - (Rapid Application Development «Засіб швидкої розробки додатків») засобів CASE - технології. Delphi зробила розробку потужних додатків швидким процесом.

При проектуванні програми і додавання на форму нових компонентів Delphi автоматично заносить необхідний програмний код в модуль програми і підключає відповідні бібліотеки, позбавляючи розробника від рутинної роботи і дозволяючи зосередитися на написанні

Відмінною особливістю Delphi є багата бібліотека візуальних компонентів (VCL). Ця бібліотека об'єктів включає в себе стандартні об'єкти побудови користувальницького інтерфейсу, об'єкти управління даними, графічні об'єкти, об'єкти мультимедіа, діалоги та об'єкти управління файлами.

Ще Delphi дозволяє додати різні сторонні компоненти створені сторонніми розробниками. У даній програмі використовувався компонент MMTOOL версії 7.0. Цей компонент дозволяє полегшити створення програми для роботи зі звуком / відео.

Так само плюсом на користь використання Delphi є зручний відладчик, що дозволяє аналізувати роботу програми під час її виконання. З його допомогою можна послідовно виконувати окремі оператори вихідного тексту послідовно, спостерігаючи при цьому, як змінюються значення різних змінних.

3.2 Опис основних програмних модулів

На рисунку 9 представлений алгоритм відкриття файлу

Символом 1 позначено початок процедури.

Символом 2 позначені оператори відкриття файлу.

Символом 3 позначений оператор умови належності мультимедіа файлу до відео файлу.

Символом 4 позначений оператор відтворення файлу в головній формі при значенні «ні» в циклі під номером 3.

Символом 5 позначений оператор відкриття файлу в спеціальній формі для відео файлів при значенні «так» у циклі під номером 3.

Символом 5 позначений оператор виходу з програми

На малюнку 10 представлено алгоритм занесення файлу до бібліотеки

Символом 1 позначено початок процедури.

Символом 2 позначений відкриття файлу

Символом 3 позначений цикл з передумовою видає запит записувати чи файл у базу даних.

Символом 4 позначений оператор, який читає інформацію про файл.

Символом 5 позначений умовний оператор, заносячи отриману інформацію в бібліотеку.

Символом 6 позначений оператор виходу з процедури.

4 Тестування програмного продукту

Метою проведення тестування є перевірка правильності роботи універсального програвача Win Media.

Тестування програми проводилося у міру написання її модулів в процесі відладки, при стикуванні написаних модулів і після закінчення написання програми.

Тестування програми здійснювалось на наступній апаратній платформі:

Процесор: 2 Ггц

Об'єм оперативної пам'яті 512 Мб

Розмір вільного дискового простору 500 Мб

Для тестування програми використовувалися операційні системи:

Windows XP SP 2.

Тестування програми проводилося в такому порядку:

  1. Перевірка відповідності програми технічним завданням. При цьому перевірялося наявність і коректність виконання програмою функцій описаних в технічному завданні.

  2. Перевірка правильності виконання обчислень. Для цього обчислення були попередньо розраховані вручну, а після звірені з результатами програми.

  3. Перевірка роботи програми з граничними значеннями. Для цього при роботі програми вводилися граничні дані, на що у відповідь від програми були отримані повідомлення про некоректність введених даних і прохання ввести їх заново.

  4. Визначення часу виконання програмою розрахунків. При цьому тестувалися найбільш ресурсомісткі завдання - безпосереднє проведення тестування і побудова звітів. При цьому програма показала хороші показники.

  5. Перевірка захищеності даних з якими оперує програм від сторонніх користувачів. При цьому використовувалися спроби виконати дії приводять і змін даних: редагування, видалення. У відповідь на ці дії програма пропонувала ввести пароль. При помилковому введенні пароля програма відмовляла в доступі на модифікацію даних.

  6. Перевірка роботи всіх пунктів меню і виклику усіх екранних форм. При цьому були перевірені пункти меню на відповідність функцій виконуваних ними їх опису.

  7. Перевірка роботи програми на комп'ютерах різної конфігурації. Крім зазначеної вище тестовій конфігурації програма була протестована на наступній платформі:

  • Процесор: 1200 Мгц

  • Об'єм оперативної пам'яті 256 Мб

  • Розмір вільного дискового простору 300 Мб

  • Для тестування програми використовувалася операційна система: Windows 2000.

Висновок

На курсове проектування мені було запропоновано завдання: створення Універсального програвача win media

При розробці програмного продукту була вивчена предметна область для даного завдання, виявлені інформаційні потоки, на підставі яких була побудована діаграма потоків даних.

Універсальний програвач win media дозволяє:

  • Відтворювати мультимедіа файли різних форматів.

  • Створювати плейлисти.

  • Вести базу даних мультимедіа файлів.

Додаток А (обов'язковий)

Лістинг програми.

Програма RadLe

unit UMain;

interface

uses

Windows,

Messages,

ShellAPI,

SysUtils,

Classes,

Graphics,

Controls,

Forms,

Dialogs,

Buttons,

ComCtrls,

StdCtrls,

ExtCtrls,

Menus,

MMSystem,

MMUtils,

MMAbout,

MMObj,

MMDSPObj,

MMWaveIO,

MMMPType,

MMMPEG,

MMDesign,

MMWavOut,

MMDIBCv,

MMLevel,

MMConect,

MMSpectr,

MMHTimer,

MMSlider,

MMLEDS,

MMPanel,

MMSpin,

MMLEDLbl,

MMButton,

MMWave,

MMLabel,

MMVolume,

MMHook, MMPitch, MMAudio, MMWheel, MMAVI;

type

TMainForm = class (TForm)

OpenDialog: TOpenDialog;

WaveOut: TMMWaveOut;

MMDesigner1: TMMDesigner;

MMConnector1: TMMConnector;

HiTimer: TMMHiTimer;

MMPanel2: TMMPanel;

ButtonPanel: TMMPanel;

DisplayPanel: TMMPanel;

MMPanel7: TMMPanel;

MMLevelScale1: TMMLevelScale;

digit: TMMLEDDigit;

MMLevel2: TMMLevel;

MMLevel1: TMMLevel;

Label2: TLabel;

Label3: TLabel;

Label4: TLabel;

MMSpectrum1: TMMSpectrum;

ss1: TMMLEDDigit;

ss2: TMMLEDDigit;

mm 1: TMMLEDDigit;

mm2: TMMLEDDigit;

btnStop: TMMSpeedButton;

btnPlay: TMMSpeedButton;

btnPause: TMMSpeedButton;

btnOpen: TMMSpeedButton;

btnPrev: TMMSpeedButton;

btnSkipL: TMMSpeedButton;

btnSkipR: TMMSpeedButton;

btnNext: TMMSpeedButton;

btnClose: TMMSpeedButton;

btnMenu: TMMSpeedButton;

btnIncVolume: TMMSpeedButton;

btnDecVolume: TMMSpeedButton;

Bevel1: TBevel;

btnPlayList: TMMSpeedButton;

Gauge: TMMLevel;

Bevel2: TBevel;

ledMode: TMMLEDMode;

ledRate: TMMLEDPanel;

Label18: TLabel;

lblBitRate: TLabel;

ledBitRate: TMMLEDPanel;

lblLayer: TLabel;

lblLayer2: TLabel;

lblFile: TMMLEDLABEL;

PopupMenu: TPopupMenu;

Preferences1: TMenuItem;

N1: TMenuItem;

Play1: TMenuItem;

Stop1: TMenuItem;

Pause1: TMenuItem;

N2: TMenuItem;

Previous1: TMenuItem;

Next1: TMenuItem;

N3: TMenuItem;

PlayList1: TMenuItem;

WaveFile: TMMWaveFile;

N4: TMenuItem;

Info1: TMenuItem;

ImageEOF: TImage;

ImageState: TImage;

MPEGFile: TMMMPEGFile;

SpeedButton1: TSpeedButton;

N5: TMenuItem;

procedure FormClose (Sender: TObject; var Action: TCloseAction);

procedure HiTimerTimer (Sender: TObject);

procedure WaveOutStop (Sender: TObject);

procedure btnCloseClick (Sender: TObject);

procedure btnOpenClick (Sender: TObject);

procedure btnStopClick (Sender: TObject);

procedure btnPauseClick (Sender: TObject);

procedure btnPlayClick (Sender: TObject);

procedure btnPrevClick (Sender: TObject);

procedure btnSkipLClick (Sender: TObject);

procedure btnSkipRClick (Sender: TObject);

procedure btnNextClick (Sender: TObject);

procedure btnDecVolumeClick (Sender: TObject);

procedure btnIncVolumeClick (Sender: TObject);

procedure btnPlayListClick (Sender: TObject);

procedure WaveOutStart (Sender: TObject);

procedure MMPanelMouseDown (Sender: TObject; Button: TMouseButton;

Shift: TShiftState; X, Y: Integer);

procedure MMPanelMouseMove (Sender: TObject; Shift: TShiftState; X, Y: Integer);

procedure MMPanelMouseUp (Sender: TObject; Button: TMouseButton;

Shift: TShiftState; X, Y: Integer);

procedure GaugeMouseDown (Sender: TObject; Button: TMouseButton;

Shift: TShiftState; X, Y: Integer);

Додаток А (продовження)

procedure FormCreate (Sender: TObject);

procedure FormDestroy (Sender: TObject);

procedure btnMenuClick (Sender: TObject);

procedure PopupMenuPopup (Sender: TObject);

procedure PreferencesClick (Sender: TObject);

procedure Info1Click (Sender: TObject);

procedure FormShow (Sender: TObject);

procedure WaveOutPause (Sender: TObject);

procedure WaveOutRestart (Sender: TObject);

procedure SpeedButton1Click (Sender: TObject);

procedure N5Click (Sender: TObject);

public

oMin, oSec: Word;

Dragging: Boolean;

DragStart: TPoint;

Seeking: Boolean;

OldTime, CurTime: Longint;

PlayListName: TFileName;

PlayList: TStringList;

PlayIndex: integer;

IncPlayList: Boolean;

DisplayColor: TColor;

TimeCnt: Longint;

procedure LoadImage (Image: TImage; Name: PChar);

procedure DrawTime (Time: Longint);

procedure SetFileParams;

function LoadFile (FileName: TFileName): Boolean;

function AddFile (FileName: TFileName): Boolean;

procedure SelectFile (index: integer);

procedure WMNCHitTest (var Msg: TWMNCHitTest); message WM_NCHitTest;

procedure WMDropFiles (var Msg: TMessage); message WM_DropFiles;

procedure LoadSettings;

procedure SaveSettings;

procedure DrawLevelBar (Sender: TObject; DIB: TMMDIBCanvas; Rect: TRect; nSpots, Peak: integer);

end;

var

MainForm: TMainForm;

implementation

{$ R *. DFM}

{$ R IMAGE.RES}

uses upref, ulist, UMe, UVideo;

const

REGBASENAME = 'Software \ SwiftSoft \ MPEGPlay';

procedure TMainForm.WMNCHitTest (var Msg: TWMNCHitTest);

begin

inherited; {is the click in the client area? }

if (Msg.Result = htClient) then {if so, make Windows think it's}

Msg.Result: = htCaption; {on the caption bar. }

end;

procedure TMainForm.LoadImage (Image: TImage; Name: PChar);

begin

with Image.Picture do

begin

{Load the bitmap}

Bitmap.Handle: = LoadBitmap (hInstance, Name);

Додаток А (продовження)

{Change the black / white resource to a colored bitmap}

ChangeColors (Bitmap, False, DisplayColor, clBlack, clBlack);

end;

end;

procedure TMainForm.LoadSettings;

var

L, T: integer;

begin

try

L: = (Screen.Width-Width) div 2;

T: = (Screen.Height-Height) div 2;

Left: = GetFromRegistry (HKEY_CURRENT_USER, REGBASENAME, 'Left', L);

Top: = GetFromRegistry (HKEY_CURRENT_USER, REGBASENAME, 'Top', T);

WaveOut.NumBuffers: = GetFromRegistry (HKEY_CURRENT_USER, REGBASENAME, 'Buffers', WaveOut.NumBuffers);

WaveOut.BufferSize: = GetFromRegistry (HKEY_CURRENT_USER, REGBASENAME, 'BufferSize', WaveOut.BufferSize);

WaveOut.DeviceID: = GetFromRegistry (HKEY_CURRENT_USER, REGBASENAME, 'DeviceID', WaveOut.DeviceID);

WaveOut.CallBackMode: = GetFromRegistry (HKEY_CURRENT_USER, REGBASENAME, 'CBMode', WaveOut.CallBackMode);

except

end;

end;

procedure TMainForm.SaveSettings;

begin

SaveInRegistry (HKEY_CURRENT_USER, REGBASENAME, 'Left', Left);

SaveInRegistry (HKEY_CURRENT_USER, REGBASENAME, 'Top', Top);

SaveInRegistry (HKEY_CURRENT_USER, REGBASENAME, 'Buffers', WaveOut.NumBuffers);

SaveInRegistry (HKEY_CURRENT_USER, REGBASENAME, 'BufferSize', WaveOut.BufferSize);

SaveInRegistry (HKEY_CURRENT_USER, REGBASENAME, 'DeviceID', WaveOut.DeviceID);

SaveInRegistry (HKEY_CURRENT_USER, REGBASENAME, 'CBMode', WaveOut.CallBackMode);

end;

procedure TMainForm.FormCreate (Sender: TObject);

begin

MMLevel1.DIBCanvas.BackGroundBitmap.LoadFromResourceName (hInstance, 'BM_BAR1');

MMLevel2.DIBCanvas.BackGroundBitmap.LoadFromResourceName (hInstance, 'BM_BAR1');

MMSpectrum1.DIBCanvas.BackGroundBitmap.LoadFromResourceName (hInstance, 'BM_BAR2');

MMLevel1.DIBCanvas.PaletteRealize: = True;

MMLevel2.DIBCanvas.PaletteRealize: = True;

MMSpectrum1.DIBCanvas.PaletteRealize: = True;

DragAcceptFiles (Handle, True);

PlayListName: = 'noname.m3u';

PlayList: = TStringList.Create;

PlayIndex: = 0;

DisplayColor: = clLime;

LoadImage (ImageEOF, 'BM_EOF');

LoadImage (ImageState, 'BM_PLAY');

LoadSettings;

MMLevel1.OnDrawBar: = DrawLevelBar;

MMLevel2.OnDrawBar: = DrawLevelBar;

MMSpectrum1.OnDrawBar: = DrawLevelBar;

end;

procedure TMainForm.FormDestroy (Sender: TObject);

begin

PlayList.Free;

end;

procedure TMainForm.FormClose (Sender: TObject; var Action: TCloseAction);

begin

IncPlayList: = False;

WaveOut.Close;

Додаток А (продовження)

SaveSettings;

end;

procedure TMainForm.FormShow (Sender: TObject);

begin

if (ParamStr (1) <>'') then

if LoadFile (ParamStr (1)) then

begin

btnPlayClick (nil);

end

else MessageDlg (ParamStr (1) + 'is not a valid Audiofile', mtError, [mbOK], 0);

end;

procedure TMainForm.WMDropFiles (var Msg: TMessage);

var

i, cnt: integer;

Buf: array [0 .. 255] of Char;

begin

try

cnt: = DragQueryFile (Msg.wParam, $ FFFFFFFF, @ Buf, 255);

if (cnt> 0) then

begin

IncPlayList: = False;

WaveOut.Stop;

PlayList.Clear;

for i: = 0 to cnt-1 do

begin

DragQueryFile (Msg.wParam, i, @ Buf, 255);

if not AddFile (StrPas (Buf)) then

MessageDlg (StrPas (Buf) + 'is not a valid Audiofile', mtError, [mbOK], 0);

end;

PlayIndex: = 0;

SelectFile (0);

if (PlayList.Count> 0) then btnPlayClick (nil);

end;

finally

DragFinish (Msg.wParam);

end;

end;

{- TMainForm ---------------------------------------------- -------------}

procedure TMainForm.DrawTime (Time: Longint);

Var

Hour, Min, Sec, MSec: Word;

begin

{Display the "Time"}

TimeDecode (Time, Hour, Min, Sec, MSec);

if (oSec <> Sec) then

begin

ss1.Value: = Sec;

oSec: = Sec;

end;

if (oMin <> Min) then

begin

mm1.Value: = Min;

oMin: = Min;

end;

end;

{- TMainForm ---------------------------------------------- -------------}

procedure TMainForm.SetFileParams;

begin

Додаток А (продовження)

if not MpegFile.Empty then

with MpegFile do

begin

ss1.Enabled: = True;

ss2.Enabled: = True;

mm1.Enabled: = True;

mm2.Enabled: = True;

digit.Enabled: = True;

lblFile.Caption: = IntToStr (PlayIndex +1 )+':'+ UpperCase (ExtractFileName (Filename));

ledRate.Value: = PlaybackRate div 1000;

ledRate.Enabled: = True;

lblLayer.Visible: = True;

lblLayer2.Visible: = True;

case Layer of

1: lblLayer2.Caption: = 'I';

2: lblLayer2.Caption: = 'II';

3: lblLayer2.Caption: = 'III';

end;

if (Mode = smJointStereo) or (Mode = smStereo) then

ledMode.Mode: = mStereo

else

ledMode.Mode: = mMono;

ledMode.Enabled: = True;

ledBitRate.Value: = BitRate;

ledBitRate.Enabled: = True;

lblBitRate.Caption: = 'KBit / s';

end

else if not WaveFile.Wave.Empty then

with WaveFile.Wave do

begin

ss1.Enabled: = True;

ss2.Enabled: = True;

mm1.Enabled: = True;

mm2.Enabled: = True;

digit.Enabled: = True;

lblFile.Caption: = IntToStr (PlayIndex +1 )+':'+ UpperCase (ExtractFileName (Filename));

ledRate.Value: = SampleRate div 1000;

ledRate.Enabled: = True;

lblLayer.Visible: = False;

lblLayer2.Visible: = False;

ledMode.Mode: = Mode;

ledMode.Enabled: = True;

ledBitRate.Value: = BitLength;

ledBitRate.Enabled: = True;

lblBitRate.Caption: = 'Bit';

end

else

begin

ss1.Enabled: = False;

ss2.Enabled: = False;

mm1.Enabled: = False;

mm2.Enabled: = False;

digit.Enabled: = False;

lblFile.Caption: = 'Íåò Ôàéëà';

ledRate.Enabled: = False;

lblLayer.Visible: = False;

lblLayer2.Visible: = False;

ledMode.Enabled: = False;

ledBitRate. Enabled: = False;

end;

Додаток А (продовження)

end;

{- TMainForm ---------------------------------------------- -------------}

procedure TMainForm.HiTimerTimer (Sender: TObject);

var

Time: Longint;

begin

MMConnector1.Trigger;

inc (TimeCnt);

if (TimeCnt mod 5 = 0) and (wosPlay in Waveout.State) and not Seeking then

begin

Time: = WaveOut.Position;

inc (CurTime, Time-OldTime);

DrawTime (CurTime);

OldTime: = Time;

if not MpegFile.Empty then

begin

Gauge.Value: = MulDiv (MpegFile.Position, 100, MpegFile.Frames);

ImageEOF.Visible: = MpegFile.Position> = MpegFile.Frames;

end

else

begin

Gauge.Value: = MulDiv (WaveFile.Wave.Position, 100, WaveFile.Wave.DataSize);

ImageEOF.Visible: = WaveFile.Wave.Position> = WaveFile.Wave.DataSize;

end;

end;

end;

{- TMainForm ---------------------------------------------- -------------}

procedure TMainForm.WaveOutStart (Sender: TObject);

begin

TimeCnt: = 0;

HiTimer.Enabled: = True;

LoadImage (ImageState, 'BM_PLAY');

ImageState.Visible: = True;

end;

{- TMainForm ---------------------------------------------- -------------}

procedure TMainForm.WaveOutStop (Sender: TObject);

begin

HiTimer.Enabled: = False;

WaveOut.Close;

Seeking: = False;

DrawTime (0);

Gauge.Value: = 0;

ImageEOF.Visible: = False;

ImageState.Visible: = False;

if IncPlayList then

begin

if (PlayIndex <PlayList.Count-1) then

begin

inc (PlayIndex);

SelectFile (PlayIndex);

WaveOut.Start;

end

else

begin

PlayIndex: = 0;

SelectFile (PlayIndex);

end;

end;

end;

{- TMainForm ---------------------------------------------- -------------}

procedure TMainForm.WaveOutPause (Sender: TObject);

Додаток А (продовження)

begin

LoadImage (ImageState, 'BM_PAUSE');

end;

{- TMainForm ---------------------------------------------- -------------}

procedure TMainForm.WaveOutRestart (Sender: TObject);

begin

LoadImage (ImageState, 'BM_PLAY');

end;

{- TMainForm ---------------------------------------------- -------------}

function TMainForm.LoadFile (FileName: TFileName): Boolean;

begin

Result: = False;

if (FileName <>'') and FileExists (FileName) then

begin

PlayIndex: = 0;

PlayList.Clear;

MpegFile.FileName: ='';

WaveFile.Wave.FileName: ='';

if IsMpegFile (FileName) or wioIsWaveFile (FileName, RIFF_FILE) then

begin

PlayListName: = 'noname.m3u';

PlayList.Add (FileName);

end

else

begin

PlayListName: = FileName;

LoadPlayList (FileName, PlayList);

end;

Result: = (PlayList.Count> 0);

SelectFile (0);

end;

caption: = filename;

end;

{- TMainForm ---------------------------------------------- -------------}

function TMainForm.AddFile (FileName: TFileName): Boolean;

begin

Result: = False;

if (FileName <>'') and FileExists (FileName) then

begin

if IsMpegFile (FileName) or wioIsWaveFile (FileName, RIFF_FILE) then

begin

PlayList.Add (FileName);

Result: = True;

end

else

begin

Result: = LoadPlayList (FileName, PlayList);

end;

end;

end;

{- TMainForm ---------------------------------------------- -------------}

procedure TMainForm.SelectFile (index: integer);

var

FileName: TFileName;

begin

MpegFile.FileName: ='';

WaveFile.Wave.FileName: ='';

if (index> = 0) and (index <PlayList.Count) then

begin

FileName: = PlayList [index];

Додаток А (продовження)

if (FileName <>'') and FileExists (FileName) then

begin

if IsMpegFile (FileName) then

begin

MpegFile.FileName: = FileName;

WaveOut.Input: = MpegFile;

end

else if wioIsWaveFile (FileName, RIFF_FILE) then

begin

WaveFile.Wave.FileName: = FileName;

WaveOut.Input: = WaveFile;

end

end;

CurTime: = 0;

OldTime: = 0;

end;

SetFileParams;

end;

{- TMainForm ---------------------------------------------- -------------}

procedure TMainForm.PopupMenuPopup (Sender: TObject);

begin

{Adjust menu entrys}

PopupMenu.Items [6]. Enabled: = PlayList.Count> 1;

PopupMenu.Items [7]. Enabled: = PlayList.Count> 1;

if (wosPlay in WaveOut.State) then

begin

PopupMenu.Items [0]. Enabled: = False;

PopupMenu.Items [2]. Caption: = '& Ðåñòàðò';

PopupMenu.Items [3]. Enabled: = True;

PopupMenu.Items [4]. Enabled: = True;

end

else

begin

PopupMenu.Items [0]. Enabled: = True;

PopupMenu.Items [2]. Caption: = '& Âîñïðîèçâåñòè';

PopupMenu.Items [3]. Enabled: = False;

PopupMenu.Items [4]. Enabled: = False;

end;

if (wosPause in WaveOut.State) then

PopupMenu.Items [3]. Caption: = '& Ïàóçà'

else

PopupMenu.Items [3]. Caption: = '& Ïàóçà';

end;

{- TMainForm ---------------------------------------------- -------------}

procedure TMainForm.PreferencesClick (Sender: TObject);

begin

with TPreferencesForm.Create (Self) do

try

ShowModal;

finally

Free;

end;

end;

{- TMainForm ---------------------------------------------- -------------}

procedure TMainForm.btnOpenClick (Sender: TObject);

var

Idx: WORD;

begin

if (OpenDialog.Execute) and (opendialog.FileName = '*. avi') then

begin

Video.Show;

Video.Visible: = true;

mainform.Visible: = false;

if video.AVIOpenDialog.Execute then

Додаток А (продовження)

begin

video.AVIFile.FileName: = opendialog.FileName;

video.Caption: = ExtractFileName (opendialog.FileName);

video.AVIFile.OpenFile;

video.AVIControl.FreeStreams;

video.AVIControl.AddFile (video.AVIFile);

video.AVIDisplay.Refresh;

video.Icon.Handle: = ExtractassociatedIcon (0, PChar (opendialog.FileName), Idx);

end;

end

else

if OpenDialog.Execute then

begin

IncPlayList: = False;

WaveOut.Stop;

if not LoadFile (OpenDialog.FileName) then

MessageDlg ('Èòñ ôàéë èç íîò êàððåíëè', mtWarning, [mbOK], 0);

SetFileParams;

end;

end;

{- TMainForm ---------------------------------------------- -------------}

procedure TMainForm.btnCloseClick (Sender: TObject);

begin

if (MessageDlg ('ÂÛ äåñòèòåëüíî õîòèòå âûéòå èç ïðîãðàììû??', mtConf irmation, [mbYes, mbNo], 0) = mrYes) then

Close;

end;

procedure TMainForm.btnMenuClick (Sender: TObject);

var

P: TPoint;

begin

P: = ButtonPanel.ClientToScreen (Point (btnMenu.Left, btnMenu.Top + btnMenu.Height));

PopupMenu.Popup (PX, PY);

end;

procedure TMainForm.btnPlayClick (Sender: TObject);

begin

if (PlayList.Count = 0) then

begin

btnOpenClick (nil);

Refresh;

end;

IncPlayList: = False;

if (PlayList.Count> 0) then

begin

if not (wosPlay in WaveOut.State) then

begin

SelectFile (PlayIndex);

WaveOut.Start;

end

else if (wosPause in WaveOut.State) then

WaveOut.Restart

else

begin

WaveOut.Stop;

WaveOut. Start;

end;

end;

Додаток А (продовження)

IncPlayList: = True;

end;

{- TMainForm ---------------------------------------------- -------------}

procedure TMainForm.btnPauseClick (Sender: TObject);

begin

if (wosPlay in WaveOut.State) then

begin

if (wosPause in WaveOut.State) then

WaveOut.Restart

else

WaveOut.Pause;

end;

end;

{- TMainForm ---------------------------------------------- -------------}

procedure TMainForm.btnStopClick (Sender: TObject);

begin

IncPlayList: = False;

WaveOut.Stop;

end;

/ / Ïðåäûäóùàÿ êîìïîçèöèÿ

procedure TMainForm.btnPrevClick (Sender: TObject);

begin

IncPlayList: = False;

if (PlayIndex> 0) then

begin

dec (PlayIndex);

if (wosPlay in WaveOut.State) then

begin

WaveOut.Stop;

SelectFile (PlayIndex);

WaveOut.Start;

end

else SelectFile (PlayIndex);

end;

IncPlayList: = True;

end;

/ / / / Ñëåäóþùàÿ êîìïîçèöèÿ

procedure TMainForm.btnNextClick (Sender: TObject);

begin

IncPlayList: = False;

if (PlayIndex <PlayList.Count-1) then

begin

inc (PlayIndex);

if (wosPlay in WaveOut.State) then

begin

WaveOut.Stop;

SelectFile (PlayIndex);

WaveOut.Start;

end

else SelectFile (PlayIndex);

end;

IncPlayList: = True;

end;

{- TMainForm ---------------------------------------------- -------------}

procedure TMainForm.GaugeMouseDown (Sender: TObject; Button: TMouseButton;

Shift: TShiftState; X, Y: Integer);

var

aPos: Longint;

Додаток А (продовження)

begin

if (wosOpen in WaveOut.State) then

begin

Seeking: = True;

WaveOut.Pause;

if not MpegFile.Empty then

begin

with Gauge do

aPos: = MulDiv (X-BevelExtend, MpegFile.Frames, (Width-2 * BevelExtend) -1);

if aPos> = MpegFile.Frames then

begin

WaveOut.Stop;

exit;

end

else

begin

MpegFile.Position: = aPos;

CurTime: = MpegFile.Position * MpegFile.TimePerFrame;

end;

end

else

begin

with Gauge do

aPos: = MulDiv (X-BevelExtend, WaveFile.Wave.DataSize, (Width-2 * BevelExtend) -1);

if aPos> WaveFile.Wave.DataSize then

begin

WaveOut.Stop;

exit;

end

else

begin

WaveFile.Wave.Position: = aPos;

CurTime: = WaveFile.Wave.Position;

end;

end;

WaveOut.Reset;

WaveOut.Restart;

OldTime: = 0;

Seeking: = False;

end;

end;

{- TMainForm ---------------------------------------------- -------------}

procedure TMainForm.btnSkipLClick (Sender: TObject);

begin

if (wosPlay in WaveOut.State) then

begin

Seeking: = True;

WaveOut.Pause;

if not MpegFile.Empty then

begin

MpegFile.Position: = MpegFile.Position-(5000 div MpegFile.TimePerFrame);

CurTime: = MpegFile.Position * MpegFile.TimePerFrame;

end

else

begin

WaveFile.Wave.Position: = WaveFile.Wave.Position-5000;

CurTime: = WaveFile.Wave.Position;

end;

WaveOut.Reset;

WaveOut.Restart;

OldTime: = 0;

Seeking: = False;

end;

end;

{- TMainForm ---------------------------------------------- -------------}

procedure TMainForm.btnSkipRClick (Sender: TObject);

Додаток А (продовження)

begin

if (wosPlay in WaveOut.State) then

begin

if not MpegFile.Empty then

begin

if MpegFile.Position + (5000 div MpegFile.TimePerFrame)> MpegFile.Frames then

WaveOut.Stop;

end

else

begin

if WaveFile.Wave.Position +5000> WaveFile.Wave.DataSize then

WaveOut.Stop;

end;

Seeking: = True;

WaveOut.Pause;

if not MpegFile.Empty then

begin

MpegFile.Position: = MpegFile.Position + (5000 div MpegFile.TimePerFrame);

CurTime: = MpegFile.Position * MpegFile.TimePerFrame;

end

else

begin

WaveFile.Wave.Position: = WaveFile.Wave.Position +5000;

CurTime: = WaveFile.Wave.Position;

end;

WaveOut.Reset;

WaveOut.Restart;

OldTime: = 0;

Seeking: = False;

end;

end;

{- TMainForm ---------------------------------------------- -------------}

procedure TMainForm.btnDecVolumeClick (Sender: TObject);

var

Volume, L, R: Longint;

begin

if (wosOpen in WaveOut.State) then

begin

WaveOutGetVolume (WaveOut.Handle, @ Volume);

L: = LoWord (Volume);

R: = HiWord (Volume);

L: = Max (L - 5000,0);

R: = Max (R - 5000,0);

Volume: = (R shl 16) + L;

WaveOutSetVolume (WaveOut.Handle, Volume);

end;

end;

{- TMainForm ---------------------------------------------- -------------}

procedure TMainForm.btnIncVolumeClick (Sender: TObject);

var

Volume, L, R: Longint;

begin

if (wosOpen in WaveOut.State) then

begin

WaveOutGetVolume (WaveOut.Handle, @ Volume);

L: = LoWord (Volume);

R: = HiWord (Volume);

L: = Min (L + 5000, $ FFFF);

R: = Min (R + 5000, $ FFFF);

Volume: = (R shl 16) + L;

WaveOutSetVolume (WaveOut.Handle, Volume);

Додаток А (продовження)

end;

end;

{- TMainForm ---------------------------------------------- -------------}

procedure TMainForm.btnPlayListClick (Sender: TObject);

var

wasPlaying: Boolean;

begin

with TPlayListEditor.Create (Self) do

try

if ShowModal = mrOK then

begin

IncPlayList: = False;

wasPlaying: = (wosPlay in WaveOut.State);

WaveOut.Stop;

PlayList.Assign (TempPlayList);

PlayListName: = ListName;

PlayIndex: = 0;

SelectFile (0);

if wasPlaying then btnPlayClick (nil);

end;

finally

Free;

end;

end;

{- TMainForm ---------------------------------------------- -------------}

procedure TMainForm.MMPanelMouseDown (Sender: TObject; Button: TMouseButton;

Shift: TShiftState; X, Y: Integer);

begin

if (Button = mbLeft) then

begin

Dragging: = True;

DragStart: = TControl (Sender). ClientToScreen (Point (X, Y));

end;

end;

{- TMainForm ---------------------------------------------- -------------}

procedure TMainForm.MMPanelMouseUp (Sender: TObject; Button: TMouseButton;

Shift: TShiftState; X, Y: Integer);

begin

if (Button = mbLeft) then Dragging: = False;

end;

{- TMainForm ---------------------------------------------- -------------}

procedure TMainForm.MMPanelMouseMove (Sender: TObject; Shift: TShiftState;

X, Y: Integer);

var

Diff: TPoint;

begin

if Dragging then

begin

Diff: = TControl (Sender). ClientToScreen (Point (X, Y));

Diff: = Point (Diff.X-DragStart.X, Diff.Y-DragStart.Y);

SetBounds (Left + Diff.X, Top + Diff.Y, Width, Height);

DragStart.X: = DragStart.X + Diff.X;

DragStart.Y: = DragStart.Y + Diff.Y;

end;

end;

{- TMainForm ---------------------------------------------- -------------}

procedure TMainForm.Info1Click (Sender: TObject);

begin

autor.show;

end;

{- TMainForm ---------------------------------------------- -------------}

Додаток А (продовження)

procedure TMainForm.DrawLevelBar (Sender: TObject; DIB: TMMDIBCanvas; Rect: TRect; nSpots, Peak: integer);

begin

with DIB, Rect do

begin

if Sender = MMSpectrum1 then

begin

DIB_CopyDIBBits (MMSpectrum1.DIBCanvas.BackSurface, Left, Bottom-nSpots, Right-Left-1, Bottom, 0, Bottom-nSpots);

DIB_CopyDIBBits (MMSpectrum1.DIBCanvas.BackSurface, Left, Bottom-Peak, Right-Left-1, 2,0, Bottom-Peak);

end

else if Sender = MMLevel1 then

begin

DIB_SetTColor (MMLevel1.Color);

DIB_Clear;

DIB_CopyDIBBits (MMLevel1.DIBCanvas.BackSurface, 0, Top, 2 * nSpots, Bottom, 0,0);

DIB_CopyDIBBits (MMLevel1.DIBCanvas.BackSurface, 2 * Peak-2, Top, 2, Bottom, 2 * Peak, 0);

end

else

begin

DIB_SetTColor (MMLevel2.Color);

DIB_Clear;

DIB_CopyDIBBits (MMLevel2.DIBCanvas.BackSurface, 0, Top, 2 * nSpots, Bottom, 0,0);

DIB_CopyDIBBits (MMLevel2.DIBCanvas.BackSurface, 2 * Peak-2, Top, 2, Bottom, 2 * Peak, 0);

end;

end;

end;

procedure TMainForm.SpeedButton1Click (Sender: TObject);

begin

Application.Minimize;

end;

procedure TMainForm.N5Click (Sender: TObject);

begin

video.Show;

mainform.Visible: = false;

end;

end.

unit UMe;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, MMObj, MMLEDLbl, MMScroll, MMLEDS, ExtCtrls;

type

TAutor = class (TForm)

MMLEDLABEL1: TMMLEDLABEL;

MMLEDLABEL2: TMMLEDLABEL;

MMLEDLABEL3: TMMLEDLABEL;

MMLEDPanel1: TMMLEDPanel;

MMLEDLABEL4: TMMLEDLABEL;

MMLED1: TMMLED;

procedure MMLED1Click (Sender: TObject);

private

{Private declarations}

public

{Public declarations}

end;

var

Autor: TAutor;

implementation

Додаток А (продовження)

{$ R *. dfm}

procedure TAutor.MMLED1Click (Sender: TObject);

begin

close;

end;

end.

unit UML;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, Menus, Grids, DBGrids;

type

TML = class (TForm)

DBGrid1: TDBGrid;

MainMenu1: TMainMenu;

N1: TMenuItem;

N2: TMenuItem;

N3: TMenuItem;

procedure N2Click (Sender: TObject);

private

{Private declarations}

public

{Public declarations}

end;

var

ML: TML;

implementation

{$ R *. dfm}

procedure TML.N2Click (Sender: TObject);

begin

close;

end;

end.

unit UDM;

interface

uses

SysUtils, Classes, DB, ADODB;

type

TDM = class (TDataModule)

DataSource1: TDataSource;

ADOCommand1: TADOCommand;

ADOConnection1: TADOConnection;

ADOQuery1: TADOQuery;

private

{Private declarations}

public

{Public declarations}

end;

var

DM: TDM;

implementation

{$ R *. dfm}

end.

unit UList;

interface

uses

Windows,

SysUtils,

Messages,

Classes,

Graphics,

Controls,

Forms,

Dialogs,

StdCtrls,

ExtCtrls,

FileCtrl,

Menus,

ComCtrls,

MMMPType,

MMMpeg,

MMWaveIO,

MMRiff;

type

TPlaylistEditor = class (TForm)

OKButton: TButton;

CancelButton: TButton;

MainMenu1: TMainMenu;

File1: TMenuItem;

Label5: TLabel;

Label6: TLabel;

PlayListBox: TListBox;

AddButton: TButton;

RemoveButton: TButton;

ClearButton: TButton;

RandomizeButton: TButton;

FileListBox: TFileListBox;

DirectoryListBox1: TDirectoryListBox;

DriveComboBox1: TDriveComboBox;

Bevel1: TBevel;

NewPlaylist1: TMenuItem;

OpenPlaylist1: TMenuItem;

SavePlaylist1: TMenuItem;

SavePlaylistAs1: TMenuItem;

AppendPlaylist1: TMenuItem;

N1: TMenuItem;

Exit1: TMenuItem;

OpenDialog: TOpenDialog;

SaveDialog: TSaveDialog;

InfoLabel: TLabel;

procedure ListMouseUp (Sender: TObject; Button: TMouseButton;

Shift: TShiftState; X, Y: Integer);

procedure ListKeyUp (Sender: TObject; var Key: Word;

Shift: TShiftState);

procedure FormShow (Sender: TObject);

procedure ListDrawItem (Control: TWinControl; Index: Integer;

Rect: TRect; State: TOwnerDrawState);

procedure FormCreate (Sender: TObject);

procedure FormDestroy (Sender: TObject);

procedure ClearButtonClick (Sender: TObject);

procedure RandomizeButtonClick (Sender: TObject);

procedure AddButtonClick (Sender: TObject);

Додаток А (продовження)

procedure RemoveButtonClick (Sender: TObject);

procedure ListDragOver (Sender, Source: TObject; X, Y: Integer;

State: TDragState; var Accept: Boolean);

procedure ListDragDrop (Sender, Source: TObject; X, Y: Integer);

procedure ListEndDrag (Sender, Target: TObject; X, Y: Integer);

procedure FormHide (Sender: TObject);

procedure Exit1Click (Sender: TObject);

procedure NewPlaylist1Click (Sender: TObject);

procedure OpenPlaylist1Click (Sender: TObject);

procedure SavePlaylist1Click (Sender: TObject);

procedure SavePlaylistAs1Click (Sender: TObject);

procedure AppendPlaylist1Click (Sender: TObject);

private

FListName: TFileName;

DragTarget: TListBox;

aTimer: TTimer;

aBitmap1: TBitmap;

aBitmap2: TBitmap;

aIcon: TIcon;

oldIndex: integer;

oldCaption: String;

procedure CreateParams (var Params: TCreateParams); override;

procedure SetListName (aValue: TFileName);

procedure SetButtons;

function FirstSelection (aList: TCustomListBox): Integer;

function LastSelection (aList: TCustomListBox): Integer;

function FindIndex (aList: TListBox; aPos: TPoint): integer;

procedure ClearSelected (aList: TCustomListBox);

procedure AddSelected (aIndex: integer);

procedure ResortSelected (aIndex: integer);

procedure RemoveSelected;

procedure DrawIndexPtr (oldIndex, newIndex: integer);

procedure DragTimerExpired (Sender: TObject);

procedure UpdatePlayListBox;

procedure SetFileInfo;

public

TempPlayList: TStringList;

ListChanged: Boolean;

property ListName: TFileName read FListName write SetListName;

end;

var

PlaylistEditor: TPlaylistEditor;

function LoadPlayList (FileName: TFileName; aPlayList: TStringList): Boolean;

function SavePlayList (FileName: TFileName; aPlayList: TStringList): Boolean;

implementation

uses umain;

{$ R *. DFM}

const

crTrackDrag = 1;

crTrackAdd = 2;

crTrackDelete = 3;

{------------------------------------------------- -----------------------}

function LoadPlayList (FileName: TFileName; aPlayList: TStringList): Boolean;

var

i: integer;

F: TextFile;

S: String;

Додаток А (продовження)

begin

i: = 0;

if (FileName <>'') and FileExists (FileName) then

begin

AssignFile (F, FileName);

{$ I +}

Reset (F);

try

while not EOF (F) do

begin

ReadLn (F, S);

if (S <>'') then

begin

if FileExists (S) then

begin

if IsMpegFile (S) or wioIsWaveFile (S, RIFF_FILE) then

begin

aPlayList.Add (S);

inc (i);

end

else

MessageDlg (S + 'is not a valid Audiofile', mtError, [mbOK], 0);

end;

end;

end;

finally

CloseFile (F);

end;

{$ I +}

end;

Result: = (i> 0);

end;

{------------------------------------------------- -----------------------}

function SavePlayList (FileName: TFileName; aPlayList: TStringList): Boolean;

var

i: integer;

F: TextFile;

begin

Result: = True;

if (FileName <>'') then

begin

AssignFile (F, FileName);

{$ I-}

Rewrite (F);

try

if (IOResult <> 0) then Result: = False

else

begin

for i: = 0 to aPlayList.Count-1 do

begin

WriteLn (F, aPlayList [i]);

if (IOResult <> 0) then

begin

Result: = False;

break;

end;

end;

end;

finally

CloseFile (F);

end;

{$ I +}

end;

end;

Додаток А (продовження)

{- TPlayListEditor ---------------------------------------------- -------}

procedure TPlayListEditor.CreateParams (var Params: TCreateParams);

begin

inherited CreateParams (Params);

Params.Style: = Params.Style and not WS_SIZEBOX;

end;

{- TPlayListEditor ---------------------------------------------- -------}

procedure TPlaylistEditor.FormCreate (Sender: TObject);

begin

oldCaption: = Caption;

TempPlayList: = TStringList.Create;

ListName: = 'noname.m3u';

aTimer: = TTimer.Create (Self);

aTimer.Interval: = 50;

aTimer.Enabled: = False;

aTimer.OnTimer: = DragTimerExpired;

aBitmap1: = TBitmap.Create;

aBitmap2: = TBitmap.Create;

aBitmap1.Handle: = LoadBitmap (HInstance, 'BM_NOTE');

aBitmap2.Width: = aBitmap1.Width;

aBitmap2.Height: = aBitmap1.Height;

BitBlt (aBitmap2.Canvas.Handle, 0,0, aBitmap1.Width, aBitmap1.Height,

aBitmap1.Canvas.Handle, 0,0, NOTSRCCOPY);

aIcon: = TIcon.Create;

aIcon.Handle: = LoadIcon (HInstance, 'MARKERICON');

Icon.Handle: = LoadIcon (HInstance, 'PLAYLISTICON');

oldIndex: = -1;

Screen.Cursors [crTrackDrag]: = LoadCursor (HInstance, 'CR_TRACKDRAG');

Screen.Cursors [crTrackAdd]: = LoadCursor (HInstance, 'CR_TRACKADD');

Screen.Cursors [crTrackDelete]: = LoadCursor (HInstance, 'CR_TRACKDELETE');

DragTarget: = Nil;

end;

{- TPlayListEditor ---------------------------------------------- -------}

procedure TPlaylistEditor.FormDestroy (Sender: TObject);

begin

aTimer.Free;

aBitmap1.Free;

aBitmap2.Free;

aIcon.Free;

TempPlayList.Free;

end;

{- TPlayListEditor ---------------------------------------------- -------}

procedure TPlaylistEditor.FormShow (Sender: TObject);

begin

PlayListBox.Clear;

TempPlayList.Assign (MainForm.PlayList);

ListName: = MainForm.PlayListName;

UpdatePlayListBox;

ListChanged: = not ((ListName <>'') and (ListName <> 'noname.m3u'));

SetFileInfo;

SetButtons;

end;

{- TPlayListEditor ---------------------------------------------- -------}

procedure TPlaylistEditor.FormHide (Sender: TObject);

begin

Додаток А (продовження)

if ModalResult = mrOK then

begin

if ListChanged then

if MessageDlg ('Ñîõðàíèòü èçìåíåíèÿ â ïëåéëèñòå?', mtConfirmation, [mbYes, mbNo], 0) = mrYes then

begin

if (ListName <> 'noname.m3u') then

SavePlaylist1Click (nil)

else

SavePlaylistAs1Click (nil);

end;

end;

end;

{- TPlayListEditor ---------------------------------------------- -------}

procedure TPlayListEditor.SetListName (aValue: TFileName);

begin

FListName: = aValue;

Caption: = oldCaption;

if FListName <>''then

Caption: = Caption + '-' + FListName;

end;

{- TPlayListEditor ---------------------------------------------- -------}

procedure TPlaylistEditor.SetButtons;

begin

AddButton.Enabled: = (FileListBox.SelCount> 0);

RemoveButton.Enabled: = (PlayListBox.SelCount> 0);

ClearButton.Enabled: = (PlayListBox.Items.Count> 0);

RandomizeButton.Enabled: = (PlayListBox.Items.Count> 0);

end;

{- TPlayListEditor ---------------------------------------------- -------}

procedure TPlayListEditor.UpdatePlayListBox;

var

i: integer;

begin

PlayListBox.Clear;

for i: = 0 to TempPlayList.Count-1 do

PlayListBox.Items.Add (ExtractFileName (TempPlayList [i]));

end;

{- TPlayListEditor ---------------------------------------------- -------}

procedure TPlayListEditor.SetFileInfo;

var

FileName, S: String;

lpwio: PWaveIOCB;

MpegInfo: TMpegFileInfo;

begin

if (TempPlayList.Count> 0) and (PlayListBox.ItemIndex> = 0) then

begin

FileName: = TempPlayList [PlayListBox.ItemIndex];

if IsMpegFile (FileName) then

begin

if GetMpegFileInfo (FileName, MpegInfo) then

begin

S: = 'ISO MPEG';

with MpegInfo do

begin

case Version of

v1: S: = S + '1 - ';

v2LSF: S: = S + '2 - ';

end;

case Layer of

1: S: = S + 'Layer I;';

2: S: = S + 'Layer II;';

3: S: = S + 'Layer III;';

end;

S: = S + Format ('% 2.3f kHz;% d KBit / s;', [SampleRate/1000, BitRate]);

case SampleMode of

smStereo: S: = S + 'Stereo;';

smJointStereo: S: = S + 'Joint Stereo;';

smDualChannel: S: = S + 'Dual Channel;';

smSingleChannel: S: = S + 'Mono;';

end;

InfoLabel.Caption: = S;

end;

exit;

end;

end

else if wioIsWaveFile (FileName, RIFF_FILE) then

begin

if wioReadFileInfo (lpwio, PChar (FileName),

mmioFOURCC ('W', 'A', 'V', 'E'), RIFF_FILE) = 0 then

try

InfoLabel.Caption: = 'WAVE -';

wioGetFormatName (@ lpwio.wfx, S);

InfoLabel.Caption: = InfoLabel.Caption + '' + S;

wioGetFormat (@ lpwio.wfx, S);

InfoLabel.Caption: = InfoLabel.Caption + '' + S;

exit;

finally

wioFreeFileInfo (lpwio);

end;

end;

InfoLabel.Caption: = 'Íåçíàé ÷ å çà ôàéë ...';

end

else InfoLabel.Caption: ='';

end;

{- TPlayListEditor ---------------------------------------------- -------}

function TPlaylistEditor.FirstSelection (aList: TCustomListBox): Integer;

begin

for Result: = 0 to aList.Items.Count - 1 do

if aList.Selected [Result] then exit;

Result: = LB_ERR;

end;

{- TPlayListEditor ---------------------------------------------- -------}

function TPlaylistEditor.LastSelection (aList: TCustomListBox): Integer;

begin

for Result: = aList.Items.Count - 1 downTo 0 do

if aList.Selected [Result] then exit;

Result: = LB_ERR;

end;

{- TPlayListEditor ---------------------------------------------- -------}

function TPlaylistEditor.FindIndex (aList: TListBox; aPos: TPoint): integer;

begin

with aList do

begin

Result: = ItemAtPos (aPos, False);

if Items.Count> (Height div ItemHeight) -1 then

if Result = TopIndex + (Height div ItemHeight) -1 then

if aPos.Y> Height-(ItemHeight div 2) then

inc (Result);

end;

end;

{- TPlayListEditor ---------------------------------------------- -------}

procedure TPlaylistEditor.ClearSelected (aList: TCustomListBox);

Var

aIndex: integer;

begin

aIndex: = FirstSelection (aList);

Додаток А (продовження)

if aIndex> LB _ Err then

begin

while aIndex <= LastSelection (aList) do

begin

if aList.Selected [aIndex] then

begin

aList.Selected [aIndex]: = False;

ListChanged: = True;

end;

inc (aIndex);

end;

SetFileInfo;

end;

end;

{- TPlayListEditor ---------------------------------------------- -------}

procedure TPlaylistEditor.AddSelected (aIndex: integer);

Var

i: Integer;

begin

with TempPlayList do

begin

if (aIndex = -1) then aIndex: = Count;

for i: = 0 to FileListBox.Items.Count - 1 do

begin

if FileListBox.Selected [i] then

begin

Insert (aIndex, FileListBox.Items [i]);

ListChanged: = True;

inc (aIndex);

end;

end;

UpdatePlayListBox;

if aIndex> = PlayListBox.Height div PlayListBox.ItemHeight then

PlayListBox.TopIndex: = aIndex-((PlayListBox.Height div PlayListBox.ItemHeight) -1);

end;

end;

{- TPlayListEditor ---------------------------------------------- -------}

procedure TPlaylistEditor.ResortSelected (aIndex: integer);

Var

i: Integer;

begin

if (PlayListBox.Items.Count> 1) then

with PlayListBox do

begin

if (aIndex = -1) then aIndex: = 0;

i: = 0;

while i <Items.Count do

begin

if Selected [i] then

begin

Selected [i]: = False;

ListChanged: = True;

if aIndex> i then

begin

TempPlayList.Move (i, aIndex-1);

Items.Move (i, aIndex-1);

dec (i);

end

else

begin

Додаток А (продовження)

TempPlayList.Move (i, aIndex);

Items.Move (i, aIndex);

inc (aIndex);

end;

end;

inc (i);

end;

if (Items.Count> 0) then

begin

TopIndex: = 0;

Selected [0]: = True;

Selected [0]: = False;

end;

end;

end;

{- TPlayListEditor ---------------------------------------------- -------}

procedure TPlaylistEditor.RemoveSelected;

Var

i: Integer;

begin

with PlayListBox do

begin

ItemIndex: = 0;

for i: = Items.Count - 1 downTo 0 do

if Selected [i] then

begin

Items.Delete (i);

TempPlayList.Delete (i);

ListChanged: = True;

end;

if (Items.Count> 0) then

begin

TopIndex: = 0;

Selected [0]: = True;

Selected [0]: = False;

end;

end;

end;

{- TPlayListEditor ---------------------------------------------- -------}

procedure TPlaylistEditor.ListMouseUp (Sender: TObject;

Button: TMouseButton; Shift: TShiftState; X, Y: Integer);

begin

if Button = mbLeft then

begin

if (Sender = PlayListBox) then SetFileInfo;

SetButtons;

end;

end;

{- TPlayListEditor ---------------------------------------------- -------}

procedure TPlaylistEditor.ListKeyUp (Sender: TObject; var Key: Word;

Shift: TShiftState);

begin

if (Sender = PlayListBox) then SetFileInfo;

SetButtons;

end;

{- TPlayListEditor ---------------------------------------------- -------}

procedure TPlaylistEditor.ListDrawItem (Control: TWinControl;

Index: Integer; Rect: TRect; State: TOwnerDrawState);

Var

Offset: Integer;

begin

with (Control as TListBox), (Control as TListBox). Canvas do

begin

FillRect (Rect);

Offset: = 1;

if (odSelected in State) then

BrushCopy (Bounds (Rect.Left + Offset, Rect.Top,

aBitmap2.Width, aBitmap2.Height),

aBitmap2,

Bounds (0, 0, aBitmap2.Width, aBitmap2.Height),

clBlack)

else

BrushCopy (Bounds (Rect.Left + Offset, Rect.Top,

aBitmap1.Width, aBitmap1.Height),

aBitmap1,

Bounds (0, 0, aBitmap1.Width, aBitmap1.Height),

clWhite);

Offset: = Offset + aBitmap1.Width + 5;

TextOut (Rect.Left + Offset, Rect.Top, Items [Index]);

end;

end;

{- TPlayListEditor ---------------------------------------------- -------}

procedure TPlaylistEditor.AddButtonClick (Sender: TObject);

begin

AddSelected (-1);

SetButtons;

end;

{- TPlayListEditor ---------------------------------------------- -------}

procedure TPlaylistEditor.RemoveButtonClick (Sender: TObject);

begin

RemoveSelected;

SetButtons;

end;

{- TPlayListEditor ---------------------------------------------- -------}

procedure TPlaylistEditor.ClearButtonClick (Sender: TObject);

begin

TempPlayList.Clear;

PlayListBox.Clear;

ListChanged: = True;

SetFileInfo;

SetButtons;

end;

{- TPlayListEditor ---------------------------------------------- -------}

procedure TPlaylistEditor.RandomizeButtonClick (Sender: TObject);

var

i, j: integer;

begin

Randomize;

for i: = 0 to TempPlayList.Count-1 do

begin

j: = Random (TempPlayList.Count);

TempPlayList.Move (i, j);

PlayListBox.Items.Move (i, j);

end;

ListChanged: = True;

SetButtons;

end;

{- TPlayListEditor ---------------------------------------------- -------}

procedure TPlaylistEditor.DragTimerExpired (Sender: TObject);

Var

Додаток А (продовження)

MousePos: TPoint;

begin

if DragTarget <> Nil then

begin

GetCursorPos (MousePos);

MousePos: = ScreenToClient (MousePos);

with DragTarget do

begin

if (MousePos.X> Left) And (MousePos.X <Left + Width) then

begin

{Scroll the listbox up}

if (MousePos.Y <Top) And (TopIndex> 0) then

TopIndex: = TopIndex - 1

else

{Scroll the listbox down}

if (MousePos.Y> Top + Height) And (TopIndex <Items.Count - (Height div ItemHeight)) then

TopIndex: = TopIndex + 1;

end;

end;

end;

end;

{- TPlayListEditor ---------------------------------------------- -------}

procedure TPlaylistEditor.DrawIndexPtr (oldIndex, newIndex: integer);

const

Offset: integer = 2;

begin

with Canvas do

begin

if oldIndex <> LB_Err then

begin

with PlayListBox do

oldIndex: = (oldIndex - TopIndex) * ItemHeight + Top - 5;

Brush.Color: = Self.Color;

FillRect (Rect (Offset, oldIndex,

Offset +15,

oldIndex +15));

end;

if newIndex <> LB_Err then

begin

with PlayListBox do

newIndex: = (newIndex - TopIndex) * ItemHeight + Top - 5;

Draw (Offset, newIndex, aIcon);

end;

end;

end;

{- TPlayListEditor ---------------------------------------------- -------}

procedure TPlaylistEditor.ListDragOver (Sender, Source: TObject;

X, Y: Integer; State: TDragState;

Var Accept: Boolean);

Var

curIndex: integer;

begin

if (Source is TCustomListBox) And (Sender is TCustomListBox) then

begin

Accept: = True;

{Set the right drag cursors}

if (State = dsDragEnter) then

begin

if Source = PlayListBox then

begin

if Sender = PlayListBox then

Додаток А (продовження)

TListBox (Source). DragCursor: = crTrackDrag

else

TFileListBox (Source). DragCursor: = crTrackDelete;

end

else

begin

if Sender = FileListBox then

TFileListBox (Source). DragCursor: = crTrackDrag

else

TListBox (Source). DragCursor: = crTrackAdd;

end;

aTimer.Enabled: = False;

DragTarget: = TListBox (Sender);

end

else if (State = dsDragLeave) then

aTimer.Enabled: = True;

{Don't accept if on the scrollbars}

with TCustomListBox (Sender) do

begin

CurIndex: = ItemAtPos (Point (X, Y), False);

if CurIndex = LB_Err then Accept: = False;

end;

{Now draw the index arrow}

if (Sender = PlayListBox) then

begin

{Special case for the last visible item}

CurIndex: = FindIndex (TListBox (Sender), Point (X, Y));

if (CurIndex <> oldIndex) Or (State = dsDragLeave) then

begin

if (State = dsDragEnter) then

oldIndex: = LB_Err;

if (State = dsDragLeave) then

curIndex: = LB_Err;

DrawIndexPtr (oldIndex, curIndex);

oldIndex: = curIndex;

end;

end;

end;

end;

{- TPlayListEditor ---------------------------------------------- -------}

procedure TPlaylistEditor.ListDragDrop (Sender, Source: TObject;

X, Y: Integer);

Var

aIndex: Integer;

begin

{Make sure source and destination components are list boxes}

if (Source is TCustomListBox) and (Sender is TCustomListBox) then

begin

if (Sender = FileListBox) then

begin

{Delete selected items}

if (Source = PlayListBox) then

RemoveSelected;

end

else

begin

{Copy from one list to another}

if (Source = FileListBox) then

begin

Додаток А (продовження)

{Find destination position in list box}

aIndex: = FindIndex (TListBox (Sender), Point (X, Y));

AddSelected (aIndex);

end

else {rearrange list}

begin

{Find destination position in list box}

aIndex: = FindIndex (TListBox (Sender), Point (X, Y));

ResortSelected (aIndex);

end;

end;

end;

end;

{- TPlayListEditor ---------------------------------------------- -------}

procedure TPlaylistEditor.ListEndDrag (Sender, Target: TObject;

X, Y: Integer);

begin

aTimer.Enabled: = False;

DragTarget: = Nil;

end;

{- TPlayListEditor ---------------------------------------------- -------}

procedure TPlaylistEditor.Exit1Click (Sender: TObject);

begin

Close;

end;

{- TPlayListEditor ---------------------------------------------- -------}

procedure TPlaylistEditor.NewPlaylist1Click (Sender: TObject);

begin

if SaveDialog.Execute then

begin

TempPlayList.Clear;

PlayListBox.Clear;

ListChanged: = True;

ListName: = SaveDialog.FileName;

end;

end;

{- TPlayListEditor ---------------------------------------------- -------}

procedure TPlaylistEditor.OpenPlaylist1Click (Sender: TObject);

begin

if OpenDialog.Execute then

begin

TempPlayList.Clear;

PlayListBox.Clear;

if LoadPlayList (OpenDialog.FileName, TempPlayList) then

begin

UpdatePlayListBox;

ListChanged: = False;

ListName: = OpenDialog.FileName;

end

else MessageDlg ('Unable to load Playlist!', mtError, [mbOK], 0);

end;

end;

{- TPlayListEditor ---------------------------------------------- -------}

procedure TPlaylistEditor.SavePlaylist1Click (Sender: TObject);

begin

if SavePlayList (ListName, TempPlayList) then

begin

ListChanged: = False;

end

else MessageDlg ('Unable to save Playlist!', mtError, [mbOK], 0);

end;

Додаток А (продовження)

{- TPlayListEditor ---------------------------------------------- -------}

procedure TPlaylistEditor.SavePlaylistAs1Click (Sender: TObject);

begin

SaveDialog.InitialDir: = ExtractFilePath (ListName);

SaveDialog.FileName: = ExtractFileName (ListName);

if SaveDialog.Execute then

begin

if SavePlayList (SaveDialog.FileName, TempPlayList) then

begin

ListChanged: = False;

ListName: = SaveDialog.FileName;

end

else MessageDlg ('Unable to save Playlist!', mtError, [mbOK], 0);

end;

end;

{- TPlayListEditor ---------------------------------------------- -------}

procedure TPlaylistEditor.AppendPlaylist1Click (Sender: TObject);

begin

if OpenDialog.Execute then

begin

if LoadPlayList (OpenDialog.FileName, TempPlayList) then

begin

UpdatePlayListBox;

ListChanged: = True;

end

else MessageDlg ('Unable to append Playlist!', mtError, [mbOK], 0);

end;

end;

end.

unit UPref;

interface

uses

Windows,

Messages,

SysUtils,

Classes,

Graphics,

Controls,

Forms,

Dialogs,

ComCtrls,

Tabnotbk,

StdCtrls,

ExtCtrls,

MMObj,

MMUtils,

MMSlider,

MMRegs,

MMWaveIO,

MMWavIn,

MMWavOut,

MMSpin;

type

TPreferencesForm = class (TForm)

PageControl1: TPageControl;

OptAudio: TTabSheet;

btnOk: TButton;

btnCancel: TButton;

GroupBox1: TGroupBox;

GroupBox2: TGroupBox;

GroupBox3: TGroupBox;

PlayCombo: TComboBox;

Label1: TLabel;

Label2: TLabel;

Label3: TLabel;

Label4: TLabel;

Label6: TLabel;

radioWindow: TRadioButton;

radioThread: TRadioButton;

radioInterrupt: TRadioButton;

labelBufferSize: TLabel;

sliderBufferSize: TMMSlider;

spinBufferSize: TMMSpinButton;

procedure FormShow (Sender: TObject);

procedure BufferSizeChange (Sender: TObject);

procedure btnOkClick (Sender: TObject);

private

BufferSize: integer;

procedure UpdateBufferSize;

end;

var

PreferencesForm: TPreferencesForm;

implementation

uses umain;

{$ R *. DFM}

{================================================= =======================}

{Initialization and Settings}

{================================================= =======================}

{- TPreferencesForm ---------------------------------------------- ------}

procedure TPreferencesForm.FormShow (Sender: TObject);

var

i: integer;

begin

with MainForm do

begin

{- Audio Page -}

sliderBufferSize.Position: = WaveOut.NumBuffers;

spinBufferSize.Value: = sliderBufferSize.Position;

BufferSize: = sliderBufferSize.Position * WaveOut.BufferSize;

UpdateBufferSize;

if WaveOut.NumDevs> 0 then

begin

PlayCombo.Items.Add (WaveOutGetDeviceName (WAVE_MAPPER));

for i: = 0 to WaveOut.NumDevs-1 do

begin

PlayCombo.Items.Add (WaveOutGetDeviceName (i));

end;

PlayCombo.ItemIndex: = WaveOut.DeviceId +1;

end;

if not _win95_ then radioInterrupt.Enabled: = False;

case WaveOut.CallbackMode of

cmWindow: radioWindow.Checked: = True;

cmThread: radioThread.Checked: = True;

cmCallback: radioInterrupt.Checked: = True;

end;

end;

end;

{- TPreferencesForm ---------------------------------------------- ------}

procedure TPreferencesForm.btnOkClick (Sender: TObject);

Додаток А (продовження)

begin

with MainForm do

begin

{- Audio Page -}

WaveOut.DeviceID: = PlayCombo.ItemIndex-1;

WaveOut.NumBuffers: = BufferSize div WaveOut.BufferSize;

if radioWindow.Checked then

WaveOut.CallbackMode: = cmWindow

else if radioThread.Checked then

WaveOut.CallbackMode: = cmThread

else

WaveOut.CallbackMode: = cmCallback

end;

end;

{================================================= =======================}

{Audio Page}

{================================================= =======================}

{- TPreferencesForm ---------------------------------------------- ------}

procedure TPreferencesForm.UpdateBufferSize;

begin

labelBufferSize.Caption: = IntToStr (BufferSize div 1024) + 'Kb';

if (MainForm.WaveOut.PWaveFormat <> nil) then

labelBufferSize.Caption: = labelBufferSize.Caption + Format ('-% f seconds', [wioBytesToTime (MainForm.WaveOut.PWaveFormat, BufferSize) / 1000]);

end;

{- TPreferencesForm ---------------------------------------------- ------}

procedure TPreferencesForm.BufferSizeChange (Sender: TObject);

begin

if (Sender = sliderBufferSize) then

spinBufferSize.Value: = sliderBufferSize.Position

else

sliderBufferSize.Position: = spinBufferSize.Value;

BufferSize: = sliderBufferSize.Position * MainForm.WaveOut.BufferSize;

UpdateBufferSize;

end;

end.

unit UVideo;

interface

uses

Windows,

ShellAPI,

Messages,

SysUtils,

Classes,

Graphics,

Controls,

Forms,

Dialogs,

ExtCtrls,

Menus,

MMAbout,

MMObj,

MMAVICtl,

MMCstDlg,

MMAVI,

MMHook,

MMDesign;

type

TVideo = class (TForm)

AVIFile: TMMAVIFile;

AVIOpenDialog: TMMAVIOpenDialog;

AVIControl: TMMAVIControl;

AVIDisplay: TMMAVIVideoDisplay;

Bevel1: TBevel;

PopupMenu1: TPopupMenu;

OpenFile1: TMenuItem;

N1: TMenuItem;

Play1: TMenuItem;

Pause1: TMenuItem;

Stop1: TMenuItem;

N2: TMenuItem;

ShowDisplay1: TMenuItem;

ShowControls1: TMenuItem;

N3: TMenuItem;

Properties1: TMenuItem;

N4: TMenuItem;

Info1: TMenuItem;

MMDesigner1: TMMDesigner;

N5: TMenuItem;

SaveFrame1: TMenuItem;

SaveDialog: TSaveDialog;

procedure AVIDisplayDblClick (Sender: TObject);

procedure OpenFile1Click (Sender: TObject);

procedure FormClose (Sender: TObject; var Action: TCloseAction);

procedure PopupMenu1Popup (Sender: TObject);

procedure Play1Click (Sender: TObject);

procedure Pause1Click (Sender: TObject);

procedure Stop1Click (Sender: TObject);

procedure ShowDisplay1Click (Sender: TObject);

procedure ShowControls1Click (Sender: TObject);

procedure Properties1Click (Sender: TObject);

procedure FormCreate (Sender: TObject);

procedure FormResize (Sender: TObject);

procedure Info1Click (Sender: TObject);

procedure FormShow (Sender: TObject);

procedure SaveFrame1Click (Sender: TObject);

private

MinWidth, MinHeight: integer;

procedure WMGetMinMaxInfo (Var Msg: TWMGetMinMaxInfo); message WM_GETMINMAXINFO;

procedure SetminMax;

end;

var

Video: TVideo;

implementation

uses Upref, UMain, UMe;

{$ R *. DFM}

{- TMainForm ---------------------------------------------- --------------}

procedure TVideo.WMGetMinMaxInfo (Var Msg: TWMGetMinMaxInfo);

begin

if (MinWidth <> 0) then

begin

with Msg.MinMaxInfo ^ do

begin

ptMinTrackSize.X: = MinWidth; {Minimum width}

ptMinTrackSize.Y: = MinHeight; {Minimum height}

end;

Msg.Result: = 0; {Tell windows you have changed minmaxinfo}

end;

inherited;

Додаток А (продовження)

end;

{- TMainForm ---------------------------------------------- -------------------}

procedure TVideo.SetMinMax;

begin

MinWidth: = (Width-ClientWidth) + AVIControl.MinWidth;

MinHeight: = (Height-ClientHeight) + AVIControl.MinHeight;

if Height <MinHeight then Height: = MinHeight;

with AVIControl do

begin

if (not ShowDisplay and not ShowControls) then

begin

Bevel1.Visible: = False;

AVIControl.Visible: = False;

end

else

begin

AVIControl.Visible: = True;

Bevel1.Visible: = True;

Bevel1.Top: = 0;

end;

end;

end;

{- TMainForm ---------------------------------------------- -------------------}

procedure TVideo.FormResize (Sender: TObject);

begin

if Height <= MinHeight then

Bevel1.Visible: = False

else

with AVIControl do

if (AVIControl.ShowDisplay and ShowControls) then

begin

Bevel1.Visible: = True;

Bevel1.Top: = 0;

end;

end;

{- TMainForm ---------------------------------------------- -------------------}

procedure TVideo.FormCreate (Sender: TObject);

begin

MinWidth: = 0;

Icon.Handle: = LoadIcon (0, IDI_WINLOGO);

end;

{- TMainForm ---------------------------------------------- -------------------}

procedure TVideo.FormShow (Sender: TObject);

begin

SetMinMax;

end;

{- TMainForm ---------------------------------------------- -------------------}

procedure TVideo.FormClose (Sender: TObject; var Action: TCloseAction);

begin

AVIControl.FreeStreams;

AVIFile.CloseFile;

mainform.Visible: = true;

end;

{- TMainForm ---------------------------------------------- -------------------}

procedure TVideo.PopupMenu1Popup (Sender: TObject);

begin

with AVIControl do

begin

Play1.Enabled: = (hasAudio or hasVideo) and not Playing or Paused;

Pause1.Enabled: = Playing and not Paused;

Додаток А (продовження)

Stop 1. Enabled: = Playing;

end;

end;

{- TMainForm ---------------------------------------------- -------------------}

procedure TVideo.OpenFile1Click (Sender: TObject);

var

Idx: WORD;

begin

if AVIOpenDialog.Execute then

begin

AVIFile.FileName: = AVIOpenDialog.FileName;

Caption: = ExtractFileName (AVIOpenDialog.FileName);

AVIFile.OpenFile;

AVIControl.FreeStreams;

AVIControl.AddFile (AVIFile);

AVIDisplay.Refresh;

Icon.Handle: = ExtractassociatedIcon (0, PChar (AVIOpenDialog.FileName), Idx);

end;

end;

{- TMainForm ---------------------------------------------- -------------------}

procedure TVideo.AVIDisplayDblClick (Sender: TObject);

begin

with AVIControl do

if hasAudio or hasVideo then

begin

if not Playing or Paused then Play

else Stop;

end;

end;

{- TMainForm ---------------------------------------------- -------------------}

procedure TVideo.Play1Click (Sender: TObject);

begin

AVIControl.Play;

end;

{- TMainForm ---------------------------------------------- -------------------}

procedure TVideo.Pause1Click (Sender: TObject);

begin

AVIControl.Pause;

end;

{- TMainForm ---------------------------------------------- -------------------}

procedure TVideo.Stop1Click (Sender: TObject);

begin

AVIControl.Stop;

end;

{- TMainForm ---------------------------------------------- -------------------}

procedure TVideo.ShowDisplay1Click (Sender: TObject);

begin

with AVIControl do

begin

ShowDisplay: = not ShowDisplay;

ShowDisplay1.Checked: = ShowDisplay;

SetMinMax;

end;

end;

{- TMainForm ---------------------------------------------- -------------------}

procedure TVideo.ShowControls1Click (Sender: TObject);

begin

with AVIControl do

Додаток А (продовження)

begin

ShowControls: = not ShowControls;

ShowControls1.Checked: = ShowControls;

SetMinMax;

end;

end;

{- TMainForm ---------------------------------------------- -------------------}

procedure TVideo.Properties1Click (Sender: TObject);

begin

with TPreferencesForm.Create (Self) do

try

ShowModal;

finally

Free;

end;

end;

{- TMainForm ---------------------------------------------- -------------------}

procedure TVideo.Info1Click (Sender: TObject);

begin

autor.show;

end;

{- TMainForm ---------------------------------------------- -------------------}

procedure TVideo.SaveFrame1Click (Sender: TObject);

var

Bmp: TBitmap;

begin

if SaveDialog.Execute then

begin

/ / Make sure the display is up-to-date

AVIDisplay.Refresh;

Bmp: = TBitmap.Create;

try

Bmp.Width: = AVIDisplay.Width-2 * AVIDisplay.BevelExtend;

Bmp.Height: = AVIDisplay.Height-2 * AVIDisplay.BevelExtend;

Bmp.Canvas.CopyRect (Rect (0,0, Bmp.Width, Bmp.Height),

AVIDisplay.Canvas,

AVIDisplay.BeveledRect);

Bmp.SaveToFile (SaveDialog.FileName);

finally

Bmp.Free;

end;

end;

end;

end.

Додаток Б (обов'язковий)

Приклади звітів

Приклад Звіту Висновку на друк вмісту мультимедіа бібліотеки:

Бібліотека файлів

Назва композиції

Виконавець

Альбом

Тривалість

<Різні стовпці по запиту користувача>

Toxicity

....

SoAD

...

Toxicity

...

3:20

...


Приклад звіту виводу на друк вмісту плейлиста:

Плейліст <назва плейлиста>

Назва композиції

Виконавець

Альбом

Тривалість

<Різні стовпці по запиту користувача>

Toxicity

....

SoAD

...

Toxicity

...

3:20

...


Список літератури

[1] Архангельський А.Я. Програмування в Delphi. Підручник з класичним версіями Delphi. - М.: 00О «Біном-Пресс», 2006

[2] Голіцина О.Л., Попов І.І. Основи алгоритмізації та програмування: Учеб. посібник .- М.: ФОРУМ: ИНФРА-М, 2004

[3] Тверських Н., Microsoft Access 2000 Крок за кроком, - М., кроком,-М., Видавництво Еком., 1999

[4] Хомоненко А.Д., Циганков В.М., Мальцев М.Г. - "Бази даних", навчальний посібник.

Додати в блог або на сайт

Цей текст може містити помилки.

Програмування, комп'ютери, інформатика і кібернетика | Курсова
380.5кб. | скачати


Схожі роботи:
Лазерний програвач і його діагностика
Універсальний еволюціонізм
Універсальний вольтметр В7-26
Універсальний вольтметр В7 26
Універсальний генератор
Універсальний етикет ділового спілкування
Фольклор як універсальний тип субкультури
Різне - Редьярд Кіплінг універсальний талант
Універсальний еволюціонізм як основа сучасної наукової картини
© Усі права захищені
написати до нас