Tja ich hatte zwar schon mal geantwortet, aber irgendwie wurde es verschluckt.
Du benutzt eine globale Fensterprocedure als Dispatcher von fensterprocedure: stdcall zu Methode.
Nachdem du im Object das Fensterhandle erzeugt hast muß mit GetWindowLong(gwl_WndProc) die originale Fensterprocedure geholt und im Object gespeichert werden. Danach wird mit SetProp() Self im fensterhandle gespeichert und anschließend mit SetWindowLong(gwl_WndProc, WndProcDispatcher) ein erneutes subclassing durchgeführt.
Delphi-Quellcode:
var
SelfAtom: TAtom;
function WndProcDispatcher(Wnd: hWnd; Msg,wParam,lParam: Integer): Integer; stdcall;
var
M: TMessage;
Self: TMyObjct;
begin
M.Msg := Msg;
M.wParam := wParam;
M.lParam := lParam;
M.Result := 0;
Integer(Self) := GetProp(Wnd, SelfAtom);
Self.WindowMethod(M);
Result := M.Result;
end;
// unter Vorbehalt alles aus dem Gedächtnis,
// für Headcrash oder 3. Weltkrieg wird also keine Vrantwortung übernommen
Gruß Hagen
PS: für den 2. Weg bastel ich noch ein Beispiel, da ich eigentlich diese preferiere