OK. Dein Fehler ist das @ in
Code:
Result := CallWindowProc(@OldWndProc, Wnd, uMsg, wParam, lParam);
Damit übergibst du CallWindowProc anstatt der Adresse der altern WndProc die Adresse, an der die Variable OldWndProc steht. Ich kann mir aber denken warum du da ein @ hinzugefügt hast. Schreibe die Zeile einfach so um:
Code:
Result := CallWindowProc(Pointer(OldWndProc), Wnd, uMsg, wParam, lParam);