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

时间:2015-04-01 01:26:07

标签: 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.Create(nil);
myform.ShowModal;

我这样做是因为我需要显示相同的表单,其中一些可视控件可见并且第二次隐藏。

我的问题我现在注意到,每次使用第二种方法打开表单时,应用程序会消耗更多内存,如果我在关闭事件中使用action := cafree,当我尝试关闭应用程序时,我会获得访问冲突打开工作表,所以如何在不使用两个具有相同控件的表单的情况下解决此问题?

我使用Delphi XE5

1 个答案:

答案 0 :(得分:3)

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;