Zitat von
chaosben:
Besser ist der Zugriff über die "Parent" - Eigenschaft.
Wenn der Frame auf einem Panel liegt, dann zeigt Parent auf dieses Panel. Insofern ist deine Lösung nur der erste Schritt des richtigen Weges.
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;