我正在研究一个由页面控件组成的模块.默认情况下,此页面控件(TPageControl)不应该有任何选项卡表(TTabSheet),但在初始化时,它应该动态插入这些页面并在其中嵌入一个表单.
问题在于知道如何将标签页插入页面控件.我该如何创建呢?一旦它被创建,以及每个窗体内的表单,我如何迭代它们来销毁表单?
假设我的表单A包含一个面板(其中包含许多其他控件)和一个表单B,它是空的.
我可以以编程方式从面板A中分离面板并将其移动到表单B(并可能返回到表单A)吗?
我知道我可以更改面板的所有者但是它可以在不同的表单之间工作吗?
更新:
在一些谷歌搜索后,我看到有一个ParentWindow属性.
这是我在这里发表的第一篇文章,但我要感谢社区,因为我已经无数次地找到解决问题的方法来到这里并在一个已经回答的问题中找到解决方案.
话虽如此,我想谈谈这一点.我在Code Gear的Delphi 2007 IDE中工作.我还是刚开始在德尔福工作的新手,准确地说还不到3个月,所以请记住这一点,因为我可能会遗漏一些基本的东西.
首先,我想就问题提供一些背景知识.我正在编写一个调度实用程序,用于在特定时间执行任务.对于每个可用任务,有2个与该任务相关联的相关delphi帧.第一帧用于编辑特定于该任务的详细信息,第二帧用于在任务运行时显示运行时信息.
保留正在运行的任务列表,并在该实用程序的滚动框中,显示运行时信息的相应帧列表.在任务开始和结束时创建和销毁这些运行时帧.这让我想到了我的问题.
我使用虚拟类管理器来保存每个任务的可用显示和编辑框架列表,并根据需要动态创建它们.在运行期间,一切都运行正常,当应用程序实际关闭时,我看到了问题.
该程序在关闭时会抛出EAccessViolation异常.当我尝试使用IDE跟踪问题时,我的代码中实际上并不存在与问题相对应的行或操作.因此,它必须是在后台执行的一些清理功能的一部分.
我已经将它缩小到动态创建虚拟类帧的代码,因为当我将代码注释掉时它会很好地关闭.因此,这让我相信我没有执行与使用此类类创建相关的操作.
var
tmpCCI: TComponentClassInfExt;
tmpS: String;
tc: TComponent;
bf: TBaseactionedit;
...
begin
...
tc := tmpCCI.fComponentClass.Create(nil);
if tc is TBaseactionedit then
begin
bf := TBaseActionEdit(tc);
bf.name := tmpCCI.fComponentClass.classname+IntToStr(nameCount);
bf.Visible := False;
bf.parent := pnlActionEdit;
bf.Align := alClient;
bf.Visible := True;
end;
...
Run Code Online (Sandbox Code Playgroud)
这是我如何使用虚拟类管理器创建框架的摘录.当我们不再需要FreeAndNil时,我可以释放它们.我已尽最大努力确保在应用程序关闭之前我已正确释放任何实例,但显然我遗漏了一些东西.
那么有没有人有任何想法从这里调试这样的东西?
PS再一次我是新手,所以如果有什么我错过了,掩饰,或忘记添加,请告诉我.再次感谢您阅读我的帖子!