まったくもって理由はわかりませんが、自作のタイマーコンポーネントがXPで動きません。9x、NT4.0、2kでは普通に動いていたのに。
検索しても情報ゼロです。なんだこれは。

constructor TTimer.Create(AOwner: TComponent);
begin
    inherited;
    // WM_TIMEを受け取る擬似ウインドを作成(ExCtrlユニット)
    FWindowHandle := AllocateHWnd(WndProc);
end;


procedure TTimer.StartTimer;
begin
    _hTimer := SetTimer(FWindowHandle, TimerID, IntervalTime[ord(_Interval)] - adjustTime, nil);
    if _hTimer = 0 then
        raise EOutOfResources.Create('タイマーを作成出来ませんでした。');
end;


procedure TTimer.StopTimer;
begin
    if _hTimer <> 0 then
    begin
        if KillTimer(FWindowHandle, TimerID) then
            _hTimer := 0
        else
            raise EOutOfResources.Create('タイマー破棄時にエラーが発生しました。');
    end;
end;


procedure TTimer.WndProc(var Msg: TMessage);
begin
    with Msg do
    begin
        if Msg = WM_TIMER then
        begin
            try
                Time;
            except
                Application.HandleException(Self);
            end;
        end
        else
            Result := DefWindowProc(FWindowHandle, Msg, wParam, lParam);
    end;
end;


procedure TTimer.Time;
begin
    StopTimer;

    if Enabled then
    begin
        if assigned(FOnTime) then
            FOnTime(self);
        StartTimer;
    end;
end;

で、SetTimerでは正常にタイマーのハンドルが戻ってきますが、WinProcにWM_TIMERイベントが来ません。なんとも。