Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu
Online

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

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

  Alt 4. Aug 2020, 10: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)
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.

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