Subversion Repositories spacemission

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
1 daniel-mar 1
unit DXInptEdit;
2
 
3
interface
4
 
5
uses
6
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
7
  ComCtrls, StdCtrls, Menus, ExtCtrls, Spin, Buttons, DXInput;
8
 
9
type
10
  TDelphiXInputEditForm = class(TForm)
11
    PopupMenu: TPopupMenu;
12
    Player1: TMenuItem;
13
    Player2_1: TMenuItem;
14
    Player2_2: TMenuItem;
15
    OKButton: TButton;
16
    CancelButton: TButton;
17
    PageControl: TPageControl;
18
    JoyTabSheet: TTabSheet;
19
    KeyTabSheet: TTabSheet;
20
    GroupBox1: TGroupBox;
21
    StateListBox: TListBox;
22
    KeyComboBox1: TComboBox;
23
    KeyComboBox2: TComboBox;
24
    KeyComboBox3: TComboBox;
25
    Label3: TLabel;
26
    Label2: TLabel;
27
    Label1: TLabel;
28
    GroupBox2: TGroupBox;
29
    Label5: TLabel;
30
    IDEdit: TSpinEdit;
31
    Bevel1: TBevel;
32
    AutoCenter: TCheckBox;
33
    GroupBox3: TGroupBox;
34
    Label7: TLabel;
35
    Label8: TLabel;
36
    Label9: TLabel;
37
    DeadZoneZ: TSpinEdit;
38
    DeadZoneY: TSpinEdit;
39
    DeadZoneX: TSpinEdit;
40
    GroupBox4: TGroupBox;
41
    Label4: TLabel;
42
    Label6: TLabel;
43
    Label10: TLabel;
44
    RangeZ: TSpinEdit;
45
    RangeY: TSpinEdit;
46
    RangeX: TSpinEdit;
47
    Label11: TLabel;
48
    Label12: TLabel;
49
    Label13: TLabel;
50
    ForceFeedback: TCheckBox;
51
    procedure FormCreate(Sender: TObject);
52
    procedure StateListBoxClick(Sender: TObject);
53
    procedure Player1Click(Sender: TObject);
54
    procedure Player2_1Click(Sender: TObject);
55
    procedure Player2_2Click(Sender: TObject);
56
    procedure OKButtonClick(Sender: TObject);
57
    procedure CancelButtonClick(Sender: TObject);
58
    procedure FormShow(Sender: TObject);
59
    procedure EditChange(Sender: TObject);
60
  private
61
    FChanged: Boolean;
62
    FOldIndex: Integer;
63
    procedure UpdateData;
64
  public
65
    DXInput: TCustomDXInput;
66
    KeyAssigns: TKeyAssignList;
67
  end;
68
 
69
var
70
  DelphiXInputEditForm: TDelphiXInputEditForm;
71
 
72
implementation
73
 
74
uses DXConsts;
75
 
76
{$R *.dfm}
77
 
78
function GetKeyText(Key: Integer): string;
79
begin
80
  Result := '';
81
  case Key of
82
 
83
    VK_TAB     : Result := 'TAB';
84
    VK_RETURN  : Result := 'Enter';
85
    VK_SHIFT   : Result := 'Shift';
86
    VK_ESCAPE  : Result := 'Esc';
87
    VK_SPACE   : Result := 'Space';
88
    VK_PRIOR   : Result := 'Page Up';
89
    VK_NEXT    : Result := 'Page Down';
90
    VK_LEFT    : Result := SKeyLeft;
91
    VK_UP      : Result := SKeyUp;
92
    VK_RIGHT   : Result := SKeyRight;
93
    VK_DOWN    : Result := SKeyDown;
94
    $30..$39,
95
    $41..$5A   : Result := Char(Key); {0..9, A..Z}
96
    VK_NUMPAD0..VK_NUMPAD9:
97
                 Result := 'Num '+inttostr(Key-VK_NUMPAD0);
98
    VK_MULTIPLY: Result := 'Num *';
99
    VK_ADD     : Result := 'Num +';
100
    VK_SUBTRACT: Result := 'Num -';
101
    VK_DECIMAL : Result := 'Num .';
102
    VK_DIVIDE  : Result := 'Num /';
103
    VK_F1..VK_F15:
104
                 Result := 'F'+inttostr(Key-VK_F1+1);
105
  end;
106
end;
107
 
108
function DXInputStateText(State: TDXInputState): string;
109
begin
110
  Result := '';
111
  case State of
112
    isUp   : Result := 'Up';
113
    isDown : Result := 'Down';
114
    isLeft : Result := 'Left';
115
    isRight: Result := 'Right';
116
    isButton1..isButton32
117
      : Result := 'Button' + inttostr(Ord(State)-Ord(isButton1)+1);
118
  end;
119
end;
120
 
121
procedure TDelphiXInputEditForm.FormCreate(Sender: TObject);
122
var
123
  i: TDXInputState;
124
  i2: Integer;
125
  s: string;
126
begin
127
 for i := LOW(TDXInputState) to HIGH(TDXInputState) do
128
    StateListBox.Items.Add(DXInputStateText(i));
129
 
130
  for i2:=0 to 255 do
131
  begin
132
    s := GetKeyText(i2);
133
    if s<>'' then KeyComboBox1.Items.AddObject(s, Pointer(i2));
134
  end;
135
  KeyComboBox2.Items.Assign(KeyComboBox1.Items);
136
  KeyComboBox3.Items.Assign(KeyComboBox1.Items);
137
end;
138
 
139
procedure TDelphiXInputEditForm.FormShow(Sender: TObject);
140
begin
141
  KeyAssigns := DXInput.Keyboard.KeyAssigns;
142
 
143
  IDEdit.Value := DXInput.Joystick.ID;
144
 
145
  AutoCenter.Checked := DXInput.Joystick.AutoCenter;
146
  ForceFeedback.Checked := DXInput.Joystick.ForceFeedback;
147
 
148
  DeadZoneX.Value := DXInput.Joystick.DeadZoneX;
149
  DeadZoneY.Value := DXInput.Joystick.DeadZoneY;
150
  DeadZoneZ.Value := DXInput.Joystick.DeadZoneZ;
151
 
152
  RangeX.Value := DXInput.Joystick.RangeX;
153
  RangeY.Value := DXInput.Joystick.RangeY;
154
  RangeZ.Value := DXInput.Joystick.RangeZ;
155
 
156
  UpdateData;
157
 
158
  FChanged := False;
159
end;
160
 
161
procedure TDelphiXInputEditForm.OKButtonClick(Sender: TObject);
162
begin
163
  if FChanged then
164
  begin
165
    if StateListBox.ItemIndex<>-1 then
166
    begin
167
      FOldIndex := StateListBox.ItemIndex;
168
      StateListBoxClick(nil);
169
    end;
170
 
171
    DXInput.Joystick.ID := IDEdit.Value;
172
 
173
    DXInput.Joystick.AutoCenter := AutoCenter.Checked;
174
    DXInput.Joystick.ForceFeedback := ForceFeedback.Checked;
175
 
176
    DXInput.Joystick.DeadZoneX := DeadZoneX.Value;
177
    DXInput.Joystick.DeadZoneY := DeadZoneY.Value;
178
    DXInput.Joystick.DeadZoneZ := DeadZoneZ.Value;
179
 
180
    DXInput.Joystick.RangeX := RangeX.Value;
181
    DXInput.Joystick.RangeY := RangeY.Value;
182
    DXInput.Joystick.RangeZ := RangeZ.Value;
183
 
184
    DXInput.Keyboard.KeyAssigns := KeyAssigns;
185
 
186
    Tag := 1;
187
  end;
188
 
189
  Close;
190
end;
191
 
192
procedure TDelphiXInputEditForm.UpdateData;
193
begin
194
  FOldIndex := -1;
195
  StateListBox.ItemIndex := 0;
196
  StateListBoxClick(nil);
197
end;
198
 
199
procedure TDelphiXInputEditForm.StateListBoxClick(Sender: TObject);
200
 
201
  procedure SetItemIndex(ComboBox: TComboBox; Data: Integer);
202
  var
203
    i: Integer;
204
  begin
205
    for i:=0 to ComboBox.Items.Count-1 do
206
      if Integer(ComboBox.Items.Objects[i])=Data then
207
      begin
208
        ComboBox.ItemIndex := i;
209
        Exit;
210
      end;
211
    ComboBox.ItemIndex := 0;
212
  end;
213
 
214
var
215
  KeyAssign: PKeyAssign;
216
begin
217
  if FOldIndex<>-1 then
218
  begin
219
    KeyAssign := @KeyAssigns[TDXInputState(FOldIndex)];
220
    KeyAssign^[0] := Integer(KeyComboBox1.Items.Objects[KeyComboBox1.ItemIndex]);
221
    KeyAssign^[1] := Integer(KeyComboBox2.Items.Objects[KeyComboBox2.ItemIndex]);
222
    KeyAssign^[2] := Integer(KeyComboBox3.Items.Objects[KeyComboBox3.ItemIndex]);
223
  end;
224
  FOldIndex := StateListBox.ItemIndex;
225
 
226
  KeyAssign := @KeyAssigns[TDXInputState(FOldIndex)];
227
  SetItemIndex(KeyComboBox1,  KeyAssign^[0]);
228
  SetItemIndex(KeyComboBox2,  KeyAssign^[1]);
229
  SetItemIndex(KeyComboBox3,  KeyAssign^[2]);
230
end;
231
 
232
procedure TDelphiXInputEditForm.Player1Click(Sender: TObject);
233
begin
234
  IDEdit.Value := 0;
235
  KeyAssigns := DefKeyAssign;
236
 
237
  FChanged := True;
238
  UpdateData;
239
end;
240
 
241
procedure TDelphiXInputEditForm.Player2_1Click(Sender: TObject);
242
begin
243
  IDEdit.Value := 0;
244
  KeyAssigns := DefKeyAssign2_1;
245
 
246
  FChanged := True;
247
  UpdateData;
248
end;
249
 
250
procedure TDelphiXInputEditForm.Player2_2Click(Sender: TObject);
251
begin
252
  IDEdit.Value := 1;
253
  KeyAssigns := DefKeyAssign2_2;
254
 
255
  FChanged := True;
256
  UpdateData;
257
end;
258
 
259
procedure TDelphiXInputEditForm.CancelButtonClick(Sender: TObject);
260
begin
261
  Close;
262
end;
263
 
264
procedure TDelphiXInputEditForm.EditChange(Sender: TObject);
265
begin
266
  FChanged := True;
267
end;
268
 
269
end.
270