unit DXInptEdit;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ComCtrls, StdCtrls, Menus, ExtCtrls, Spin, Buttons, DXInput;
type
TDelphiXInputEditForm = class(TForm)
PopupMenu: TPopupMenu;
Player1: TMenuItem;
Player2_1: TMenuItem;
Player2_2: TMenuItem;
OKButton: TButton;
CancelButton: TButton;
PageControl: TPageControl;
JoyTabSheet: TTabSheet;
KeyTabSheet: TTabSheet;
GroupBox1: TGroupBox;
StateListBox: TListBox;
KeyComboBox1: TComboBox;
KeyComboBox2: TComboBox;
KeyComboBox3: TComboBox;
Label3: TLabel;
Label2: TLabel;
Label1: TLabel;
GroupBox2: TGroupBox;
Label5: TLabel;
IDEdit: TSpinEdit;
Bevel1: TBevel;
AutoCenter: TCheckBox;
GroupBox3: TGroupBox;
Label7: TLabel;
Label8: TLabel;
Label9: TLabel;
DeadZoneZ: TSpinEdit;
DeadZoneY: TSpinEdit;
DeadZoneX: TSpinEdit;
GroupBox4: TGroupBox;
Label4: TLabel;
Label6: TLabel;
Label10: TLabel;
RangeZ: TSpinEdit;
RangeY: TSpinEdit;
RangeX: TSpinEdit;
Label11: TLabel;
Label12: TLabel;
Label13: TLabel;
ForceFeedback: TCheckBox;
procedure FormCreate(Sender: TObject);
procedure StateListBoxClick(Sender: TObject);
procedure Player1Click(Sender: TObject);
procedure Player2_1Click(Sender: TObject);
procedure Player2_2Click(Sender: TObject);
procedure OKButtonClick(Sender: TObject);
procedure CancelButtonClick(Sender: TObject);
procedure FormShow(Sender: TObject);
procedure EditChange(Sender: TObject);
private
FChanged: Boolean;
FOldIndex: Integer;
procedure UpdateData;
public
DXInput: TCustomDXInput;
KeyAssigns: TKeyAssignList;
end;
var
DelphiXInputEditForm: TDelphiXInputEditForm;
implementation
uses DXConsts;
{$R *.dfm}
function GetKeyText(Key: Integer): string;
begin
Result := '';
case Key of
0 : Result := SNone;
VK_TAB : Result := 'TAB';
VK_RETURN : Result := 'Enter';
VK_SHIFT : Result := 'Shift';
VK_ESCAPE : Result := 'Esc';
VK_SPACE : Result := 'Space';
VK_PRIOR : Result := 'Page Up';
VK_NEXT : Result := 'Page Down';
VK_LEFT : Result := SKeyLeft;
VK_UP : Result := SKeyUp;
VK_RIGHT : Result := SKeyRight;
VK_DOWN : Result := SKeyDown;
$30..$39,
$41..$5A : Result := Char(Key); {0..9, A..Z}
VK_NUMPAD0..VK_NUMPAD9:
Result := 'Num '+inttostr(Key-VK_NUMPAD0);
VK_MULTIPLY: Result := 'Num *';
VK_ADD : Result := 'Num +';
VK_SUBTRACT: Result := 'Num -';
VK_DECIMAL : Result := 'Num .';
VK_DIVIDE : Result := 'Num /';
VK_F1..VK_F15:
Result := 'F'+inttostr(Key-VK_F1+1);
end;
end;
function DXInputStateText(State: TDXInputState): string;
begin
Result := '';
case State of
isUp : Result := 'Up';
isDown : Result := 'Down';
isLeft : Result := 'Left';
isRight: Result := 'Right';
isButton1..isButton32
: Result := 'Button' + inttostr(Ord(State)-Ord(isButton1)+1);
end;
end;
procedure TDelphiXInputEditForm.FormCreate(Sender: TObject);
var
i: TDXInputState;
i2: Integer;
s: string;
begin
for i := LOW(TDXInputState) to HIGH(TDXInputState) do
StateListBox.Items.Add(DXInputStateText(i));
for i2:=0 to 255 do
begin
s := GetKeyText(i2);
if s<>'' then KeyComboBox1.Items.AddObject(s, Pointer(i2));
end;
KeyComboBox2.Items.Assign(KeyComboBox1.Items);
KeyComboBox3.Items.Assign(KeyComboBox1.Items);
end;
procedure TDelphiXInputEditForm.FormShow(Sender: TObject);
begin
KeyAssigns := DXInput.Keyboard.KeyAssigns;
IDEdit.Value := DXInput.Joystick.ID;
AutoCenter.Checked := DXInput.Joystick.AutoCenter;
ForceFeedback.Checked := DXInput.Joystick.ForceFeedback;
DeadZoneX.Value := DXInput.Joystick.DeadZoneX;
DeadZoneY.Value := DXInput.Joystick.DeadZoneY;
DeadZoneZ.Value := DXInput.Joystick.DeadZoneZ;
RangeX.Value := DXInput.Joystick.RangeX;
RangeY.Value := DXInput.Joystick.RangeY;
RangeZ.Value := DXInput.Joystick.RangeZ;
UpdateData;
FChanged := False;
end;
procedure TDelphiXInputEditForm.OKButtonClick(Sender: TObject);
begin
if FChanged then
begin
if StateListBox.ItemIndex<>-1 then
begin
FOldIndex := StateListBox.ItemIndex;
StateListBoxClick(nil);
end;
DXInput.Joystick.ID := IDEdit.Value;
DXInput.Joystick.AutoCenter := AutoCenter.Checked;
DXInput.Joystick.ForceFeedback := ForceFeedback.Checked;
DXInput.Joystick.DeadZoneX := DeadZoneX.Value;
DXInput.Joystick.DeadZoneY := DeadZoneY.Value;
DXInput.Joystick.DeadZoneZ := DeadZoneZ.Value;
DXInput.Joystick.RangeX := RangeX.Value;
DXInput.Joystick.RangeY := RangeY.Value;
DXInput.Joystick.RangeZ := RangeZ.Value;
DXInput.Keyboard.KeyAssigns := KeyAssigns;
Tag := 1;
end;
Close;
end;
procedure TDelphiXInputEditForm.UpdateData;
begin
FOldIndex := -1;
StateListBox.ItemIndex := 0;
StateListBoxClick(nil);
end;
procedure TDelphiXInputEditForm.StateListBoxClick(Sender: TObject);
procedure SetItemIndex(ComboBox: TComboBox; Data: Integer);
var
i: Integer;
begin
for i:=0 to ComboBox.Items.Count-1 do
if Integer(ComboBox.Items.Objects[i])=Data then
begin
ComboBox.ItemIndex := i;
Exit;
end;
ComboBox.ItemIndex := 0;
end;
var
KeyAssign: PKeyAssign;
begin
if FOldIndex<>-1 then
begin
KeyAssign := @KeyAssigns[TDXInputState(FOldIndex)];
KeyAssign^[0] := Integer(KeyComboBox1.Items.Objects[KeyComboBox1.ItemIndex]);
KeyAssign^[1] := Integer(KeyComboBox2.Items.Objects[KeyComboBox2.ItemIndex]);
KeyAssign^[2] := Integer(KeyComboBox3.Items.Objects[KeyComboBox3.ItemIndex]);
end;
FOldIndex := StateListBox.ItemIndex;
KeyAssign := @KeyAssigns[TDXInputState(FOldIndex)];
SetItemIndex(KeyComboBox1, KeyAssign^[0]);
SetItemIndex(KeyComboBox2, KeyAssign^[1]);
SetItemIndex(KeyComboBox3, KeyAssign^[2]);
end;
procedure TDelphiXInputEditForm.Player1Click(Sender: TObject);
begin
IDEdit.Value := 0;
KeyAssigns := DefKeyAssign;
FChanged := True;
UpdateData;
end;
procedure TDelphiXInputEditForm.Player2_1Click(Sender: TObject);
begin
IDEdit.Value := 0;
KeyAssigns := DefKeyAssign2_1;
FChanged := True;
UpdateData;
end;
procedure TDelphiXInputEditForm.Player2_2Click(Sender: TObject);
begin
IDEdit.Value := 1;
KeyAssigns := DefKeyAssign2_2;
FChanged := True;
UpdateData;
end;
procedure TDelphiXInputEditForm.CancelButtonClick(Sender: TObject);
begin
Close;
end;
procedure TDelphiXInputEditForm.EditChange(Sender: TObject);
begin
FChanged := True;
end;
end.