Михаил Краснов - Графика DirectX в Delphi

Здесь есть возможность читать онлайн «Михаил Краснов - Графика DirectX в Delphi» — ознакомительный отрывок электронной книги совершенно бесплатно, а после прочтения отрывка купить полную версию. В некоторых случаях можно слушать аудио, скачать через торрент в формате fb2 и присутствует краткое содержание. Жанр: Программирование, на русском языке. Описание произведения, (предисловие) а так же отзывы посетителей доступны на портале библиотеки ЛибКат.

Графика DirectX в Delphi: краткое содержание, описание и аннотация

Предлагаем к чтению аннотацию, описание, краткое содержание или предисловие (зависит от того, что написал сам автор книги «Графика DirectX в Delphi»). Если вы не нашли необходимую информацию о книге — напишите в комментариях, мы постараемся отыскать её.

Графика DirectX в Delphi — читать онлайн ознакомительный отрывок

Ниже представлен текст книги, разбитый по страницам. Система сохранения места последней прочитанной страницы, позволяет с удобством читать онлайн бесплатно книгу «Графика DirectX в Delphi», без необходимости каждый раз заново искать на чём Вы остановились. Поставьте закладку, и сможете в любой момент перейти на страницу, на которой закончили чтение.

Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

Разбирая очередной пример (проект каталога Ех05), я попутно расскажу об основных понятиях библиотеки Directlnput. По виду пример представляет собой обычное оконное приложение, в компоненте класса тмето выводятся скан-коды нажимаемых клавиш, нажатие кнопки Clear приводит к очистке его содержимого (рис. 5.6).

В списке uses помимо обычных для Delphi модулей мною вписан DirectlnputS - фото 32

В списке "uses помимо обычных для Delphi модулей мною вписан DirectlnputS.

Глобальная переменная Dlnput обеспечивает доступ к функциям Directinput:

var

Dinput : IDIRECTINPUT8 = nil; // Главный объект Directinput

// Интерфейс доступа к устройству ввода

DIKeyboard : IDIRECTINPUTDEVICE8 = nil;

Впервые в наших примерах мы обращаемся к интерфейсам именно восьмой версии DirectX. Обращу внимание на это событие, чтобы оно не прошло для вас незамеченным.

Следующая пользовательская функция предназначена для подготовки работы (обработку ошибок оставлю только для первого действия):

function TfrmDX.Or.CreateDevlce : HRF.SULT;

var

hRet : HRESULT; // Результат действий

dipdw : TDIPROPDWORD; // Вспомогательная структура, задание параметров

begin

// Создание главного объекта Directlnput

hRet := DirectlnputSCreate (hlnstance, DIRECTINPUT_VERSION,

IID_IDirectInput8, DInput, nil);

if Failed (hRet) then begin

Result := hRet;

Exit

end;

// Создание объекта ввода информации от клавиатуры

hRet := DInput.CreateDevice (GUID_SysKeyboard, DIKeyboard, nil);

// Задаем формат данных, получаемых от устройства

hRet := DIKeyboard.SetDataFormat(c_dfDIKeyboard);

// Задаем уровень кооперации

hRet := DIKeyboard.SetCooperativeLevel(Handle, DISCL_NONEXCLUSIVE or

DISCL_BACKGROUND);

// Параметры для буферной схемы получения данных

ZeroMemory (Sdipdw, SizeOf (dipdw)); with dipdw do begin

diph.dwSize := SizeOf(TDIPROPDWORD);

diph.dwHeaderSize := SizeOf(TDIPROPHEADER);

diph.dwObj := 0;

diph.dwHow := DIPHJDEVICE;

dwData := SAMPLE_BUFFER_SIZE;

end;

// Задаем параметры буфера

hRet := DIKeyboard.SetProperty(DIPROP_BUFFERSIZE, dipdw.diph);

// Установили связь с устройством ввода

Result := DIKeyboard.Acquire;

end;

Для создания главного объекта из библиотеки Directlnput должна использоваться функция DirectlnputSCreate. Аргументы ее таковы:

* указатель на вызывающий поток; версия DirectX, в которой создано приложение; идентификатор требуемого интерфейса; переменная, в которую помещается результат.

Последний аргумент - указатель на показатель агрегирования (разновидность наследования; термин, специфичный для СОМ) - обычно равен nil.

В случае удачи функция возвращает ноль. Такому значению соответствует константа DI_OK, определенная в модуле Directinputs.

Метод CreateDevice главного объекта используется для создания нового объекта устройства. У этого метода три аргумента:

* идентификатор нужного устройства; переменная, в которую помещается результат; показатель агрегирования.

В качестве идентификатора для клавиатуры передаем константу GUID_SysKeyboard.

Перед захватом устройства необходимо вызвать метод setoataFormat объекта, связанного с устройством ввода. Здесь описывается формат, в котором вводимые данные возвращаются устройством. Для стандартного устройства задаем стандартный формат.

Также обязательным действием является определение степени контроля над устройством, задание уровня кооперации, другим словом. Для этого вызывается метод setcooperativeLevel, первый аргумент которого - идентификатор окна приложения.

Прежде всего, необходимо указать, задается ли исключительный доступ к устройству или нет (флаги DISCL_EXCLUSIVE и DISCL_NONEXCLUSIVE). В этом примере устанавливаю неисключительный доступ. Для стандартного устройства разница между ними невелика, библиотека Directlnput не может позволить никакому приложению захватить клавиатуру монопольно. Просто эксклюзивный доступ может привести к помехам в работе с устройством других приложений.

Помимо эксклюзивности обязательно необходимо задать активность режима (указать один из флагов DISCL^BACKGROUND или DISCL_FOREGROOND). Первый флаг соответствует режиму, когда приложение имеет доступ к устройству ввода всегда, даже когда не имеет активности. Если вы запустите две копии этой программы, то обе они будут реагировать на нажатие клавиш, и по нажатии клавиши завершат работу обе копии.

Следующие действия при инициализации связаны с выбранной схемой получения доступа к данным. Можно использовать данные двух видов: непосредственные (immediate) и буферизованные (buffered).

При работе с клавиатурой по первой схеме приложение периодически опрашивает клавиши, получая данные о каждой из них: нажата она или нет. Вторая схема состоит в том, что приложение считывает буфер, в котором хранятся данные о произошедших со времени последнего опроса событиях связанных с устройством: какие клавиши были нажаты, какие были отпущены.

Читать дальше
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

Похожие книги на «Графика DirectX в Delphi»

Представляем Вашему вниманию похожие книги на «Графика DirectX в Delphi» списком для выбора. Мы отобрали схожую по названию и смыслу литературу в надежде предоставить читателям больше вариантов отыскать новые, интересные, ещё непрочитанные произведения.


Отзывы о книге «Графика DirectX в Delphi»

Обсуждение, отзывы о книге «Графика DirectX в Delphi» и просто собственные мнения читателей. Оставьте ваши комментарии, напишите, что Вы думаете о произведении, его смысле или главных героях. Укажите что конкретно понравилось, а что нет, и почему Вы так считаете.

x