Delphi 如何映射按键?

[复制链接]
查看11 | 回复7 | 2021-1-27 07:05:40 | 显示全部楼层 |阅读模式
例:如何实现键盘上的方向键,左键映射成手柄上的一个键.在线等,90分奉上.
不要第三方的映射工具哈.我想通过代码代码控制
分 -->
回复

使用道具 举报

千问 | 2021-1-27 07:05:40 | 显示全部楼层
第三方控件的源码中就有答案。反正得用DX。


回复

使用道具 举报

千问 | 2021-1-27 07:05:40 | 显示全部楼层
第三方控件,这个可以有.sololie哥,又是你啊.给详细一点的DEMO啊.
回复

使用道具 举报

千问 | 2021-1-27 07:05:40 | 显示全部楼层
还有没有其他大侠答啊.
回复

使用道具 举报

千问 | 2021-1-27 07:05:40 | 显示全部楼层
这个所谓映射说白了关键就是要懂得怎样操作手柄,懂得操作手柄就行了。你需要下载DirectX的SDK,不然就用第三方组件提供的包装好的DX相关功能。
第三方组件中比较简单易用的是老牌的DelphiX,安装好后,用它DXINPU控件就能操作手柄了,看它目录中的demo,简简单单几句

unitMain;
interface
uses
Windows,Messages,SysUtils,Classes,Graphics,Controls,Forms,Dialogs,
StdCtrls,ExtCtrls,DXInput,DXSounds,DXClass;
type
TMainForm=class(TForm)
DXInput1:TDXInput;
Label1:TLabel;
Label2:TLabel;
AnalogMode:TCheckBox;
POVLabel:TLabel;
DXWaveList1:TDXWaveList;
DXSound1:TDXSound;
Label4:TLabel;
Timer:TDXTimer;
procedureTimerTimer(Sender:TObject;LagCount:Integer);
end;
var
MainForm:TMainForm;
implementation
{$R*.DFM}
procedureTMainForm.TimerTimer(Sender:TObject;LagCount:Integer);
begin
DXInput1.Update;
ifAnalogMode.Checkedand((DXInput1.Joystick.X0)or(DXInput1.Joystick.Y0))then
begin
{Analog}
Label1.Left:=Label1.Left+DXInput1.Joystick.X;
Label1.Top:=Label1.Top+DXInput1.Joystick.Y;
endelse
begin
{Digital}
ifisLeftinDXInput1.Statesthen
Label1.Left:=Label1.Left-10;
ifisRightinDXInput1.Statesthen
Label1.Left:=Label1.Left+10;
ifisUpinDXInput1.Statesthen
Label1.Top:=Label1.Top-10;
ifisDowninDXInput1.Statesthen
Label1.Top:=Label1.Top+10;
end;
ifisButton1inDXInput1.Statesthen
begin
DXWaveList1.Items[0].Play(False);
{Next,button1isinvalidateduntilbutton1ispushed.}
DXInput1.States:=DXInput1.States-[isButton1];
end;
POVLabel.Caption:=Format('POV(Pointofview):%d',[DXInput1.Joystick.Joystate.rgdwPOV[0]]);
end;
end.

测试操作我的xbox360手柄没有问题。

回复

使用道具 举报

千问 | 2021-1-27 07:05:40 | 显示全部楼层
控件的全名叫什么?
回复

使用道具 举报

千问 | 2021-1-27 07:05:40 | 显示全部楼层
keybd_event(VK_CONTROL,MapVirtualKey(VK_CONTROL,0),0,0);//按下ctrl健
keybd_event(ord('F'),MapVirtualKey(ord('F'),0),0,0);//按下f键
keybd_event(ord('F'),MapVirtualKey(ord('F'),0),KEYEVENTF_KEYUP,0);//放开f键
回复

使用道具 举报

千问 | 2021-1-27 07:05:40 | 显示全部楼层
引用5楼cuiba1105的回复:控件的全名叫什么?
DelphiX
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行