求Delphi directinput 的用法和详细Demo

cuiba1105 2013-07-03 08:09:44
求Delphi directinput 的用法和详细Demo 哪位大侠给看看.详细的
...全文
268 10 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
cuiba1105 2013-07-05
  • 打赏
  • 举报
回复
贴错图了,
cuiba1105 2013-07-05
  • 打赏
  • 举报
回复
找不到,我还是直接说问题吧.
双击DXInput1,出现对话框

我想用代码来改变key1,key2的值,初始化读值
用一个文本,或者INI文件存放,如下:
left = 1 //1代表手柄按键的值
right = 2 //2代表手柄按键的值
怎么写,我看了DXInput1类,也不知道怎么写,太菜了
sololie 2013-07-05
  • 打赏
  • 举报
回复
http://pan.baidu.com/share/link?shareid=3153640892&uk=1124482001 这个带demo\Samples\.hlp文件,源码版
sololie 2013-07-05
  • 打赏
  • 举报
回复
sololie 2013-07-05
  • 打赏
  • 举报
回复
偶不知道你咋下载的,直接用上面官网的下载。
下载安装好,安装目录了的Samples目录下有9M多个demo,包括dxinput的
cuiba1105 2013-07-05
  • 打赏
  • 举报
回复
下载了N个,DelphiX版本的控件,没几个有DEMO 有DEMO的又没有DXInput的DEMO 谁发一个来啊.谢谢啊!!!!!!!!!
mdejtod 2013-07-03
  • 打赏
  • 举报
回复

uses
  Windows, Messages, SysUtils, Variants, Classes, Forms, Graphics, Controls, Direct3D,
  Dialogs, Direct3D9,  StdCtrls, ActiveX, D3DX9, comobj, DirectInput,
  ExtCtrls;
type
  TDxInput = class
  private
    DInput : IDirectInput8;
    keybord : IDIRECTINPUTDEVICE8;
    mouse : IDIRECTINPUTDEVICE8;
    joy : IDIRECTINPUTDEVICE8;
    KeyT : array[0..255]of byte;
    MouseT : TDIMouseState;
    JoyT : TDIJoyState2;
    DX,DY:integer;
  public
    constructor create(viewhand:HWND);
    destructor Destroy; override;
    function keydown(key:byte):bool;
    function keydown2():integer;
    function moudown(key:byte):bool;
    function joydown(key:byte):bool;
    function moux:integer;
    function mouy:integer;
    function mouz:integer;
    function joyx:integer;
    function joyy:integer;
    function keyx:integer;
    function keyy:integer;
    procedure joyfree(ko:integer=0);
    procedure getall();
    procedure getkey();
    procedure getmouse();
    procedure getjoy();
  end;
implementation
constructor TDxInput.create(viewhand: HWND);
  var p:DWORD;
begin
  p:=DISCL_FOREGROUND or DISCL_NONEXCLUSIVE;
  DirectInput8Create(GetModuleHandle(nil),DIRECTINPUT_VERSION,IID_IDirectInput8,dinput,nil);
  dinput.CreateDevice(GUID_SysKeyboard,keybord,nil);
  keybord.SetDataFormat(c_dfDIKeyboard);
  keybord.SetCooperativeLevel(viewhand,p);
  dinput.CreateDevice(GUID_Sysmouse,mouse,nil);
  mouse.SetDataFormat(c_dfdimouse);
  mouse.SetCooperativeLevel(viewhand,p);
  dinput.CreateDevice(GUID_Joystick,joy,nil);
  if joy<>nil then
  begin
    joy.SetCooperativeLevel(viewhand,p);
    joy.SetDataFormat(c_dfDIJoystick2);
  end;
  DX:=0;
  DY:=0;
end;

destructor TDxInput.Destroy;
begin
  if DInput<>nil  then DInput := nil;
  if keybord<>nil then keybord := nil;
  if mouse<>nil   then mouse:= nil;
  if joy<>nil     then joy:= nil;
  inherited Destroy;
end;

procedure TDxInput.getall;
begin
  getkey;
  getmouse();
  getjoy();
end;

procedure TDxInput.getjoy;
begin
  getmouse;
  if joy<>nil then
  begin
    joy.Acquire;
    joy.GetDeviceState(sizeof(TDIJoyState2),@JoyT);
  end;
end;

procedure TDxInput.getkey;
begin
  keybord.Acquire;
  keybord.GetDeviceState(sizeof(KeyT),@KeyT[0]);
end;

procedure TDxInput.getmouse;
begin
  mouse.Acquire;
  mouse.GetDeviceState(sizeof(TDIMouseState),@MouseT);
end;

function TDxInput.joydown(key: byte): bool;
begin
  result := bool(JoyT.rgbButtons[key] and $80);
  if joy=nil then result:=false;
end;

procedure TDxInput.joyfree(ko: integer);
  var k,i:integer;
begin
  k:=ko;
  while k=ko do
  begin
    getjoy();
    k:=1;
    for i:=0 to 31 do
    begin
      if joydown(i)=true then k:=0;
    end;
  end;
  if ko=1 then
  begin
    k:=0;
    while k=0 do
    begin
      getjoy();
      k:=1;
      for i:=0 to 31 do
      begin
        if joydown(i)  then k:=0;
      end;
    end;
  end;
end;

function TDxInput.joyx: integer;
begin
  result := trunc((JoyT.lX-32767)/32767);
  if joy <> nil then
    inc(DX,result*4)
  else
    result:=0;
  inc(DX,moux);
end;

function TDxInput.joyy: integer;
begin
  result := trunc((JoyT.lY-32767)/32767);
  if joy <> nil then
    inc(DY,-result*4)
  else
    result:=0;
  inc(DY,-mouy);
end;

function TDxInput.keydown(key: byte): bool;
begin
  result := bool(KeyT[key] and $80);
end;

function TDxInput.keydown2: integer;
var i:integer;
begin
  for i:=0 to 255 do
  begin
    if bool(KeyT[i] and $80) then
    begin
      result := i;
      exit
    end;
  end;
 result := -1;
end;

function TDxInput.keyx: integer;
begin
  result := 0;
  if keydown(DIK_LEFT ) then
    result:=-1;
  if keydown(DIK_RIGHT) then
    result:=1;
end;

function TDxInput.keyy: integer;
begin
  result := 0;
  if keydown(DIK_UP  ) then
   result := -1;
  if keydown(DIK_DOWN) then
   result:=1;
end;

function TDxInput.moudown(key: byte): bool;
begin
  result := bool(MouseT.rgbButtons[key] and $80);
end;

function TDxInput.moux: integer;
begin
  result := MouseT.lX;
end;

function TDxInput.mouy: integer;
begin
  result := MouseT.ly;
end;

function TDxInput.mouz: integer;
begin
  result := MouseT.lz;
end;
//使用方法:
FDxInput := TDxInput.create(Handle);
在定时器,或消息循环体中判断
FDxInput.getkey;
if DxInput.keydown(DIK_L) then
sololie 2013-07-03
  • 打赏
  • 举报
回复
下载DelphiX组件,是DX9的,用里面的TDXInput控件,自带有详细的DEMO DelphiX 主页 http://www.micrel.cz/Dx/
cuiba1105 2013-07-03
  • 打赏
  • 举报
回复
能传一个DEMO给我吗,c993home@163.com
以下更改相对于 E_D3D9 1.0正式版: 1:[!]"E_D3D9" 改名为“E_DirectX".为其他DirectX组件作准备. 2:[!]调用"d3dx9_42.dll"库改为"d3dx9_39.dll"库.直接影响相关的ID3DX...类. 3:[!]优化各类(修改为继承),删除与基类重复的方法,相对减少源码体积(不多,约20KB). 3:[+]ID3DXPMesh 之前版本漏掉了(MSDN内没有,d3dx9mesh.h中有). 4 [+]ID3DXSPMesh 之前版本漏掉了(MSDN内没有,d3dx9mesh.h中有). 5:[+]IDirect3D9Ex 6:[+]IDirect3DDevice9Ex 7:[+]IDirect3DSwapChain9Ex 8:[+]IDirect3D9ExOverlayExtension 9:[+]IDirect3DDevice9Video 10:[+]IDirect3DAuthenticatedChannel9 11:[+]IDirect3DCryptoSession9 12:[+]IDirectInput8 13:[+]IDirectInputDevice8 其中DIDATAFORMAT参考了Delphi的JEDI后处理的.若有更好的方法欢迎讨论. 14:[+]IDirectInputEffect 15:[*]日后会陆续添加DirectX的其余组件,并且修复现有问题. (以后版本会整合发布,改动都将写入日志,公开免费发布,以谋易语言完美调用原生DirectX所有组件方法. 待组件全了后,我会定期逐个类/方法测试,顺便写些Demo.) 提示: 有易友建议我使用EATL,我大致看了下原理是类似的.但它改写了易语言的类(也是其亮点),从而导致可以直接调用. 对于E_DirectX这个项目来讲,我个人感觉意义不是很大(该处理的类型还得处理!). 并不是说EATL不好,本人多重考虑后感觉不适合. 许多类方法可能存在问题 务必注意 特征/情况如下: 方法中参数类型为文本型、字节集、所有类型的数组、以及自定义类型成员中含有其他自定义类型的,这些未经处理的大多存在问题. 还有小数型参数与返回值的问题("Call"的问题),第一个版本(E_D3D9 Beta1)中存在此重大问题.其后续的版本基本都已修复. 以上问题基本皆由易独特的类型存储结构无法与之匹配而引起的.(了解C++类型存储结构的小伙伴可以很快想到处理办法.) 模块还有大量问题没有处理,本人没有那么多时间和精力去逐个测试,除了自己用到的方法以外,许多都是简单处理下(工作量异常大! 无奈之举,以后慢慢修复吧.也可以自己参照我处理过的方法自行研究,开源也是有此目的.) 若发现问题可以发送相关的代码到我的邮箱. (此文最底下或模块中的作者信息一栏),便于我整合进下一版本中. 承诺: 以后所有版本皆会以免费开源形式发布,可任意使用,无任何限制.(据我所知之前也有不少因此受益的小伙伴,才让我更有信心继续下去.) 声明: E_DirectX(E_D3D9) 从诞生以来一直是以无偿开源的形式存在,同时因此作者(Roc/xc.roc)也无法对产品和用户进行有效的约束或限制, 同时也不承担因为该产品所带来的后果,若造成任何损失/后果由使用者自行承担.请大家谨慎考虑取舍! 总而言之,一切如涛哥所言:"向正确的方向前进!". 动态: 本人最近根据某易友的建议正在开发Essen GUI(游戏界面库),主要是应用于游戏环境(Hook D3D - -!). 会以开源模块的形式小范围收费发布,并且给予相关技术支持.有相关需的用户也可以联系我邮箱. 以后会建立相关Q群供用户交流. 大致特点:简单、易用、可扩展性(你能想到的,你能见到的组件几乎都能扩展出来.类似Ex_DUI,但也所有区别.).

5,930

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧