I went for event handlers, too. Here's the code - just in case someone needed it.
[pascal]
unit UBEInput;
{TODO 2 -oPatrick Nusbaum -cInput devices : Add gamepad support.}
interface
uses
Windows;
type
{ .: TKeyEvent :. }
TKeyEvent = (keKeyDown, keKeyUp);
{ .: TMouseEvent :. }
TMouseEvent = (meMove, meLeftButtonDown, meLeftButtonUp, meMiddleButtonDown,
meMiddleButtonUp, meRightButtonDown, meRightButtonUp);
{ .: TInputSystem :. }
TInputSystem = class(TObject)
private
{ Private declarations }
FKeys: array[0..255] of Boolean;
FMouseButtons: array[0..2] of Boolean;
FMouseX, FMouseY: Integer;
public
{ Public declarations }
constructor Create();
procedure ProcessKeyboard(const KeyEvent: TKeyEvent; const TheKey: Word);
procedure ProcessMouse(const MouseEvent: TMouseEvent; const X, Y: Integer);
function IsKeyDown(const AKeyCode: Word): Boolean; overload;
function IsKeyDown(const AKey: Char): Boolean; overload;
end;
implementation
{ TInputSystem }
constructor TInputSystem.Create;
var
I: Integer;
begin
inherited Create();
for I := 0 to 255 do
FKeys[I] := False;
for I := 0 to 2 do
FMouseButtons[I] := False;
FMouseX := 0;
FMouseY := 0;
end;
function TInputSystem.IsKeyDown(const AKeyCode: Word): Boolean;
begin
Result := FKeys[AKeyCode];
end;
function TInputSystem.IsKeyDown(const AKey: Char): Boolean;
var
KeyCode: Integer;
begin
KeyCode := VkKeyScan(AKey) and $FF;
if (KeyCode = $FF) then
KeyCode := -1;
Result := IsKeyDown(KeyCode);
end;
procedure TInputSystem.ProcessKeyboard(const KeyEvent: TKeyEvent;
const TheKey: Word);
begin
case KeyEvent of
keKeyDown: FKeys[TheKey] := True;
keKeyUp: FKeys[TheKey] := False;
end;
end;
procedure TInputSystem.ProcessMouse(const MouseEvent: TMouseEvent; const X,
Y: Integer);
begin
case MouseEvent of
meMove:
begin
FMouseX := X;
FMouseY := Y;
end;
meLeftButtonDown: FMouseButtons[0] := True;
meLeftButtonUp: FMouseButtons[0] := False;
meMiddleButtonDown: FMouseButtons[1] := True;
meMiddleButtonUp: FMouseButtons[1] := False;
meRightButtonDown: FMouseButtons[2] := True;
meRightButtonUp: FMouseButtons[2] := False;
end;
end;
end.
[/pascal]
Bookmarks