Oh, verdammt. Ein kleiner, aber verdammt fieser Fehler:
CallWindowProc(OldParentWndProc, hWnd, uMsg, wParam, lParam);
ist falsch. Es muss heißen:
Result := CallWindowProc(OldParentWndProc, hWnd, uMsg, wParam, lParam);
Mein Gott, bin ich froh, ich hatte schon befürchtet, diese ganze Subclassing-Sache würde doch anders laufen, als ich gedacht hatte.