Thema: Delphi WndProc in Klasse

Einzelnen Beitrag anzeigen

Benutzerbild von negaH
negaH

Registriert seit: 25. Jun 2003
Ort: Thüringen
2.950 Beiträge
 
#21

Re: WndProc in Klasse

  Alt 18. Jul 2003, 22:22
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
  Mit Zitat antworten Zitat