Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi In WndProc Handle ermitteln - ohne Self (https://www.delphipraxis.net/98340-wndproc-handle-ermitteln-ohne-self.html)

mischerr 25. Aug 2007 14:13


In WndProc Handle ermitteln - ohne Self
 
Hallo!

Ich habe das Problem, dass ich mich in die WindowProc mehrerer Controls einklinke, indem ich diese in meiner Klasse registriere, dann pro Control meine eingene WindowProc ausführe und dann ggf. die original WindowProc des Controls (zB ein Button).

Wenn nun mehrere Controls registriert sind, brauche ich in meiner WndProc eine Identifizierung des Controls dessen WindowProc gerade bearbeitet wird. Ideal wäre das Handle, welches aber leider nicht in der Message übergeben wird.

Hat jemand eine Idee wie ich an das Handle des aufrufenden Controls komme?
Self geht dabei leider nicht, da es auf meine eigene Klasse zeigt.

Michael

sniper_w 25. Aug 2007 14:34

Re: In WndProc Handle ermitteln - ohne Self
 
Self.Handle ? (Ich neheme an, dass alle Controls die eine WindowProc haben, stammen von TWinControl, daher müssen sie auch ein Handle haben.

mischerr 25. Aug 2007 15:09

Re: In WndProc Handle ermitteln - ohne Self
 
Jain... Ich hab doch oben geschrieben, dass Self nicht funktioniert.

Luckie 25. Aug 2007 18:36

Re: In WndProc Handle ermitteln - ohne Self
 
Also ist es eine Klasse von TWinControl abgeleitet, dann funktioniert auch Self.Handle. Ansonstn wird in der nomael Windows Fenserprozedur als erster Parameter das Fensterhandle mitgeliefert.

DGL-luke 25. Aug 2007 18:47

Re: In WndProc Handle ermitteln - ohne Self
 
hm. du hast eine klasse, die für verschiedene controls windowprocs bereitstellt. hrm, hrm, hrm. WinAPI-callbacks haben meistens tag-parameter für sowas...

Um das klarzustellen:

Delphi-Quellcode:
type
  TMessageInterceptor = class
    procedure WindowProc(Message: TMessage);
    procedure AddControl(Control: TWinControl);
    ...
  end;

procedure TMessageInterceptor.AddControl(Control: TWinControl);
begin
  OldProcs.Add(Control.WindowProc);
  Control.WindowProc := WindowProc;
end;
So in etwa läuft das, wenn ich mischerr richtig versteh.

mischerr 25. Aug 2007 19:13

Re: In WndProc Handle ermitteln - ohne Self
 
@DGL-Luke: Exakt!

Und somit ist leider in der neuen WindowProc das Handle des auslösenden Controls nicht mehr ermittelbar, falls mehrere mehrere Controls "gehookt" sind.

Oder gibt's eine Weg nachträglich an die DefWindowsProc heranzukommen welche bei CreateParams gesetzt wird?
Hier gibt's als ersten Parameter das Handle...


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:09 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