Компонент для работы с FLIC-анимацией
Новостная группа: comp.lang.pascal.delphi.components
Тема: Компонент для работы с FLIC-анимацией: отправной пункт.
От: Paul Kuczora <paul@kuczora.demon.co.uk>
Дата: Чет, 03 Авг 95 16:51:19 GMT
В качество ответа на целый круг вопросов, я включил в свой ответ два файла: aaplay1.inc - include-файл с интерфейсом для библиотеки aaplay.dll aaplay1.pas - сырой скелет компонента для проигрывания FLIC-анимации Я разработал это глядя на другой компонент (это был полнофункциональный плейер, работающий как форма), и вынужден был сохранить некоторые вещи неприкосновенными (попробуй тут сделай иначе :-)
Для работы вам понадобится библиотека aaplay.dll от Autodesk, которую вы можете найти на множестве мест (например, я так предполагаю, на Encarta CD). Для полного счастья вы можете обратиться к файлу помощи для Animation Player for Windows, который, не удивляйтесь, содержит справку для этой DLL - на первой странице найдите в ее самой нижней части указание на эту библиотеку, и перед вами предстанет полная справка по вызовам этой самой DLL.
Надеюсь что помог вам. . .
ВНИМАНИЕ! Это мой первый код, написанный для Windows (спасибо Delphi), поэтому он рекомендуется только для ознакомления.
{ ============================================================================ } { aaplay1.inc } { (c) P W Kuczora } { 17-го апреля 1995 } { Заголовочный файл, содержащий константы и определения типов для aaplay1.pas } const NULL = 0; NULLPTR = ^0; { Доступные Флаги wMode: integer; Используются в aaLoad, aaReLoad Первые восемь бит wMode используются в aa_flags. } AA_MEMORYLOAD = $1; { Загрузка в память } AA_HIDEWINDOW = $2; { Скрывать окно анимации } AA_NOPALETTE = $4 ; { Анимация без палитры } AA_RESERVEPALETTE = $8; { Резервировать при старте всю палитру } AA_LOOPFRAME = $10; { Циклическая загрузка кадров } AA_FULLSCREEN = $20; { Использовать полноэкранный режим воспроизведения } AA_STOPNOTIFY = $40; { Исключать любые уведомляющие сообщения } AA_STOPSTATUS = $80; { Исключать сообщения об изменении статуса } AA_NOFAIL = $100; { Уменьшение типа нагрузки при ошибке } AA_DONTPAINT = $200; { Не делать paByVal-анимацию при загрузке } AA_BUILDSCRIPT = $400; { lpzFileName - скрипт, не имя } AA_ALLMODES = $FF; { Доступные флаги для режимов звука - wMode: integer; Используются в aaSound } AA_SNDFREEZE = $1; { Заморозка кадров при проигрывании звуков } AA_SNDDEVICEID = $100; { ID устройства, не имя } AA_SNDBUILDALIAS = $200; { создавать псевдоним звукового устройства } { aaNotify позволяет извещать приложение о проигрывании определенных кадров. lPosition - позиция, на которой должно происходить уведомление. wParam для этого сообщения - hAa, а lParam копируется из этого вызова. При установке сообщения возвращается TRUE. Следующее значение определяет необходимость завершения цикла анимации по окончании проигрывания звука. Если звук отсутствует, анимация зацикливается навсегда. } AA_LOOPSOUND = $FFFF; { Автоматическое уведомление посылается при перезагрузке в скрипте анимации. lParam для этого сообщения определен ниже } AA_ANIMATIONLOADED = 0; { Типы параметров Используется с aaGetParm и aaSetParm. } AA_STATUS = 1; { Получить текущий статус } AA_FILETYPE = 2; { Получить тип анимации на диске } AA_MODE = 3; { Получить/установить флаги анимации } AA_WINDOW = 4; { Установить/получить окно анимации } AA_SPEED = 5; { Установить/получить текущую скорость } AA_DESIGNSPEED = 6; { Получить скорость на этапе дизайна } AA_FRAMES = 7; { Получить число кадров } AA_POSITION = 8; { Установить/получить позицию текущего кадра } AA_LOOPS = 9; { Установить/получить число циклов } AA_X = 10; { Установить/получить позицию выводимого окна } AA_Y = 11; { Установить/получить позицию выводимого окна } AA_CX = 12; { Установить/получить размеры выводимого окна } AA_CY = 13; { Установить/получить размеры выводимого окна } AA_ORGX = 14; { Установить/получить начало выводимого окна } AA_ORGY = 15; { Установить/получить начало выводимого окна } AA_WIDTH = 16; { Получить ширину анимации } AA_HEIGHT = 17; { Получить высоту анимации } AA_RPTSOUND = 18; { Установить/получить повторения звуков } AA_PAUSE = 19; { Установить/получить время паузы } AA_DELAYSND = 20; { Установить/получить время задержки звука } AA_TRANSIN = 21; { Установить/получить тип входного перехода } AA_TRANSOUT = 22; { Установить/получить тип выходного перехода } AA_TIMEIN = 23; { Установить/получить время входного перехода } AA_TIMEOUT = 24; { Установить/получить время выходного перехода } AA_CALLBACK = 25; { Установить/получить окно обратного вызова } AA_ANIMWND = 26; { Получить дескриптор окна анимации } AA_MODFLAG = 100; { Установить/получить флаг изменения скрипта } AA_SCRIPTNAME = 101; { Установить/получить имя скрипта } AA_ANIMATION = 102; { Получить/установить скрипт анимации } AA_ANIMATIONCOUNT = 103; { Получить счетчик скрипта анимации } AA_SCRIPTCONTENTS = 104; { Получить содержание скрипта } AA_LASTERROR = 1001; { Получить код последней ошибки } AA_LASTERRORMESSAGE = 1002; { Получить/установить сообщение о последней ошибке } { Типы параметров Используется с aaSetParmIndirect } AA_SETMODE = $1; { Получить/установить флаги анимации } AA_SETWINDOW = $2; { Установить/получить окно анимации } AA_SETSPEED = $4; { Установить/получить текущую скорость } AA_SETPOSITION = $8; { Установить/получить позицию текущего кадра } AA_SETLOOPS = $10; { Установить/получить число циклов } AA_SETX = $20; { Установить/получить левую координату выводимого окна } AA_SETY = $40; { Установить/получить левую координату выводимого окна } AA_SETCX = $80; { Установить/получить верхнюю координату выводимого окна } AA_SETCY = $100; { Установить/получить верхнюю координату выводимого окна } AA_SETORGX = $200; { Установить/получить ширину выводимого окна } AA_SETORGY = $400; { Установить/получить ширину выводимого окна } AA_SETRPTSOUND = $800; { Установить/получить повторения звуков } AA_SETPAUSE = $1000; { Установить/получить время паузы } AA_SETDELAYSND = $2000; { Установить/получить время задержки звука } AA_SETTRANSIN = $4000; { Установить/получить тип входного перехода } AA_SETTRANSOUT = $8000; { Установить/получить тип выходного перехода } AA_SETTIMEIN = $10000; { Установить/получить время входного перехода } AA_SETTIMEOUT = $20000; { Установить/получить время выходного перехода } AA_SETCALLBACK = $40000; { Установить/получить окно обратного вызова } AA_ALL = $FFFFFFFF; { Получить/установить все параметры } { Значения статуса для анимации } AA_STOPPED = 1; { Загружена, но не воспроизводится } AA_QUEUED = 2; { Анимация ожидает воспроизведение } AA_PLAYING = 3; { Анимация воспроизводится } AA_PAUSED = 4; { Анимация в режиме паузы } AA_DONE = 5; { Анимация закончила воспроизведение } { и ожидает вызов aaStop } { Определения типов файла } AA_FLI = $1; { Формат Autodesk Animator Fli } AA_DIB = $2; { Формат Windows DIB } AA_NUMTYPES = $2; { Количество типов } AA_SCRIPT = $3; { Скрипт без анимации } { Типы переходов } AA_CUT = 0; { Простая остановка одной и запуск другой } AA_FADEBLACK = $1; { Уход/выход из черного } AA_FADEWHITE = $2; { Уход/выход из белого } { Коды ошибок, возвращаемые aaGetParm(xxx, AA_LASTERROR) } AA_ERR_NOERROR = 0; { Неизвестная ошибка } AA_ERR_NOMEMORY = $100; { 256 - Ошибка нехватки памяти } AA_ERR_BADHANDLE = $101; { 257 - Плохой дескриптор } AA_ERR_NOTIMERS = $102; { 258 - Невозможно запустить таймер } AA_ERR_BADSOUND = $103; { 259 - Плохое звуковое сопровождение } AA_ERR_NOSCRIPT = $104; { 260 - Требуется скрипт } AA_ERR_WRITEERR = $105; { 261 - Ошибка записи (для сценария) } AA_ERR_BADANIMATION = $106; { 262 - Невозможно открыть анимацию } AA_ERR_BADWINDOWHANDLE = $200; { 512 - Плохой дескриптор окна } AA_ERR_WINDOWCREATE = $201; { 513 - Невозможно создать окно } AA_ERR_DLGERROR = $202; { 514 - Ошибка диалога } AA_ERR_INVALIDSTATUS = $300; { 768 - Неверный статус } AA_ERR_BADDIBFORMAT = $301; { 769 - Плохой dib-файл } AA_ERR_BADFLIFORMAT = $302; { 770 - Плохой fli-файл } AA_ERR_UNRECOGNIZEDFORMAT = $303; { 771 - Нераспознанный формат } AA_ERR_NOSOUND = $304; { 772 - Звук не поддерживается } AA_ERR_NOTVALIDFORSCRIPTS = $305; { 773 - Неправильный сценарий } AA_ERR_INVALIDFILE = $306; { 774 - Плохой дескриптор файла } AA_ERR_NOSCRIPTS = $307; { 775 - Нет файлов-скриптов } AA_ERR_SPEED = $400; { 1024 - Неверная скорость } AA_ERR_LOOPS = $401; { 1025 - Неверные циклы } AA_ERR_RPTSOUND = $402; { 1026 - Неверный повтор звука } AA_ERR_PAUSE = $403; { 1027 - Неверная пауза } AA_ERR_TRANSIN = $404; { 1028 - Неверный переход } AA_ERR_TIMEIN = $405; { 1029 - Неверный переход } AA_ERR_TRANSOUT = $406; { 1030 - Неверное время перехода } AA_ERR_TIMEOUT = $407; { 1031 - Неверное время перехода } AA_ERR_DELAYSND = $408; { 1032 - Неверная задержка звука } AA_ERR_INVALIDTYPE = $409; { 1033 - Неверный тип параметра } AA_ERR_DUPLICATENOTIFY = $500; { 1280 - Дублирование уведомления } AA_ERR_NOSWITCH = $600; { 1536 - Отсутствие ключей в скрипте } AA_ERR_PARSELOOPS = $601; { 1537 - Плохие циклы в скрипте } AA_ERR_PARSESPEED = $602; { 1538 - Плохая скорость в скрипте } AA_ERR_BADRPTSOUND = $603; { 1539 - Плохое повторение звука в скрипте } AA_ERR_PARSEPAUSE = $604; { 1540 - Плохая пауза в скрипте } AA_ERR_PARSETRANS = $605; { 1541 - Плохой переход в скрипте } AA_ERR_PARSEDELAYSND = $606; { 1542 - Плохая задержка звука в скрипте } AA_ERR_TOOMANYLINKS = $607; { 1543 - Слишком много ссылок } { dwFlags: integer; может быть любым из нижеперечисленных Используется в aaGetFile. } AA_GETFILE_MUSTEXIST = $1; AA_GETFILE_NOSHOWSPEC = $2; AA_GETFILE_SAVE = $4; AA_GETFILE_OPEN = $8; AA_GETFILE_USEDIR = $10; AA_GETFILE_USEFILE = $20; AA_GETFILE_SOUND = $40; AA_GETFILE_SCRIPT = $80; AA_GETFILE_ANIMATION = $100; { wMode: integer; Значения Используется в aaSave } AA_SAVE_IFMODIFIED = $1; AA_SAVE_AS = $2; AA_SAVE_CANCEL = $4; { Возможности Используется в aaGetCaps } AA_CAP_TIMER = 1; AA_CAP_SOUND = 2; AA_CAP_SCRIPT = 3; { Статусные сообщения анимации Используйте RegisterWindowMessage для получения номеров реальных сообщений. } AA_NOTIFY = 'AAPLAY Уведомление'; { Сообщение-уведомление } AA_STOP = 'AAPLAY Стоп'; { Стоп-сообщение } { Это посылается в первом слове lParam с сообщением AA_ERROR. Это указывает на возникшую ошибку } AA_BADPLAY = 1; { Ошибка при попытке воспроизведения } AA_BADNOTIFY = 2; { Ошибка при попытке послать уведомление } AA_BADSCRIPT = 3; { Ошибка в сценарии при попытке } { воспроизведения } |
{ ========================================================================== } 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. { =========================================================================== } |
Dr Paul Kuczora.
--------------------------------------------------------------------------------
Paul Kuczora c home.london.uk
(на создание файла потрачен один день)
[001137]