Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Zeiger der Form über das Handle ermitteln (https://www.delphipraxis.net/47255-zeiger-der-form-ueber-das-handle-ermitteln.html)

barf00s 8. Jun 2005 15:01

Re: Zeiger der Form über das Handle ermitteln
 
GetProp / SetProp sind das nich RTTI helperfunctions?

sniper_w 8. Jun 2005 15:21

Re: Zeiger der Form über das Handle ermitteln
 
Hmmm die Voraussetzung dass dies funktioniert ist so eine Implementierung von OnCreate Event:

Delphi-Quellcode:
procedure TMyFormType.OnCreate(Sender:TObject);
begin
 SetWindowLong(Handle,GWL_USERDATA, Integer(Self) );
end;
Und so holt man sich den Pointer:

Delphi-Quellcode:
var MyForm : TMyFormType;
begin
 MyForm := TMyFormType( GetWindowLong( HWND , GWL_USERDATA));
end;

jfheins 8. Jun 2005 15:32

Re: Zeiger der Form über das Handle ermitteln
 
Zitat:

Zitat von SarDGer
eine komponente soll auf
das aktive Fenster zugreifen - es ist aber nicht klar welches
Fenster gerade aktiv ist.

Dann könntest du eine globale Variable ActiveForm: TForm; deklarieren,

und im OnActivate jeder Form ActiveForm := Self; und im OnDeactivate (TApplicationEvents) dann ActiveForm := nil;

So würd' ich's machen, trotz globaler Variable ... ;)

Olli 8. Jun 2005 17:04

Re: Zeiger der Form über das Handle ermitteln
 
Zitat:

Zitat von barf00s
GetProp / SetProp sind das nich RTTI helperfunctions?

Deswegen sage ich ja auch explizit, daß ich die entsprechenden Win32-APIs meine ;)

barf00s 9. Jun 2005 09:14

Re: Zeiger der Form über das Handle ermitteln
 
hab zu schnell gelesen/geantwortet und den löschen button nicht gefunden :)
sry olli=P

SarDGer 9. Jun 2005 11:57

Re: Zeiger der Form über das Handle ermitteln
 
Hallo ihrs,

ersteinmal Danke für die vielen Antworten :-D .
Nachdem ich Gestern noch x Stunden rumgefummelt habe,
hatte ich dann eine Lösung, so über 17 Ecken sehr
unelegant...
Und dann lese ich heute die Antwort von sniper_w:

Zitat:

Hmmm die Voraussetzung dass dies funktioniert ist so eine Implementierung von OnCreate Event:

Delphi-Quellcode:
procedure TMyFormType.OnCreate(Sender:TObject);
begin
SetWindowLong(Handle,GWL_USERDATA, Integer(Self) );
end;
Und so holt man sich den Pointer:
Delphi-Quellcode:
var MyForm : TMyFormType;
begin
MyForm := TMyFormType( GetWindowLong( HWND , GWL_USERDATA));
end;

So einfach kann es sein !! :wall:

Hab einfach ne globale Funktion geschrieben die alle
Formen beim Create durchlaufen müssen und in der das
SetWindowLong steht - das wars.
Funktioniert wie hulla - super! Nocheinmal Danke!

Sar :party:


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:20 Uhr.
Seite 2 von 2     12   

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