Delphi 在运行时创建Tframes:
是否可以创建运行时框架并添加现有面板,如将面板的父级设置为框架?当它被添加时,复制框架并使用它 比如: 那么复制f?可能吗?怎样?或者其他建议?Delphi 在运行时创建Tframes:,delphi,runtime,tframe,Delphi,Runtime,Tframe,是否可以创建运行时框架并添加现有面板,如将面板的父级设置为框架?当它被添加时,复制框架并使用它 比如: 那么复制f?可能吗?怎样?或者其他建议? 我认为你不会通过复制来解决这个问题。您需要的是这样一个函数: function CreateFrameAndHostPanel(Owner: TComponent; Parent: TWinControl; Panel: TPanel): TFrame; begin Result := TFrame.Create(Owner); Try
我认为你不会通过复制来解决这个问题。您需要的是这样一个函数:
function CreateFrameAndHostPanel(Owner: TComponent; Parent: TWinControl; Panel: TPanel): TFrame;
begin
Result := TFrame.Create(Owner);
Try
Result.Parent := Parent;
Panel.Parent := Result;
Except
FreeAndNil(Result);
raise;
End;
end;
您需要记住,所有控件都有父控件和所有者。所有者可以是
nil
,但是您需要通过代码释放这些控件,所以大多数控件都属于其他组件
因此,如果业主被毁,配电盘也会被毁。如果面板是在设计时创建的,那么它就属于它所在的窗体
摧毁那张表格会摧毁面板
但是,如果在运行时创建面板,并将应用程序
设置为所有者而不是表单,则可以将它们移动到多个表单和框架上
但这是一种好的设计模式吗?我不知道你想做什么,但这可能是个坏主意
一般来说,在设计时间内用面板设计整个框架更为实用。然后添加一些代码,允许通过从另一个面板或控件复制数据来创建框架。这将是一个更好的设计模式…您必须使用与创建第一个框架(框架1)相同的代码创建新框架(框架2);稍后,您必须在FRAME2上的FRAME1中创建所有包含的组件(在运行时创建) 为此,请使用:
for i := 0 to (FRAME1.ComponentCount - 1) do
...
cmp := TComponent(FRAME1.Component[i]);
... create cmp on Frame2
你可以尝试第二种选择;使用TMemoryStream(SaveComponent)保存FRAME1,然后创建新的Frame并在流中检索保存的信息(我没有测试此选项)
问候 @InTheName,因为在这个函数中,我们需要返回一个新创建的对象,并让调用方负责整个生命周期。但是,如果在创建之后出现异常,那么我们需要销毁该对象,然后再让异常在调用堆栈中浮动。
for i := 0 to (FRAME1.ComponentCount - 1) do
...
cmp := TComponent(FRAME1.Component[i]);
... create cmp on Frame2