Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Window-Procedure und Objektinstanzen (https://www.delphipraxis.net/159207-window-procedure-und-objektinstanzen.html)

WM_CLOSE 18. Mär 2011 08:28

Window-Procedure und Objektinstanzen
 
Guten Tag,

Ist es möglich eine Window-Procedure, die ja von Windows aufgerufen wird eine Objektinstanz zu erreichen?

Bisher habe ich die WindowProcedure als Methode implementiert und den ersten Parameter (hWnd) über
Delphi-Quellcode:
HWND(Self)
geholt.
Nun kann man natürlich nicht mehr auf die Variablen der Instanz zugreifen.

Ich hatte nun die Idee eine Liste als Klassenvariable einzuführen, in die sich jede Instanz einträgt. So kann man in einer Schleife die Handles der Objekte in dere Liste durchsuchen und hat somit die Instanz, mit der ich die Methoden aufrufen kann.

Gibt es vielleicht eine bessere Lösung?

himitsu 18. Mär 2011 08:44

AW: Window-Procedure und Objektinstanzen
 
Selber würde ich nicht versuchen da ranzukommen, da Delphi diese Verknüpfungsinformation (WindowsControl > DelphiControl) eher dynamisch versteckt ablegt ... falls die daran mal was ändern.

Delphi-Quellcode:
function IsVCLControl(Handle: HWND): Boolean;
function FindControl(Handle: HWND): TWinControl;
Aus der Unit Controls.
FindControl gibt aber auch direkt NIL zurück, wenn es kein VCLControl ist.

Die VCL hängt die VCL-Objekt-Instanz als Atom ans WinControl und eventuell kann man auch versuchen über SendMessage+RM_GetObjectInstance die Instanz zu erhalten.
Klappt natürlich nur in der eigenen Anwendung, da man ja das fremde Atom und die MessageID nicht unbedingt kennt (was man aber eventuell dennoch rausbekommen kann).

WM_CLOSE 18. Mär 2011 09:28

AW: Window-Procedure und Objektinstanzen
 
Das geht leider nicht, da das Objekt von TObject abgeleitet ist - also ohne VCL. Denn alle VCL-Controls brauchen ein VCL-Parent.
Ich brauche aber ein Message-Only-Fenster mit dem Parent HWND_MESSAGE.
Trotzdem Danke!:thumb:

[Edit]
Den Code dazu hab ich von dir, thx.
[/Edit]


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