Excel. Трюки и эффекты
Шрифт:
Листинг 5.14.
Видеопроигрыватель
unit video_player;
interface
uses
//Подключаемые модули
Windows, Messages, SysUtils, Variants, Classes, Graphics,
Controls, Forms, Dialogs, StdCtrls, MPlayer;
Type
//Главная форма приложения
TFormVideoPlayer = class(TForm)
mpVideoPlayer: TMediaPlayer;
FileOpenDlg: TOpenDialog;
gbViewVideo: TGroupBox;
bnOpenFile: TButton;
//Нажатие кнопки открытия файла
procedure bnOpenFileClick(Sender: TObject);
//Активизация формы
procedure FormActivate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
FormVideoPlayer: TFormVideoPlayer;
implementation
{$R *.dfm}
procedure TFormVideoPlayer.bnOpenFileClick(Sender: TObject);
begin
if FileOpenDlg.Execute = True then
begin
//Загружаем
mpVideoPlayer.FileName := FileOpenDlg.FileName;
//Активизируем проигрыватель
mpVideoPlayer.Open;
end;
end;
procedure TFormVideoPlayer.FormActivate(Sender: TObject);
begin
//Устанавливаем область воспроизведения
mpVideoPlayer.Display := gbViewVideo;
end;
end.
Из предложенного фрагмента видно, что, обладая минимальным объемом исходного текста, видеопроигрыватель может выполнять все необходимые базовые функции.
Глава 6 Использование Windows GDI
• Графические объекты
• Аппаратно-независимыи графический вывод
• Контекст устройства
• Графические режимы
• Работа со шрифтами
• Рисование примитивов
• Работа с текстом
• Работа с растровыми изображениями
• Альфа-смешивание
Операционная система Windows с самого начала создавалась прежде всего как графическая оболочка. И как следствие, в ней осуществляется графическое представление информации. Вполне естественным является то, что почти любое приложение использует экран для отображения данных, с которыми оно работает. По крайней мере, сама операционная система отображает на экране визуальные элементы приложений. Windows обеспечивает универсальность представления информации как на экране, так и на других устройствах вывода, например, на принтере. Стоит отметить, что для этого используются одни и те же примитивы отображения. Система самостоятельно определяет целевое устройство и активизирует соответствующий ему модуль. ОС Windows является многозадачной и предъявляет к приложениям ряд основных требований, исключающих конфликты при использовании функций вывода. Однако это вовсе не означает, что Windows обеспечивает приложения только набором функций вывода на экран или печать – система полностью управляет всем выводом. Наверное, более правильно будет сказать, что приложения используют в качестве первичного вывода окно, а не непосредственно экран. Каждое устройство вывода в Windows характеризуется набором текущих параметров, с использованием которых происходит собственно вывод. Причем в каждый конкретный момент времени только одному приложению соответствует некоторое устройство вывода, что исключает одновременный доступ к последнему, изменение параметров одним приложением перед началом процесса вывода другим.
6.1. Графические объекты
Для управления выводом операционная система Windows предоставляет приложению набор графических объектов.
• Битовые массивы (bitmaps) – прямоугольные массивы точек, формирующие растровые изображения.
• Карандаши (pens) – используются для задания таких параметров рисования линий, как толщина, цвет и стиль (сплошная, прерывистая и т. п.).
• Кисти (brushs) – применяются для задания таких параметров заливки замкнутых контуров, как цвет и стиль.
• Шрифты (fonts) – позволяют задавать параметры вывода текста, включая имя шрифта, размер символов и т. д.
• Регионы (regions) – задают области окна, которые могут быть ограничены прямоугольником, многоугольником, эллипсом или их произвольной комбинацией, для выполнения операций заполнения, заливки, инверсии и т. д. Помимо этого, служат для определения местоположения указателя.
•
• Контуры (paths) – используются для заполнения или выделения контура различных фигур.
6.2. Аппаратно-независимый графический вывод
Одна из главных особенностей Windows API – независимость графического вывода от устройства. Программное обеспечение, которое поддерживает независимость, содержится в двух динамически компонуемых библиотеках. Первая – gdi. dll – обеспечивает общий графический интерфейс устройства (Graphics Device Interface, GDI), а вторая является драйвером конкретного используемого устройства. В результате приложение использует тот интерфейс, который предоставляется первой библиотекой. Перед тем как произвести какую-либо операцию вывода на некоторое устройство, приложению необходимо запросить GDI о загрузке соответствующего драйвера (обычно это осуществляется автоматически и не требует дополнительных действий со стороны программиста). После загрузки соответствующего драйвера приложение может настроить ряд таких параметров вывода, как цвет линии и ее ширина, тип кисти и ее цветщрифт, область отсечения и т. д. Операционная система Windows обеспечивает хранение всех этих и других данных в специальной структуре, называемой контекстом устройства.
Стоит заметить, что GDI реализует интерфейс для рисования двухмерной графики. Это самый медленный способ отображения графики из существующих, однако самый простой для понимания основ. Используется он в основном для создания простых эффектов с минимальными усилиями.
6.3. Контекст устройства
Контекст устройства – структура, определяющая набор графических объектов и связанных с ними атрибутов и графических режимов, которые воздействуют на вывод. Графические объекты включают карандаши для рисования линий, кисти для закрашивания и заполнения, битовые образы для копирования или прокрутки части экрана, цветовые палитры для определения набора доступных цветов, области для отсечения и других операций, а также контуры для операций рисования и закрашивания.
Приложение не имеет прямого доступа к контексту устройства, и настройка параметров осуществляется посредством вызова соответствующих функций Win32 API.
Существуют четыре типа контекстов устройств:
• экранный – поддерживает операции рисования непосредственно на экране;
• принтера – поддерживает операции рисования непосредственно на принтере или плоттере;
• памяти – поддерживает операции рисования непосредственно в битовых массивах;
• информационный – поддерживает получение данных об устройстве.
Приложение может осуществлять следующие операции над контекстом устройства:
• перечисление существующих графических объектов;
• выбор новых графических объектов;
• удаление существующих графических объектов;
• сохранение графических объектов, их атрибутов и параметров графических режимов;
• восстановление графических объектов, их атрибутов и параметров графических режимов.
Помимо всего прочего, приложение может использовать контекст устройства для определения процесса графического вывода, прерывания длительных графических операций, начатых другим потоком многопоточного приложения, а также может инициализировать принтер.
Экранный контекст устройства
Приложение получает контекст устройства экрана посредством вызова функций BeginPaint, GetDC или GetDCEx. Полученный контекст устройства идентифицирует окно, в которое будет непосредственно осуществляться вывод. Как правило, приложение получает контекст устройства экрана непосредственно перед тем, когда ему необходимо рисовать в клиентской области. Когда приложение завершает вывод, то оно обязано освободить контекст устройства, вызвав одну из соответствующих функций: EndPaint или ReleaseDC.