1. sein code verwendent, soweit ich das sehe, einen Timer der das Formular immer wieder in den vordergrund holt (topmost)
2. Zu meiner alternative:

newwndproc darf keine methode des forms sein

Das
handle musst du ermitteln, und nicht dein eigenes nehemn !!

mach dir statt dem sleep erstmal nen breakpoint rein
Delphi-Quellcode:
handle = FindWindow("Progman", "Program Manager");
Oldwndproc = Setwindowlong(
handle, GWL_WNDPROC, NewWndProc);
Mit den Delphi-Tags wird dein code übrigens wesentlich besser lesbar

Pointer und Integer kannst du casten
Wenn ich Delphi hätte, könnte ich das Beispiel überprüfen, aber das ist alles aus dem Kopf im Browser geschrieben