Konvertierung von HWND zu TComponent*
-
Ich habe von einem Fenster das HWND. Nun möchte ich einen TOpenDialog öffnen und muss diesem ja einen Owner mitgeben. Dieser ist im Format TComponent*. Wie konvertiere ich nun HWND nach TComponent* um dem TOpenDialog den richtigen Owner mitzuteilen?
Gruss
Jörn
-
Das, was du vorhast, geht so nicht. Du kannst von einem beliebigen Fenster nicht erwarten, dass es sich wie ein TComponent verhält und ihm nachträglich weitere Objekte zuordnen.
Was genau hast du denn vor?
-
Der Owner kümmert sich nur um die Freigabe. Wenn du keinen angeben willst (also einfach
0stattdessen übergibst), mußt du die Komponente eben selbst freigeben, z.B. mit einemstd::auto_ptr<>.
-
Ich merke mir die Reihenfolge der geöffneten modalen Dialoge (die entsprechenden HWNDs). Wenn jetzt irgendwo im Programm eine Messagebox oder TOpenDialog benutzt wird, sollen diese halt als Owner das aktuell oberste Fenster nehmen. Hier kommt wieder das gemerkte HWND ins Spiel...
Das ist mein Problem.
Jörn
-
Das hat mit Besitztum nichts zu tun, sondern du willst, dass das TOpenDialog modal über einem beliebigen Fenster angezeigt werden soll? Du könntest mal versuchen, ob das mit
SetParentklappt (ungetestet):void SomeClass::SomeFunc( HWND Parent ) { ::SetParent( OpenDialog->Handle, Parent ); OpenDialog->Execute(); }
-
Das heißt aber dann nicht
Owner, sondernParent. Dafür gibt's im Allgemeinen die Eigenschaft TWinControl.ParentWindow, und speziell bei den Dialogen akzeptiert dieT*Dialog.Execute()-Methode doch ein HWND-Argument, nicht?
-
audacia schrieb:
Das heißt aber dann nicht
Owner, sondernParent. Dafür gibt's im Allgemeinen die Eigenschaft TWinControl.ParentWindow, und speziell bei den Dialogen akzeptiert dieT*Dialog.Execute()-Methode doch ein HWND-Argument, nicht?Huch! Wieder was gelernt, wusste ich garnicht.
Dann ist mein vorheriges Posting auch überflüssig.