Da im Normalfall die Standard-Fensterprozedur wirksam wird, müssen wir zunächst dafür sorgen, dass unsere eigene Prozedur aufgerufen werden kann. Um dies zu erreichen, bemühen wir die Funktion "SetWindowLong"
OldWndProc := Pointer(SetWindowLong(hEdit, GWL_WNDPROC, Integer(@EditWndProc)));
die man auch immer dann benutzt, wenn man an einem bestehenden Fenster etwas ändern will; wie z.B. den Fensterstil, die ID, oder (wie hier!) die mit dem Fenster verknüpfte Fensterprozedur. Wir haben diese Funktion bereits bei den "Common Controls" kennen gelernt. Genauer gesagt: bei der
Der erste Parameter ist wie in den meisten Fällen ein Handle auf das betroffene Fenster. Der zweite Parameter ist eine Konstante. Mit dieser Konstante legen wir fest, was geändert werden soll. In unserem Fall ist es deshalb GWL_WNDPROC, die Fensterprozedur. Als letzten Parameter geben wir den neuen Wert an; in diesem Fall ist es ein Zeiger auf unsere eigene Fensterprozedur namens "EditWndProc".
function EditWndProc(hEdit, uMsg, wParam, lParam:DWORD): DWORD; stdcall;
Der Rückgabewert ist der vorherige 32-Bit-Wert (Integer), den wir hier casten, da "CallWindowProc" einen Zeiger auf eine Fensterprozedur erwartet.