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]