Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.02.06;
Скачать: CL | DM;

Вниз

DXInput   Найти похожие ветки 

 
Wish ©   (2004-11-06 16:09) [0]

Как сделать чтобы isup, isdown, isleft и isright работали только для клавы, несмотря на то что DXInput работает и с мышкой, потому что в моей программе используется и клава и кнопка мыши.


 
cyborg ©   (2004-11-06 22:00) [1]

Обыкновенно. Смотри кнопки клавиатуры, а не мышки.


 
Sphinx   (2004-11-06 22:11) [2]

Что-то в этом духе:
 Buffer_Size = 8;        // размер буфера клавиатуры
 KEY_DOWN = $80;         // клавиша нажата
 KEY_UP = $0;            // клавиша отжата
 DIKeyboard:       IDirectInputDevice8;

function InitKeyboard: HResult;
var
 DIRes:  HResult;        // результаты операций
 DIPDWord: TDIPropDWord; // дополнительная переменная для
                         // задания параметров буфера клавиатуры
begin
 // создание главного объекта Direct Input
 DIRes:=DirectInput8Create(hInstance, DIRECTINPUT_VERSION, IID_IDirectInput8, DInput, nil);
 // если создать объект не удалось
 if DIRes<>DI_OK then
   begin
     // почему не создан объект
     Result:=DIRes;
     Exit;
   end;
 // создание объекта ввода с клавиатуры
 DIRes:=DInput.CreateDevice(GUID_SysKeyboard, DIKeyboard, nil);
 if DIRes<>DI_OK then
   begin
     Result:=DIRes;
     Exit;
   end;
 // задание формата данных, получаемых от клавиатуры
 DIRes:=DIKeyboard.SetDataFormat(c_dfDIKeyboard);
 if DIRes<>DI_OK then
   begin
     Result:=DIRes;
     Exit;
   end;
 // задание уровня кооперации
 DIRes:=DIKeyboard.SetCooperativeLevel(mainHandle, DISCL_NONEXCLUSIVE or DISCL_FOREGROUND);
 if DIRes<>DI_OK then
   begin
     Result:=DIRes;
     Exit;
   end;
 // Параметры для буферной схемы получения данных
 ZeroMemory(@DIPDWord, SizeOf(DIPDWord));
 with DIPDWord do
   begin
     diph.dwSize:=SizeOf(TDIPropDWord);
     diph.dwHeaderSize:=SizeOf(TDIPropHeader);
     diph.dwObj:=0;
     diph.dwHow:=DIPH_DEVICE;
     dwData:=BUFFER_SIZE;
   end;
 // указываем свойства буферизации ввода с клавиатуры
 DIRes:=DIKeyboard.SetProperty(DIPROP_BUFFERSIZE, DIPDWord.diph);
 if DIRes<>DI_OK then
   begin
     Result:=DIRes;
     Exit;
   end;
 // создаем связь приложения с клавиатурой
 Result:=DIKeyboard.Acquire;
end;

(* считывание данный из буфера клавиатуры *)
function KeyboardReadData: HResult;
var
 DIRes:      HResult;  // результаты операций
 DIKey:      array[0..BUFFER_SIZE-1] of TDIDeviceObjectData; // буфер клавиатуры
 dwElements: DWORD;    // число элементов в буфере клавиатуры
 i:          DWORD;    // вспомогательная переменная цикла

begin
 Result:=DI_OK;
 if not(appActive) then Exit;
 // если объект клавиатуры существует
 if DIKeyboard=nil then Exit;
 Result:=E_FAIL;
 // обнуляем переменную буфера клавиатуры
 ZeroMemory(@DIKey, SizeOf(DIKey));
 // получить данные в буфер
 DIRes:=DIKeyboard.GetDeviceData(SizeOf(TDIDeviceObjectData), @DIKey, dwElements, 0);
 // если данные не получены
 if DIRes<>DI_OK then
   begin
     // проверяем наличае связи
     DIRes:=DIKeyboard.Acquire;
     // пытаемся восстановить связь с клавиатурой
     while DIRes=DIERR_INPUTLOST do
       DIRes:=DIKeyboard.Acquire;
     Exit;
   end;
 // если в буфере имеются данные
 if dwElements<>0 then
   // пройтись по всему буферу
   for i:=0 to dwElements-1 do
     begin
       // если нажата клавиша ESC
       if DIKey[i].dwOfs=DIK_ESCAPE then ScreenCount:=1;
       // увеличить скорость
       if DIKey[i].dwOfs=DIK_ADD then Dec(AniSpeed, 5);
       // уменьшить скорость
       if DIKey[i].dwOfs=DIK_SUBTRACT then Inc(AniSpeed, 5);
     end;
 // в итоге результат - положительный
 Result:=DI_OK;
end;


 
Sphinx   (2004-11-06 22:19) [3]

и еще забыл...перед закрытием программы не забудь:
 // освобождение устройств ввода
 if Assigned(DIKeyboard) then DIKeyboard.Unacquire;
 if Assigned(DIKeyboard) then DIKeyboard:=nil;
 if Assigned(DInput) then DInput:=nil;



Страницы: 1 вся ветка

Текущий архив: 2005.02.06;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.027 c
3-1105333049
Владимир
2005-01-10 07:57
2005.02.06
Как сделать так, чтобы если при добавлении нового цвета в таблицу


1-1106055019
Нуждающийся в помощи
2005-01-18 16:30
2005.02.06
DLL: Динамическая загрузка/выгрузка


14-1105937927
megabyte-ceercop
2005-01-17 07:58
2005.02.06
Ура! Меня на DTF приняли! (Портал Геймдевелоперов) :)


3-1104183652
sergik
2004-12-28 00:40
2005.02.06
BDE и Oracle


1-1106619202
jcrush
2005-01-25 05:13
2005.02.06
из числового значения получить цвет