以两种不同的方式显示表格

问题描述:

我以两种不同的方式显示表格。第一个作为页面控制标签页的孩子,如下所示:以两种不同的方式显示表格

myform := Tmyform.Create(<tab sheet of page control>); 
myform.Parent := <tab sheet of page control>; 
myform.Align := alClient; 
myform.BorderStyle := bsNone; 

myform.Visible := true; 

此选项卡始终可见。

我第二次显示它作为一个正常的形式是这样的:

myform := Tmyform.Create(nil); 
myform.ShowModal; 

我这样做是因为我需要看到和在第二时间隐藏的一些可视化控件来显示相同​​的形式。

我的问题我注意到现在应用程序消耗更多的内存每次我打开使用第二种方法的形式,如果我在关闭事件中使用action := cafree当我尝试关闭应用程序,同时打开标签页时访问冲突所以我应该如何解决这个问题,而不使用两个具有相同控件的窗体?

我用Delphi XE5

+1

你应该能够做一个'SavemyForm:= myForm的;'在创建之前,那么'myForm的:= SavemyForm;'模式窗体被释放 – 2015-04-01 01:42:57

+2

或者停止后使用全局'myForm'指针开始。 – 2015-04-01 01:45:55

+0

很难诊断这里的信息有什么问题。就目前来看,我认为我们能做的最好的事情包括猜测。 – 2015-04-01 07:35:16

TForm从未打算或设计成可以嵌入到其他控件。改为使用TFrame,它是专门为此目的而设计的。

var 
    frame: TMyFrame; 
begin 
    frame := TMyFrame.Create(TheTabSheet); 
    frame.Parent := TheTabSheet; 
    frame.Align := alClient; 
    frame.Visible := true; 
end; 

var 
    form: TForm; 
    frame: TMyFrame; 
begin 
    form := TForm.CreateNew(nil); // yes, a blank TForm 
    try 
    form.Width := ...; 
    form.Height := ...; 
    form.Caption := ...; 
    frame := TMyFrame.Create(form); 
    frame.Parent := form; 
    frame.Align := alClient; 
    frame.Visible := true; 
    form.ShowModal; 
    finally 
    form.Free; 
    end; 
end; 
+0

我不确定这是否正确。什么可停靠的形式? – 2015-04-01 07:32:51

+0

@DavidHeffernan:这是一个完全不同的野兽,而不是简单地通过设置其'Parent'属性来嵌入'TForm'。实施对接支持涉及整个框架。 – 2015-04-01 08:19:28

+0

从根本上讲,它虽然围绕着你所说的从来没有打算做的事情。我常常将窗体嵌入其他窗口控件的子窗体中。它确实有效,它的目的是工作。你的答案的第一句话是错误的。框架确实是一个很好的选择,但我不同意你在案文中提出的主张,甚至对问题的诊断。我经常按照问题中所描述的内容进行,没有任何问题。 – 2015-04-01 08:33:21