AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Messagen Subclassen

Ein Thema von EWeiss · begonnen am 6. Dez 2008 · letzter Beitrag vom 6. Dez 2008
Antwort Antwort
EWeiss
(Gast)

n/a Beiträge
 
#1

Messagen Subclassen

  Alt 6. Dez 2008, 15:31
Hab noch ein problem mit der Magnetic Unit
Mich nervt das ich innerhalb der anwendung Messagen aus der WinProc extra an die Unit schicken muss.
Hat jemand eine ahnung wie ich es bewerkstelligen kann WM_ Messagen der Subclass hinzuzufügen
ohne sie aus der Anwendung übergeben zu müssen ?

Ich möchte als Beispiel WM_ENTERSIZEMOVE von der Anwendung an die Subclass übergeben
das dieses erkennt wenn die Message aufgrufen wird.
Im moment geht es nur wenn ich aus der Anwendung selbst diese übergebe
MagneticWndProc(MainWindow(0), WM_ENTERSIZEMOVE, Msg, dummyHandled); Sinnvoller wäre es diese hier zu addieren sobald das Window addiert wird.
Delphi-Quellcode:
function TMagnetic.AddWindow(Handle: HWND; hWndParent: HWND; var FuncPointer : TSubClass_Proc): Boolean;
begin
  Subclass_AddMsg(Handle, WM_ENTERSIZEMOVE) //<<<<
end;

Hoffe jemand versteht was ich meine.

gruss Emil
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#2

Re: Messagen Subclassen

  Alt 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
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:28 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz