(Gast)
n/a Beiträge
|
Re: Messagen Subclassen
6. Dez 2008, 18:35
Sorry ich Pushe
Vielleicht schaut doch noch jemand in den thread
Habe eine möglichkeit gefunden die Messagen zu hooken innerhalb der Anwendung.
das problem ist nun das nur noch die Hauptform andockt an den SubFormen..
müßte da noch ne möglichkeit schaffen die Messagen zu enumerieren.
Ich erstelle eine ObjectInstance
Delphi-Quellcode:
if AppHandle = 0 then
begin
AppHandle := Handle;
FClientInstance := MakeObjectInstance(ClientWndProc);
FPrevClientProc := Pointer(GetWindowLong( Handle, GWL_WNDPROC));
SetWindowLong( Handle, GWL_WNDPROC, Integer(FClientInstance));
end;
und leite die Messsagen auf die Original Winproc um.
Delphi-Quellcode:
procedure TMagnetic.ClientWndProc(var Message: TMessage);
begin
with Message do
begin
case Msg of
WM_ENTERSIZEMOVE:
zSubclass_Proc(AppHandle, integer(Msg), Message.WParam, Message.LParam, Message.Result, dummyHandled);
WM_SIZING:
zSubclass_Proc(AppHandle, integer(Msg), Message.WParam, Message.LParam, Message.Result, bHandled);
WM_SYSCOMMAND:
zSubclass_Proc(AppHandle, integer(Msg), Message.WParam, Message.LParam, Message.Result, dummyHandled);
WM_MOVE:
zSubclass_Proc(AppHandle, integer(Msg), Message.WParam, Message.LParam, Message.Result, dummyHandled);
WM_EXITSIZEMOVE:
zSubclass_Proc(AppHandle, integer(Msg), Message.WParam, Message.LParam, Message.Result, dummyHandled);
WM_WINDOWPOSCHANGING:
zSubclass_Proc(AppHandle, integer(Msg), Message.WParam, Message.LParam, Message.Result, dummyHandled);
WM_MOVING:
zSubclass_Proc(AppHandle, integer(Msg), Message.WParam, Message.LParam, Message.Result, bHandled);
WM_COMMAND:
zSubclass_Proc(AppHandle, integer(Msg), Message.WParam, Message.LParam, Message.Result, bHandled);
end;
if (Result = 0) then
Result := CallWindowProc(FPrevClientProc, AppHandle, Msg, wParam,
lParam);
end;
end;
Geht bestimmt eleganter wenn jemand eine lösung hat dann bitte mitteilen
So brauche ich keine eigene Winproc in der anwendung und eine zeile reicht um den Magentic Effekt zu Initialisieren.
Anwendung:
MagneticWnd.AddWindow(Self.Handle, 0, MagneticWndProc);
und das Child
MagneticWnd.AddWindow(frmChild2.Handle, self.Handle, MagneticWndProc)
Gruss Emil
|