Delphi 以两种不同的方式显示窗体

Delphi 以两种不同的方式显示窗体,delphi,Delphi,我用两种不同的方式显示表单。第一个作为页面控件选项卡页的子项,如下所示: 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.

我用两种不同的方式显示表单。第一个作为页面控件选项卡页的子项,如下所示:

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;
我这样做是因为我需要显示相同的表单,其中一些可视控件可见,第二次隐藏

我的问题现在我注意到,每次我使用第二种方法打开表单时,应用程序都会消耗更多内存,如果我在关闭事件中使用
操作:=cafree
,当我试图在打开选项卡页时关闭应用程序时,我会遇到访问冲突,那么我应该如何在不使用具有相同控件的两个表单的情况下解决这个问题


我使用Delphi XE5

TForm
从未打算或设计为嵌入到其他控件中。使用
t框架
,它是专门为此目的设计的

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


您应该能够执行
SavemyForm:=myForm在创建之前,然后a
myForm:=SavemyForm模式表单释放后,或停止使用全局
myForm
指针开始。此处的信息很难诊断问题所在。就目前而言,我认为我们能做的最好的事情就是猜测。我不确定这是否正确。那么可停靠表单呢?@DavidHeffernan:这与通过设置
父属性嵌入
TForm
完全不同。实现对接支持涉及到一个完整的框架。从根本上说,尽管它围绕着做你所说的从未打算做的事情。例如,我经常将表单作为其他窗口控件的子控件嵌入。它确实起作用,而且是为了起作用。你答案的第一句是错的。当然,框架是一个不错的选择,但我不同意你在文章中提出的主张,甚至不同意对问题的诊断。我经常做问题中描述的事情,没有任何问题。@DavidHeffernan:对你有好处。请随意分享你的经验。这是一种软弱的态度。我已经以建设性的方式分享了我的经验。请随意更正您的答案。也许认识到我的投入并非毫无价值。没有必要发表这样轻蔑的评论。
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;