📄 directinput.pas
字号:
rgbButtons: Array [0..3] of BYTE; // up to 4 buttons
end;
PDIMouseState2 = ^TDIMouseState2;
TDIMouseState2 = packed record
lX: Longint;
lY: Longint;
lZ: Longint;
rgbButtons: Array [0..7] of BYTE; // up to 8 buttons
end;
const
DIMOFS_X = 0;
DIMOFS_Y = 4;
DIMOFS_Z = 8;
DIMOFS_BUTTON0 = 12;
DIMOFS_BUTTON1 = 13;
DIMOFS_BUTTON2 = 14;
DIMOFS_BUTTON3 = 15;
// DX7 supports up to 8 mouse buttons
DIMOFS_BUTTON4 = DIMOFS_BUTTON0+4;
DIMOFS_BUTTON5 = DIMOFS_BUTTON0+5;
DIMOFS_BUTTON6 = DIMOFS_BUTTON0+6;
DIMOFS_BUTTON7 = DIMOFS_BUTTON0+7;
const
_c_dfDIMouse_Objects: array[0..6] of TDIObjectDataFormat = (
( pguid: @GUID_XAxis;
dwOfs: DIMOFS_X;
dwType: DIDFT_AXIS or DIDFT_NOCOLLECTION;
dwFlags: 0),
( pguid: @GUID_YAxis;
dwOfs: DIMOFS_Y;
dwType: DIDFT_AXIS or DIDFT_NOCOLLECTION;
dwFlags: 0),
( pguid: @GUID_ZAxis;
dwOfs: DIMOFS_Z;
dwType: $80000000 or DIDFT_AXIS or DIDFT_NOCOLLECTION;
dwFlags: 0),
( pguid: nil;
dwOfs: DIMOFS_BUTTON0;
dwType: DIDFT_BUTTON or DIDFT_NOCOLLECTION;
dwFlags: 0),
( pguid: nil;
dwOfs: DIMOFS_BUTTON1;
dwType: DIDFT_BUTTON or DIDFT_NOCOLLECTION;
dwFlags: 0),
( pguid: nil;
dwOfs: DIMOFS_BUTTON2;
dwType: $80000000 or DIDFT_BUTTON or DIDFT_NOCOLLECTION;
dwFlags: 0),
( pguid: nil;
dwOfs: DIMOFS_BUTTON3;
dwType: $80000000 or DIDFT_BUTTON or DIDFT_NOCOLLECTION;
dwFlags: 0)
);
c_dfDIMouse: TDIDataFormat = (
dwSize: Sizeof(c_dfDIMouse); // $18
dwObjSize: Sizeof(TDIObjectDataFormat); // $10
dwFlags: DIDF_RELAXIS; //
dwDataSize: Sizeof(TDIMouseState); // $10
dwNumObjs: High(_c_dfDIMouse_Objects)+1; // 7
rgodf: @_c_dfDIMouse_Objects[Low(_c_dfDIMouse_Objects)]
);
_c_dfDIMouse2_Objects: array[0..10] of TDIObjectDataFormat = (
( pguid: @GUID_XAxis;
dwOfs: DIMOFS_X;
dwType: DIDFT_AXIS or DIDFT_NOCOLLECTION;
dwFlags: 0),
( pguid: @GUID_YAxis;
dwOfs: DIMOFS_Y;
dwType: DIDFT_AXIS or DIDFT_NOCOLLECTION;
dwFlags: 0),
( pguid: @GUID_ZAxis;
dwOfs: DIMOFS_Z;
dwType: $80000000 or DIDFT_AXIS or DIDFT_NOCOLLECTION;
dwFlags: 0),
( pguid: nil;
dwOfs: DIMOFS_BUTTON0;
dwType: DIDFT_BUTTON or DIDFT_NOCOLLECTION;
dwFlags: 0),
( pguid: nil;
dwOfs: DIMOFS_BUTTON1;
dwType: DIDFT_BUTTON or DIDFT_NOCOLLECTION;
dwFlags: 0),
( pguid: nil;
dwOfs: DIMOFS_BUTTON2;
dwType: $80000000 or DIDFT_BUTTON or DIDFT_NOCOLLECTION;
dwFlags: 0),
( pguid: nil;
dwOfs: DIMOFS_BUTTON3;
dwType: $80000000 or DIDFT_BUTTON or DIDFT_NOCOLLECTION;
dwFlags: 0),
// fields introduced with IDirectInputDevice7.GetDeviceState
( pguid: nil;
dwOfs: DIMOFS_BUTTON4;
dwType: $80000000 or DIDFT_BUTTON or DIDFT_NOCOLLECTION;
dwFlags: 0),
( pguid: nil;
dwOfs: DIMOFS_BUTTON5;
dwType: $80000000 or DIDFT_BUTTON or DIDFT_NOCOLLECTION;
dwFlags: 0),
( pguid: nil;
dwOfs: DIMOFS_BUTTON6;
dwType: $80000000 or DIDFT_BUTTON or DIDFT_NOCOLLECTION;
dwFlags: 0),
( pguid: nil;
dwOfs: DIMOFS_BUTTON7;
dwType: $80000000 or DIDFT_BUTTON or DIDFT_NOCOLLECTION;
dwFlags: 0)
);
c_dfDIMouse2: TDIDataFormat = (
dwSize: Sizeof(c_dfDIMouse); // $18
dwObjSize: Sizeof(TDIObjectDataFormat); // $10
dwFlags: DIDF_RELAXIS; //
dwDataSize: Sizeof(TDIMouseState2); // $14
dwNumObjs: High(_c_dfDIMouse_Objects)+1; // 11
rgodf: @_c_dfDIMouse2_Objects[Low(_c_dfDIMouse2_Objects)]
);
(****************************************************************************
*
* DirectInput keyboard scan codes
*
****************************************************************************)
const
DIK_ESCAPE = $01;
DIK_1 = $02;
DIK_2 = $03;
DIK_3 = $04;
DIK_4 = $05;
DIK_5 = $06;
DIK_6 = $07;
DIK_7 = $08;
DIK_8 = $09;
DIK_9 = $0A;
DIK_0 = $0B;
DIK_MINUS = $0C; (* - on main keyboard *)
DIK_EQUALS = $0D;
DIK_BACK = $0E; (* backspace *)
DIK_TAB = $0F;
DIK_Q = $10;
DIK_W = $11;
DIK_E = $12;
DIK_R = $13;
DIK_T = $14;
DIK_Y = $15;
DIK_U = $16;
DIK_I = $17;
DIK_O = $18;
DIK_P = $19;
DIK_LBRACKET = $1A;
DIK_RBRACKET = $1B;
DIK_RETURN = $1C; (* Enter on main keyboard *)
DIK_LCONTROL = $1D;
DIK_A = $1E;
DIK_S = $1F;
DIK_D = $20;
DIK_F = $21;
DIK_G = $22;
DIK_H = $23;
DIK_J = $24;
DIK_K = $25;
DIK_L = $26;
DIK_SEMICOLON = $27;
DIK_APOSTROPHE = $28;
DIK_GRAVE = $29; (* accent grave *)
DIK_LSHIFT = $2A;
DIK_BACKSLASH = $2B;
DIK_Z = $2C;
DIK_X = $2D;
DIK_C = $2E;
DIK_V = $2F;
DIK_B = $30;
DIK_N = $31;
DIK_M = $32;
DIK_COMMA = $33;
DIK_PERIOD = $34; (* . on main keyboard *)
DIK_SLASH = $35; (* / on main keyboard *)
DIK_RSHIFT = $36;
DIK_MULTIPLY = $37; (* * on numeric keypad *)
DIK_LMENU = $38; (* left Alt *)
DIK_SPACE = $39;
DIK_CAPITAL = $3A;
DIK_F1 = $3B;
DIK_F2 = $3C;
DIK_F3 = $3D;
DIK_F4 = $3E;
DIK_F5 = $3F;
DIK_F6 = $40;
DIK_F7 = $41;
DIK_F8 = $42;
DIK_F9 = $43;
DIK_F10 = $44;
DIK_NUMLOCK = $45;
DIK_SCROLL = $46; (* Scroll Lock *)
DIK_NUMPAD7 = $47;
DIK_NUMPAD8 = $48;
DIK_NUMPAD9 = $49;
DIK_SUBTRACT = $4A; (* - on numeric keypad *)
DIK_NUMPAD4 = $4B;
DIK_NUMPAD5 = $4C;
DIK_NUMPAD6 = $4D;
DIK_ADD = $4E; (* + on numeric keypad *)
DIK_NUMPAD1 = $4F;
DIK_NUMPAD2 = $50;
DIK_NUMPAD3 = $51;
DIK_NUMPAD0 = $52;
DIK_DECIMAL = $53; (* . on numeric keypad *)
// $54 to $56 unassigned
DIK_F11 = $57;
DIK_F12 = $58;
// $59 to $63 unassigned
DIK_F13 = $64; (* (NEC PC98) *)
DIK_F14 = $65; (* (NEC PC98) *)
DIK_F15 = $66; (* (NEC PC98) *)
// $67 to $6F unassigned
DIK_KANA = $70; (* (Japanese keyboard) *)
DIK_CONVERT = $79; (* (Japanese keyboard) *)
DIK_NOCONVERT = $7B; (* (Japanese keyboard) *)
DIK_YEN = $7D; (* (Japanese keyboard) *)
DIK_NUMPADEQUALS = $8D; (* = on numeric keypad (NEC PC98) *)
// $8E to $8F unassigned
DIK_CIRCUMFLEX = $90; (* (Japanese keyboard) *)
DIK_AT = $91; (* (NEC PC98) *)
DIK_COLON = $92; (* (NEC PC98) *)
DIK_UNDERLINE = $93; (* (NEC PC98) *)
DIK_KANJI = $94; (* (Japanese keyboard) *)
DIK_STOP = $95; (* (NEC PC98) *)
DIK_AX = $96; (* (Japan AX) *)
DIK_UNLABELED = $97; (* (J3100) *)
// $98 to $99 unassigned
DIK_NUMPADENTER = $9C; (* Enter on numeric keypad *)
DIK_RCONTROL = $9D;
// $9E to $B2 unassigned
DIK_NUMPADCOMMA = $B3; (* , on numeric keypad (NEC PC98) *)
// $B4 unassigned
DIK_DIVIDE = $B5; (* / on numeric keypad *)
// $B6 unassigned
DIK_SYSRQ = $B7;
DIK_RMENU = $B8; (* right Alt *)
// $B9 to $C4 unassigned
DIK_PAUSE = $C5; (* Pause (watch out - not realiable on some kbds) *)
// $C6 unassigned
DIK_HOME = $C7; (* Home on arrow keypad *)
DIK_UP = $C8; (* UpArrow on arrow keypad *)
DIK_PRIOR = $C9; (* PgUp on arrow keypad *)
// $CA unassigned
DIK_LEFT = $CB; (* LeftArrow on arrow keypad *)
DIK_RIGHT = $CD; (* RightArrow on arrow keypad *)
// $CF unassigned
DIK_END = $CF; (* End on arrow keypad *)
DIK_DOWN = $D0; (* DownArrow on arrow keypad *)
DIK_NEXT = $D1; (* PgDn on arrow keypad *)
DIK_INSERT = $D2; (* Insert on arrow keypad *)
DIK_DELETE = $D3; (* Delete on arrow keypad *)
DIK_LWIN = $DB; (* Left Windows key *)
DIK_RWIN = $DC; (* Right Windows key *)
DIK_APPS = $DD; (* AppMenu key *)
// New with DX 6.1 & Win98
DIK_POWER = $DE;
DIK_SLEEP = $DF;
// $E0 to $E2 unassigned
// $E3 = Wake up ("translated" in German DInput to "Kielwasser" (ship's wake) ;-)
(*
* Alternate names for keys, to facilitate transition from DOS.
*)
DIK_BACKSPACE = DIK_BACK ; (* backspace *)
DIK_NUMPADSTAR = DIK_MULTIPLY; (* * on numeric keypad *)
DIK_LALT = DIK_LMENU ; (* left Alt *)
DIK_CAPSLOCK = DIK_CAPITAL ; (* CapsLock *)
DIK_NUMPADMINUS = DIK_SUBTRACT; (* - on numeric keypad *)
DIK_NUMPADPLUS = DIK_ADD ; (* + on numeric keypad *)
DIK_NUMPADPERIOD = DIK_DECIMAL ; (* . on numeric keypad *)
DIK_NUMPADSLASH = DIK_DIVIDE ; (* / on numeric keypad *)
DIK_RALT = DIK_RMENU ; (* right Alt *)
DIK_UPARROW = DIK_UP ; (* UpArrow on arrow keypad *)
DIK_PGUP = DIK_PRIOR ; (* PgUp on arrow keypad *)
DIK_LEFTARROW = DIK_LEFT ; (* LeftArrow on arrow keypad *)
DIK_RIGHTARROW = DIK_RIGHT ; (* RightArrow on arrow keypad *)
DIK_DOWNARROW = DIK_DOWN ; (* DownArrow on arrow keypad *)
DIK_PGDN = DIK_NEXT ; (* PgDn on arrow keypad *)
(****************************************************************************
*
* Keyboard
*
****************************************************************************)
type
TDIKeyboardState = array[0..255] of Byte;
(*
const
_c_dfDIKeyboard_Objects: array[0..255] of TDIObjectDataFormat = (
( pguid: @GUID_Key;
dwOfs: DIK_ESCAPE;
dwType: DIDFT_BUTTON or DIDFT_NOCOLLECTION;
dwFlags: 0),
// -------- top row (except function keys) on main kbd ------------
( pguid: @GUID_Key;
dwOfs: DIK_1; // "1" on main kbd, Offset 2
dwType: DIDFT_BUTTON or DIDFT_NOCOLLECTION;
dwFlags: 0),
( pguid: @GUID_Key;
dwOfs: DIK_2; // "2" on main kbd, Offset 3
dwType: DIDFT_BUTTON or DIDFT_NOCOLLECTION;
dwFlags: 0),
( pguid: @GUID_Key;
dwOfs: DIK_3; // "3" on main kbd, etc.
dwType: DIDFT_BUTTON or DIDFT_NOCOLLECTION;
dwFlags: 0),
( pguid: @GUID_Key;
dwOfs: DIK_4;
dwType: DIDFT_BUTTON or DIDFT_NOCOLLECTION;
dwFlags: 0),
( pguid: @GUID_Key;
dwOfs: DIK_5;
dwType: DIDFT_BUTTON or DIDFT_NOCOLLECTION;
dwFlags: 0),
( pguid: @GUID_Key;
dwOfs: DIK_6;
dwType: DIDFT_BUTTON or DIDFT_NOCOLLECTION;
dwFlags: 0),
( pguid: @GUID_Key;
dwOfs: DIK_7;
dwType: DIDFT_BUTTON or DIDFT_NOCOLLECTION;
dwFlags: 0),
( pguid: @GUID_Key;
dwOfs: DIK_8;
dwType: DIDFT_BUTTON or DIDFT_NOCOLLECTION;
dwFlags: 0),
( pguid: @GUID_Key;
dwOfs: DIK_9;
dwType: DIDFT_BUTTON or DIDFT_NOCOLLECTION;
dwFlags: 0),
( pguid: @GUID_Key;
dwOfs: DIK_0; // "0", main kbd
dwType: DIDFT_BUTTON or DIDFT_NOCOLLECTION;
dwFlags: 0),
( pguid: @GUID_Key;
dwOfs: DIK_MINUS; // "-" on US kbds, "
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -