![]() |
[HowTo] Auf das Parentform eines TFrame zugreifen
Hallo,
wer schon einmal in die Verlegenheit gekommen ist, von einem TFrame aus auf das Formular zugreifen zu müssen, auf dem das Frame liegt, wird irgendwann feststellen müssen, dass das TFrame von CodeGear keine Möglichkeit dazu bietet. Nachfolgend möchte ich eine relativ einfache Möglichkeit vorstellen, wie dies dennoch zu bewerkstelligen ist. Das Zauberwort heißt Vererbung. Zuerst erstellen wir uns unseren eigenen Nachfahren von TFrame. In diesem definieren wir zuerste eine private Variable FPartenForm vom Typ TForm sowie eine öffentliche Property ParentForm, die ausschließlich lesend auf FPartenForm zugreift. Anschließend überschreiben wir den Constructor unseres Frames wie folgt:
Delphi-Quellcode:
Nun kann man in allen Nachfahren von TMeinFrameForm über die Property ParentForm auf das Formular zugreifen, aufdem das Frame liegt :wink:
constructor TMeinFrameForm.Create(AOwner: TComponent);
begin inherited Create(AOwner); FParentForm := TForm(AOwner); end; |
Re: [HowTo] Auf das Parentform eines TFrame zugreifen
Danke das du dein Wissen mit anderen teilst.
Deine Methode wird in den meisten Fällen funktionieren. Sie ist aber nicht sehr sicher. Besser ist der Zugriff über die "Parent" - Eigenschaft.
Delphi-Quellcode:
Das ganze sollte man dann auch nicht im Konstruktor machen, sondern später, wenn der Parent bekannt ist.
if Parent is TForm then
FParentForm := TForm(Parent) else FParentForm := nil; Außerdem sollte man sich ehern nach oben "hangeln" um das Form zu erwischen in dem z.B. ein Panel liegt in dem der Frame liegt. Und btw.: Das ist nicht Vererbung. :) |
Re: [HowTo] Auf das Parentform eines TFrame zugreifen
Zitat:
Ich gehe davon aus, dass er meint, dass einem die Möglichkeit, den Constructor zu überschreiben, erst durch Vererbung gegeben wird. Insofern hat er schon recht, sich nur etwas ungeschickt ausgedrückt :) Desweiteren gebe ich Dir bzgl. Deiner Anmerkungen natürlich recht. Aus diesem Grund würde ich das Setzen des Parents auch nicht über die Property von außen ermöglichen, sondern direkt im Constructor ausführen.
Delphi-Quellcode:
Constructor TMeinFrameForm.Create(AOwner: TWinControl);
Begin Inherited Create(AOwner); Parent := AOwner; End; |
Re: [HowTo] Auf das Parentform eines TFrame zugreifen
Zitat:
Okay, ich habe in dem Satz Zitat:
|
Re: [HowTo] Auf das Parentform eines TFrame zugreifen
Hallo Heiko,
meine Aussage war an chaosben gerichtet, nicht an Dich. Zitat:
|
Re: [HowTo] Auf das Parentform eines TFrame zugreifen
Zitat:
|
Re: [HowTo] Auf das Parentform eines TFrame zugreifen
Zitat:
Hier eine Methode, die ohne jegliche Vererbung auskommt, für alle TControls funktioniert und auch dynamischen Änderungen des "ParentForms" gerecht wird. Es ist nämlich durchaus möglich, ein Frame (oder jedes andere Control) von einem Form auf ein anderes zu verlagern, indem man lediglich dem Parent einen neuen Wert zuweist.
Delphi-Quellcode:
function GetParentForm(Control: TControl): TForm;
var WinControl: TWinControl; begin Assert(Control <> nil, 'nil not allowed!'); WinControl := Control.Parent; while WinControl <> nil do begin if WinControl is TForm then Break; WinControl := WinControl.Parent; end; result := WinControl as TForm; // nil ist hier durchaus erlaubt end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:30 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz