{ ========================================================================== }
unit aaplay1;
{ (c) P W Kuczora }
{ 27-го апреля 1995 }
interface
uses
SysUtils, WinTypes, WinProcs, Messages, Classes, Graphics, Controls,
Forms, Dialogs, MPlayer;
{$I AAPLAY1.INC}
const
AAPARMS_SIZE = 54;
type
AAHandle = word; { Дескриптор анимации }
AASPEED = word; { Тип, содержащий скорость анимации }
AATRN = word; { Тип для хранения перехода анимации }
dword = longint;
{
Структура параметра должна быть использована для анимации.
}
AAPARMS = record
AA_STATUS : byte; { Текущий статус анимации }
AA_FILETYPE : byte; { Тип файла на диске }
AA_MODE : byte; { Некоторые флаги }
AA_bitpix : byte; { бит на пиксел }
AA_HWnd : HWnd; { Дескриптор окна для статусного сообщения }
AA_X : integer; { Левая координата выводимого окна }
AA_Y : integer; { Верхняя координата выводимого окна }
AA_CX : integer; { Ширина выводимого окна }
AA_CY : integer; { Высота выводимого окна }
AA_ORGX : integer; { PoByVal в показываемой анимации }
AA_ORGY : integer; { в верхнем левом углу }
AA_SPEED : AASPEED; { Скорость анимации в миллисекундах на кадр }
AA_DESIGNSPEED : AASPEED; { Проектируемые миллисекунды на кадр }
AA_WIDTH : word; { Ширина анимации в пикселах }
AA_HEIGHT : word; { Высота анимации в пикселах }
AA_FRAMES : word; { Количество кадров в анимации }
AA_POSITION : dword; { Текущая кадровая позиция }
AA_LOOPS : dword; { Конечная позиция анимации }
AA_RPTSOUND : word; { Количество повторов звука }
AA_PAUSE : word; { Количество миллисекунд замораживания кадра }
AA_DELAYSND : longint; { Задержка звука в миллисекундах }
AA_TRANSIN : byte; { Переход в начале анимации }
AA_TRANSOUT : byte; { Переход в конце анимации }
AA_TIMEIN : word; { Продолжительность входного перехода в миллисекундах }
AA_TIMEOUT : word; { Продолжительность выходного перехода в миллисекундах }
AA_CALLBACK : HWnd; { Сообщение окна обратного вызова }
AA_ANIMWND : Hwnd; { Дескриптор окна анимации }
end;
AAPARMSPtr = ^AAPARMS;
{type}
TAAPlayer = class(TMediaPlayer)
procedure OpenAA;
private
{ Private declarations }
protected
{ Protected declarations }
public
{ Public declarations }
AAParameters: AAPARMS;
FlicHandle: AAHandle;
PlayWinHandle: THandle;
StatusWinHandle: THandle;
CallbackWinHandle: THandle;
published
{ Published declarations }
end;
procedure Register;
{ Внешние вызовы AAPLAY.DLL }
function aaOpen : boolean;
procedure aaClose;
function aaGetCaps(wType: word) : word;
function aaLoad(lpzFileName: PChar; WinHnd: HWnd; wMode: word;
x, y, wid, hght, orgx, orgy: integer): AAHandle;
function aaReLoad(hAa: AAHandle; lpzFileName: PChar; wMode, wMask: word)
: boolean;
function aaUnload(hAa: AAHandle): boolean;
function aaPlay(hAa: AAHandle) : boolean;
function aaNotify(hAa: AAHandle; lPosition, lParam: longint) : boolean;
function aaCancel(hAa: AAHandle; lLoPos, lHiPos: longint) : word;
function aaStop(hAa: AAHandle) : boolean;
function aaPause(hAa: AAHandle) : boolean;
function aaPrompt(hAa: AAHandle; lpName: PChar) : boolean;
function aaGetParm(hAa: AAHandle; wType: word) : longint;
function aaGetParmIndirect(hAa: AAHandle; lpAp: AAPARMSPtr; wSize: word)
: boolean;
function aaSetParm(hAa: AAHandle; wType: word; wValue1, lValue2: longint)
: AAHandle;
function aaSetParmIndirect(hAa: AAHandle; dwType: longint; lpAp: AAPARMSPtr;
wMask: word): boolean;
function aaShow(hAa: AAHandle; bShow: boolean) : boolean;
function aaSound(hAa: AAHandle; device, ffile: PChar; wMode: word)
: boolean;
function aaGetFile(dwFlags: word; lpszPath: PChar; wBufLen: word;
lpszDriver: PChar; wDrvLen: word) : integer;
function aaSave(hAa: AAHandle; wMode: word) : integer;
implementation
{ =========================================================================== }
procedure Register;
begin
RegisterComponents('Samples', [TAAPlayer]);
end;
{ --------------------------------------------------------------------------- }
procedure TAAPlayer.OpenAA;
var
FileSuffix, tempstr: string[12];
a,b: integer;
begin
{ tempstr := ExtractFilename(AAPlayer.Filename); }
{ a := StrPos(tempstr,'.');
if (a > 0) then
begin
b := a;
while (b <= StrLen(tmpstr)) do
begin
FileSuffix := FileSuffix + StrUpper(tempstr[b]);
b := b+1;
end;
if ((FileSuffix = '.FLC') or (FileSuffix = '.FLI')) then
begin}
{ AutoEnable := False;
EnabledButtons := [btRecord,btEject];
} {end;
end;
}
end;
{ =========================================================================== }
{ Внешние вызовы 'AAPLAY.DLL' }
{$F+}
{ =========================================================================== }
{ --------------------------------------------------------------------------- }
function aaOpen : boolean;
external 'AAPLAY';
{ --------------------------------------------------------------------------- }
procedure aaClose;
external 'AAPLAY';
{
' AAOpen и AAClose в действительности не нужны, за исключением обработки
' ошибки в Windows, которая предохраняет освобождение библиотек в процедуре
' выхода Windows (Windows Exit Proc, WEP).
'
' Поэтому мы используем AAClose для освобождения библиотек при закрытии
' последней задачей AAPlay DLL.
}
{ --------------------------------------------------------------------------- }
function aaGetCaps(wType: word) : word;
external 'AAPLAY';
{
' Получение возможностей
}
{ --------------------------------------------------------------------------- }
function aaLoad(lpzFileName: PChar; WinHnd: HWnd; wMode: word;
x, y, wid, hght, orgx, orgy: integer): AAHandle;
external 'AAPLAY';
{
' aaLoad загружает анимацию.
'
' Имя файла в lpzFileName
' и режим загрузки в wMode.
}
{ --------------------------------------------------------------------------- }
function aaReLoad(hAa: AAHandle; lpzFileName: PChar; wMode, wMask: word)
: boolean;
external 'AAPLAY';
{
' aaReLoad загружает файл новый анимации
' "в дескриптор" старой анимации.
'
' Уведомления теряются, но палитра и окно
' сохраняются.
}
{ --------------------------------------------------------------------------- }
function aaUnload(hAa: AAHandle): boolean;
external 'AAPLAY';
{
' aaUnload выгружает загруженную анимацию.
'
' Возвращается FALSE, если
' hAa не является дескриптором загруженной анимации.
}
{ --------------------------------------------------------------------------- }
function aaPlay(hAa: AAHandle) : boolean;
external 'AAPLAY';
{
' aaPlay воспроизводит загруженную анимацию.
'
' Возвращается TRUE, если после возврата aaPlay анимация не останавливается.
}
{ --------------------------------------------------------------------------- }
function aaNotify(hAa: AAHandle; lPosition, lParam: longint) : boolean;
external 'AAPLAY';
{
' aaNotify позволяет извещать приложение о воспроизведении
' определенных кадров анимации.
'
' lPosition -позиция, в которой должно происходить уведомление.
'
' wParam для данного сообщения - hAa, а lParam копируется из этого вызова.
'
' Возвращается TRUE, если уведомление установлено.
}
{ --------------------------------------------------------------------------- }
function aaCancel(hAa: AAHandle; lLoPos, lHiPos: longint) : word;
external 'AAPLAY';
{
' aaCancel позволяет приложению отменить уведомления, установленные aaNotify.
'
' lLoPos и lHiPos задает верхний и нижний предел позициям.
'
' Возвращает количество отмененных уведомлений.
}
{ --------------------------------------------------------------------------- }
function aaStop(hAa: AAHandle) : boolean;
external 'AAPLAY';
{
' aaStop прекращает воспроизведение анимации.
'
' При остановке воспроизведения aaStop возвращает TRUE.
}
{ --------------------------------------------------------------------------- }
function aaPause(hAa: AAHandle) : boolean;
external 'AAPLAY';
{
' aaPause приостанавливает воспроизведение.
'
' Возвращается TRUE, если после возврата aaPause анимация переходит в режим паузы.
'
' Для продолжения воспроизведения анимации используйте aaPlay.
}
{ --------------------------------------------------------------------------- }
function aaPrompt(hAa: AAHandle; lpName: PChar) : boolean;
external 'AAPLAY';
{
' aaPrompt позволяет выводить диалог для получения данных от пользователя.
'
' При получении данных дескриптор меняется, и, таким образом, вступают
' в силу новые параметры. Старый дескриптор не уничтожается до тех пор,
' пока не будет создан новый.
'
' Если новый дескриптор не может быть создан, aaPrompt возвращает NULL,
' в противном случае возвращается новый дескриптор.
}
{ --------------------------------------------------------------------------- }
function aaGetParm(hAa: AAHandle; wType: word) : longint;
external 'AAPLAY';
{
' aaGetParm возвращает информацию об анимации.
'
' Некоторая информация может быть установлена с помощью aaSetParm,
' и другая информация - информация о состоянии, поддерживаемая AAPLAY.
}
{ --------------------------------------------------------------------------- }
function aaGetParmIndirect(hAa: AAHandle; lpAp: AAPARMSPtr; wSize: word)
: boolean;
external 'AAPLAY';
{
' aaGetParmIndirect возвращает ту же информацию, что и aaGetParm,
' в структуре, удобной для легкого доступа из приложений Visual Basic.
}
{ --------------------------------------------------------------------------- }
function aaSetParm(hAa: AAHandle; wType: word; wValue1, lValue2: longint)
: AAHandle;
external 'AAPLAY';
{
' aaSetParm устанавливает информацию для анимации
}
{ --------------------------------------------------------------------------- }
function aaSetParmIndirect(hAa: AAHandle; dwType: longint; lpAp: AAPARMSPtr;
wMask: word): boolean;
external 'AAPLAY';
{
' aaSetParmIndirect устанавливает параметры анимации из структуры.
}
{ --------------------------------------------------------------------------- }
function aaShow(hAa: AAHandle; bShow: boolean) : boolean;
external 'AAPLAY';
{
' aaShow позволяет показать в окне отдельный кадр анимации.
'
' Mode определяет способ рисования анимации.
'
' Параметры окна возможно задать с помощью aaSetParm или aaSetParmIndirect.
'
' aaShow возвращает TRUE, если анимация была отрисована без ошибок.
}
{ --------------------------------------------------------------------------- }
function aaSound(hAa: AAHandle; device, ffile: PChar; wMode: word)
: boolean;
external 'AAPLAY';
{
' aaSound открывает и закрывает канал звукового сопровождения анимации.
'
' Звуковой канал будет открыт, если аргумент file не будет равен null
' и не будет пустым, в противном случае канал будет закрыт.
'
' Если устройство равно null, то для выбора подходящего устройства
' используется формат файла.
}
{ --------------------------------------------------------------------------- }
function aaGetFile(dwFlags: word; lpszPath: PChar; wBufLen: word;
lpszDriver: PChar; wDrvLen: word) : integer;
external 'AAPLAY';
{
' Открывает системного диалоговое окно стандартного типа ("открыть файл"),
' предлагающее пользователю выбрать файл.
'
' <dwFlags> определяет характеристики диалогового окна.
' Список возможных флагов:
' AA_GETFILE_MUSTEXIST Выбранный файл должен удовлетворять условиям
' флагов OpenFile(), в противном случае диалог
' издаст системный звук.
' AA_GETFILE_NOSHOWSPEC НЕ показывать путь в поле редактирования.
' По умолчанию путь к файлу показывается.
' AA_GETFILE_SAVE Кнопка Ok имеет заголовок "Save".
' AA_GETFILE_OPEN Кнопка Ok имеет заголовок "Open".
' AA_GETFILE_USEFILE Взять имя файла из параметра lpszPath
' AA_GETFILE_UDEDIR Взять каталог из параметра lpszPath
' AA_GETFILE_SOUND Получить звуковой файл и драйвер
' AA_GETFILE_SCRIPT Получить файл со скриптом
' AA_GETFILE_ANIMATION Получить файл анимации (без скриптов)
'
' <lpszPath> - строковый буфер LPSTR, куда после выполнения диалога
' пишется полное имя пути.
' <wBufLen> - длина данного буфера.
'
' <lpszDriver> - строковый буфер LPSTR для хранения выбранного
' звукового устройства.
' <wDrvLen> - длина данного буфера.
'
' Возвращаемые значения: 0, если была нажата кнопка Cancel
' -1, если OpenFile() потерпело неудачу,
' а AA_GETFILE_MUSTEXIST не определен.
' В противном случае возвращается дескриптор DOS-файла.
' При возврате из aaOpenFile данный дескриптор "не открыт".
}
{ --------------------------------------------------------------------------- }
function aaSave(hAa: AAHandle; wMode: word) : integer;
external 'AAPLAY';
{
' Сохранение скрипта
}
{ --------------------------------------------------------------------------- }
{$F-}
{ Окончание внешних вызовов 'AAPLAY.DLL' }
{ =========================================================================== }
end.
{ =========================================================================== }
|