Excel. Трюки и эффекты
Шрифт:
• nIconlndex – номер первого извлекаемого значка; нумерация начинается с нуля (если номер равен -1 и параметры piconLarge и piconSmall нулевые, то функция возвращает количество значков в файле);
• piconLarge, piconSmall – ссылки на переменные типа HI CON (либо на первые элементы массива array. of HICON) для помещения в них дескрипторов больших и малых значков соответственно;
• nIcons – количество извлекаемых значков (по сути, может быть количество элементов в передаваемых в функцию массивах: лишние элементы не будут заполнены).
Функция возвращает количество значков, извлеченных из файла, или количество значков в файле при соответствующем значении параметра nlconlndex.
В листинге 4.36 используется не совсем оптимальный способ извлечения значков из файла – по одному. Однако он подойдет для большинства случаев. Другой (но не единственный) вариант – использование массива. Тогда функцииЕх^асИсопЕх передаются первые элементы массивов для дескрипторов значков (функции нужен адрес начала массива),
Можно также использовать динамический массив, предварительно установив его размер, вызвав функцию ExtractlconEx с параметром nlconlndex, равным -1. Установить значения параметров piconLarge, piconSmall в ноль (не меняя объявления функции) можно, объявив указатель на HICON (AHICON), присвоив ему значение nil и передав его в качестве упомянутых параметров в функцию.
На рис. 4.11 приводится внешний вид формы приложения после извлечения значков из файла Explorer. ехе.
Обработчик нажатия кнопки Загрузить значки представленной н а рис. 4.11 формы приводится в листинге 4.38.
Рис. 4.11. Пример извлеченных из ЕХЕ-файла значков
Листинг 4.38. Составление списков значков и их отображение
procedure TForm1.cmbLoadIconClick(Sender: TObject);
var
i: Integer;
item: TListItem;
begin
lvwIconsLg.Clear;
lvwIconsSm.Clear;
//Загрузка значков в ImageList
ImageListLg.Clear;
ImageListSm.Clear;
LoadIcons(txtFile.Text, ImageListLg, ImageListSm);
//Создание элементов в ListView с большими и малыми значками
for i := 0 to ImageListLg.Count – 1 do
begin
item := lvwIconsLg.Items.Add;
item.Caption := \'Icon\' + IntToStr(i+1);
item.ImageIndex := i;
item := lvwIconsSm.Items.Add;
item.Caption := \'Icon\' + IntToStr(i+1);
item.ImageIndex := i;
end;
end;
Подразумевается, что имена элементов управления ListView: для отображения больших значков – lvwIconLg и для отображения малых lvwIconSm. На форме также расположены два элемента управления ImageList: ImageListLg для хранения больших и ImageListSm для хранения малых значков.
С помощью окна Object Inspector список ImageListLg назначен в качестве источника больших изображений (свойство Largelmages) для lvwIconLg. Соответственно, список ImageListSm назначен в качестве источника малых изображений (свойство Smalllmages) для lvwIconSm.
Глава 5 Мультимедиа
• Воспроизведение звука с помощью системного динамика
• Использование компонента MediaPlayer
• Компонент Animate
• Разработка звукового проигрывателя
• Видеопроигрыватель
Использование мультимедийных технологий позволяет повысить качество программ и придает им профессиональный вид, более привлекательный для пользователя. Среди разнообразных применений мультимедиа наиболее интересны аудио– и видеовозможности компьютера. Использование звуков и видео в программах позволяет иным образом взаимодействовать с пользователем: озвучивать его действия, информировать о некоторых событиях, просматривать видеоролики и т. п.
В рамках предложенной главы будут рассмотрены основные возможности мультимедийных средств и компонентов среды Delphi. Будут описаны компоненты Animate и MediaPLayer, использование API-функций для генерации звука системным динамиком и для воспроизведения звука из ресурсных файлов.
В отличие от языков Turbo Pascal и Borland Pascal, Delphi не содержит процедур типа Sound и NoSound, предназначенных для работы со звуком. Для использования мультимедийных возможностей компьютера в Delphi служат специальные компоненты Animate и MediaPLayer.
Компонент MediaPLayer является основным элементом воспроизведения аудио– и видеофайлов. Многофункциональный элемент MediaPLayer обладает рядом важных характеристик (свойств) и обеспечивает управление мультимедийными устройствами.
Для создания и воспроизведения простейшей анимации предназначен компонент Animate. Он позволяет воспроизводить файлы в формате AVI (Audio-Video Interleaved – Аудио– и видеосмесь).5.1. Воспроизведение звука с помощью системного динамика
Звуковое сопровождение является важной частью большинства современных мультимедийных приложений. В простейших случаях генерации звукового сигнала удобно использовать процедуру Веер модуля SysUtils. В этом случае нет необходимости использовать вышеупомянутые мультимедийные компоненты языка, а звук создается встроенным системным динамиком. Процедура Веер осуществляет вызов одноименной API-функции, поэтому ее использование
не составит большого труда (листинг 5.1).Листинг 5.1.
Генерация звукового сигнала посредством функции Веер
procedure TForm1.Button1Click(Sender: TObject);
begin
Beep; //Генерация звукового сигнала
MessageDlg(\'Звуковой сигнал был подан\', mtError, [mbOK], 0);
end;
Наряду с Веер для получения звукового сигнала используется API-функция MessageBeep (uType: UINT): Boolean, генерирующая стандартный системный звук, тип которого указывает параметр uType. Параметр функции MessageBeep может задаваться двумя способами: в виде шестнадцатеричного числа или поименованной константы. Например, системный звук по умолчанию задается константой МВ_ОК, а стандартный системный звук задается шестнадцатеричным числом $ FFFFFFFF. Функция возвращает параметр типа Boolean, который в случае успешного выполнения (воспроизведения звука) равен True.
5.2. Использование компонента MediaPlayer
Мультимедийный проигрыватель Media Player является многофункциональным управляющим элементом. Он представляет программисту набор свойств и методов, позволяющих манипулировать файлами и устройствами мультимедиа, поддерживать воспроизведение и перемещение между остальными фонограммами (дорожками, записями), а также идентифицировать подключенные устройства.
Компонент MediaPlayer содержит следующие кнопки (рис. 5.1, слева направо).
• Play – воспроизведение.
• Pause – пауза.
• Stop – остановка.
• Next – переход к следующей фонограмме (дорожке). Для случая одной фонограммы выполняется переход в ее конец.
• Prev – переход к предыдущей фонограмме. Для случая одной фонограммы выполняется переход в ее начало.
• Step – переход на несколько кадров вперед.
• Back – возврат на несколько кадров назад.
• Record – включение режима записи.
• Eject – извлечение носителя.
Рис. 5.1. Вид компонента MediaPlayer
Компонент MediaPlayer обладает рядом свойств, которые позволяют управлять воспроизведением файлов.
• AutoOpen – определяет, должно ли устройство автоматически открываться сразу после загрузки.
• AutoRewind – если равно True, то после завершения воспроизведения файла будет переход на его начало.
• DeviceType – определяет тип устройства, которым должен управлять объект MediaPlayer. Принимает одно из следующих значений:
– dtAVIVideo – файл AVI;
– dtCDAudio – аудио компакт-диски;
– dtDAT – цифровой кассетный аудиопроигрыватель;
– dtDigitalVideo – цифровое видео (AVI, MPG, MOV-файлы или ММ-фильм);
– dtMMMovie – формат multimedia movie;
– dtOther – неопределенный формат;
– dtSequencer – MIDI-файл;
– dtVCR – видеомагнитофон;
– dtVideodisc – проигрыватель видеодисков;
– dtWaveAudio – звуковой файл типа WAV;
– dtAutoSelect – компонент выбирает устройство автоматически, устанавливается по умолчанию.
• Display – задает оконный элемент, в котором будет происходить воспроизведение видеоданных. Если свойство не задано, то будет открываться новое дополнительное окно.
• DisplayRec – задает прямоугольную область для воспроизведения данных.
• EnableButtons – определяет набор командных кнопок, которые можно использовать в компоненте.
• StartPos – определяет начальную позицию для воспроизводимых данных. Если не задано, то воспроизведение идет сначала.
• EndPos – определяет конечную позицию для воспроизведения данных. Если не задано, то воспроизведение идет до конца.
• Position – текущая позиция при воспроизведении.
• Tracks – определяет количество дорожек для компакт-дисков.
• Frames – определяет число кадров, на которое перемещается позиция устройства при вызове методов Back и Next.
• Length – длина файла (носителя).
• TimeFormat – устанавливает временной формат, используемый конкретным устройством.
• Wait – определяет, будет управление возвращено вызывающему приложению немедленно или после завершения воспроизведения.
Одним из важных свойств является Capabilities типа TMPDevCapsSet, которое позволяет определить возможности выбранного и открытого устройства. Это свойство может принимать следующие значения, устанавливающие доступность соответствующих операций:
• mpCanE j ect – извлечение носителя;
• mpCanPlay – воспроизведение;
• mpCanRecord – запись на носитель;
• mpCanStep – перемотка вперед или назад определенного количества кадров;
• mpUsedWindow – использование окна для вывода изображения.
Перед использованием устройства его нужно открыть, поскольку большинство методов, например Play и StartRecording, можно вызвать только после открытия устройства. Оно выполняется путем вызова метода Open (листинг 5.2). Если необходимо выполнить автоматическое открытие устройства, то свойству AutoOpen типа Boolean следует присвоить значение True (по умолчанию присвоено значение Fal s е). После открытия какого-либо устройства свойство Devi s е ID типа Wo г d проигрывателя определяет идентификатор этого устройства. Если открытых устройств нет, то значение свойства DeviselD равно 0.