Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.116 Beiträge
 
Delphi 12 Athens
 
#5

AW: Eigene Komponente -> Handle vom Aufruf-Fenster bekommen?

  Alt 4. Aug 2020, 09:01
Ein HWND ist nicht unveränderlich, denn es kann unter Umständen entladen und neu erstellt werden.
Auch muß es beim Erstellen/Laden der Form noch nichtmal existieren.

Besser das Handle immer bei Benutzung (maximal zu Beginn jeder Methode) frisch besorgen.


Wenn man das Handle "aktuell" nicht unbeding "sofort" benötigt, dann kann man auch HandleAllocated prüfen, bevor man auf Handle zugreift.


Zitat:
Delphi-Quellcode:
constructor TKomponente.Create(AOwner: TComponent);
begin
  FParentWnd := (AOwner as TForm).Handle;
end;
Wieso willst du von Vcl.Forms wegkommen? FMX?
Bzw. was meinst du mit "wegkommen"?

Zitat:
Das funktioniert nicht unbedingt: Owner muss nicht notwendigerweise ein TForm sein.
Genau, darum geht man auch nicht über die Owner-Beziehungen, sondern nimmt die Parent-Beziehungen.
Außer man definiert fpr seine Klasse, dass der Owner unbedingt eine Form sein muß, was hier implizit gemacht wird, denn AS lässt ausschließlich TForms oder NIL zu.
Aber wie immer in der Verärbung sollte man besser TCustomForm für den Cast verwenden, anstatt TForm. (Beispiel: siehe Result von GetParentForm)

Delphi-Referenz durchsuchenGetParentForm
Delphi-Referenz durchsuchenTWinControl.ParentWindow
Delphi-Referenz durchsuchenTWinControl.GetParentHandle
Delphi-Referenz durchsuchenTWinControl.GetTopParentHandle (aufpassen bei MDI und eingebetteten Forms)
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu ( 4. Aug 2020 um 09:13 Uhr)
  Mit Zitat antworten Zitat