www.pudn.com > DelphiX_for7.zip > DXInptEdit.pas


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.