Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Игры";
Текущий архив: 2005.02.06;
Скачать: [xml.tar.bz2];

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.117 c
1-1106594353
serg128
2005-01-24 22:19
2005.02.06
Подскажите библиотеку для работы с GIF


1-1106239310
Андрей М.
2005-01-20 19:41
2005.02.06
картинка в TListView


1-1106572920
lexales
2005-01-24 16:22
2005.02.06
Помогите с WebBrouser.


14-1106044861
TT
2005-01-18 13:41
2005.02.06
HL


14-1105685336
WondeRu
2005-01-14 09:48
2005.02.06
Управляем мобилой устройствами по RS-232! Хочу, но как?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский